Hallo,
ich stehe vor einer Aufgabe die Frequenz eines Signals mit MEGA128 zu
messen.
Die Frequenzen liegen unter 50Hz und sind dabei unkritisch. Die
Schwierigkeit liegt darin, dass das Signalpegel zw. 3V und 5V liegt.
D.h. ich kann mit meinem Controller nicht auf Flanken reagieren - wie es
hier mehrfach im Forum als Lösungsansatz beschrieben ist - weil der
Pegel immer High ist.
Ich habe mir das so vorgestellt:
Der ADC wird mit einem Timer gesteuert. Timer löst periodisch mit 1ms
einen Interrupt aus (->Dirackamm). In dessen ISR wandle ich das Signal
AD und speichere die Werte (Dirackamm gefaltet mit Signal). Das ganze
wird 1 sec lang gemacht. Anschließend werte ich die ADC werte aus.
Die FCPU ist 16MHz -> tzyklus=63ns. In der Zeit zwischen 2 Interrupts
habe ich also 1ms/63ns = 16000 Programmschritte zur Verfügung, normaler
Weise ausreichend, um die ADC und Sicherung der Werte durchzuführen.
Was meint ihr zu meinem Konzept, ist es realisierbar, was würdet ihr
anders machen?
Danke
>Die Frequenzen liegen unter 50Hz und sind dabei unkritisch. Die>Schwierigkeit liegt darin, dass das Signalpegel zw. 3V und 5V liegt.
Du brauchst doch nur einen Komparator (LM311 z.B.).
Die Schaltschwelle legst Du auf den Offset, um den Dein Signal schwingt.
Der Komparator macht daraus ein Signal zwischen 0 und Vcc.
>Komparator
Das ist eine gute Idee.
Doch leider kann ich an der Hardware nichts mehr machen.
Meinem Auftraggeber ist die Frequenzmessung erst "später" eingefallen.
So ist jetzt nur eine Software Lösung möglich, weil die Hardware schon
fertig ist.. Man ich könnte ihn killen!
Aha,
dieser Forum scheint mit Signalverarbeitungs-Spezialisten unterbesetzt
zu sein. Lustig finde ich Beiträge, welche es versuchen einen ganz
anderen Lösungweg zu finden.
Erinnert mich immer an dieses Bild:
http://alterknacker.supernature-forum.de/kunde.jpg
da ist was wahres dran....
Hab grad Langweile, kann meine Idee nicht umsetzen, weil die Hardware
erst gefertigt wird....
Werde demnächst versuchen meine Idee zu implementieren, mal sehen ob ich
es mit DFT schaffe die Frequenz zu ermitteln. Werde über mein Erfolg
berichten!
Gruß
Hugo
DFT. Soso.
Ein Frage noch: Welche Signalform weisst Dein Signal auf? Ist es ein
Rechteck? Sinus? Konstante Amplitude?
Wie genau soll die Frequenzmessung sein? Mit DFT wirst Du ja nicht viel
mehr wie, sagen wir mal 0.5% erreichen, weil Dir entweder RAM, ROM oder
die Rechenzeit ausgeht.
>Ein Frage noch: Welche Signalform weisst Dein Signal auf? Ist es ein>Rechteck? Sinus? Konstante Amplitude?
Idealer Weise nemme ich zunächst mal sinus mit 0V-5V
Zielsignal ist rechteck mit 0V-5V bei einer Frequenz von 1Hz bis 50Hz
>Wie genau soll die Frequenzmessung sein?
+-0,5Hz auch +-1Hz kann man verkraften
>Mit DFT wirst Du ja nicht viel>mehr wie, sagen wir mal 0.5% erreichen
reicht mir vorerst vollkommen aus
Hallo Hugo,
zwei Hinweise:
1) FFT: Für die Bestimmung der Grundfrequenz läuft die FFT auf die
Bestimmung der 'größten' Frequenzkomponente hinaus (-> Differentation
des Spektrums) - dies sollte für alle Kurveneformen funktionieren.
2) 1) bringt mich auf 2): Du hast ja geschrieben, dass Dir eine
hardware-seitige Detektion der Flanken verbaut wurde - wieso also nicht
das Signal zur Kantendetektion differnzieren und dann die Differenz der
Maxima ermitteln (*):
Diff = (Abtastwert n - Abtastwert n-1) / Zeitintervall, (Zeitintervall
von mir aus normiert)
Periodendauer = Zeitintervall (Max(Diff)|n - Max(Diff)|n-1)
(*) Die Differenzengleichungen reagieren genau auf die Signal-Flanken
Wäre das nicht eine gangbarer Weg ohne FFT?
Die Implementierung wäre im Prinzip ein modifizierter Sort-Algorithmus
(Min/Max-Suche).
Gruß
Nils
> Idealer Weise nemme ich zunächst mal sinus mit 0V-5V> Zielsignal ist rechteck mit 0V-5V bei einer Frequenz von 1Hz bis 50Hz
Wusste nicht, dass Du Einfluss sowohl auf Signalform, wie auf die
Amplitude des Signals hast. Ich kann Dir daher nicht folgen und sehe
auch das Problem nicht mehr.
Oder sprichst Du nur vom Debuggen Deiner DFT?
Wenn die Grundwelle Deines Signals die größte Amplitude aufweisst,
kannst Du auch einfach eine Schwelle für die ADC-Werte festlegen und die
Zeitdauer dazwischen messen, bzw. Über mehrere Perioden. Sehe auch hier
keine Rechtfertigung für eine DFT oder FFT.
Ähm, die Frage war doch nach einer Frequenzmessung, Sinus oder Rechteck
zwischen 3V und 5V. Wozu da eine DFT oder FFT? Das von Nils beschriebene
Verfahren löst das Problem.
Wenn die obere Frequenz 50Hz ist, reichen theoretisch 100Hz Abtastrate.
Ich würde, um auf der sicheren Seite zu liegen 200Hz nehmen.