Morse De- und Encoder mittels FPGA 4.0

Verarbeitung des Komparator Ausgangssignals in VHDL

Übersicht der Signale

Schematische-Darstellung-Integration-Ultraschall-Detektor
Schematische Darstellung der Integration der Ultraschall-Detektor Entity in die Originalprogrammstruktur von F. Nessit.
Grau hinterlegt sind diejenigen Komponenten, welche keine wesentlichen Funktionserweiterungen zu vorherigen Modifikationen anderer Kursteilnehmer erfahren haben, sondern lediglich erforderliche Anpassungen

Zur Verarbeitung der Signale aus dem Komparator wurde eine Komponente mit der Bezeichnung us_detection (ultrasonic detection) programmiert und diese als Unterkomponente der vorhandenen Komponente press_duration verknüpft.

Die Komponente us_detection benötigt zur Funktion sowohl bereits implementierte als auch zusätzliche Signale, um die bereits vohandene Komponenten ergänzt wurden:

  • die Signale sys_clk, reset und clk_wpm wurden lediglich aus der übergeordneten Komponente press_duration weitergeleitet.
  • die Signale clk_us_360k und clk_us_40k wurden in der Komponente clock_divider neu generiert und über die Top Level Entity (TLE) und die press_duration eingespeist.
  • das Signal us_switch dient zur Erkennung der Schalterposition von SWITCH[13]. Es wird aus der TLE über press_duration an die us_detection weitergeleitet, um die rechenintensive Prozesse nur bei aktivierter US-Erkennung laufen zu lassen. In der TLE wird er genutzt, um bei Aktivierung das US-Signal auf das Tastendruck-Signal aufzuspielen, so dass ein Tastendruck und ein US-Signal gleichwertig weiterverarbeitet werden.
  • das Signal us_data dient des Datenempfangs aus dem Komperator über GPIO1_35/JP2 und wird wie schon us_switch aus der TLE über die press_duration weitergeleitet.
  • das Signal us_pulses wird in der us_detection generiert und an die übergeordnete press_duration übergeben.
Quellcode - us_detection

Der Prozess „scansignalframe“

Der Prozess schreibt den aktuellen Pegel des digitalen Eingangspin GPIO1_35 (us_data zugewiesen) in das Schieberegister us_signal_pulse. Bei dem anliegenden Signal handelt es sich um das Ausgangssignal des LM311 Komparators. Dies geschieht bei jeder steigenden Flanke des Clock Signals clk_us_360k, welches mit 360kHz arbeitet und aus der Komponente clock_divider über die Top Level Entity und der press_duration in die us_detection geleitet wird. Hierdurch entstehen innerhalb der Periode eines 40kHz Signals 9 Abtastwerte.

Der Prozess wird nur ausgeführt, wenn weder der Reset Schalter betätigt ist noch der Wechselschalter zur Auswahl von Tasten- oder Ultraschalleingabe auf die Tasteneingabe gestellt ist.

Der Prozess „full_40k_period“

Der Prozess ermittelt den Tastgrad des Signals 40kHz Signals, welches über us_data im Prozess scansignalframe im Vektor us_signal_pluse abgebildet wird. Hierzu wird in einer Schleife die Anzahl aller HIGH-Pegel einer Signalperiode gebildet, wie sie durch die 360kHz Abtastung im Prozess scansignalframe abgelegt wurden. Der Prozess bzw. die Schleife wird durch die steigende Flanke der Clock clk_us_40k ausgelöst, so dass der Vektor 9 Abtastungen mit 360kHz enthält.

Da das Ausgangssignal des LM311 Komparators gemäß eigener Auslegung einen maximalen Tastgrad von 40% bei maximalem Empfangspegel besitzen kann und der Tastgrad mit abnehmender Empfangsqualität sinkt, wird für mindestens einem HIGH Pegel das Kriterium eines ausreichend starken Signals definiert. Ein HIGH Pegel bei 9 Abtastwerten entsprechen einem Tastgrad von 11% und dementsprechend rund ein Viertel des maximalen Tastgrads von 40%. Ein solches Signal wird als „1“ in das Shiftregister us_100_periods gespeichert und kennzeichnet den Empfang einer korrekten 40kHz Periode.

Für 5 oder mehr HIGH Pegel liegt ein Fehler in der Hardware vor, da dieser Zustand unter normalen Bedingungen von der Schaltung auch unter Berücksichtigung von Jitter-Effekten durch ungünstige Timer-Konstellationen nicht erzeugt werden kann. Daher führen 7 oder mehr HIGH Pegel zu keinem Setzen einer erfolgreich detektieren 40kHz Signalperiode.

Der Prozess wird nur ausgeführt, wenn weder der Reset Schalter betätigt ist noch der Wechselschalter zur Auswahl von Tasten- oder Ultraschalleingabe auf die Tasteneingabe gestellt ist.

Der Prozess „stable_40k_signal“

Mit einer Frequenz von 400Hz aus der Clock clk_400, welche ebenfalls für die Ansteuerung des LCD-Displays verwendet wird, durchläuft der Prozess stable_40k_signal eine Schleife. Innerhalb dieser wird die Summe aller einwandfrei detektierten Ultraschall-Signalperioden gebildet, welche als „1“ durch den Prozess „full_40k_period“ in den Vektor us_100_periods geschrieben wurden.

Sind mehr als 50% aller 100 Signale innerhalb der 400Hz Periode der clk_400 als „1“ gespeichert worden, gilt das Ultraschallsignal als stabil. Diese Aussage wird als „1“ dem Signal „us_pulses“ übergeben, welches als Ausgangssignal in die press_duration Komponente übergeben wird.

Verwendung des Signals „us_pulses“ in der Top Level Entity

Das Signal „us_pulses“ wird in der Top Level Entity in das Signal „btn“ gespeist, sofern der Wahlschalter SW13 zum Signal „us_switch“ aktiviert ist. Ein detektiertes Ultraschall-Signal wird dadurch den Druck eines Tasters gleichgesetzt. Alle weitere Verarbeitunsschritte bleiben hierdurch automatisch erhalten. Das Detektieren eines stabilen Ultraschallsignals ersetzt hierdurch die Funktion eines Tastendrucks. Alle weiteren Funktionen des Programms bleiben so erhalten.

btn <= '0' when morse_btn = '0' or ext_btn = '0' or (us_pulses_out = '1' and us_switch = '1') else '1';

Verwendung des Signals „us_switch“ zusätzlich in der „us_detection“

Das Signal „us_switch“ des Ultraschall-Detektions-Wahlschalters SW13 wird ausser in der TLE zusätzlich in der us_detection ausgewertet. Hier wird bei deaktivierter US-Detektion verhindert, dass die rechenintensiven Schleifenprozesse ausgeführt werden, um Ressourcen zu sparen. Würde das „us_switch“ Signal lediglich in der TLE bei der Zuweisung des Tastendruck-Signals „btn“ ausgewertet werden, so erfolge die Ausführung der Schleifen in der „us_detection“ weiterhin, obwohl das resulierende Signal „us_pulses“ in der TLE überhaupt nicht weiter verarbeitet wird.

Testbench zur Überprüfung des Algorithmus

Im Verlauf der Entwicklung sollte sichergestellt werden, dass eine produktionsbedingte Varianz der Piezosendefrequenz die korrekte Erkennung des Ultraschallsignals nicht beeinträchtigt. Hierzu wurde in ModelSim eine entsprechende Testbench erzeugt, in der das Eingangssignal um +/- 10% variiert. Nachfolgend sind die Simulationsergebnisse dargestellt. Zu erkennen ist das trotz höherer oder niedriger Eingangsfrequenz, die korrekte Detektion eines validen Signals möglich ist (us_pulses = 1).

Simulationsergebnis-Modelsim-bei-Eingangsfrequenz-40kHz
Simulationsergebnis mit Modelsim bei einer Eingangsfrequenz von 40kHz
Simulationsergebnis-Modelsim-Eingangsfrequenz-44kHz
Simulationsergebnis mit Modelsim bei einer Eingangsfrequenz von 44kHz
Simulationsergebnis-Modelsim-Eingangsfrequenz-38kHz
Simulationsergebnis mit Modelsim bei einer Eingangsfrequenz von 38kHz
Quellcode - Testbench Signaluntersuchung us_detection

Seiten: 1 2 3 4 5 6