PIC-Lernbeispiel:
Frequenzdetektor
in Arbeit
zurück zu Lernbeispiele , PIC-Prozessoren
, Elektronik , Homepage
Eine LED wird eingeschaltet, wenn am ADC-Eingang eine bestimmte
Frequenz erkannt wird
Gesucht ist eine Lösung, um aus in einem Eingangssignal
bestimmte Frequenzen zu erkennen, und beim Auftreten dieser Frequenzen
eine zugeordnete LED einzuschalten. Wäre das Eingangssignal dabei
nur eine einzelne Frequenz, dann könnte man einen
Frequenzmesserschaltung einsetzen, aber es handelt sich vielmehr um
Signalgemisch (z.B. Musik) das aus vielen Frequenzen zusammengesetzt
ist. Um in diesem Gemisch nach einer bestimmten Frequenz zu fahnden,
müssen digitale Filtertechniken eingesetzt werden. Damit sind
eigentlich die dsPIC für diese Aufgabe prädestiniert, aber um
die Hemmschwelle gering zu halten, werde ich erst mal einen PIC18F-Typ
einsetzen. Das erfordert allerdings Kompromisse.
Schaltung
|
Die Schaltung ist denkbar einfach. Erforderlich ist ein
analoger Eingangsverstärker, der das Eingangssignal für den
ADC des PIC vorbereitet. Sein Eingang ist eine übliche
Audio-Cinch-Buchse, die ein Audiosignal mit einem Pegel von ca 100 mV
und einer Mittelspannung von ca 0 V entgegen nimmt. Am Ausgang hat das
Signal einen 2-V-Pegel (p-p) mit einer Mittelspannung von 2,5 V (Vdd/2).
Dieses Signal wird dem ADC des PIC zugeführt.
Das Ausgangspin des PIC treibt eine einfache LED mit Vorwiderstand.
|
Filtertheorie
Um das Eingangssignal zu analysieren wandelt man es zuerst mit einem
ADC in einen Strom von Zahlenwerten. Nun hat man ein digitales Abbild
der analogen Funktion. Die dabei verwendete Samplefrequenz des ADC
(also die Anzahl der Messungen pro Sekunde) muss dabei mindestens
doppelt so hoch sein, wie die maximale zu untersuchende Frequenz.
Nun braucht man noch einen geeigneten Filteralgorithmus.
Im einfachsten Fall erzeugt man ein digitales Abbild der gesuchten
Frequenz und multipliziert es Sample für Sample mit dem
Eingangszahlenstrom. Die Ergebnisse der Multiplikationen werden
zusammenaddiert. War das Eingangssignal ein zufälliges Signal,
dann ergibt die Multiplikation mit dem Sinus in etwa gleich häufig
positive und negative Ergebnisse. Werden diese über einen
ausreichend langen Zeitraum aufaddiert, dann erhält man in etwa
Null.Waren aber Eingangssignal und gesuchte Frequenz identisch (in
Frequenz und Phase), dann werden immer identische Werte miteinander
multipliziert. Das Ergebnis ist stark positiv. Oft werden beide Signale
aber phasenverschoben zueinander sein. Um das auszugleichen, muss man
in zwei parallelen Berechnungen das Eingangssignal einmal mit dem Sinus
der gesuchten Frequenz und im anderen Kanal mit dem Cosinus der
gesuchten Frequenz multiplizieren. Beide Ergebnisse werden dann mit dem
Pythagoras zusammengefasst. Wenn dieser Wert nun einen bestimmten
Schwellwert überschreitet, dann schaltet man die LED ein.
Die Abbildung zeigt die einzelnen Schritte.
Der Eingangsverstärker (Amp) verstärkt das Eingangssignal und
hebt seinen Mittelwert von 0V auf 2,5V an, da der ADC keine negativen
Spannungen verarbeiten kann.
Der ADC wandelt nun das analoge Signal in ein digitales Signal (einen
Zahlenstrom) um, das aber nun einen DC-Anteil von 2,5V hat.
Das DC-Filter entfernt diesen DC-Anteil wieder. Der Zahlenstrom stellt
nun wieder ein Signal dar, das um 0V herum schwankt.
In zwei parallelen Mixern/Mischern wird dieses Signal mit dem Sinus und
dem Cosinus der gesuchten Frequenz multipliziert.
Die
Ergebnisströme werden addiert/integriert und dann mit dem
Pythagoras zusammengefasst.
Überschreitet der Wert einen festgelegten Schwellwert, wird die
LED eingeschaltet.
Empfindlichkeit
Hinter den Mixern werden eine bestimmte Anzahl von Samples
zusammenaddiert (integriert). Dadurch wird die richtige Frequenz
verstärkt und alle anderen Frequenzen abgeschwächt. Je mehr
Samples man addiert, desto besser wird also die Frequenz erkannt werden.
Bandbreite
Die Filterbandbreite ist das Reziprok des Zeitabstandes zwischen dem
ersten und dem letzten integriertem Sample. Werden also die Samples
über 10 ms integriert, dann ergibt sich eine Bandbreite von 100 Hz.
Der ADC eines PIC18F2550 schafft 100000 ADC-Wandlungen pro Sekunde.
Ein alternatives Filterdesign zeigt die folgende Grafik:
Man erkennt eine Rückkoppelschleife, die eine feste Anzahl von
Pufferspeichern enthält. Jeder Puffer speichert ein Sample und
verzögert somit den Datenfluss in der Rückkoppelschleife um
einen Schritt. Die Anzahl der Pufferstufen legt fest, bei welcher
Eingangsfrequenz sich diese Rückkoppelschleife "aufschaukeln"
wird. Es ist die Frequenz, deren Periode gleich der summierten
Pufferverzögerungen ist.
Dieses Filter spricht aber auch auf alle Mehrfachen der gesuchten
Frequenz an. Aus diesem Grunde sollte der analoge Vorverstärker
einen Tiefpassfilter beinhalten.
Um eine solche Rückkoppelschleife stabil zu betreiben, muss man
eine Dämpfung einbauen. so könnte man den Ausgangswert des
letzten Puffers mit z.B. 0,95 multiplizieren, bevor man ihm dem
Summierer zuführt. Damit vermindert man die Güte des
Filters und macht es gleichzeitig breitbandiger. Ein weiteres
Problem ist die extreme Empfindlichkeit für Gleichspannungsreste
im Signal. Der DC-Filter muss diese also sicher entfernen.
zurück zu
Lernbeispiele
, PIC-Prozessoren , Elektronik
, Homepage
Autor: sprut
erstellt 19.03.2010
letzte Änderung: 19.03.2010