Interfaz de múltiples codificadores rotatorios a un microcontrolador

¿Cuál sería, en su opinión, la forma más eficiente de conectar varios codificadores rotatorios incrementales (digamos, >20) a un microcontrolador limitado por GPIO (por ejemplo, ATxmega128A4U, 44 pines)?

Requisitos:

  • Debería ser posible operar múltiples codificadores al mismo tiempo.
  • Los codificadores tienen interruptores pulsadores integrados.

Lo que he probado:

  • Para buscar IC decodificador de cuadratura multicanal. Sin suerte.
  • Para buscar decodificador de cuadratura a IC serial (Codificador a SPI, I2C, etc.). Sin suerte.
  • Construir una lógica similar a un multiplexor que permita conectar tantos codificadores como sea posible mientras se ahorran GPIO. Sin suerte.
La mejor manera sería obtener el micro apropiado para el trabajo. Sin embargo, si el micro tiene pocas entradas, la mayoría de los micros de 44 pines deberían poder leer 20 entradas.
@OlinLathrop Cada codificador estándar tiene dos salidas, por lo que ya son al menos 40 pines dedicados. Estoy de acuerdo en que la mejor manera sería usar una MCU más grande, pero como no puedo soldar SMD de 100 pines con las herramientas que tengo, estoy buscando alternativas.
Puede soldar un TQFP de 64 pines con un soldador.
@OlinLathrop Gracias, estaba investigando esto. ¿Hay, en su opinión, otras opciones?
Es comprensible querer evitar los paquetes sin plomo , pero los paquetes SMT con plomo son relativamente accesibles y evitarlos realmente limitaría sus opciones. Las opciones restantes pueden ser un montón de MCU DIP como esclavos, cada uno de los cuales maneja algunos codificadores, un FPGA pequeño en una placa de circuito impreso prefabricada o varias de las hélices DIP. Si sabe que sus codificaciones son bastante lentas, es posible que pueda sondearlas a través de un expansor GPIO.
¿A qué tecnología de soldadura tiene acceso? He usado con éxito un horno tostador pequeño y una jeringa de soldadura en pasta con una boquilla fina para soldar LQFP de 64 pines, que tiene un paso de 0,5 mm. Requirió algunos retoques con trenza de soldadura, pero funcionó. La sugerencia de Olin de TQFP, que tiene un paso de 0,8 mm, probablemente sería más fácil.
@gbulmer Gracias por la información, pero lamentablemente no tengo acceso al horno. Todo lo que tengo es una estación de soldadura con algunas puntas intercambiables.
¿Qué tasa de pasos máxima espera de sus codificadores? ¿Y a qué te refieres con "interruptores"? ¿Contactos mecánicos?
No se necesita horno. 0,5 mm se puede lograr completamente con una plancha y una lupa de 10x para verificar. La clave es el flujo y dejar que la tensión superficial haga el trabajo; en realidad, prefiero una punta grande con forma de destornillador doblado. Las herramientas de aire caliente son útiles (vale la pena pagar $60), pero solo se necesitan si sueldas más de dos pines de esquina sin verificar la alineación o dañas eléctricamente un chip completamente soldado.
@WhatRoughBeast La tasa máxima de pasos sería de alrededor de 50/s. Por interruptores me refiero a que algunos codificadores rotatorios tienen interruptores mecánicos integrados, sí.
¿Son los interruptores de 2 fases, o son indicadores de posición de inicio o de límite?
@WhatRoughBeast Solo un interruptor pulsador. adafruit.com/datasheets/pec11.pdf
"Decodificador de cuadratura a IC serial (Codificador a SPI, I2C, etc.). Sin suerte", ¿por qué no programar un uC pequeño para hacer precisamente esto? Dependiendo de la configuración física, también podría hacer que su cableado sea mucho más simple.
@gbulmer Gracias por mi risa del día. Nunca miraré mi horno tostador de la misma manera...
@StainlessSteelRat Existe una gran posibilidad de que gbulber no esté bromeando :) Mira esto: freetronics.com.au/pages/…
@StainlessSteelRat - Me alegra que te haya hecho reír. No es una broma. El profesor de electrónica de una escuela local me mostró la técnica hace algunos años. Ya enseñó a niños de 13 años a soldar electrónica de esa manera. Es más rápido para un salón de clases lleno de niños que los soldadores, da mejores resultados, con una mayor tasa de éxito. Aún mejor, usan partes SMD, por lo que se parece a la electrónica moderna, que los niños prefieren perforar.
@AndrejsCainikovs: gracias por ese enlace, es una buena explicación, con imágenes útiles.

Respuestas (5)

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

Use múltiples microcontroladores (MCU), cada uno de los cuales maneja un subconjunto de codificadores rotatorios.

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

Deberá idear 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, puede buscar microcontroladores que contienen hardware decodificador de cuadratura. Como ejemplo, las piezas de ST Micros STM32F tienen temporizadores que también pueden decodificar y rastrear señales en cuadratura.

Ignorando los interruptores de botón asociados con los codificadores, una tasa de paso de 50 pasos/segundo 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 interruptor.

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

Este

esquemático

simule este circuito : el esquema creado con CircuitLab muestra un multiplexor de 32 líneas, con 5 líneas de dirección seleccionadas y un inversor externo para la dirección más importante. Puede usar dos líneas de E/S para el MSA, pero debe asegurarse de que solo una esté baja en cualquier momento.

En la práctica, (a 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 medidas necesarias. Para un Atmel, 20 milisegundos es mucho tiempo, pero sería importante que el software no se involucre en alguna otra tarea y 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 (1/2 de un chip inversor hexagonal como un 7HC04). El total de líneas de MCU sería de 8. 5 líneas de dirección y 3 entradas.

El total de operaciones de E/S es 64. 32 escrituras de selección de direcciones y 32 lecturas de datos. Por supuesto, si solo está usando, digamos, 20 codificadores, solo necesitaría 40 operaciones.

Es probable que necesite sondear más rápido que 20 ms. Los codificadores PEC11 se mueven a través de los 4 estados en cada retén, en lugar de cambiar entre estados, por lo que debe observarlos más rápidamente para ver cada transición y saber qué está sucediendo.
@whatshisname - OP dijo 50 pasos/seg. Interpreté que eso significaba 50 cambios de cuadratura.
probablemente eso es lo que significa el OP, pero dudo que conozca el comportamiento específico de este codificador, ya que 50 detents/seg darán como resultado 200 cambios de estado/seg en las salidas del codificador.
@whatsisname es correcto. Me refiero a detenciones por segundo, lo que se evalúa en 200 cambios de estado por segundo. Disculpas. Me gusta este enfoque. ¿Funcionará esto con 200 pasos por segundo?
@AndrejsCainikovs - Bueno, eso depende de lo que estés haciendo con el sistema. A 200 pasos/s, necesita muestrear a 200 muestras/s, o cada 5 ms. Y no debe perderse ninguna muestra. Entonces, ¿puede muestrear, procesar los datos para extraer el cambio de fase y realizar cualquier otra tarea requerida en 5 ms?

US digital fabrica el LFLS7184-S que interactúa con las salidas A/B en cuadratura para proporcionar conteos ascendentes/descendentes adecuados para alimentar un chip lógico. Es solo un canal único, pero si le gustan los circuitos lógicos en lugar de las MCU, podría resultarle atractivo.

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

Puede valer la pena echar un vistazo a su sitio web.

Aquí hay 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 usé para buscar en Google.

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

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

Eso significa que usted tiene que leer un total de 60 o más entradas y reaccionar a ellas cada 1-2 mseg... por lo que las rutinas no deberían llevar demasiado tiempo, preferiblemente en los bajos 100 de usec. Los codificadores se pueden direccionar utilizando varios multiplexores por entrada. Conectaría cada entrada A a un MUX 1 de 20 y de allí a un pin de puerto único (digamos bit 0).

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

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

Bienvenido a EE.SE. Se desaconsejan las respuestas de solo enlace, ya que son inútiles cuando el enlace muere. Para mejorar la respuesta, debe editar para dar un número de pieza, explicar las características o beneficios y proporcionar un enlace a la hoja de datos para leer más.