Hallo zusammen,
ich bin grade dabei eine Zeitmessung aufzubauen. Hier im Forum habe ich
dazu die folgenden Beiträge gefunden, die mir schon etwas weitergeholfen
haben:
Beitrag "Zeitmessung für Sportveranstaltungen"Beitrag "reziproker Frequenzzähler, GPS-stabilisiert, ATmega162"
Dennoch habe ich einige Fragen, die hoffentlich hier geklärt werden
können.
Ersteinmal zum grundsätzlichen Konzept:
Ziel ist es die Zeit zwischen den Unterbrechungen zweier Lichtschranken
(SICK WL273P) mit einem Mikrocontroller (bevorzugt etwas aus der ATMega
Reihe, 8er habe ich noch einen ganzen Haufen rumliegen) zu messen -
Lichtschranke eins soll die Zeitmessung starten und Lichtschranke zwei
wieder stoppen. Sobald Lichtschranke eins einmal unterbrochen wurde,
sollen weitere Unterbrechungen ignoriert werden. Das Stoppen der
Zeitmessung soll durch die vorherige Unterbrechung einer weiteren
Lichtschranke freigeschaltet werden, aber das sollte in der Software
einfach zu lösen sein, so dass ich darauf nicht weiter eigehen würde.
Die Zeitmessung sollte eine Genauikeit von etwa 1 ppm - 1,5 ppm haben.
Sofern ich mich nicht verrechnet habe - falls doch dann korrigiert mich
bitte - sollten damit dann:
Zeiten im Bereich bis etwa 5 Minuten mit einer maximalen Abweichung von
0,5/1000 s messbar sein.
Zeiten im Bereich bis etwa 30 Miunten mit einer maximalen Abweichung von
0,5/100 s messbar sein.
Zeiten im Bereich bis etwa 10 Stunden mit einer maximalen Abweichung von
0,5/10 s messbar sein.
Für die angestrebte Genauikeit wird sicherlich ein TCXO notwendig sein
und die initiale Korrektur einer ggf. vorhandener Grundabweichung.
Darüberhinaus wäre es sicher notwendig, das System hin und wieder neu zu
Korrigieren, um z.B. die Alterung des TCXO zu kompensieren. Eine
dauerhafte Anbindung z.B. an ein GPS Signal würde ich nicht bevorzugen,
sondern lieber einen gezielten Abgleich vor der Inbetriebnahme oder eben
bei Bedarf. Allerdings habe ich noch so meine Probleme bei der konkreten
Umsetztung.
Bei Unklarheiten bezüglich des Konzeptes einfach nachfragen.
Ersteinmal zum TCXO: Hat da vielleicht jemand eine konkrete Empfehlung
für mich?
Anforderungen: für ATMega geeignet, etwa 16 MHz, Genauigkeit 1 ppm - 1,5
ppm, von Hand lötbar (viele haben die Anschlüsse unter dem Gehäuse, das
könnte dann ohne Reflow etwas schwer werden, oder geht das ohne
Probleme?)
Im Beitrag "Zeitmessung für Sportveranstaltungen" ist ja eine ganz
ähnliche Anwendung beschrieben und es werden auch einige TCXOs genannt,
allerdings bräuchte ich die dort geforderte Genauigkeit nicht und ich
bin unsicher, welcher jetzt für die Verwedung mit einem ATMega geeignet
ist.
Dann zum zweiten Problem, der Korrektur einer ggf. vorhandener
Grundabweichung und der Alterung:
Im Beitrag "reziproker Frequenzzähler, GPS-stabilisiert, ATmega162" wird ja ein GPS
stabilisierter Frequenzzähler vorgestellt - ein per Software aufrufbarer
Abgleich der TXCO Frequenz mit dem GPS signal wäre das, wa sich mir auch
für die Zeitmessung vorstellen würde. Meine Vorstellung wäre also
folgende: Normalbetrieb nur mittels TCXO und zusätzlich ein per Software
aufrufbarer Abgleich. Sofern dann ein 1pps Signal anliegt wird die
Frequenz des TXCO abgeglichen und ggf. ein Korrekturwert in der Software
gespeichert - also im wesentlichen das, was die vorgestellte Software
des GPS stabilisierten Frequenzzählers macht. Ehrlichgesagt traue ich
mir aber nicht zu, die Software so anzupassen, dass sie nur noch den
Frequenzabgleich zwischen TXCO und ggf. anliegendem 1pps Signal macht.
Vielleicht kann mir dabei jemand behilflich sein. Das 1pps Signal liegt
ja bei der vorgestellten Lösung am INT1 Eingein ein - damit ist nur noch
ein weiterer Interrupt Eingang frei - für den Anschluss der beiden
Lichtschranken bräuchte ich jedoch eigentlich zwei Interrupteingänge.
Oder gibt es da eine andere Lösung, wie das elegant zu machen wäre, auf
die ich grade nicht komme?
Gruß
Herbert
Für Deine Messung gibt es schon eine Grundschaltung mit
ATmega88/168/328:
http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp6
Das Programm sollte nach Anpassung auch testweise auf einen Arduino Uno
laufen.
Die genaue Bezeichnung des 20 MHz TCXOs, den ich immer verwende, kann
ich Dir bei Gelegenheit heraussuchen. Er hat eine typ. Grundgenauigkeit
von < 1ppm und driftet mit <= 0,5 ppm über den gesamten
Temperaturbereich.
Wenn Du Probleme mit dem Löten hast, ist es geschickt, die Pads auf der
Leiterplatte nach außen etwas größer auszuführen, sodaß sich das Zinn
(am besten Lötpaste) zischen die Kontakte ziehen kann. Alternativ legt
man die Kontakte nach oben, was ein spiegelverkehrtes Layout erfordert.
Soweit erst einmal.
Ich benutze für schon ziemlich gute Genauigkeit einen DS3231 bzw. sein
32768Hz Signal am Atmega Interrupt Eingang.
das bedeutet der läuft in 30 Sekunden 1/32768 Sekunde falsch.. bzw 0.17
Sekunden am Tag oder 1 Minute im Jahr.
Mein DS3231 habe ich vor 2 Jahren gestellt und der ist heute noch bei 90
Sekunden, also 1,5 PPM.
@m.n.: Vielen Dank für den Link, dass hilft mir auf jeden Fall noch
einmal ein gutes Stück weiter. In das vorhandene Programm für die
Zeitmessung müsste ich noch irgendwie die Funktion zum Abgleiche der
TXCO Frequenz mittels 1pps Signal einbinden... dass muss ich mir dann
noch einmal genauer anschauen.
Wäre wirklich super nett, wenn du mir die genaue Bezeichnung des TCXO
raussuchen könntest, den du verwendest. Es ist aber gut zu wissen, dass
man auch die SMD Variante mit den "Reflow-Pads" von Hand gelötet
bekommt, da sollte bei den üblichen Händlern ja etwas aufzutreiben sein.
Die Pads auf der Platine kann ich im Lauyout auf jeden Fall etwas größer
vorsehen.
Bisher habe ich die Timer immer so verwendet, dass ich im CTC Interrupt
die Zeitvariablen hochgezählt habe. Das hat den Vorteil, dass ich zu
jeder Zeit in verschiedenen Variable die
Minuten/Sekunden/Millisekunden/... des aktuellen Timings drin stehen
habe und das ganze auch zur Laufzeit hinund wieder mal ganz simpel auf
einer Anzeige ausgeben kann. Bei der von dir verwendeten Timingvariante
müsste man für eine Ausgabe immer den aktuellen Wert berechnen. Ist das
zur Laufzeit des Timers unkritisch machbar?
@Philipp: Laut Datenblatt hat der DS3231 aber keine Gneauigkeit von 1,5
ppm, oder habe ich da etwas anderes gefunden, als das was du verwendest?
Und für die Lösung bräuchte ich die ganze Zeit einen Interupt Eingang
für die Zeitmessung?
Gruß
Herbert
Der Link war an anderer Stelle schon vorhanden:
https://de.rs-online.com/web/p/tcxo-oszillatoren/7099379/
Das ist ein TCXO, der laut Datenblatt einen initialen Fehler von <= 2
ppm aufweist. Bei den Teilen, die ich verbaut habe, lag er unter 1 ppm,
sodaß diese ohne weiteren Abgleich für 6-stellige Frequenzzähler
verwendbar waren.
Der TCXO ist so "klobig", daß man ihn auch über 10 - 20 mm Litze
verdrahten kann; lediglich der Abblockkondensator sollte direkt an die
Pads angeschlossen werden. Der Ausgangspegel reicht, um einen AVR direkt
an XTAL1 anzusteuern. Ansonsten reicht ein AC-gekoppelter Inverter zur
Pegelanpassung auf Vcc-Pegel.
Im Grunde reicht der frei durchlaufende Timer1, um alle Zeitsignale zu
erzeugen/verarbeiten. Mit OCR1x läßt sich ein hochaufgelöster Basistakt
von 10 kHz erzeugen. Damit könnte man sogar die Start-Stop-Signale per
Software auswerten und ggf. noch entprellen.
Mit dem Capture-Signal kann man ein ext. angelegtes 1 pps-Signal zur
Korrektur auswerten.
Da es ein TCXO ist, muß die Korrektur digital erfolgen. Persönlich würde
ich eine 32 Bit Variable hochzählen, die nur bei Bedarf korrigiert und
auf die aktuelle Zeit umgerechnet wird. Da solltest Du Dir vorab
Gedanken machen, wie es Dir am besten passt.
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