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.

Signalverarbeitung im Filter

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:

Frequenzfilter

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