Recientemente leí un artículo sobre la eliminación de rebotes de botones y me preguntaba si debería tener esto en cuenta al trabajar con, por ejemplo, un Arduino (ATMega mC). Supongo que es un problema, especialmente cuando se trabaja con interrupciones.
Entonces, ¿es mejor detectar el rebote en el código, o debería solucionarse esto con el hardware? Por favor elabora.
Respuestas:
Recomiendo encarecidamente conectar un osciloscopio (con suerte, tiene uno o puede tener uno en sus manos para usar) hasta su interruptor. He visto un proyecto de un estudiante que tuvo un rebote en su interruptor que pasó de 5v a -5v hasta 4v a -3v y luego a 2v y luego a 0v. Cuando miramos el sorteo actual en un osciloscopio, hubo algunos picos muy, muy grandes.
En su caso particular, era muy, muy necesario para él, renunciar a su interruptor en hardware.
Sin embargo, por otro lado, he visto interruptores que tienen un efecto mucho más pequeño que podría eliminarse fácilmente en el software.
Sin embargo, debe sopesar sus opciones. Si tiene una cantidad muy compleja de firmware, agregar la sobrecarga tanto para usted como programador como para el uso de la CPU puede no valer la pena y sería mejor simplemente agregar un poco de hardware. Ahora, por otro lado, si está tratando de reducir los costos y el tamaño, querrá eliminar la mayor cantidad de hardware posible y hacerlo todo en el firmware si puede.
fuente
Si eres un diseñador profesional de electrónica, es probable que tu jefe ni siquiera te permita hacerlo en hardware. La razón es simple: si su lote de producción es lo suficientemente grande, el software es virtualmente gratuito , mientras que el hardware debe pagarse por cada unidad que produce. Y aunque las resistencias y los condensadores son muy baratos, montarlos en una PCB puede costar hasta 20 veces su precio de compra.
Ya sea que renuncie en software o hardware, aún tiene que seleccionar botones de calidad. El infame botón de 157 ms del artículo simplemente no es apto para ninguna aplicación.
Por lo general, pruebo el botón a intervalos de 32 ms , que es suficiente para cerrar el tiempo de rebote de cualquier botón bueno. Soy un gran admirador de los interruptores Alps SKQG TACT.
En los pocos dispositivos que probé, tuvo un tiempo de rebote inicial de menos de 10ns. Si bien tiene una vida operativa de 100 000 ciclos, lo probamos durante 200 000 ciclos e incluso entonces el rebote de 32 ms fue suficiente. (Supongo que debería haber medido el nivel real de rebote, pero nuestro interés principal en ese momento era el comportamiento del producto final. De todos modos, lo estábamos usando fuera de las especificaciones).
Si realmente desea una solución de hardware, secundo la solución flip-flop SR mencionada en el artículo como la mejor solución técnica:
El flip-flop se puede construir con una puerta NAND dual , que está disponible en un pequeño paquete VSSOP8, por ejemplo. El principal inconveniente de esta solución es que necesita un botón SPDT, donde SPST está mucho más disponible.
fuente
Hay muchas (y muchas) formas diferentes de eliminar los botones. Si lo hace en software o hardware dependerá de los requisitos de su proyecto y del tipo de conmutador.
Aquí hay algunos enlaces a diferentes métodos:
http://www.ganssle.com/debouncing.htm
http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/
fuente
Ese artículo es la "biblia" sobre el rebote. El rebote de contacto puede ser un problema con cualquier aplicación.
En general, es mejor eliminar los interruptores en el software, ya que es más fácil ajustar los retrasos para interruptores particulares, ya que difieren en la cantidad de rebote de contacto. A menudo, también es necesario cancelar la liberación de la clave. Los fabricantes de interruptores a menudo especifican la cantidad de rebote para sus productos, por lo general es de alrededor de 10 ms a 20 ms.
fuente
El rebote del interruptor puede continuar durante decenas de milisegundos. Si está sondeando un interruptor de una rutina de interrupción que se ejecuta en un temporizador, el rebote no será un problema, porque incluso si sondea el interruptor en medio de una tormenta de rebote, puede obtener el nuevo estado de inmediato o, en el peor de los casos, obtenga el estado anterior y no vea el estado nuevo hasta la próxima encuesta basada en temporizador. La encuesta de un ISR cronometrado como este constituye una forma de rechazo del software.
Sin embargo, si está utilizando ese interruptor para provocar la interrupción, y espera que la rutina de servicio de interrupción se ejecute rápidamente, en menos de 10 milisegundos, necesitará eliminar el rebote del hardware, de lo contrario, un evento de interruptor podría resultar en un número algo aleatorio de interrumpe, y ciertamente a menudo más de lo esperado. Por otro lado, si la rutina de interrupción se ejecuta el tiempo suficiente, el rebote del interruptor se habrá solucionado antes de que finalice el ISR, y estaría bien, pero la mayoría de los ISR bien construidos no tardan tanto.
fuente
La mejor manera de hacer cualquier cosa es la que más le convenga. Pero cuando ya tiene un microcontrolador, puede renunciar al software con el costo de un esfuerzo de código.
La forma más fácil de eliminar el rebote en el software es verificar los botones en momentos que están más separados que el tiempo de rebote más largo. 50 ms parece ser un límite superior en el tiempo de rebote de los interruptores 'normales', por lo que cuando puede organizar su software de esta manera, está en claro:
fuente
Un enfoque para eliminar el rebote que aún no se ha mencionado es usar un interruptor de doble tiro con un tiro atado a VDD y el otro a tierra. Introduzca eso en un pin que (ya sea a través de software o hardware) será arrastrado débilmente a su estado actual. Tal enfoque proporcionará las ventajas de un interruptor de doble tiro, pero solo requerirá un pin de E / S en lugar de dos.
fuente