Método apropiado de conteo de conteos de un codificador de cuadratura

0

Estoy usando un Mbed para conducir un motor de CC que seguirá una trayectoria trapezoidal. ¿Cuál es la forma más adecuada de determinar la posición del codificador de cuadratura?

¿Debo usar interrupciones, o hay un riesgo de que la rutina de la trayectoria (que calcula la posición teórica) se quede atrás?

Alternativamente, podría sondear / muestrear el codificador en pasos de tiempo fijos, pero me imagino que esto perdería muchos conteos de codificadores.

¿Cómo se resuelve este problema generalmente?

    
pregunta M-R

3 respuestas

2

Es mejor si tiene hardware de codificador en cuadratura para manejar los pulsos del codificador, a menos que la velocidad sea muy baja. Muchos microcontroladores tienen al menos un periférico de este tipo en el chip.

    
respondido por el Spehro Pefhany
1

Tiene que sondear el estado de las dos entradas Q con la frecuencia suficiente para no perder una transición de estado. La rapidez con la que esto depende depende de la rapidez con que las entradas Q puedan cambiar, y solo usted puede decir eso. La forma correcta de hacer el conteo es usar un FSM de 4 estados, que maneje los cambios de dirección y delimitación correctamente.

¿Cómo revisas con suficiente frecuencia?

  • como dijo Sphero, el uso del hardware de Q-decoder es una manera perfecta, y probablemente será lo suficientemente rápido para cualquier propósito.

  • puede usar una interrupción programada o en el cambio para hacerle cosquillas a su FSM. La rapidez con la que puede hacer esto depende de su sistema y la cantidad de recursos que desee gastar en esta tarea.

  • para las entradas Q que cambian con frecuencia, simplemente puede sondear las entradas.

respondido por el Wouter van Ooijen
1

Una gran cantidad dependerá de la configuración de su motor / codificador, que no haya especificado. Digamos (solo como punto de partida) que el eje de su motor puede funcionar a un máximo de 600 rpm (10 rps) y su codificador produce 64 pulsos por canal. Es decir, si ejecuta el eje a 10 rps, obtendrá una onda cuadrada de 640 Hz en cada canal.

Al usar un codificador de cuadratura, puede derivar 4 veces más eventos de posición, correspondientes a los bordes ascendentes y descendentes de los dos canales, para una resolución de eje de 256 puntos por revolución, o 2560 puntos por segundo.

Tampoco ha proporcionado una especificación de la placa del procesador, pero digamos que permite 4 canales de entradas digitales. Luego puede mirar tanto los canales de su codificador como también un par de canales que tienen versiones invertidas de sus líneas de codificador. Ahora puede escribir su software para generar una interrupción en cada uno de los bordes ascendentes de las 4 entradas. En cada interrupción, examina las dos líneas del codificador y determina la posición local. Al mismo tiempo, lee su reloj en tiempo real para determinar el tiempo transcurrido desde el último tictac del codificador, y de ahí determina la velocidad del eje. ¿Puedes hacer eso en (digamos) 1/10 del tiempo entre tics? Eso es 40 usec. Además, tendrá que encontrar alguna forma de evitar que otras interrupciones anulen las rutinas de su codificador por más de 400 usec. Si no lo hace, perderá la información de la posición y cualquier proceso que impida la medición del intervalo de tiempo inmediato arruinará el cálculo de la velocidad del eje.

Con solo una pequeña cantidad de hardware (un par de compuertas OR exclusivas y un retardo RC) puede producir una sola entrada que generará interrupciones para las cuatro transiciones del codificador, por lo que podría salirse con 3 entradas digitales.

Si la frecuencia de transición es baja, como dice Wouter van Ooijen, puede probar simplemente encuestando las salidas del codificador, pero tenga en cuenta que esto generará incertidumbres en los cálculos de velocidad del eje, especialmente si su procesador está haciendo cualquier otra cosa que pueda tener. mayor prioridad, y cualquier incertidumbre de este tipo degradará su capacidad de mantener un perfil de velocidad deseado, trapezoidal o de otro tipo.

En general, te aconsejo que escuches a Spehro.

    
respondido por el WhatRoughBeast

Lea otras preguntas en las etiquetas