Autor Tema: A vueltas con los encoders  (Leído 2329 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
A vueltas con los encoders
« en: 23 de Noviembre de 2008, 16:13:27 »
HE tratado de hacer una rutina de lectura de un encoder, por medio de la interrupcion generada por cambio de estado
de los pines B4 a B7 (puertoB).
Asi mismo como solo uso dos pines el 4 y el 5, los dos que quedan quiero usarlos tambien para otros temas, con la misma
interrupcion.
Todo me funciona correctamente, detecta pulsos en el pin_b6 y lee el encoder de que esta en los pines pin_b4 y Pin_b5
y detecta el cambio de direccion para contar y descontar posicion.
Asi mismo cuenta los pulsos que llegan a el PINB5 de un generador de pulsos.
EL problema me surje al tratar de detectar un fallo del encoder por sobrevelocidad o por rotura de hilo.
Deberia leer un bit igual que lo hace para leer el bit de direccion del encoder y ese no parace que cambie,
No se en que puedo equivocarme, a ver si podeis ayudarme en esto, llevo dias liado

En el fichero adjunto va una explicacion en excel de lo que pasa al leer un encoder, muy detallado creo
Y los bits que deben leerse.
Un ejemplo funcionando en Proteus.
El fuente en CCS y ejecutable.

Muchas gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: A vueltas con los encoders
« Respuesta #1 en: 24 de Noviembre de 2008, 03:21:23 »
¿Va una explicación en Excel?
No la veo, Algec.

No he podido simular el Proteus, ¿qué versión utilizas?

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: A vueltas con los encoders
« Respuesta #2 en: 24 de Noviembre de 2008, 11:07:45 »
Pues vaya que lo envie bien, ahora lo hago.
De todas formas he seguido liado y me he dado cuenta de algo, al cortar uno de los hilos se queda a positivo la entrada y solo se producen dos activaciones de la interrupcion, y en las dos el bit que debe chequear el error se queda a uno, por lo que no lo testea.
Ahora tendre que pensar como hacerlo de nuevo, porque chequeando ese bit parace que no va.
El proteus que uso es el 7.4 Sp3, aunque da algunos problemillas. Tratare de subir uno hecho en una version anterior.
El excel te lo pego aqui mismo por si me podeis ayudar a ver que puedo hacer para testear que no cambia una de las entradas.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: A vueltas con los encoders
« Respuesta #3 en: 24 de Noviembre de 2008, 11:55:47 »
Subo el Proteus de prueba en 7.0 a ver si asi va

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: A vueltas con los encoders
« Respuesta #4 en: 25 de Noviembre de 2008, 16:18:27 »
Hola Algec.

Estuve analizando exhaustivamente el "supuesto" malfuncionamiento. Digo "supuesto" porque a mi parecer el software se está comportando como debe. Y su comportamiento es correcto con respecto a tus "tablas de verdad" expuestas en el .xls.

El problema es que vos estás intentando detectar un malfuncionamiento que no genera la interrupción por cambio del puertob.Si no genera la interrupción, no se analiza y por lo tanto no se encuentra error alguno.

Fijate que en tu tabla de verdad con fallos(lo hago para el giro a la izq. es lo mísmo para la der.) tenés los siguientes 4 valores que arrojaría el encoder:

11
10
10
11

Bien?

Esos serían los 4 valores que el encoder arrojaría indefinidamente mientras el cable A estuviese cortado.Ahora..el problema es que la tabla es capaz de detectar un error en sólo dos posiciones del encoder y esas son en el 1er paso y en el 3er paso. Para que lo entiendeas, marco con una E donde tu tabla es capaz de detectar un error:

11 <--E
10
10 <--E
11

Ahora analicemos las transiciones: Detecta el error en el primer paso(11) pero comparandolo con el paso anterior(el cuarto, que es también 11). Genial en la teoría, pero malo en la práctica. Si el paso anterior era el 11 y ahora también lo es, no se produce un cambio en el puertob, por lo que la interrupción no sucede y no es posible detectar el error. Lo mísmo sucede con el tercer paso, viene de un estado 10 y continúa en 10. No hay cambios en RB4-RB7. No hay interrupción, por lo que tampoco se detecta error alguno.

Actualmente cuando abris un contacto, en lugar de interrumpir 4 veces por ciclo interrumpe sólo dos: en los segundos y cuartos pasos.El problema es que en esos la diferencia da 1 y -1, por lo que el algoritmo no detecta ningún error.

Esto sucede porque la onda cuadrada que hace girar al motor es generada por un tercero y no por el uC.  Si vos generaras la señal para hacer girar al servo y a la vez lees el encoder, ahi sí podrías detectar si se cortó un cable, o se perdió algún paso por sobrevelocidad o bien no giró el motor por algún freno o problema mecánico comparando el valor enviado al motor con el valor del encoder.

Espero se haya entendido y haberte podido orientar un poco.

Saludos.
« Última modificación: 25 de Noviembre de 2008, 16:35:20 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: A vueltas con los encoders
« Respuesta #5 en: 25 de Noviembre de 2008, 17:08:31 »
Tienes toda la razon, lo que no se es como solucionarlo. De hecho si cortocircuito las dos señales del encoder y llega la misma onda en los dos canales si salta el error
De hecho esto es una tarjeta de servo que ya tengo en proyecto. Aun no la subi, pero me gustaria tener algo que detectara si hubo errores de lectura para que no perdiera pasos.-

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: A vueltas con los encoders
« Respuesta #6 en: 25 de Noviembre de 2008, 17:16:14 »
Hola Algec.

O sea que el uC no es el que va a generar la señal para controlar al servo en la tarjeta?
Que posibilidades hay de que puedas sensar con el uC las señales que se le envian al servo también? Es decir, leer también los 2 hilos que generan la cuadrature para el servo?

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: A vueltas con los encoders
« Respuesta #7 en: 25 de Noviembre de 2008, 18:54:45 »
Dale una mirada a esto, creo que funciona correctamente
Es Proteus o soy yo? mide mal rms

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: A vueltas con los encoders
« Respuesta #8 en: 25 de Noviembre de 2008, 18:59:38 »
Disculpa, no me había dado cuenta que era tuyo el otro post.  :z) que despistado


 

anything