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.
Vielleicht ist dieser Artikel für Dich interessant: http://www.mikrocontroller.net/articles/High-Speed_capture_mit_ATmega_Timer
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.