Kristall-Oszillator für bestmögliche Frequenzgenauigkeit abstimmen

English Deutsch

In unserem vorherigen Beitrag Kristall-Lastkondensatoren mit Python berechnen haben wir untersucht, wie man UliEngineering verwendet, um den geeigneten Lastkondensator für deinen Kristall-Oszillator zu berechnen.

Sobald du dein Board gefertigt hast, solltest du einen Schritt weitergehen und deinen Kristall-Oszillator abstimmen.

Beachte, dass wir in diesem Beitrag nicht über spezialisierte kompensierte oder beheizte Kristalle wie TCXOs, DCXOs oder OCXOs sprechen, sondern über normale Kristalle, die du zum Takten deines RTC, deines Mikrocontrollers, deines Ethernet PHY, deines ADCs, … verwendest.

Außerdem ist dieser Beitrag nicht primär für ppm-Jäger gedacht, die eine Genauigkeit unter ±5ppm anstreben. Während du die hier beschriebenen Techniken sicherlich sehr sorgfältig anwenden musst, um unter deine magische ppm-Zahl zu kommen, werden sie allein wahrscheinlich nicht ausreichen.

Den Lastkondensator abstimmen

Beachte, dass bei neuen PCBs die PCB-Streukapazität nur eine fundierte Schätzung ist – deine Lastkapazität wird also etwas abweichen.

Zuerst musst du dir merken: Zu niedrige Lastkapazität führt zu höherer Frequenz – zu hohe Lastkapazität führt zu niedrigerer Frequenz.

Ich empfehle nicht, die PCB-Kapazität direkt zu messen, da Kapazitäten im einstelligen Pikofarad-Bereich schwer genau zu messen sind. Zusätzlich kannst du sie nicht einfach auf einem Ersatzboard ohne alle Komponenten messen (da die Komponenten, z.B. das Gehäuse des Kristalls, die Streukapazität beeinflussen), aber du kannst sie auch nicht auf einem vollständig bestückten Board messen, da der Kristall selbst deine Messung stark beeinflusst.

Stattdessen miss einfach die Frequenz des Kristall-Oszillators durch Messen eines Referenztaktausgangs. Das am besten geeignete Instrument dafür ist ein Frequenzzähler mit einer ausreichend stabilen Frequenzquelle. Oszilloskope haben typischerweise nicht die erforderliche Auflösung, um eine Frequenz bis in die ppm-Bereiche zu messen. Aber wenn du ein Mikrocontroller-Board mit einem ausreichend stabilen Kristall hast.

Beachte, dass durch das Anschließen deiner Sonde an den Kristall du den Kristall mit zusätzlicher Kapazität deiner Sonde belastest, daher wirst du seine tatsächliche Frequenz nicht genau messen. Taste den Kristall nicht direkt ab, sondern konfiguriere deinen RTC so, dass er einen Taktausgang auf einem separaten Pin generiert und miss diesen.

Typischerweise wird dein anfänglich berechneter Lastkondensatorwert innerhalb von ±50% des endgültigen Werts liegen. Daher solltest du ungefähr 5-20 Standardwerte von Kondensatoren in diesem Bereich kaufen. Heutzutage kostet der Kauf von 10 Keramikkondensatoren nur etwa 0,15€, sodass das Kaufen einer Handvoll davon wirklich keine Überlegung wert ist und du sie einfach bestellen solltest – oder alternativ ein Kondensator-Set bestellen. Beachte, dass Standard-Kondensatorwerte wie 10pF oder 6.2pF oft viel günstiger sind als sehr spezifische Werte, also passe bei der Auswahl der Werte, die du kaufst, auf.

Wenn du beispielsweise einen berechneten Lastkondensatorwert von 7pF hast, könntest du die folgenden Kondensatoren bestellen:

Wie genau solltest du abstimmen?

Meine Empfehlung, wie genau du abstimmen solltest, hängt davon ab, ob das Austauschen von Komponenten die einzige Art der Abstimmung ist, die du durchführen kannst, oder ob dein Oszillator-IC digitale Abstimmung unterstützt. Da heutzutage digitale Abstimmung so einfach und viel reproduzierbarer ist als das Wechseln von Komponenten (aufgrund von Toleranzen etc.)

Wenn dein RTC/Controller KEINE digitale Abstimmung unterstützt: Meine Empfehlung ist, nicht mehr als das 2,5-fache der spezifizierten Genauigkeit des Kristalls abzustimmen. Wenn dein Kristall also eine spezifizierte Toleranz von ±20ppm hat, solltest du in den meisten Anwendungen auf ±50ppm abstimmen. Wenn dein Controller digitale Abstimmung unterstützt, aber keine automatische Abstimmung: Meine Empfehlung ist, nicht mehr als das 4-fache der spezifizierten Genauigkeit des Kristalls abzustimmen. Wenn dein Kristall also eine spezifizierte Toleranz von ±20ppm hat, solltest du in den meisten Anwendungen auf ±80ppm abstimmen. Wenn dein Controller digitale automatische Abstimmung unterstützt: Meine Empfehlung ist, auf Digitaler Anpassungsbereich / 1.5 abzustimmen.

Denke in jedem Fall daran, dass es ein Kompromiss zwischen deiner Zeit zur Produktverbesserung und leichten Ungenauigkeiten ist, die auftreten könnten.

Digitales Abstimmen der Frequenz

Viele Controller und RTCs verfügen heutzutage über eine Schaltung zur digitalen Abstimmung der Frequenz bis in den Sub-ppm-Bereich über z.B. I2C-Zugriff. Intern funktioniert dies, indem Pulse zu einer internen Uhr hin und wieder weggelassen oder hinzugefügt werden, wodurch die durchschnittliche Frequenz der Uhr effektiv verringert oder erhöht wird.

Beachte, dass du nicht unendlich digital anpassen kannst, ein typischer Anpassungsbereich liegt bei ±100ppm bis ±500ppm.

Die einfachste Variante ist, einfach das Register zu verwenden, in das du eingibst, wie viele PPM die Frequenz nach oben oder unten angepasst werden soll, dies einmal für deinen Prototyp zu tun und zu hoffen, dass deine Produktionscharge nicht signifikant abweicht. In diesem Fall hast du keine andere Wahl, als deinen Frequenzzähler zu nehmen und die Frequenz zu messen. Beachte, dass die digitale Anpassung die Frequenz des Kristalls überhaupt nicht ändert, aber typischerweise der Referenzausgang digital angepasst wird. Beachte jedoch, dass die Anpassung möglicherweise nur alle paar Minuten erfolgt (lies dein RTC-Datenblatt oder das Referenzhandbuch für weitere Informationen). Die einzige Möglichkeit, zuverlässig zu überprüfen, ob die Änderung wirksam ist, besteht darin, das Board für ein paar Tage laufen zu lassen und zu beobachten, wie viel es im Vergleich zu einer Referenzuhr abgewichen ist.

Eine fortgeschrittenere, aber viel schwerer zu implementierende Variante ist die Verwendung einer anderen (genaueren) Referenzuhrquelle wie einem genauen Oszillator oder sogar OCXO, oder einer von USB abgeleiteten Uhr (was einige STM32-Mikrocontroller können) oder dem Stromnetz (das über kurze Zeiträume nicht sehr genau ist, aber über lange Zeiträume sehr genau), die Implementierung eines Frequenzzählers in deinem MCU und die automatische Anpassung der digitalen Abstimmungsparameter. Die Implementierung hiervon hängt stark davon ab, welchen MCU du verwendest, und würde den Rahmen dieses Beitrags sprengen.


Check out similar posts by category: Electronics