2 votos

Conexión de varios codificadores rotativos a un microcontrolador

En su opinión, ¿cuál sería la forma más eficiente de conectar múltiples (digamos, >20) codificadores rotativos incrementales a un microcontrolador limitado por GPIO (por ejemplo, ATxmega128A4U ¿44 pines)?

Requisitos:

  • Debería ser posible manejar varios codificadores al mismo tiempo.
  • Los codificadores disponen de interruptores pulsadores integrados.

Lo que he probado:

  • Para buscar un CI decodificador de cuadratura multicanal. No hubo suerte.
  • Para buscar decodificador de cuadratura a IC en serie (Encoder-to-SPI, I2C, etc). No hubo suerte.
  • Construir una lógica similar a la de un multiplexor que permita conectar tantos codificadores como sea posible ahorrando GPIOs. No hubo suerte.

0 votos

Lo mejor sería conseguir el micro apropiado para el trabajo. Sin embargo, si el micro tiene pocas entradas más, la mayoría de los micros de 44 pines deberían ser capaces de leer 20 entradas.

0 votos

@OlinLathrop Cada codificador estándar tiene dos salidas, así que ya son al menos 40 pines dedicados. Estoy de acuerdo en que lo mejor sería usar una MCU más grande, pero como no soy capaz de soldar SMD de 100 pines con las herramientas que tengo, estoy buscando alternativas.

4 votos

Puedes soldar un TQFP de 64 pines con un soldador.

3voto

Kiran Puntos 320

Estoy asumiendo que cada codificador rotativo tendrá dos señales, y puede tener una más para un interruptor.

Utilizar varios microcontroladores (MCU), cada uno de los cuales maneja un subconjunto de codificadores rotativos.

Designa un microcontrolador como "coordinador". Haz que los otros MCUs ("manejadores") se comuniquen con él. Si el "coordinador" se ejecuta como un esclavo de comunicación para SPI, I2C o alguna otra interfaz conveniente, los "manejadores" pueden manejar la interrupción de la interfaz de comunicación. De esta forma, el "coordinador" sólo se activará cuando ocurra algo. (De lo contrario, el 'coordinador' tendrá que leer repetidamente la otra MCU, lo que se llama polling, que puede ser menos conveniente para tu sistema)

Tendrás que idear un protocolo sencillo para comunicar qué codificador ha cambiado y en qué medida. Es muy probable que sea más de un byte, lo que puede añadir un poco de complejidad.

Dependiendo de su experiencia, usted puede busque microcontroladores que contengan hardware de decodificador de cuadratura. Por ejemplo, las piezas ST Micros STM32F tienen temporizadores que también pueden decodificar y seguir las señales de cuadratura.

2voto

WhatRoughBeast Puntos 20870

Ignorando los pulsadores asociados a los codificadores, una velocidad de paso de 50 pasos/segundo sugiere que puedes utilizar multiplexores externos para leer las salidas de los codificadores. Puedes encontrar multiplexores de 16 a 1 (74HC150, 74HC4067), y conectarlos a las dos fases. Maneja las líneas de dirección de los multiplexores con 4 líneas IO, y usa 2 líneas para leer las fases. Puedes añadir un tercer multiplexor para mirar los contactos del interruptor.

También puede ampliar los multiplexores, utilizando 1 o 2 líneas más como líneas de selección.

Este

schematic

simular este circuito - Esquema creado con CircuitLab muestra un multiplexor de 32 líneas, utilizando 5 líneas de selección de dirección y un inversor externo para la dirección más significativa. Puedes usar dos líneas IO para el MSA, pero debes asegurarte de que sólo una esté baja en cualquier momento.

En la práctica, usted (en intervalos de menos de 20 mseg) leería todas las fases del codificador, luego analizaría cada par de bits para determinar si el codificador se ha movido, y tomaría las acciones necesarias. Para un Atmel, 20 mseg es mucho tiempo, pero sería importante que el software no se involucre en alguna otra tarea y se pierda una lectura. Si el codificador se ha movido 2 pasos, no hay manera de determinar la dirección.

Una configuración completa requeriría 6 multiplexores - 2 por fase y 2 para leer los interruptores, más 3 inversores (1/2 de un chip inversor hexagonal como un 7HC04). El total de líneas de la MCU sería de 8. 5 líneas de dirección y 3 entradas.

El total de operaciones IO es de 64. 32 escrituras de selección de direcciones y 32 lecturas de datos. Por supuesto, si sólo estás usando, digamos, 20 codificadores, sólo necesitarías 40 operaciones.

0 votos

Es probable que tenga que sondear más rápido que 20 ms. Los codificadores PEC11 se mueven a través de los 4 estados en cada detención, en lugar de cambiar entre los estados, y por lo tanto usted tiene que ver más rápidamente para ver cada transición para saber lo que está pasando.

0 votos

@whatshisname - OP dijo 50 paso/seg. Interpreté que quería decir 50 cambios de cuadratura.

0 votos

Probablemente es lo que quiere decir el OP, pero dudo que conozca el comportamiento específico de este codificador, ya que 50 detents/seg resultarán en 200 cambios de estado/seg en las salidas del codificador.

2voto

ianb Puntos 659

US digital hacen el LFLS7184-S que interconecta las salidas de cuadratura A/B para dar contadores de subida/bajada adecuados para alimentar un chip lógico. Es sólo un canal, pero si usted está en los circuitos lógicos en lugar de MCUs podría apelar a usted.

Incluso puedes conseguir un salida en serie y una versión doble versión.

Quizá merezca la pena echar un vistazo a su página web.

Aquí está otro dispositivo dual de Avago y ELM404 es otro dispositivo que vale la pena considerar y, de memoria, creo que TI hace uno.

Aquí está el enlace que utilicé para buscar en Google.

0 votos

Gracias por los enlaces. ELM404 parece muy interesante, pero después de encontrar su precio de 8,5 $ por pieza, he cambiado de opinión :)

1voto

Spehro Pefhany Puntos 90994

Puedes simplemente sondear los codificadores a un ritmo razonable (500Hz-1000Hz quizás) y aplicar una lógica simple a las lecturas secuenciales. Esto se puede hacer en un ISR.

Eso significa que tienes que leer un total de 60 entradas más o menos y reaccionar a ellas cada 1-2mseg.. por lo que las rutinas no deberían tomar demasiado tiempo- preferiblemente en los bajos 100's de usec. Los codificadores pueden ser dirigidos usando varios multiplexores por entrada. Yo conectaría cada entrada A a un MUX de 1 de 20 y de ahí a un solo pin del puerto (digamos el bit 0).

Sospecho que un AVR funcionando a 20MHz y codificado en ensamblador está a la altura, y un solo PIC de 4MHz probablemente no. O usa un micro de 32 bits (por ejemplo, Atmel Cortex M7 corriendo a 300MHz) y relájate con todo codificado en C. Con un PQFP de 144 (114 I/O) probablemente no necesites ningún chip adicional.

0voto

tshrinivasan Puntos 66

Para quien viva en 2018+, que pruebe estos codificadores I2C: https://www.tindie.com/products/Saimon/i2c-encoder-v2/

6 votos

Bienvenido a EE.SE. Se desaconsejan las respuestas con enlaces, ya que son inútiles cuando el enlace muere. Para mejorar la respuesta debes editarla para dar un número de pieza, explicar las características o beneficios y proporcionar un enlace a la hoja de datos para una mayor lectura.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X