PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenz messen


tsaG
2012-01-19, 11:16:15
Hallo,

Ich möchte mehrere Frequenzen messen. Diese bewegen sich von 20 bis 150Hz.

Das ganze ist bisher nur theoretisch, ausprobiert habe ich noch nichts.

Auserkoren habe ich bisher einen Atmega Chip, habe vorher schon mit Arduino gearbeitet daher bietet sich das an.

Zuerst dachte ich an Interrupts mit denen ich die Anzahl der Pulse innerhalb eines 100ms Fensters zähle. Dies funktioniert aber nur mit einem Signal und ist bei 20Hz recht ungenau.

Dann könnte man auch den Abstand der eingehenden Signale messen und diese dann umrechnen und Ausgeben. Ich weiss aber nicht wie es dabei mit der Genauigkeit bei 150Hz ausschaut.

Auch hier kann man jedoch nur einen Anschluss bemessen (?).

Gibt es sonst noch irgendwelche Hardware Counter welche dann die gemessene Frequenz an den Atmega weiterleiten, die man vorschalten kann?

-tsaG

EDIT: Achja, das Signal sieht wie folgt aus.

http://www.forum-3dcenter.org/vbulletin/attachment.php?attachmentid=41722&stc=1&d=1326968289

DraconiX
2012-01-19, 11:49:51
Soooo..... kommt halt darauf an welchen Atmega du nehmen magst. Der Atmega 8 z.b. hat nur einen ext Interrupt Vect.

Der Atmega168 z.b. hat da schonmal zwei direkte ext Interrupt Pins, und du kannst jeden I/O Pin als externe Quelle beschalten lassen. Was jedoch den ganzen Port als Interrupt schaltet, da mußt du dann noch ausklabüstern welche Pin den Change hatte.

Ich würde den Abstand zwischen zwei Interrupts messen, 150Hz ist für nen Atmega noch lächerlich. ;)

Edit:
Der Atmega 48/88/168 ist sogar Pinkompatibel zum Atmega 8.

-tk|doc-
2012-01-27, 12:11:24
Willst du das immer in Echtzeit messen, oder kannst du immer kurz warten?

Mein erster Ansatz (da der Code evtl. nicht schnell genug ausgeführt werden kann, bis ner nächste Peak kommt und er dadurch ungenau wird):

Ne Sekunde (oder passender Wert) samplen, Amplidutenschwelle einfügen und auf diese prüfen, Counter++, und dann durch die Sampledauer. Sprich schaue dir immer viele Perioden (100 - 1000 sollte hier passen) an, um den Fehler zu minimieren.

Außerdem brauchste was zum prüfen der gemessenen Frequenz (am besten n Oszi), um auch zu verifizieren, ob alles korrekt läuft, wie groß der Fehler ist,...

ciao Phil

/edit: Kannst damit was anfangen? Wo stehst gerade?

noid
2012-02-02, 22:43:21
Beide deiner Messungen sollten doch iO sein - was ist denn Überhaupt dein Problem, bzw deine Anforderung?

Soooo..... kommt halt darauf an welchen Atmega du nehmen magst. Der Atmega 8 z.b. hat nur einen ext Interrupt Vect.

Der Atmega168 z.b. hat da schonmal zwei direkte ext Interrupt Pins, und du kannst jeden I/O Pin als externe Quelle beschalten lassen. Was jedoch den ganzen Port als Interrupt schaltet, da mußt du dann noch ausklabüstern welche Pin den Change hatte.

Ich würde den Abstand zwischen zwei Interrupts messen, 150Hz ist für nen Atmega noch lächerlich. ;)

Edit:
Der Atmega 48/88/168 ist sogar Pinkompatibel zum Atmega 8.

edit: wenn ich das richtig gelesen habe könnte er mit dem ADC ja auch noch messen, die schaffen 15ksps.