LabVIEWForum.de - Relais Entprellung auf FPGA

LabVIEWForum.de

Normale Version: Relais Entprellung auf FPGA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe folgendes Problem: ich will mit meinem sbRIO auf die Zusandsänderung durch das angesteuerte Relais reagieren. Dabei sehe ich das bekannte Nebeneffekt, es prellt. Da die HW schon vor mir liegt, wollte ich das Problem im LV lösen und zwar über einen Lowpassfilter (Butterworth Filter). Ist es überhaupt eine gute Idee oder gibt es intelegentere?

Am Eingang vom Butterworth Filter erwarte ich ein 1D array (laut Definition), kann diesem aber "nur" einen boolschen Wert von meinem abgelesenen IO bieten. Gibt es eine Chance das zu konvertieren?

Vielen Dank schon im Voraus Smile

Grüße
Dennis
Die Filter mit Array-Eingang sind zur Offline-Verarbeitung von Daten. Für die Online-Verarbeitung gibt es alle Filter auch als Punkt-zu Punkt-Funktionen. Die haben nur einen einzelnen numerischen Wert als Eingang.
Ich sehe aber Filter nicht als optimale Methode zur Entprellung. Andere Methode z.B: Ein Zustandswechsel, beispielsweise von High auf Low, wird erst dann gültig, wenn mehr als 5 hintereinanderfolgende Abtastwerte Low sind. (die "5" ist hier nur ein Beispiel, der optimale Wert ist durch Probieren zu ermitteln).
Diese Filter VIs laufen sowieso nicht auf FPGA-Ebene.
Eine ganz simple Variante für eine Mindestdauer "HIGH" hätte ich hier:
[attachment=53832]
Gruß, Jens
danke für eure Meinung!

dass die Filter VIs auf dem FPGA nicht laufen, ist natürlich ein Argument.

Mit den einfacheren Schleifen das abzufangen war ich bei der Lösung aus dem Anhang.
Allerdings habe ich 24 Kanäle gleichzeitig zu überwachen. Dafür lese ich diese in einem Sub VI permanet aus, pack in ein 1D Array. Dieses leite ich zum einem zur RT Ebene weiter, zum anderen stelle ich einen möglichen Flankenwechsel über xor fest (Flag wird ebenfalls danach weitergereicht). An der Stelle wollte ich eigentlich keine Schleife einbauen, weil ich im aufrufenden VI weitere Befehle ohne Zeitverzögerung unabhängig vom Flankenwechsel ausführen muss... Ich probiere aus, ob ein "Zeitopfer" an der Stelle mich doch weiterbringt
Das ist doch schnell skaliert:
[attachment=53834]
Irgendwann packst du den Inhalt in der Schleife oder die gesamte Schleife noch in ein SubVI, und dann sieht das BD auch wieder übersichtlich aus.
Gruß, Jens
Hallo Jens,

danke für den weiteren Tipp Smile ich kann da alles nachvollziehen bis auf das größer-gleich Fkt. Welche Rolle spielt hier die Dauer und warum muss ich sie mit der Zustandsänderung vergleichen?

Ich habe jetzt eine andere Lösung, auch wenn es vielleicht mit Kanone auf Spatzen geschossen ist Smile State Machine. Es tut sogar! Jetzt nur noch optimieren

Grüße
Dennis
(14.08.2015 12:09 )skyph schrieb: [ -> ]danke für den weiteren Tipp Smile ich kann da alles nachvollziehen bis auf das größer-gleich Fkt. Welche Rolle spielt hier die Dauer und warum muss ich sie mit der Zustandsänderung vergleichen?
Also das Beispiel überwacht eigentlich nur ein Prellen beim Flankenwechsel von Low auf High. Der echte Zustand High wird erst dann weitergegeben, wenn x-mal direkt hintereinander der Zustand High erkannt wurde. "Dauer" ist die Grenze (in Einheiten der Loop-Time), wie oft hintereinander der Zustand High erkannt werden muss, bevor er als Ausgabe weitergeleitet wird.

Gruß, Jens
Hallo skyph,

Zitat:Ich habe jetzt eine andere Lösung
Was soll die UND-Verknüpfung unten? Wenn du die mit einem Array aus lauter FALSE startest, bleibt das Ergebnis immer FALSE…
Was machst du im FALSE-Case?
Warum vergleichst du das XOR-Ergebnis ALLER Relais gleichzeitig? Werden die alle gleichzeitig geschaltet?
Was soll die UND-Verknüpfung mit TRUE vor dem Schleifen-Stop? RubeGoldberg lässt grüßen…

Nachtrag zu Jens' Kommentar: bei einer SPS nennt sich die gleichwertige Funktion "TON"…
die UND Verknüpfung ganz unten rechts ist überflüssig (das meinte ich mit Optimierung). Die Abbruchbedingung wird aus jeweiligen Case definiert und das ist ausreichend.
Die andere Verknüpfung... wo Du das grade sagst, verstehe ich auch warum ich in RT die Relaiszustände richtig ablese aber keine Flankenauswertung erhalte! Danke Smile
XOR - weil es tatsächlich möglich ist, dass alle Relais gleichzeitig schalten können, und ich lese auf den höheren Ebenen was genau geschaltet hat.
und im false-Case wird nur der nächste Zustand angegeben. In diesem Fall Ausgabe mit Überleitung zum Loop Abbruch.

Grüße
Dennis
mit der Änderung an der o.g. Stelle sieht es schon besser aus Smile
Referenz-URLs