Estoy programando un Altera FPGA usando Quartus II v9.0 para y salida que cuenta para un programa externo de LabVIEW (vea el diagrama a continuación). Pude depurar un problema con mi código gracias a la comunidad StackExchange , pero ahora estoy obteniendo un escape intermitente en mi recuento de codificadores.
Cuando muevo mi codificador, mi código de LabVIEW está mostrando el conteo actual correctamente. Cuando dejo de mover el codificador, el conteo se detiene aproximadamente la mitad del tiempo y la otra mitad simplemente se escapa. Sospecho que el codificador se está atascando en un estado intermedio y una de mis fases es el aleteo. ¿Hay algún truco que pueda usar para filtrar esto o un mejor método para contar los pulsos del codificador que puedo programar en mi Altera FPGA?
El bloque de 4 entradas XOR
se ejecuta como:
(IN1 xor IN2) xor (IN3 xor IN4)
Las señales Count enable
y Count direction
ingresan a una función de contador integrada de 32 bits ( LPM_COUNTER
) en mi Altera FPGA programado usando Quartus II v9.0. La salida de este contador se almacena en un búfer ( LPM_BUSTRI
) y se lee usando un programa de LabVIEW siempre que el código de LabVIEW lo necesite. Tengo un código similar de LabVIEW que lee otros búferes del FPGA que funciona bien, así que estoy bastante seguro de que el problema está en mi FPGA en algún lugar.
He intentado agregar un retardo de activación a las señales A
y B
que solo registran un cambio en la señal si esa señal ha permanecido alta o baja durante un cierto número de ciclos de reloj (probé 2 y 4, así que lejos). Esto parecía empeorar el problema. También intenté agregar un cuarto conjunto de flip-flops D-Q, que no tuvo ningún efecto obvio.
¡Gracias por tu ayuda!