Hallo zusammen,
ich habe eine Mikrocontrollerschaltung mit der ich mit 1kHz mehrere
Zustände abfragen kann und per USB raussende, das funktioniert super.
Nun möchte ich ein Frequenzsignal messen. Das Signal schickt einen High
Pegel alle ~50µs (also 20kHz). Messen daran möchte ich das '~'. Ich gehe
von einem Frequenzbereich von 19.5kHz - 20.5kHz aus.
Da ich das Signal mit 1kHz, also 1/ms samplen möchte ist eine
Taktzählung á la HC4020 ausgeschlossen. Ich muss über die Periodenlänge
gehen.
Ich dachte daran mit Logikbausteinen das High (oder das Low) Signal mit
einer weiteren Clock zu verunden und dann innerhalb einer Periode die
Pulse mit einem 4020 zu messen. Über ein Schieberegister kann ich dann
die Zählerstände einlesen. Angenommen ich möchte mit 14bit (siehe 4020)
auskommen und ich benutze 50MHz Samplingfrequenz, dann hätte ich ca 7bit
effektiv über die zu betrachtene Breite - das würde mir ausreichen.
Nun zu meiner Frage:
Hat jemand zufällig so eine Schaltung schonmal ausprobiert? Ehe ich eine
Platine bestelle, hätte ich gerne so eine Beispielschaltung gesehen?
50MHz ist schon heftig, muß ich hier aus Bauteilvarianten o.ä. achten.
Ich hätte auf jeden Fall die Leiterbahnen so kurz und rund wie möglich
gemacht, und einseitig GND wo es geht.
Danke im Voraus
Schorsch
Schorsch schrieb:> Hallo zusammen,>> ich habe eine Mikrocontrollerschaltung
welchen?
Mit AVRs ist das zb alles kein Problem, wenn der Timer mit der Input
Capture Unit noch frei bzw. in einem brauchbaren Taktbereich zählt.
Auch können oft integrierte Timer als Taktquelle einen Input Pin
benutzen. Auch damit ist die Sache problemlos nur mit Bordmitteln
machbar.
Karl Heinz Buchegger schrieb:> welchen?>> Mit AVRs ist das zb alles kein Problem, wenn der Timer mit der Input> Capture Unit noch frei bzw. in einem brauchbaren Taktbereich zählt.>> Auch können oft integrierte Timer als Taktquelle einen Input Pin> benutzen. Au
Hallo,
zur Zeit ist ein Atmega8 drauf, die neue Version wird aber einen mega64
kriegen.
...Da hab ich noch gar nicht drüber nachgedacht....
Du meinst ich könnte einfach den Prescaler eines 16bit Timers auf Null
stellen, und über ein externes Interrupt zählen..? Coole Idee, gefällt
mir; minimiert definiv den Schaltungsaufwand. Hast Du zufällig
Beispielcode?
Georg
Schorsch schrieb:>> Auch können oft integrierte Timer als Taktquelle einen Input Pin>> benutzen. Au>> Hallo,>> zur Zeit ist ein Atmega8 drauf, die neue Version wird aber einen mega64> kriegen.>> ...Da hab ich noch gar nicht drüber nachgedacht....>> Du meinst ich könnte einfach den Prescaler eines 16bit Timers auf Null> stellen, und über ein externes Interrupt zählen..?
Nein.
Ich meine vor allen Dingen, dass du einen Blick ins Datenblatt riskieren
sollst. Da hat Atmel extra eine schöne Tabelle bei jedem Timer
abgedruckt, in der steht, wie man einen Timer takten lassen kann. Keine
Angst, mann kriegt davon keinen Augenkrebs.
Im Falle des Mega 8
http://www.atmel.com/images/doc2486.pdf
Seite 99
Die passende Funktion beim AVR nennt sich "input capture". Damit wird
bei einer Flanke der aktuelle Zählerstand von Timer1 gespeichert. Die
Periodenmessung in dem Frequenzbereich geht damit ohne externe Hardware.
Ein Softwarebeispiel findet sich hier:
http://www.rn-wissen.de/index.php/Timer/Counter_(Avr)#Input_Capture
Im Grunde gibt es hierfür zwei Möglichkeiten:
1. Du schnappst Dir einen schnellen Zähler.
Mit der ersten steigenden Flanke startest Du den Zähler.
Mit der nächsten hältst Du ihn an und schaust nach was los ist.
Höhere Frequenz: Weniger Ticks.
Genauigkeit: Stark abhängig von möglichen Quarz/Teilerfaktoren.
Schnell. Min. jeder zweite Impuls.
2. Du nimmst einen langsamen Zähler für ein Zeitraster und einen
zweiten Zähler zum Zählen der einkommenden Impulse.
Den zweiten Zähler kannst Du sparen, wenn Du sonst wenig zutun
hast indem Du ihn durch Software plus Unterbrechung
implementierst.
In festem Raster schaust Du nach wie viele Pulse eingegangen sind.
Höhere Frequenz: Mehr Impulse.
Genauigkeit: Feiner einstellbar.
Langsamer. Möglichst nahe 255 bzw. 65535 Taktzyklen.
amateur schrieb:> Im Grunde gibt es hierfür zwei Möglichkeiten:
Stimmt.
1. Möglichkeit: 'input capture' mit +Flanke
2. Möglichkeit: 'input capture' mit -Flanke
Alles andere wäre Gewürge.
Hallo,
Ich find die Idee mit dem Input Capture wirklich gut und werde sie
sobald möglich ausprobieren
Danke für die wirklich schnelle Hilfe...
Schorsch
Hallo,
vielleicht hat sich ja die Aufgabe seit deinem ersten Post verändert und
ich habe das nicht mitbekommen, aber dein Angaben waren Periodenmessung
von 50 µs auf 14 bit genau - dazu brauchst du eine zeitliche Auflösung
der Messung von 3 ns, völlig egal wie dein Messaufbau ist.
Du kannst aber weder einen 4020 mit 300 MHz takten noch arbeitet ein
µController-Capture auch nur annähernd mit solchen Frequenzen. Aber
vielleicht habe ich ja alles missverstanden.
Gruss Reinhard
Reinhard Kern schrieb:> vielleicht hat sich ja die Aufgabe seit deinem ersten Post verändert und> ich habe das nicht mitbekommen, aber dein Angaben waren Periodenmessung> von 50 µs auf 14 bit genau
Eingangs steht etwas von 7Bit effektiv, die ihm reichen würden.
Bei einem mit 20MHz getakteten AVR ist die überschlägige Rechnung der
Auflösung recht einfach: 20MHz Zählertakt zu ca. 20kHz Meßsignal ergibt
eine Auflösung von ca. 1000 Punkten/Periode.
Bei 1ms Erfassungsrate könnten auch gleich 20 Perioden gemessen werden.
Falls dies nicht reichen sollte, wäre die nächst günstige Lösung einen
STM32F4 zu nehmen, dessen Timer mit 168MHz laufen können und wiederum
per 'input capture' rund 6ns Auflösung bieten.
Vermutlich wird aber das zu messende Signal garnicht so stabil sein,
dass schon ein AVR locker alle Bedürfnisse abdeckt.
Weiter stellt sich die Frage ob er wirklich alle Millisekunde einen
neuen Messwert braucht.
Er kann sonst ja auch noch mehr Perioden messen um einen genaueren Wert
bei der gegebenen Taktfrequenz des µC zu erhalten.
Udo Schmitt schrieb:> Weiter stellt sich die Frage ob er wirklich alle Millisekunde einen> neuen Messwert braucht.Schorsch schrieb:> Da ich das Signal mit 1kHz, also 1/ms samplen möchte
Er möchte es so haben. Das ist doch ne klare Ansage und kein Grund, es
ihm ausreden zu wollen.
m.n. schrieb:> Eingangs steht etwas von 7Bit effektiv, die ihm reichen würden.
wenn ich mit 7 oder 8 bit den unterschied zwischen 19.5 und 20.5 kHz
messen kann würde das schon völlig reichen
Sorry, wenn ich mich falsch ausgedrückt habe
Schorsch
Schorsch schrieb:> m.n. schrieb:>> Eingangs steht etwas von 7Bit effektiv, die ihm reichen würden.>> wenn ich mit 7 oder 8 bit den unterschied zwischen 19.5 und 20.5 kHz> messen kann würde das schon völlig reichen
Und hast Du es gelöst und wenn ja, wie?