Comprender el problema:
* Cambiar rebote de contacto: Los interruptores mecánicos, cuando se presionan o sueltan, no realizan una transición instantánea entre los estados abierto y cerrado. "Rebotan" varias veces debido a vibraciones mecánicas e imperfecciones de contacto.
* Múltiples desencadenantes: Este rebote puede generar múltiples señales eléctricas incluso si el usuario solo pretendía presionar una vez. Esto puede provocar un comportamiento no deseado en los circuitos, especialmente en aquellos sensibles a la sincronización.
¿Por qué antirrebote?
* Interpretación precisa de la señal: Evita que señales espurias afecten la lógica o las funciones de control de su circuito.
* Operación confiable: Garantiza que su circuito reaccione solo una vez al presionar un solo interruptor.
Métodos antirrebote:
1. Antirrebote de hardware:
* Circuito RC: El método más común. Una resistencia (R) y un condensador (C) están conectados en paralelo a través del interruptor. El condensador se carga y descarga lentamente, filtrando las señales de rebote rápido.
* Cómo funciona: Cuando el interruptor se cierra, el condensador se carga a través de la resistencia. Las señales de rebote son demasiado rápidas para cargar completamente el condensador, por lo que solo pasa una señal limpia.
* Basado en diodos: Utiliza un diodo para evitar que el condensador se descargue demasiado rápido. Esto asegura una señal limpia, incluso si el rebote es prolongado.
2. Antirrebote de software:
* Temporizador de software: Se puede programar un microcontrolador para ignorar los cambios de entrada durante un breve período después de presionar un interruptor. Cualquier cambio dentro de ese tiempo se considera rebote.
* Cómo funciona: Se inicia un temporizador cuando se presiona el interruptor por primera vez. Cualquier cambio adicional dentro de la duración del temporizador se ignora. Una vez transcurrido el temporizador, se acepta el nuevo estado del interruptor.
* Máquina de estados: Utiliza una máquina de estado para rastrear el estado del interruptor. La máquina solo cambia de estado después de un retraso, filtrando las señales de rebote.
3. CI antirrebote especializados:
* CI antirrebote: Diseñado específicamente para rechazar señales, brindando soluciones robustas y confiables.
Elegir el método correcto:
* Antirrebote de hardware: Lo mejor para circuitos simples y cuando la rentabilidad es importante.
* Antirrebote de software: Ofrece mayor flexibilidad y puede manejar escenarios más complejos.
* CIs antirrebote especializados: Ideal para aplicaciones que requieren alta precisión, velocidad o cuando el espacio es limitado.
Consideraciones clave:
* Tiempo antirrebote: El retraso o la ventana de tiempo utilizado para el rebote debe ser mayor que la duración del rebote del interruptor pero más corto que el tiempo de respuesta esperado del usuario.
* Complejidad del circuito: El método antirrebote elegido debe ser apropiado para la complejidad del circuito y los recursos disponibles.
Código de ejemplo (antirrebote de software con Arduino):
```c++
const int switchPin =2; // Pin conectado al interruptor
int estado del cambio =0; // Estado inicial del interruptor
último tiempo de rebote largo sin firmar =0; // La última vez que el interruptor cambió de estado
const unsigned long reboteDelay =50; // Retraso en milisegundos
configuración nula() {
pinMode(cambiarPin, INPUT_PULLUP); // Configurar el pin para la entrada
Serie.begin(9600);
}
bucle vacío() {
int lectura =digitalRead(switchPin);
// Si el interruptor cambió, reinicia el temporizador
si (leyendo! =switchState) {
últimoDebounceTime =milis();
}
if ((millis() - últimoTiempoDeRebote)> retrasoDeRebote) {
// Si el retraso es lo suficientemente largo, considera válido el cambio
switchState =lectura;
// Procesa el estado del cambio
si (switchState ==BAJO) {
Serial.println("¡Interruptor presionado!");
} más {
Serial.println("¡Interruptor liberado!");
}
}
}
```
Este código Arduino implementa la eliminación de rebotes del software verificando el estado del interruptor y comparándolo con el estado anterior. Si se detecta un cambio, reinicia un temporizador. Sólo después de un cierto retraso (debounceDelay) el cambio se considera válido y se procesa.