Reducir las señales transitorias con la lógica de eliminación de rebotes
Cuando un interruptor se abre y se cierra, los contactos del interruptor pueden rebotar entre sí antes de que el interruptor pase completamente al estado de encendido o apagado. La acción de rebote puede generar señales transitorias que no representan un auténtico cambio de estado. Por lo tanto, al modelizar la lógica de conmutación, es importante filtrar las señales transitorias usando algoritmos de eliminación de rebotes.
Cuando modelice un controlador en un gráfico de Stateflow®, asegúrese de que la lógica de conmutación no sobrecargue el controlador encendiéndose y apagándose en respuesta a cada señal transitoria que recibe. Para evitarlo, diseñe un controlador de Stateflow que utilice la lógica temporal para eliminar los rebotes en las señales de entrada y determinar si un interruptor está realmente encendido o apagado.
Cómo eliminar los rebotes de una señal
Existen dos maneras de eliminar los rebotes de una señal usando Stateflow:
Filtrar las señales transitorias usando el operador temporal
duration
.Filtrar las señales transitorias usando un estado gráfico intermedio. Utilice estados gráficos intermedios para técnicas de filtrado avanzadas, como la detección de fallos.
El operador duration
solo se admite con gráficos de Stateflow en un modelo de Simulink®.
Eliminar rebotes de las señales con el operador duration
En este ejemplo se muestra un patrón de diseño que utiliza el operador duration
para filtrar las señales transitorias.
El gráfico del eliminador de rebotes contiene esta lógica.
Lógica de estado
El estado inicial de este modelo es Off
. Utilizando el operador duration
, se puede controlar qué estado está activo en función de la duración de tiempo que la señal de conmutación, sw
, ha sido negativa o no negativa.
Cuando
sw
ha sido no negativa durante más de 0,01 segundos, el interruptor pasa del estadoOff
al estadoOn
.Cuando
sw
ha sido negativa durante más de 0,01 segundos, el interruptor pasa del estadoOn
al estadoOff
.
Ejecutar el eliminador de rebotes
Abra el modelo.
Abra el bloque Scope.
Abra el eliminador de rebotes del gráfico de Stateflow.
Simule el modelo. El scope muestra cómo el eliminador de rebotes aísla las señales transitorias de la señal de entrada con ruido.
Eliminar rebotes de las señales con detección de fallos
En este ejemplo se muestra un patrón de diseño que utiliza un estado intermedio para aislar las señales transitorias. El diseño del eliminador de rebotes utiliza el operador after
para implementar la lógica temporal de tiempo absoluto. Con este patrón de diseño también se pueden detectar fallos y dar tiempo a que el sistema se recupere.
El gráfico del eliminador de rebotes contiene esta lógica.
Lógica de estado
El gráfico del eliminador de rebotes contiene un estado intermedio denominado Debounce
. Este estado aísla las entradas transitorias comprobando si la señal sw
se mantiene positiva o negativa, o si fluctúa entre cruces por cero durante un período prescrito.
Cuando
sw
ha sido positiva durante más de 0,1 segundos, el interruptor pasa al estadoOn
.Cuando
sw
ha sido negativa durante más de 0,1 segundos, el interruptor pasa al estadoOff
.Cuando
sw
fluctúa entre cruces por cero durante más de 0,3 segundos, el interruptor pasa al estadoOff.Fault
, lo que aíslasw
como señal transitoria y le da tiempo a recuperarse.
Ejecutar el eliminador de rebotes
Abra el modelo.
Abra el bloque Scope.
Abra el eliminador de rebotes del gráfico de Stateflow.
Simule el modelo. El scope muestra cómo el eliminador de rebotes aísla las señales transitorias de la señal de entrada con ruido.
Utilizar la lógica temporal basada en eventos
Como alternativa a la lógica temporal de tiempo absoluto, se puede aplicar la lógica temporal basada en eventos para determinar el estado verdadero en el gráfico del eliminador de rebotes usando el operador after
. La palabra clave tick
especifica y genera implícitamente un evento local cuando se activa el gráfico.
El bloque Error Generator del modelo sf_debouncer
genera una señal de pulso cada 0,001 segundos. Por lo tanto, para convertir la lógica temporal de tiempo absoluto especificada en el gráfico del eliminador de rebotes en una lógica basada en eventos, multiplique el argumento del operador after
por 1000, como se indica en esta tabla.
Lógica basada en el tiempo absoluto | Lógica basada en eventos |
---|---|
after(0.1,sec) | after(100,tick) |
after(0.3,sec) | after(300,tick) |
after(1,sec) | after(1000,tick) |