Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung mittels ADC Signal 3,5V-4,5V


von Hugo (Gast)


Lesenswert?

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

von Jack B. (jackbraun)


Lesenswert?

>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.

von Lars K. (variolars)


Lesenswert?

oder du nimmst einfach den Komperator der schon im 128 eingebaut is

von Hugo (Gast)


Lesenswert?

>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!

von Hugo (Gast)


Lesenswert?

Sonst niemand?

von Hugo (Gast)


Lesenswert?

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

von Eddy C. (chrisi)


Lesenswert?

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.

von Hugo (Gast)


Lesenswert?

>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

von Nils (Gast)


Lesenswert?

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

von Eddy C. (chrisi)


Lesenswert?

> 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.

von Sven (Gast)


Lesenswert?

Hallo Hugo,

hast du deinen Code schon fertig?
Wie sieht es mit einem Schaltpaln aus?
Kannst du das hier mal posten?

Vorab Danke.

von Ingo E. (ogni42)


Lesenswert?

Ä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
Noch kein Account? Hier anmelden.