Von der Schwierigkeit, ein ultragenaues Stimmgerät zu bauen
Ich habe mir in den Kopf gesetzt, ein Stimmgerät zu bauen. Nicht irgendein Stimmgerät, sondern ein ultragenaues Stimmgerät.
Braucht man sowas und was heißt eigentlich „ultragenau“?
Der geneigte Leser mag ein Blick auf diese Seite werfen. Dort ist eine Tastatur abgebildet und die dazugehörigen Frequenzen ->
https://de.wikipedia.org/wiki/Frequenzen_der_gleichstufigen_Stimmung
Schnell fällt auf, dass hier Frequenzen mit bis zu drei Stellen hinter dem Komma angegeben sind. Auch hier ist Mathematik im Spiel, denn ein Ton errechnet bzw. unterscheidet sich vom nächsten
Nachbarton um die 12te Wurzel aus 2. Wahrscheinlich braucht man das nicht und wenigstens nicht in dieser Genauigkeit. Aber wie ich bereits schrob: Ich habe es mir in den Kopf gesetzt. Also habe
ich mich an ältere Projekte erinnert, bei denen ich DDS-Generatoren verwendet habe (AD9833 und AD9850), um Clockgeneratoren zu bauen. Prinzipiell sind diese DDS auch für einen Tuner geeignet.
Aber leider eben nur prinzipiell.
Wo Problem?
Damit ein DDS eine bestimmte Frequenz erzeugen kann, wird es (von einem µC wie Arduino etc.) mit einem „Tuningword“ betankt. Der Chip selbst ist von Analog Devices, die hier eine Seite zur
Berechnung der Frequenz zur Verfügung stellen ->
https://tools.analog.com/en/simdds/...1&part=AD9833&rso=111111&tof=440&useFilters=0
Schnell fällt auf, dass 440 Hertz nicht 440 Hertz ergeben, sondern 439.956784248Hz und das ist deswegen so, weil das Tuningword nur ganzzahlig sein kann. Somit liegt die erzeugte Frequenz
etwas zu niedrig. Erhöhe ich hingegen das Tuningword (0x0001274) um nur einen Zähler, liege ich darüber bei 440.049916505 Hz. Die höchste Taste hat somit nicht 4186,01 Hz, sondern entweder
4185.92244386 Hz oder 4186.01557612 Hz. Die tiefste Taste mit 27.5 Hz ergibt entweder 27.4740159511 Hz oder 27.5671482086 Hz. Diese Abweichungen sind mir zu hoch und werden umso
größer, je kleiner die gewünschte Frequenz ist.
Was also tun?
Ich bediene mich eines Tricks, der mir schon früher geholfen hat: Ich multipliziere die gewünschte Frequenz einfach mit 2048. Konkret heißt das:
27.5 x 2028 = 56320 Hz. In die Formel eingesetzt
ergibt sich ein Tuningword von 0x0093A3C und eine erzeugte Frequenz von 56.3200563192 kHz. Diese teile ich wieder durch 2048 (mit einem 74HCT4040) und erhalte
27,50002749960938 Hz – und
damit kann ich gut leben!
Noch kurz für die höchste Taste auf der Klaviatur gerechnet:
4186,01 Hz x 2048 ergibt 8.57294848 MHz mit dem Tuningword 0x57C9785 und einer real erzeugten Frequenz von 8.57294844463 MHz.
Teile ich diese Wert wieder durch 2048, ergibt sich
4186,009982729492 Hz. Bingo!
Was hält dich also noch auf, einfach einen Tuner zu bauen?
Es gibt eine Schwachstelle, die ich in der Vergangenheit immer vernächlässigt habe: Die Genauigkeit der Taktquelle – genauer gesagt der Quarzzeitbasis. Man sollte annehmen, dass ein Quarz (XTAL)
oder Quarzgenerator (TXO), der mit 25 MHz bedruckt ist, auch eine Frequenz von 25 MHz abgibt. Leider ist dem nur in der Theorie so. Schaut man sich die Datenblätter an, so findet man Toleranzwerte
von +/- 20 – 50 ppm (Parts per Million).
Was da bedeutet, seht ihr hier ->
https://www.sitime.com/ppm-hz-calculator
Im schlimmsten Fall bedeuten 50 ppm bei 25 Mhz eine Varianz von +/- 1250 Hz! Das ist als Zeitbasis eines DDS unakzeptabel und nicht nur für so einen Verrückten wie mich. (Hand aufs Herz: Ein
AD9833 kommt aus China und ist für unter 10 Euro zu haben – was soll man erwarten?)
Und nun?
Ich bin tiefer in das Thema eingetaucht und habe OXCOs (Oven Controlled Crystal Oscillators) entdeckt. Hier befindet sich ein Quarz zusammen mit einem Heizelement in einem Gehäuse und wird über eine
Regelung auf konstanter Temperatur (> 50° C) gehalten. Auch hier gibt es natürlich Varianten für unter 20 Euro als preiswerte Modelle aus China ->
https://m.media-amazon.com/images/I/71JQypxzL8L.jpg
Oder gleich Mouser fragen ->
https://www.sitime.com/datasheet/Si...7-UmqUwNsaGbOa1xLcR-cZEEgz7nWiN4jEJbyZrKrvb-P
Bei Letzterem sprechen wir über eine Genauigkeit von kleiner 1 ppb (Parts per
Billion!), die allerdings dann auch mit ~120 Euro zu Buche schlägt.
Geht’s noch genauer?
Ja. Rubidium Frequenznormal. Die Atomuhr für Kassenpatienten. Kostet schlappe 1000 Euro und hat eine Abweichung von 10E-12 Hertz.
Es gibt aber noch einen anderen Weg: GPS (Global Positioning System). Entworfen zur Navigation auf unserem (noch) schönen Planeten kreisen geostationäre Satelliten über uns, die Atomuhren an Bord
haben. Ein GPS-Modul, welches auf einfachste Weise über einen seriellen Port ausgelesen und programmiert werden kann, kostet weniger als 10 Euro (UBLOX 6M/ 7M). Zusätzlich zur Funktionalität der
Navigation kann man sich nämlich die Atomuhren zu Nutze machen, um eine Frequenz zu generieren. Dazu hält UBLOX eine kostenlose Software bereit, mit derer Hilfe man sich ultragenaue Frequenzen
bis zu 10 MHz ausgeben lassen kann.
Diese müssen nur mit 2,5 multipliziert werden, um die Zeitbasis von 25 MHz für einen AD9833 zu stellen. Auch dafür gibt es natürlich ein kleines Helferlein, dass auf den Namen NB3N502 hört und recht
preiswert ist. Bleibt als Nachteil noch zu vermerken, dass für den Empfang eines GPS-Signals eine Außenantenne notwendig ist. Für ein Bastelbude oder Studio im Keller also eher ungeeignet.
Sind wir jetzt endlich fertig?
Als hättet ihr es geahnt: Leider nein. Das UBLOX-Modul läuft intern intern mit einer 48 MHz Clock. Um also eine Frequenz von 10 MHz zu erzeugen, ist eine ungeradzahlige Teilung notwendig, die zu
sogenanntem Jitter führt. Zitternde Flanken, die von nachgeschalteter Logik nicht sauber verarbeitet werden können und Oberwellen produzieren, die aufwendig wieder herausgefiltert werden müssen.
Philip Giacalone hat das hier anschaulich dokumentiert ->
Der Königsweg heißt:
GPSDO. Ein GPS-Synchronisierter Generator. Hier wird das Signal eines OXCO über eine PLL mit einem GPS generierten Signal abgeglichen. Es gibt DIY-Projekte im Netz oder
Kaufprodukte von 80 – 500 Euro ->
https://www.ebay.de/itm/146069417597
Schaut man sich allerdings das Datenblatt des AD9833, findet sich eine Stelle, welche die Taktfrequenz beschreibt. Diese ist nicht fix bei 25 MHz, sondern kann variiert werden. Minimum ist 1 MHz.
Es wäre also durchaus möglich, mit dem UBLOX-Modul 8 MHz zu erzeugen, diese mit einem NB3N501 zu vervierfachen und den DDS mit 24 MHz zu betreiben. Somit wäre das Jitter-Thema Geschichte.
Wo stehst du gerade?
Guckst Du u.a. Bild und fragst Dich: Was ist ungenau? Der 10MHz-OCXO, der als Zeitbasis des Frequenzzählers fungiert oder der 25 Mhz-OCXO, der zukünftig den AD9833 takten soll?
Anhang anzeigen 241889
P.S.: Falls ich es noch nicht erwähnt haben sollte - es ist Unsinn und es ist Oversized. Aber ich will es einfach ...