Conectar múltiples codificadores rotatorios a un microcontrolador

2

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

Requisitos:

  • Debería ser posible operar múltiples codificadores al mismo tiempo.
  • Los codificadores tienen interruptores de inserción integrados.

Lo que he intentado:

  • Para buscar el decodificador de cuadratura multicanal IC. No hay suerte.
  • Para buscar decodificador en cuadratura a IC en serie (Codificador a SPI, I2C, etc.). No hay suerte.
  • Para construir una lógica similar a un multiplexor que permita conectar tantos codificadores como sea posible mientras se guardan los GPIO. No hay suerte.

5 respuestas

3

Supongo que cada codificador rotatorio tendrá dos señales y puede que tenga una más para un interruptor.

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

Designe un microcontrolador como el 'coordinador'. Haga que los otros MCU ('manejadores') se comuniquen con él. Si el 'coordinador' realmente se ejecuta como esclavo de comunicación para SPI, I2C o alguna otra interfaz conveniente, los 'manejadores' pueden controlar la interrupción de la interfaz de comunicación. De esa manera, el 'coordinador' solo se activará cuando algo suceda. (De lo contrario, el 'coordinador' tendrá que leer repetidamente el otro MCU, llamado sondeo, que puede ser menos conveniente para su sistema)

Necesitará diseñar un protocolo simple para comunicar qué codificador ha cambiado y cuánto. Es muy probable que sea más de un byte, lo que puede agregar un poco de complejidad.

Dependiendo de su experiencia, podría mirar los microcontroladores que contienen hardware de decodificación en cuadratura. Como ejemplo, las piezas de ST Micros STM32F tienen temporizadores que también pueden decodificar y rastrear señales de cuadratura.

    
respondido por el gbulmer
2

Al ignorar los interruptores de botón asociados con los codificadores, una velocidad de 50 pasos / segundo le sugiere que puede usar multiplexores externos para leer las salidas del codificador. Puede encontrar multiplexores de 16 a 1 (74HC150, 74HC4067) y conectarlos a las dos fases. Conduzca las líneas de dirección de los multiplexores con 4 líneas IO y use 2 líneas para leer las fases. Puede agregar un tercer multiplexor para ver los contactos del conmutador.

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

Esto

simular este circuito : esquema creado usando CircuitLab muestra un multiplexor de 32 líneas, utilizando 5 líneas de dirección seleccionadas y un inversor externo para la dirección más significativa. Puede usar dos líneas IO para el MSA, pero debe asegurarse de que solo una sea baja en cualquier momento.

En la práctica, usted (a intervalos de menos de 20 ms) leerá todas las fases del codificador, luego analizará cada par de bits para determinar si el codificador se ha movido y tomará las medidas necesarias. Para un Atmel, 20 ms es mucho tiempo, pero sería importante que el software no se involucre en otra tarea y se pierda una lectura. Si el codificador se ha movido 2 pasos, no hay forma 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 (la mitad de un chip de inversión hexadecimal, como un 7HC04). El total de líneas MCU sería 8. 5 líneas de dirección y 3 entradas.

El total de operaciones de IO es 64. 32 escrituras de selección de dirección y 32 lecturas de datos. Por supuesto, si solo está utilizando, digamos, 20 codificadores, solo necesitaría 40 operaciones.

    
respondido por el WhatRoughBeast
2

US digital hace el LFLS7184-S que interconecta las salidas en cuadratura A / B para dar Cuenta arriba / abajo adecuados para alimentar un chip lógico. Es solo un canal único, pero si te interesan los circuitos lógicos en lugar de los MCU, podría interesarte.

Incluso puede obtener una salida en serie y una dual versión.

Puede que valga la pena echar un vistazo a su sitio web.

Aquí otro dispositivo dual de Avago y

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

    
respondido por el Andy aka
1

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

Eso significa que tiene que leer un total de 60 o más entradas y reaccionar a ellas cada 1-2 ms. de modo que las rutinas no deberían tomar mucho tiempo, preferiblemente en los 100 bajos de usec. Los encoders pueden direccionarse utilizando varios multiplexores por entrada. Conectaría cada entrada A a un MUX 1 de 20 y luego a un solo pin de puerto (digamos bit 0).

Sospecho que un AVR que se ejecuta a 20MHz y codificado en ensamblaje está a la altura de esto, y probablemente un solo PIC de 4MHz no. O use un micro de 32 bits (por ejemplo, Atmel Cortex M7 a 300MHz) y relájese con todo lo codificado en C. Con un PQFP 144 (114 I / O) probablemente no necesite chips adicionales.

    
respondido por el Spehro Pefhany
0

Para cualquier persona que viva en 2018+, pruebe estos codificadores I2C: enlace

    
respondido por el UHF

Lea otras preguntas en las etiquetas