Main Content

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:

  1. Filtrar las señales transitorias usando el operador temporal duration.

  2. 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 estado Off al estado On.

  • Cuando sw ha sido negativa durante más de 0,01 segundos, el interruptor pasa del estado On al estado Off.

Ejecutar el eliminador de rebotes

  1. Abra el modelo.

  2. Abra el bloque Scope.

  3. Abra el eliminador de rebotes del gráfico de Stateflow.

  4. 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 estado On.

  • Cuando sw ha sido negativa durante más de 0,1 segundos, el interruptor pasa al estado Off.

  • Cuando sw fluctúa entre cruces por cero durante más de 0,3 segundos, el interruptor pasa al estado Off.Fault, lo que aísla sw como señal transitoria y le da tiempo a recuperarse.

Ejecutar el eliminador de rebotes

  1. Abra el modelo.

  2. Abra el bloque Scope.

  3. Abra el eliminador de rebotes del gráfico de Stateflow.

  4. 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 absolutoLógica basada en eventos
after(0.1,sec)after(100,tick)
after(0.3,sec)after(300,tick)
after(1,sec)after(1000,tick)

Consulte también

|

Temas relacionados