Reduzieren transienter Signale mithilfe von Entprellungslogik
Wenn sich ein Schalter öffnet und schließt, können die Schaltkontakte voneinander abprallen, bevor der Schalter vollständig den Zustand „Ein“ oder „Aus“ annimmt. Dieses Abprallen kann transiente Signale erzeugen, die keinen tatsächlichen Zustandswechsel darstellen. Daher ist es bei der Modellierung von Schaltlogik wichtig, mithilfe von Entprellungsalgorithmen transiente Signale herauszufiltern.
Wenn Sie eine Regelung in einem Stateflow®-Diagramm modellieren, darf die Schaltlogik die Regelung nicht überbeanspruchen, indem sie diese bei jedem transienten Signal ein- und ausschaltet. Um dies zu vermeiden, entwickeln Sie eine Stateflow-Regelung, die temporale Logik verwendet, um Ihre Eingangssignale zu entprellen und zu ermitteln, ob ein Schalter ein- oder ausgeschaltet ist.
Entprellen eines Signals
Sie können ein Signal mithilfe von Stateflow auf zwei verschiedene Weisen entprellen:
Sie können transiente Signale mithilfe des temporalen Operators
duration
herausfiltern.Hinweis
Der Operator
duration
wird nur in Stateflow-Diagrammen in Simulink®-Modellen unterstützt.Sie können transiente Signale mithilfe eines Diagramm-Zwischenzustands herausfiltern. Verwenden Sie grafische Zwischenzustände für fortgeschrittene Filtertechniken, wie z. B. die Fehlererkennung.
Entprellen von Signalen durch Verwendung des Operators duration
Dieses Beispiel veranschaulicht ein Entwurfsmuster, bei dem der duration
-Operator zum Herausfiltern transienter Signale verwendet wird.
Das Entpreller-Diagramm enthält die Zustände Off
und On
.
Zustandslogik
Der Anfangszustand dieses Modells ist Off
. Mithilfe des duration
-Operators können Sie regeln, welcher Zustand aktiv ist; dies basiert darauf, wie lange das Schaltsignal sw
negativ oder nicht negativ war.
Ist
sw
länger als 0,01 Sekunde nicht negativ, geht der Schalter vom ZustandOff
in den ZustandOn
über.Ist
sw
länger als 0,01 Sekunde negativ, geht der Schalter vom ZustandOn
in den ZustandOff
über.
Ausführen des Entprellers
Öffnen Sie das Modell.
Öffnen Sie den Scope-Block.
Öffnen Sie das Stateflow-Diagramm „Debouncer“.
Simulieren Sie das Modell. Der Scope-Block zeigt, wie der Entpreller transiente Signale aus dem rauschbehafteten Eingangssignal isoliert.
Entprellen von Signalen durch Fehlererkennung
Dieses Beispiel veranschaulicht ein Entwurfsmuster, das einen Zwischenzustand zur Isolierung transienter Signale verwendet. Der Entpreller-Entwurf verwendet den after
-Operator, um eine Absolutzeit-basierte temporale Logik zu implementieren. Mit diesem Entwurfsmuster können Sie zudem Fehler erkennen und dem System Zeit zur Wiederherstellung geben.
Das Entpreller-Diagramm enthält die Zustände Off
, Debounce
und On
.
Zustandslogik
Das Entpreller-Diagramm enthält einen Zwischenzustand namens Debounce
. Dieser Zustand isoliert transiente Eingänge, indem geprüft wird, ob das Signal sw
positiv oder negativ bleibt oder über einen festgelegten Zeitraum hinweg zwischen Nullübergängen fluktuiert.
Ist
sw
länger als 0,1 Sekunde positiv, geht der Schalter in den ZustandOn
über.Ist
sw
länger als 0,1 Sekunde negativ, geht der Schalter in den ZustandOff
über.Wenn
sw
länger als 0,3 Sekunden lang zwischen Nullübergängen fluktuiert, geht der Schalter in den ZustandOff.Fault
über, isoliertsw
als transientes Signal und gibt so Zeit zur Wiederherstellung.
Ausführen des Entprellers
Öffnen Sie das Modell.
Öffnen Sie den Scope-Block.
Öffnen Sie das Stateflow-Diagramm „Debouncer“.
Simulieren Sie das Modell. Der Scope-Block zeigt, wie der Entpreller transiente Signale aus dem rauschbehafteten Eingangssignal isoliert.
Verwenden ereignisbasierter temporaler Logik
Als Alternative zur absoluten Zeitlogik können Sie mit ereignisbasierter Zeitlogik den wahren Zustand im Entpreller-Diagramm mithilfe des after
-Operators bestimmen. Mit dem Schlüsselwort tick
wird ein lokales Ereignis spezifiziert und implizit generiert, wenn das Diagramm aktiviert wird.
Der Block „Error Generator“ im sf_debouncer
-Modell generiert alle 0,001 Sekunden ein Pulssignal. Multiplizieren Sie daher das Argument des after
-Operators mal 1000, wie in dieser Tabelle angegeben, um die im Entpreller-Diagramm festgelegte Absolutzeit-basierte temporale Logik in ereignisbasierte Logik umzuwandeln.
Absolutzeit-basierte Logik | Ereignisbasierte Logik |
---|---|
after(0.1,sec) | after(100,tick) |
after(0.3,sec) | after(300,tick) |
after(1,sec) | after(1000,tick) |