Forum: Mikrocontroller und Digitale Elektronik Trigger Schaltung mit Comparator und Timer


von Philipp D. (peacefish)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

zunächst mal eine kurze Beschreibung was ich vorhabe:
Ich möchte die Frequenz eines Sinus Signals ermitteln, wenn sich diese 
Frequenz in einem bestimmten Bereich (20kHz-80kHz) befindet, einen 
Ausgang auf High setzen. Mit diesem Ausgang soll dann ein Aufnahmesystem 
getriggert werden.

Verwendete Hardware:
ATMEGA 644 20PU 1020 @ 20Mhz (externe Taktquelle)
STK 500 Programmierboard (über COM angeschlossen)

Verwendete Software:
AVRStudio 4

Geplante Vorgehensweise:
1. Durch den Analog Comparator die Flankenwechsel registrieren
2. Bei jedem positiven Flankenwechsel den Counter1 um 1 erhöhen
3. Den Counter1 nach einer bestimmten Zeit zurücksetzen
4. überschreiten die gezählten Flanken in Counter1 einen bestimmten 
Wert, soll ein Interrupt ausgelöst werden. Da der Counter ja zyklisch 
zurückgesetzt wird, kann man davon ausgehen, dass die Frequenz des 
aufgenommenen Signals > als die eingestellte Frequenz ist und die 
Triggerbedinung wäre damit erfüllt.

Bisheriges Vorgehen:
Ich wollte mich an die Lösung Schritt für Schritt herantasten und habe 
daher zunächst ein einfaches Programm geschrieben. Welches den Analog 
Comparator mit dem Timer/Counter1 verbindet.
Das Ganze teste ich mit einem Funktionsgenerator. Die Masse des 
Funktionsgenerators ist mit dem Referenzpin des AnalogComparators AIN1 
(PB3) und das Signal des Funktionsgenerators ist mit AIN0 (PB2) 
verdrahtet.

Erwartetes Verhalten:
Ich würde nun erwarten, dass die LEDs mit der Frequenz des 
angeschlossenen Funktionsgenerators (binär) hochgezählt werden.

Tatsächliches Verhalten:
Bei tiefen Frequenzen 1Hz-20Hz: Die Leds zeigen Zählwerte an, allerdings 
scheinen dabei etliche Schritte übersprungen zu werden.
z.B. bei 1Hz fängt er mit 0b00000001 an und bei der nächsten Flanke 
kommt dann 0b00001110.
bei f>40Hz friert die LED Anzeige ein. Es scheint nichts mehr gezählt zu 
werden.

Fragen:
1.Ich bin nun die Abschnitte zu Timer und Comparator im Datenblatt des 
ATMEGA 644 etliche male durchgegangen und bin mit dieser Information zu 
den Einstellungen im angehängten Quelltext gekommen. Sind diese 
Einstellungen prinzipiell richtig für das was ich vorhabe?

2. Ist es denn prinzipiell möglich den Comparator auf diese Weise zu 
nutzen oder ist er zu träge um Signale mit höherer Frequenz abzutasten?
Wenn das der Fall ist, könnte ich ja noch einen externen Komparator 
zusammenbauen und diesen dann direkt auf den Zähler verdrahten.

Liebe Grüße
und vielen Dank im Voraus für die Unterstützung!

von Michael B. (laberkopp)


Lesenswert?

Philipp D. schrieb:
> bei 1Hz fängt er mit 0b00000001 an und bei der nächsten Flanke
> kommt dann 0b00001110

Ein Signal hat nicht nur einen Nulldurchgang,
sondern stelle dir ein 1Hz Sinus vor mit einem überlagerten 50Hz Sinus
dann kommt es in der Nähe des Nulldurchgangs zu mehreren 
Flankenwechseln.

http://www.hno-vahle.de/wp-content/uploads/2-Sinus.jpg

Zu verhindern durch eine Hysterese.

Der Hysteresewert sollte allerdings zur Signalamplitude passen.

Natürlich gibt es nicht nur weitere Sinustöne, sondern allgemein 
Störungen wie Rauschen und Brummen.

Besse sind Methoden, die eine Fourniertransformation vom Signale und 
sich dort den Maximalwert suchen. Oder wenn man Frequenzen filtern will 
eine IIR.

von Philipp D. (peacefish)


Lesenswert?

Hallo Michael Bertrandt,

vielen Dank für die Antwort!

Bei der Sache mit der Hysterese liegen Sie natürlich völlig richtig.
In diesem Teststadium habe ich auch schon daran gedacht, und an dem 
Funktionsgenerator einen Offset eingestellt, der Sinus schwingt dann 
nicht mehr um 0 sondern um 1V mit einer Amplitude von 2V. Insofern habe 
ich mir die Hysterese so hingetrickst.
Das habe ich natürlich vergessen im 1.Post zu beschreiben.

Eine Fouriertransformation bzw. eine Filterung mit IIR des Signals, 
werde ich wohl mit dieser Hardware (zumindest nicht so schnell wie 
benötigt) realisieren können...

von holger (Gast)


Lesenswert?

>Ich möchte die Frequenz eines Sinus Signals ermitteln, wenn sich diese
>Frequenz in einem bestimmten Bereich (20kHz-80kHz) befindet, einen
>Ausgang auf High setzen. Mit diesem Ausgang soll dann ein Aufnahmesystem
>getriggert werden.

Warum muss der Bereich so gross sein?
Wenn du z.B. einfach sagst 40kHz könnte man das komplett
ohne uC zuverlässig mit einem NE567 lösen.

von Philipp D. (peacefish)


Lesenswert?

Hallo Holger,

der Trigger soll dazu verwendet werden Fledermausrufe zu detektieren. 
Diese rufen (abhängig von Art usw. ) in verschiedenen Frequenzbereichen 
im Ultraschallbereich zwischen 20kHz und 80kHz. Aus diesem Grund wäre es 
schön, wenn das Ganze auf einem flexiblen programmatischen Wege (µc) 
lösbar wäre.

Die Variante mit dem Timer ist aber eine gute Idee, vllt. ist ja eine 
"Hybrid-Lösung" für mich das richtige, bei der ich Komparator und Timer 
extern in einer Schaltung aufbaue und dann die Einstellungen des 
Timerbausteins über den ATMEGA festlege, oder irgendwie so...

Ich würde nur gerne wissen woran es liegt, dass mein Code nicht das tut 
was ich erwarte. Irgendwo habe ich dabei einen Denkfehler. Weil im 
Datenblatt ja steht, dass ich den Interrupt des Analog Comparators durch 
setzen eines Bits, intern auf den Eingang des Counters legen kann. Nur 
leider zählt der Counter nicht so wie ich mir das eben vorstelle.

ich werde morgen noch einpar Versuche hierzu machen und die Ergebnisse 
posten.
Wenn jemand Anregung hat was ich probieren kann dann immer her damit!
Bis dorthin wünsche ich noch einen erholsamen Abend!

von holger (Gast)


Lesenswert?


von Philipp D. (peacefish)


Lesenswert?

Hallo miteinander,

ich habe mich jetzt entschieden, dass ganze mit einem Komparator und 
Counter extern aufzubauen und dann damit auf einen Eingang des ATMEGA zu 
gehen.
Deshalb auch kein neues Code Beispiel, da ich gerade am Löten bin.

Wenn mein Lösungsansatz fertig ist kann und werde ich natürlich darüber 
berichten.

Liebe Grüße

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.