El contador de cuadratura en FPGA se está ejecutando

0

Estoy intentando contar los pulsos de un codificador de cuadratura en un FPGA de Altera. Creo que tengo mi contador configurado correctamente (el siguiente diagrama de circuito, siguiendo este tutorial ), pero cuando enciendo mi codificador, el conteo comienza a aumentar sin parar. Cuando enciendo el codificador de una manera, el conteo se acelera, y cuando lo hago de la otra manera se vuelve más lento, así que parece que de hecho estoy contando pulsos, pero también contando. ¿Alguien sabe por qué esto podría ser?

simular este circuito : esquema creado usando CircuitLab

Las señales count clock 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.

¡Su ayuda es muy apreciada!

EDITAR: corrigió la frecuencia de reloj mostrada.

    
pregunta Engineero

1 respuesta

1

Asegúrese de que la señal de "cuenta de reloj" no se esté utilizando como un reloj real en el contador. Quieres usarlo como "habilitación de conteo". El reloj en el contador debe ser el mismo reloj de 25.13 MHz que usaste en otro lugar.

Otro problema en el que vale la pena vigilar ... Cuando un codificador no se está moviendo, a veces se puede atascar en una especie de estado intermedio. Lo que verá es que la entrada A o B podría alternar de un lado a otro rápidamente. En un sistema diseñado adecuadamente, esto no debería ser un problema (solo verá que la cuenta cambia rápidamente entre dos valores adyacentes). También puede ver el equivalente de rebote del interruptor en A y B a medida que cambia de valor. Algunos codificadores en cuadratura utilizan interruptores mecánicos, pero incluso los codificadores ópticos podrían tener algo similar.

Pero este diseño requiere que A y B no cambien rápidamente. Las entradas deben tener un valor constante para 2 o 3 relojes antes de que se les permita cambiar. Si se viola este requisito, entonces no funcionará correctamente. No he hecho el trabajo para averiguar exactamente cómo se comportará, pero es probable que no se cuente correctamente.

Cuando he hecho decodificadores en cuadratura, siempre lo he hecho más con una máquina de estados que con la forma en que lo has hecho aquí. El suyo está bien, siempre que cumpla con todos los requisitos, pero hay mejores formas de hacerlo.

    
respondido por el user3624

Lea otras preguntas en las etiquetas