¿Se pueden multiplexar los codificadores rotatorios?

1

Actualmente estoy trabajando en un proyecto basado en MIDI y me gustaría usar codificadores rotatorios. Sin embargo, debido a la naturaleza de mi proyecto, debo multiplexar un total de 64 codificadores con multiplexores 8: 1.

¿Es esto posible o un codificador simplemente no funcionará de esta manera debido a la posibilidad de que se pierdan los pulsos mientras el código se está escaneando en otra parte?

    
pregunta GigaJoules

8 respuestas

0

En mi caso, el problema se debe a la naturaleza del sistema que desafortunadamente no puedo divulgar. (No tenía otra opción) Se encontró que la multiplexación de los codificadores no era lo suficientemente rápida como para captar las transiciones de manera confiable, incluso en un simple banco de pruebas, antes de integrarse con el resto del código.

EVITA HACER ESTO SI PUEDES!

    
respondido por el GigaJoules
5

Si está tratando de usar 64 codificadores como "mandos frob", la forma más típica de hacerlo es usar cada codificador para múltiples propósitos, y tener alguna forma de controlar a qué propósito está sirviendo el mando en un momento dado . De lo contrario, probablemente lo instaría a que coloque un microcontrolador en cada codificador, o al menos tenga más de un microcontrolador, cada uno dando servicio a tantos codificadores individuales como sea posible sin multiplexar: ya está lanzando más dinero por un problema que normalmente se utiliza, solo siga el mismo camino para hacer el dispositivo que desea.

Como alternativa, puede considerar los codificadores absolutos, por lo que no debe preocuparse por los pulsos perdidos.

Eso es lo mejor que puedo ofrecer sin saber más sobre lo que intentas lograr (de ahí, "problema XY", como dice mi comentario).

    
respondido por el Scott Seidman
5

Sí, pero ...

Sí, pueden, es simplemente una pregunta sobre la frecuencia de muestreo.

Tienes que realizar algunos cálculos. Debe determinar la velocidad máxima a la que desea que funcionen sus codificadores. Luego tienes que averiguar qué tan rápido cambiarán las señales. Esto depende de la cantidad de pulsos por revolución que tenga su codificador.

Ahora necesita escanear todos los codificadores lo suficientemente rápido como para no perderse ninguno de estos cambios de estado.

Le sugiero que lo dibuje en un pedazo de papel para averiguar si tiene sentido para su elección particular de MCU.

... es poco probable que sea la mejor opción

Hoy puede comprar un microcontrolador al mismo precio que un multiplexor (bueno, lo suficientemente cerca). Simplemente configure un microcontrolador para cada grupo de 4 u 8 codificadores rotatorios, y haga que los controladores informen sobre un I2C o SPI compartido. Descargarán su MCU principal y presentarán un bonito entero absoluto o relativo.

    
respondido por el pipe
2

Es un problema típico de 'Nyquist': siempre que su frecuencia de muestreo sea el doble de la frecuencia de señal, estará seguro. Entonces, ¿a qué velocidad puede rotar un mando y qué tan rápido puede escanearlos?
Tenga cuidado de que algunos codificadores pueden tener 'ruido' durante la operación, al igual que los interruptores normales pueden 'rebotar' y deben ser eliminados.

    
respondido por el Oldfart
2

Prefiero los registros de cambio a los multiplexores, pero creo que sería práctico alimentar 64 codificadores en dieciséis chips de registro de cambio de 8 bits (por ejemplo, 74HC597) y tener un pequeño ARM sondearlos y emitir repetidamente los conteos resultantes (quizás a través de MIDI eventos exclusivos del sistema u otros medios). Si la tasa de cambio es de 2mbit / segundo, se obtendría un ciclo de sondeo de aproximadamente 15,000Hz que debería ser adecuado. A una velocidad de reloj de la CPU de 16Mhz, eso permitiría alrededor de 64 ciclos por byte, lo que mantendría a la CPU bastante ocupada, pero debería poder funcionar con un código inteligente.

Un truco clave para obtener un buen rendimiento sería utilizar "cálculos laterales". Si la variable A0 contiene la primera entrada de cada uno de los 32 codificadores y B0 contiene la segunda entrada de cada codificador (en la misma secuencia), y uno realiza los cálculos:

delta = B0 xor A1 xor B1
A1 = A1 xor (delta and A0) // Same sampled value must be used here and below.
B1 = B1 xor (delta and not A0)

luego B1: A1: A0 tendrá 32 conteos de escala de grises de tres bits. Si uno realiza entonces los cálculos:

delta = B1 xor A2 xor B2
A2 = A2 xor (delta and A1)
B2 = B2 xor (delta and not A1)

El enfoque puede extenderse a profundidad arbitraria, pero una observación clave es ese no necesita procesar etapas posteriores tan a menudo como las anteriores. Uno Así podría mantener contadores arbitrariamente largos sin tener que aumentar la cantidad de trabajo de cálculo por ciclo de escaneo.

    
respondido por el supercat
2

Puedes usar estas tablas enlace

Puede hacer 4 cadenas de 16 codificadores y usar un multiplexor I2C para leer todos los codificadores con un solo periférico I2C

    
respondido por el Simone Caron
0

Depende de cómo planeas usar los codificadores.

Si necesita realizar un seguimiento de la posición exacta de cada codificador, le recomiendo encarecidamente que no los multiplexe. El uso de pequeños micros dedicados baratos para cada uno sería una solución mucho mejor.

Sin embargo, debes entender que mantener un seguimiento de un codificador de cuadratura no es una tarea trivial, incluso con un micro dedicado que lo mira a tiempo completo. El algoritmo de seguimiento, de hecho, debe ser bastante complejo. El problema es que los codificadores tienen estados indefinidos cuando el borde del disco del codificador está exactamente sobre el sensor. Esto puede y dará como resultado una condición de metaestabilidad con múltiples bordes que se generarán, los cuales deben manejarse de manera adecuada. Tenga en cuenta que esto no debe confundirse con rebotar. Los bordes de la señal que está recibiendo le indican que el codificador está flotando alrededor del borde y es información de posición pertinente.

Sin embargo, si estos son simplemente controles de volumen suaves sin dependencia absoluta de la posición, entonces hay otra forma de usarlos.

Puede escanear numerosos codificadores para leer su "velocidad" o "velocidad de cambio" en lugar de su posición absoluta. Estos números de velocidad se pueden usar para aumentar o disminuir los valores almacenados apropiados que pueden aplicarse para cualquier propósito para el que están destinados. La exploración busca ciclos en el codificador en lugar de bordes.

La velocidad de escaneo debe ser lo suficientemente rápida como para que el tiempo del ciclo sea significativamente menor que la velocidad máxima del ciclo del codificador y produzca una latencia tan pequeña en la medida de la velocidad como sea posible. La cantidad que puede rastrear en un momento dado es limitada.

    
respondido por el Trevor_G
0

Personalmente recomendaría usar un par de CPLD o FPGA pequeños para rastrear directamente todos los estados del codificador, proporcionando recuentos a través de I2C o SPI. Esto debería ser mucho más confiable que el seguimiento basado en software sobre tantos codificadores.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas