Kristall-Lastkapazität mit Python & UliEngineering berechnen
Wenn du eine Kristall-Oszillatorschaltung implementierst, ist eine Aufgabe, die sowohl essentiell als auch oft übersehen wird, die Berechnung der Lastkondensatoren des Kristalls.
Tipp: In vielen Fällen ist es einfacher, einen integrierten Kristall-Oszillator zu verwenden, bei dem du dich nicht um Lastkondensatoren kümmern musst. Kristalle sind normalerweise für Niedrigleistungs-Anwendungen und Großserienfertigung empfehlenswert, wo Oszillatoren zu teuer sind.
In diesem Beispiel berechnen wir die Lastkondensatoren für einen Abracon ABLS-16.000MHZ-B4-T (spezifiziert mit einer Lastkapazität von 18 pF gemäß dem Datenblatt).
Es ist von größter Bedeutung zu verstehen, dass die 18-pF-Lastkapazitätsspezifikation nicht bedeutet, dass du 18 pF-Kondensatoren oder 2x 9 pF-Kondensatoren verwenden kannst. Du musst die korrekten Werte tatsächlich berechnen.
Du benötigst die folgenden Informationen:
- Lastkapazität des Kristalls, spezifiziert im Datenblatt des Kristalls.
- Eine Schätzung der Streukapazität, d.h. der Kapazität der PCB-Leiterbahnen vom Kristall zum Mikrocontroller. Wenn du dies nicht weißt, empfehle ich
2 pFzu verwenden. - Die Pin-Kapazität des Mikrocontrollers (oder eines anderen Geräts, mit dem du dein Gerät verbinden möchtest) wie im Datenblatt des Mikrocontrollers spezifiziert. Oft ist die Kapazität der Oszillator-Pins nicht dieselbe wie bei anderen Pins und daher separat spezifiziert.
3 pFist ein guter erster Schätzwert für die meisten modernen ICs. Der Wert muss pro Pin angegeben werden!
Installiere zunächst UliEngineering.
Nun können wir die korrekten Lastkondensatoren berechnen mit:
from UliEngineering.EngineerIO import auto_print
from UliEngineering.Electronics.Crystal import *
# Lastkondensatoren ausgeben: gibt "29.0 pF" aus
auto_print(load_capacitors, cload="18 pF", cpin="3 pF", cstray="2 pF")In diesem Fall benötigst du zwei Lastkondensatoren von jeweils 29.0 pF.
Du solltest den nächsten verfügbaren Wert für den Lastkondensator verwenden, aber überprüfe immer die resultierende Frequenz, wenn du hohe Taktgenauigkeitsanforderungen hast.
Tipp: Du kannst sowohl Zahlen (wie 18e-12) als auch Strings (wie 18 pF oder 0.018 nF) an die meisten UliEngineering-Funktionen übergeben. SI-Präfixe wie p und n werden automatisch dekodiert.
Wenn du den Wert programmatisch verwenden möchtest, rufe load_capacitors() direkt auf:
from UliEngineering.EngineerIO import auto_print
from UliEngineering.Electronics.Crystal import *
# Lastkondensatorwert berechnen (für beide der zwei Lastkondensatoren):
load_caps = load_capacitors(cload="18 pF", cpin="3 pF", cstray="2 pF")
# load_caps = 2.9e-11