www.mikrocontroller.net

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


Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jack Braun (jackbraun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lars Kollros (variolars)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder du nimmst einfach den Komperator der schon im 128 eingebaut is

Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonst niemand?

Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hugo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eddy Current (chrisi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hugo,

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

Vorab Danke.

Autor: Ingo Elsen (ogni42)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.