mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TXCO Zeitmessung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Herbie (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Erst einmal die Grundlagen verstehen! (Gast)


Bewertung
1 lesenswert
nicht lesenswert

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Philipp K. (philipp_k59)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Herbie (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@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

von m.n. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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.

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.