Contenu principal

Réduire les signaux transitoires à l’aide de la logique anti-rebond

Quand un interrupteur s’ouvre et se ferme, ses contacts peuvent rebondir les uns sur les autres avant que l’interrupteur n’effectue une transition complète vers un état activé ou désactivé. L’action de rebond peut produire des signaux transitoires qui ne représentent pas un véritable changement d’état. Par conséquent, lors de la modélisation de la logique de commutation, il est important de filtrer les signaux transitoires à l’aide d’algorithmes anti-rebond.

Si vous modélisez un contrôleur dans un diagramme Stateflow®, il ne faudrait pas que votre logique de commutation surmène le contrôleur en l’activant et en le désactivant en réponse à chaque signal transitoire qu’il reçoit. Pour éviter cela, concevez un contrôleur Stateflow qui utilise la logique temporelle pour supprimer les rebonds des signaux d’entrée et déterminer si un interrupteur est réellement activé ou désactivé.

Comment supprimer les rebonds d’un signal

Deux options s’offrent à vous pour supprimer les rebonds d’un signal à l’aide de Stateflow :

  1. Filtrer les signaux transitoires à l’aide de l’opérateur temporel duration.

    Remarque

    L’opérateur duration n’est supporté que dans les diagrammes Stateflow d’un modèle Simulink®.

  2. Filtrer les signaux transitoires à l’aide d’un état graphique intermédiaire. Utilisez les états graphiques intermédiaires pour les techniques de filtrage avancées, telles que la détection de défaillances.

Supprimer les rebonds de signaux à l’aide de l’opérateur duration

Cet exemple illustre un design pattern qui utilise l’opérateur duration pour filtrer les signaux transitoires.

Le diagramme anti-rebond contient les états Off et On.

Logique d’état

L’état initial pour ce modèle est Off. Avec l’opérateur duration, vous pouvez contrôler quel état est actif en fonction de la durée depuis laquelle le signal de l’interrupteur, sw, est négatif ou non négatif.

  • Quand sw est non négatif depuis plus de 0,01 seconde, l’interrupteur passe de l’état Off à l’état On.

  • Quand sw est négatif depuis plus de 0,01 seconde, l’interrupteur passe de l’état On à l’état Off.

Exécuter l’anti-rebond

  1. Ouvrez le modèle.

  2. Ouvrez le bloc Scope.

  3. Ouvrez l’anti-rebond du diagramme Stateflow.

  4. Simulez le modèle. Le scope montre comment l’anti-rebond isole les signaux transitoires du signal d’entrée bruité.

Supprimer les rebonds de signaux à l’aide de la détection de défaillances

Cet exemple illustre un design pattern qui utilise un état intermédiaire pour isoler les signaux transitoires. Le design anti-rebond utilise l’opérateur after pour implémenter une logique temporelle en temps absolu. Avec ce design pattern, vous pouvez également détecter des défaillances et laisser un temps de récupération à votre système.

Le diagramme anti-rebond contient les états Off, Debounce et On.

Logique d’état

Le diagramme anti-rebond contient un état intermédiaire appelé Debounce. Cet état isole les entrées transitoires en vérifiant si le signal sw reste positif ou négatif, ou s’il fluctue entre des passages par zéro sur une période prescrite.

  • Quand sw est positif depuis plus de 0,1 seconde, l’interrupteur passe à l’état On.

  • Quand sw est négatif depuis plus de 0,1 seconde, l’interrupteur passe à l’état Off.

  • Quand sw fluctue entre des passages par zéro depuis plus de 0,3 seconde, l’interrupteur passe à l’état Off.Fault, ce qui isole sw en tant que signal transitoire et lui donne un temps de récupération.

Exécuter l’anti-rebond

  1. Ouvrez le modèle.

  2. Ouvrez le bloc Scope.

  3. Ouvrez l’anti-rebond du diagramme Stateflow.

  4. Simulez le modèle. Le scope montre comment l’anti-rebond isole les signaux transitoires du signal d’entrée bruité.

Utiliser la logique temporelle événementielle

Comme alternative à la logique temporelle en temps absolu, vous pouvez appliquer la logique temporelle événementielle pour déterminer l’état réel dans le diagramme anti-rebond à l’aide de l’opérateur after. Le mot-clé tick spécifie et génère implicitement un événement local quand le diagramme s’active.

Le bloc Error Generator du modèle sf_debouncer génère un signal d’impulsion toutes les 0,001 secondes. Par conséquent, pour convertir la logique temporelle en temps absolu spécifiée dans le diagramme anti-rebond en logique événementielle, multipliez l’argument de l’opérateur after par 1000, comme indiqué dans ce tableau.

Logique basée sur le temps absoluLogique événementielle
after(0.1,sec)after(100,tick)
after(0.3,sec)after(300,tick)
after(1,sec)after(1000,tick)

Voir aussi

|

Rubriques