Frecuencia de lectura necesaria frente a PPR del codificador rotatorio

Estoy trabajando en un proyecto de microcontrolador (ATMega328) donde planeo usar un codificador rotatorio. Planeo tener un ciclo principal no crítico en el tiempo y configurar una interrupción del temporizador para manejar la lectura del codificador.

¿Hay alguna referencia o regla general para la frecuencia a la que necesitaría que se llamara la interrupción del temporizador (la frecuencia de lectura) en relación con el PPR del codificador para que se lea con precisión?

¡Gracias!

Respuestas (2)

¿Es este codificador rotatorio uno con salidas en cuadratura?

¿Este está conectado a un motor rápido o uno en el que un usuario gira una perilla simple?

Si se trata de un codificador de cuadratura conectado a un dispositivo rápido, abandone la idea de monitorear el codificador directamente muestreando un par de pines GPIO a través de una interrupción de temporizador. En su lugar, utilice una MCU que tenga hardware de temporizador/contador diseñado específicamente para capturar y decodificar las formas de onda en cuadratura.

Por otro lado, si el codificador es uno de estos dispositivos de interfaz de usuario de baja resolución con un recuento de PPR de, digamos, menos de cien, entonces es factible diseñar un sistema de muestreo de interrupción controlado por temporizador que pueda monitorear las entradas en cuadratura en un par de pines de puerto Tenga en cuenta que estos tipos de codificadores rotatorios de bajo costo a menudo usan contactos de limpiaparabrisas en el interior que requerirán un antirrebote similar a los contactos de interruptores regulares. Esto reducirá la velocidad máxima con la que puede decodificar y contar los pulsos de cuadratura.

He tenido éxito con el uso de una máquina de estado de interrupción de temporizador de 1 ms para decodificar codificadores de interfaz de usuario con 32 y 64 PPR, incluido el antirrebote. Por supuesto, si se trata de un dispositivo que gira libremente sin bloqueo, es posible que las señales de cuadratura lleguen más rápido de lo que una interrupción de 1 KHz puede mantener si el usuario le da a la perilla o al eje un giro muy rápido.

Estoy usando el codificador como un dispositivo de interfaz de usuario. PPR está por debajo de 100.
¿Cómo funcionaría el software antirrebote para un circuito en cuadratura? ¿Debo igualar a una tasa más alta y solo aceptar un valor si se mantiene durante un cierto período de tiempo?
He usado un filtro de muestreo en Chan-A y Chan-B por separado. El filtro funcionaría de tal manera que no aceptaría el nuevo nivel de la señal hasta que se haya detectado en el mismo nivel durante un determinado número de veces. A menudo, esto se puede hacer manteniendo los niveles de bits de los pines en lo que equivale a registros de desplazamiento de software. Digamos que elige una frecuencia de muestreo de 1 ms y usa una variable de byte para el "registro de desplazamiento" para cada una de las entradas. En cada período de muestra, cambia el bit del puerto actual al byte mientras cambia todas las muestras anteriores. Después de cada turno (continuación)
(continuación de arriba) está completo, puede examinar el byte para ver si es 0x00 o 0xFF para observar el estado estable actual de la entrada rebotada. Este escenario descrito le daría una tolerancia del período de rebote de 8 ms. Puede ajustar el período cambiando el período de interrupción del temporizador o agregando o quitando la cantidad de bits que administra en el "registro de desplazamiento". Evalúe las salidas del codificador sin procesar en un osciloscopio para determinar cuánto tiempo de rebote se necesita realmente. Las señales Chan-A y Chan-B sin rebote se convierten en las que usa para detectar la señalización en cuadratura (continuación)
(continuación de arriba) conteo de pulsos, velocidad o dirección según sea necesario para su interfaz de usuario.

Esto depende completamente de dos cosas: la resolución del codificador y la tasa de rotación máxima. Digamos que tiene un codificador que emite 1024 ppr y tiene una velocidad de rotación máxima de 5 rps (300 rpm). Entonces el tiempo mínimo de respuesta debe ser

t = 1 5 × 1024 = 195 m segundo
Tenga en cuenta que la velocidad del eje es la velocidad de rotación instantánea y no implica que el eje completará 5 revoluciones en un segundo.

Interesante elección de tarifa. Tuve que observar la posición de la leva del motor de una bomba de infusión mientras al mismo tiempo monitoreaba los pulsos en cuadratura (y el pulso en casa) en 10 20 ( + ) m s intervalos (el ancho varía un poco de pulso a pulso) para un banco de prueba de calibración de ángulo de leva en el que estaba trabajando. Esto fue para 10k pulsos por revolución a 300 RPM. El motor tuvo que ser validado a una variedad de velocidades para una calibración adecuada, antes de agregar el epoxi aglutinante final para hacerlo permanente. Incluso a estas tasas, esto no estaba ni cerca de las partes más difíciles de esta aplicación médica crítica para la vida.