Red de conocimiento informático - Aprendizaje de programación - Problema de rebote del botón FPGA

Problema de rebote del botón FPGA

El antirrebote se divide en antirrebote de hardware y antirrebote de software: el antirrebote de hardware utiliza integradores o filtros de paso bajo para filtrar la fluctuación de los botones, mientras que el antirrebote de software se resuelve mediante programación. El siguiente es un diagrama esquemático del nivel de salida del botón:

Se puede ver que la función antirrebote es para evitar el impacto de una fluctuación de nivel severa cuando se presiona o levanta el botón. En términos generales, el método antirrebote del software consiste en detectar continuamente el valor clave hasta que el valor clave sea estable. Método de implementación: suponga que la entrada es 1 cuando no se presiona la tecla, y la entrada es 0 después de presionar la tecla, y la fluctuación es variable. Se puede realizar la siguiente detección: después de detectar que la entrada clave es 0, retrasar 20 ms y detectar nuevamente. Si la clave sigue siendo 0, entonces se considera que hay una entrada clave. El retraso de 20 ms simplemente evita el período de inquietud.

El método utilizado en el programa es detectar continuamente el valor clave. Siempre que llega el flanco ascendente de Count[17], se detecta la señal de entrada. Entre ellos, dout1, dout2 y dout3 son los valores de entrada actuales, el último flanco ascendente de Count[17] y el último flanco ascendente de Count[17], respectivamente. En circunstancias normales, es 1. Si es 0 tres veces seguidas, las tres señales se suman, de modo que la señal key_done es 0 y aparece un flanco descendente, por lo que se considera que hay un botón.

Además, preguntaste por qué es recuento[17]. Dado que no definiste claramente la definición de recuento[17], no tienes una respuesta definitiva. Sin embargo, se especula que el conteo[17] es sólo una señal retrasada. Es muy probable que el conteo sea un contador de 18 bits que cuenta una vez por ciclo de reloj, por lo que cuenta 262,143 veces como un ciclo, con un flanco ascendente. Si se calcula según el reloj de 26M, el intervalo entre los dos flancos ascendentes del conteo [17] es de aproximadamente 10 ms. Si se realizan 3 detecciones consecutivas, se detecta 0 a 0 ms, 10 ms y 20 ms, lo que significa que hay entrada clave.

Si no entiendes, puedes seguir preguntando.