¿Cómo contar la señal del codificador de 2 ruedas?

Estoy buscando una solución simple para mantener la posición de un robot. Tiene dos motores de CC y un codificador de rueda para cada uno. Los codificadores son de tipo incremental.

Necesito poder obtener el recuento actual de incrementos de un atmega.

Encontré un chip como el LM628/629 que hará un gran trabajo, demasiado bueno de hecho, porque cuesta ~50$.

¿Conoce un IC dedicado que solo tiene las funciones de conteo (en ambas direcciones) para un codificador de rueda, o es posible hacer uno simple con un attiny?

Respuestas (3)

"¿Conoce un IC dedicado que solo tenga funciones de conteo (en ambas direcciones)" ?

Es posible que se sorprenda al saber que unos pocos chips lógicos genéricos, simples y baratos son suficientes para decodificar un codificador rotatorio; no requiere un chip especial específicamente personalizado para decodificadores rotatorios. La página Codewheel Generator tiene algunos circuitos relativamente simples que decodifican las 2 salidas de cuadratura rotatoria en una salida de "dirección" y "conteo". Esas salidas se pueden conectar a las entradas de "dirección" y "reloj" de cualquier contador ascendente/descendente, como, por ejemplo, el CD4029, el CD4516, el CD40193, 74HC193, etc.

"¿Es posible hacer uno simple con un attiny" ?

Sí, puede hacer un codificador de cuadratura simple con un ATtiny. Algunos consejos para conectar un codificador de cuadratura a un chip Atmel y decodificarlo en el software se encuentran en:

Si tiene relativamente pocos pulsos por segundo, es posible que pueda ejecutar las 2 señales de cada codificador directamente en su ATmega principal y usar las técnicas anteriores para hacerlo todo en software, sin ningún hardware de conversión externo.

Los codificadores de rueda son muy fáciles de usar para los sistemas de navegación a estima. Si solo tiene una rueda ranurada y dos detectores, será un codificador de cuadratura; llamas a una de las señales tu reloj y a la otra tu dirección. Obtenga ambas señales en su microcontrolador y configúrelo para que cuente pulsos de reloj (es decir, un algoritmo de conteo de eventos). Cada vez que obtenga un pulso de reloj, verifique la línea de dirección. Siempre será '1' para una dirección y '0' para la otra.

Los codificadores más elegantes (más caros) suelen ser codificadores de código Gray y son menos adecuados para la navegación a estima, aunque le darán una mejor posición de navegación a estima debido a su mayor precisión. Puede alimentar la salida de uno de ellos en su microcontrolador y tener una interrupción o un temporizador que lea la posición de las ruedas y determine qué tan lejos y en qué dirección se movió el robot. Esta es una solución más complicada.

Tenga en cuenta que los sistemas de navegación a estima se desvían con el tiempo y, a menos que tenga alguna forma de restablecer el sistema de navegación a estima, la idea de su robot de dónde se encuentra en el espacio se volverá cada vez más inexacta.

Entendí cómo funciona. Quiero saber el posible hardware para hacerlo. es decir: ¿Hay algo más fácil que un microcontrolador?
Un par de ruedas con una separación de 90 grados es un código gris (no "gris"). No encontrará a menudo codificadores de código gris con más de 2 bits, principalmente debido a la complejidad/incompatibilidad de la decodificación. Su precisión no es mejor que un sistema de 2 bits, es solo que obtienes un rango más amplio de "absoluto".
Siempre consideré los detectores de 90 grados como un "codificador de cuadratura": en la industria teníamos muchos codificadores de código gris de 16 bits (soy canadiense, gris/gris es uno de esos puntos confusos de ortografía aquí) codificadores y sí, exactamente por esa razón : quería información de posición absoluta con un alto grado de resolución.
para responder al comentario de jojo l'abricot: ¿Quieres hacer navegación a estima para un robot sin microcontrolador? Tome uno de los bits en la entrada de "dirección" de un contador ascendente/descendente. Tome el otro bit en la entrada del reloj. No creo que pueda ser mucho más simple que eso, aunque tampoco creo que pueda hacer mucho con un valor de conteo si no tiene algo (es decir, un microcontrolador) para entenderlo.
@AndrewKohlsmith: El código gris lleva el nombre de una persona, no de un color, por lo que no hay ambigüedad en la ortografía.

Un enfoque podría ser usar un dispositivo lógico programable como un contador de onda de código gris con suficientes etapas para que pueda simplemente sondear el valor a una velocidad conveniente y no perder la cuenta. Tenga en cuenta que una ventaja de un contador de ondulación de código gris sobre otros enfoques es que no hay peligro de que las entradas ruidosas provoquen fallas en el contador, siempre que ninguna entrada cambie cuando la otra entrada no sea estable.