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.
oder du nimmst einfach den Komperator der schon im 128 eingebaut is
>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.
Hallo Hugo, hast du deinen Code schon fertig? Wie sieht es mit einem Schaltpaln aus? Kannst du das hier mal posten? Vorab Danke.
Ä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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.