diff --git a/contents/drawings/1082.svg b/contents/drawings/1082.svg new file mode 100644 index 0000000..346b162 --- /dev/null +++ b/contents/drawings/1082.svg @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contents/drawings/1082.tex b/contents/drawings/1082.tex new file mode 100644 index 0000000..20c1d64 --- /dev/null +++ b/contents/drawings/1082.tex @@ -0,0 +1,39 @@ +% Author: Prof. Dr. Matthias Jung, DL9MJ +% Year: 2026 +\begin{circuitikz} + \ctikzset{ + blocks/scale=\getDarcImageFactor + } + \draw(0,0) node [cgeneratorshape, anchor=east](clk){}; + \draw(clk.east) + to [short, name={h1}] ++(1,0) node[inputarrow](){} + node [twoportshape, t={$+\varphi$}, anchor=west, fill={DARCblue!30!white}](add){}; + \draw(add.east) + to [multiwire, name={h2}] ++(1,0) node[inputarrow](){} + node [sinetableshape, anchor=west](tab){}; + \draw(tab.east) + to [multiwire, name={h3}] ++(1,0) node[inputarrow](){} + node [registershape, anchor=west](reg){}; + \draw(reg.east) + to [multiwire, name={h4}] ++(1,0) node[inputarrow](){} + node [dacshape, anchor=west](dac){}; + \draw(dac.east) + to [short] ++(1,0) + node[inputarrow](){} + node[anchor=west](){$f_\mathrm{out}$}; + + % CLK Signal: + \draw(h1.center) + to [short, *-] ++(0,1.25) coordinate(h5) + to [short] ++(4.15,0) coordinate(h6) + |- (reg.clk) node[inputarrow]{}; + + \draw(clk.south) node[anchor=west, rotate=-90] () {Taktgenerator}; + \draw(add.south) node[anchor=west, rotate=-90] () {Adresszähler}; + \draw(tab.south) node[anchor=west, rotate=-90] () {Sinus-Tabelle}; + \draw(reg.south) node[anchor=west, rotate=-90] () {Register}; + \draw(dac.south) node[anchor=west, rotate=-90] () {D/A Umsetzer}; + + \draw(h2.center) ++(0,+0.5) node[anchor=south] () {N}; + \draw(h2.center) ++(0,-0.5) node[anchor=west, rotate=-90] () {Bits}; +\end{circuitikz} \ No newline at end of file diff --git a/contents/drawings/1082.txt b/contents/drawings/1082.txt new file mode 100644 index 0000000..30404ce --- /dev/null +++ b/contents/drawings/1082.txt @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/contents/drawings/1083.svg b/contents/drawings/1083.svg new file mode 100644 index 0000000..171231b --- /dev/null +++ b/contents/drawings/1083.svg @@ -0,0 +1,601 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contents/drawings/1083.tex b/contents/drawings/1083.tex new file mode 100644 index 0000000..c3f8de9 --- /dev/null +++ b/contents/drawings/1083.tex @@ -0,0 +1,54 @@ +% Author: Prof. Dr. Matthias Jung, DL9MJ +% Year: 2025 +\begin{tikzpicture} + \begin{axis}[% + /pgf/number format/1000 sep={ }, + /pgf/number format/use comma, + axis lines=middle, + axis line style={-Triangle}, + ytick={-2,-1,0,1,2}, + every major tick/.append style={thick, black}, + yticklabels={-2~V,-1~V,0,1~V,2~V}, + grid=major, + grid style={line width=.1pt, draw=gray!10}, + major grid style={line width=.2pt,draw=gray!50}, + xticklabel=\empty, + xtick style={draw=none}, + xmin=0, + xmax=64, + ymin=-2.4, + ymax=3.0, + xmajorgrids=false, + xlabel style={at={(ticklabel* cs:1)},anchor=north east}, + ylabel style={at={(ticklabel* cs:1)},anchor=north east}, + ylabel={$U_\mathrm{A}$}, + xlabel={$t$}, + width=\linewidth*\getDarcImageFactor, + height=4cm, + scale only axis, + ] + + % konstante Taktzeitpunkte + \addplot[ + only marks, + mark=*, + mark size=0.45pt, + gray, + samples at={0,1,...,64} + ] {-2.2}; + + % Phaseninkrement +1 + % N = 32 Tabelleneinträge, pro Takt wird die Phase um 1 erhöht + \addplot[ + const plot, + samples at={0,1,...,64}, + DARCblue, + thick + ] { + (round(sin(360*x/32) * 1.5/2 * 7.5 + 0.5) - 0.5) / 7.5 * 2 + }; + + \node[anchor=north west, DARCblue] at (axis cs:2,2.7) {$\varphi_{n+1} = \varphi_n + 1$}; + + \end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/contents/drawings/1083.txt b/contents/drawings/1083.txt new file mode 100644 index 0000000..30404ce --- /dev/null +++ b/contents/drawings/1083.txt @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/contents/drawings/1084.svg b/contents/drawings/1084.svg new file mode 100644 index 0000000..2369cda --- /dev/null +++ b/contents/drawings/1084.svg @@ -0,0 +1,601 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contents/drawings/1084.tex b/contents/drawings/1084.tex new file mode 100644 index 0000000..fcf6c22 --- /dev/null +++ b/contents/drawings/1084.tex @@ -0,0 +1,54 @@ +% Author: Prof. Dr. Matthias Jung, DL9MJ +% Year: 2025 +\begin{tikzpicture} + \begin{axis}[% + /pgf/number format/1000 sep={ }, + /pgf/number format/use comma, + axis lines=middle, + axis line style={-Triangle}, + ytick={-2,-1,0,1,2}, + every major tick/.append style={thick, black}, + yticklabels={-2~V,-1~V,0,1~V,2~V}, + grid=major, + grid style={line width=.1pt, draw=gray!10}, + major grid style={line width=.2pt,draw=gray!50}, + xticklabel=\empty, + xtick style={draw=none}, + xmin=0, + xmax=64, + ymin=-2.4, + ymax=3.0, + xmajorgrids=false, + xlabel style={at={(ticklabel* cs:1)},anchor=north east}, + ylabel style={at={(ticklabel* cs:1)},anchor=north east}, + ylabel={$U_\mathrm{A}$}, + xlabel={$t$}, + width=\linewidth*\getDarcImageFactor, + height=4cm, + scale only axis, + ] + + % konstante Taktzeitpunkte + \addplot[ + only marks, + mark=*, + mark size=0.45pt, + gray, + samples at={0,1,...,64} + ] {-2.2}; + + % Phaseninkrement +2 + % N = 32 Tabelleneinträge, pro Takt wird die Phase um 2 erhöht + \addplot[ + const plot, + samples at={0,1,...,64}, + DARCred, + thick + ] { + (round(sin(360*2*x/32) * 1.5/2 * 7.5 + 0.5) - 0.5) / 7.5 * 2 + }; + + \node[anchor=north west, DARCred] at (axis cs:2,2.7) {$\varphi_{n+1} = \varphi_n + 2$}; + + \end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/contents/drawings/1084.txt b/contents/drawings/1084.txt new file mode 100644 index 0000000..30404ce --- /dev/null +++ b/contents/drawings/1084.txt @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/contents/sections/oszillator_dds.md b/contents/sections/oszillator_dds.md index 97f0cdf..45329f4 100644 --- a/contents/sections/oszillator_dds.md +++ b/contents/sections/oszillator_dds.md @@ -1,16 +1,41 @@ -Die Direkte Digitale Synthese (Direct Digital Synthesis oder kurz DDS) dient der Erzeugung periodischer, bandbegrenzter Signale mit hoher Frequenzauflösung. -Neben der Synthese von Signalen mittels PLL-Regelschleifen ist diese Methode der Signalerzeugung heutzutage in der Nachrichten- und Messtechnik weit verbreitet und stellt den aktuellen Stand der Technik dar. Signale sind hierbei in der Frequenz sehr fein einstellbar im Gegensatz zu einer klassischen PLL. +Die *Direkte Digitale Synthese*, englisch *Direct Digital Synthesis* oder kurz DDS [index:Direkte Digitale Synthese] [index:DDS], dient zur Erzeugung periodischer Signale mit einer sehr fein einstellbaren Frequenz. Sie wird heute neben der Frequenzsynthese mit PLL-Schaltungen häufig in modernen Amateurfunkgeräten eingesetzt. Ein wesentlicher Vorteil einer DDS besteht darin, dass sich die Ausgangsfrequenz digital mit einer sehr hohen Auflösung einstellen lässt. Außerdem kann sehr schnell zwischen unterschiedlichen Frequenzen gewechselt werden, da keine Regelschleife auf eine neue Frequenz einrasten muss, wie es bei einer klassischen PLL der Fall ist. -Grundlegendes Funktionsprinzip einer DDS: + +[picture:1082:a_dds_aufbau:Blockschaltbild einer DDS (Direct Digital Synthesizer)] + -Mittels eines Taktgenerators mit fester Frequenz wird ein Adresszähler laufend hochgezählt. Bei Überlauf des Adresszählers startet dieser wieder von vorne. Hierdurch wird eine aufsteigende Folge von binären Werten an dessen Ausgang erzeugt. Mittels dieser Werte wird eine Sinustabelle laufend durchfahren. Hierdurch werden am Ausgang der Sinustabelle digitale Amplitudenwerte für eine Sinusschwingung generiert, die anschließend einem Register übergeben werden. Die digitalen Amplitudenwerte werden dann mittels Taktung des Registers einem nachgeschalteten D/A-Wandler zugeführt, der diese dann in ein analoges Signal (Sinus-Schwingung) umsetzt und ausgibt. +Der grundlegende Aufbau einer DDS ist in [ref:a_dds_aufbau] dargestellt. Ein Taktgenerator erzeugt ein Taktsignal mit einer festen Frequenz $f_\mathrm{Takt}$. Mit jedem Takt erhöht ein Phasenakkumulator [index:DDS:Phasenakkumulator], vereinfacht auch Adresszähler genannt, seinen aktuellen Phasenwert um das Phaseninkrement $K$: + +$\varphi_{n+1} = \varphi_n + K$ + +Das Phaseninkrement $K$ wird auch als *Tuning Word* bezeichnet. Es bestimmt, um wie viele Phasenschritte der Phasenakkumulator bei jedem Takt weitergeschaltet wird. Der aktuelle Wert des Phasenakkumulators dient als Adresse für eine Wertetabelle, die auch als *Lookup-Tabelle* bezeichnet wird. Für die Erzeugung einer Sinusschwingung enthält diese Tabelle die digitalen Amplitudenwerte einer vollständigen Sinusperiode. Zu jedem Phasenwert wird der zugehörige Amplitudenwert aus der Sinustabelle ausgelesen. Durch die Größe des Phaseninkrements $K$ wird bestimmt, wie schnell die Sinustabelle durchlaufen wird und damit die Frequenz des Ausgangssignals. Das Phaseninkrement kann z. B. von einem Mikrocontroller gesteuert werden. Ein Register übernimmt den digitalen Amplitudenwert synchron zum Taktsignal und übergibt ihn an einen D/A-Wandler. Dieser wandelt die Folge der digitalen Amplitudenwerte in ein analoges, zunächst stufenförmiges Signal um. Ein nachgeschalteter Tiefpass entfernt unerwünschte hochfrequente Signalanteile und glättet das Ausgangssignal. + +--- + +Durch das folgende Beispiel wird es anschaulich dargestellt: Bei einem Phaseninkrement von $K=1$ wird der Phasenwert mit jedem Takt um genau einen Schritt erhöht ($\varphi_{n+1} = \varphi_n + 1$). Die Sinustabelle wird dadurch schrittweise durchlaufen. Ist eine vollständige Periode erzeugt, wird der Adresszähler zurückgesetzt und der Phasenakkumulator beginnt erneut von vorne. Das entstehende Ausgangssignal ist in [ref:a_dds_phaseninkrement_k1] dargestellt. + + +[picture:1083:a_dds_phaseninkrement_k1:Vergleichssignal] + + +--- + +Wird das Phaseninkrement auf $K=2$ verdoppelt, erhöht sich der Phasenwert mit jedem Takt um zwei Schritte ($\varphi_{n+1} = \varphi_n + 2$). Dadurch wird nur jeder zweite Phasenwert aufgerufen und die Sinustabelle doppelt so schnell durchlaufen. Die Periodendauer des Ausgangssignals halbiert sich und seine Frequenz verdoppelt sich. Dies ist in [ref:a_dds_phaseninkrement_k2] dargestellt. + + +[picture:1084:a_dds_phaseninkrement_k2:Doppeltes Phaseninkrement und doppelte Ausgangsfrequenz] + + +[question:AD620] -Eine DDS kann auch unterschiedliche Wertetabellen durchfahren, so dass auch beliebige zyklische Signalformen generiert werden können. Durch Steuerung des Adresszählers (mittels eines Tuning-Words), welches die Schrittweite des Zählers laufend beeinflusst, kann die Frequenz, mit der die Wertetabelle durchfahren wird, in weiten Grenzen gesteuert werden. -Für das Adressregister verwendet man oft Register mit $\qty{32}{\bit}$ oder mehr, wovon dann nur eine kleinere Anzahl der höherwertigen Bits (z.B. obere $\qty{14}{\bit}$) für das Durchfahren der Wertetabelle verwendet werden. Hierdurch ist es möglich, auch Bruchteile der Taktfrequenz auszugeben, und die Frequenzauflösung der DDS wird hierdurch erhöht. -Der Vorteil einer DDS gegenüber einer PLL besteht darin, dass durch Steuerung der vorgenannten Parameter eine nahezu beliebige Frequenzauflösung erreicht werden kann. Zudem kann ohne Einschwingvorgang zwischen verschiedenen Frequenzen (durch Steuerung mittels des Tuning-Words) schnell hin und her gewechselt werden. +Besitzt der Phasenakkumulator eine Breite von $N$ Bit, kann er $2^N$ unterschiedliche Phasenwerte darstellen. Wird der größte Wert überschritten, läuft der Zähler über und beginnt wieder am Anfang: -Die Qualität des Ausgangssignals einer DDS hängt im wesentlichen von der Qualität des verwendeten Taktgenerators ab (Stabilität, Jitter). Zudem ist auch die Amplitudenauflösung (Quantisierung) des D/A-Wandlers und dessen Linearität für die Qualität des Ausgangssignals entscheidend. - +$\varphi_{n+1} = \left(\varphi_n + K\right) \bmod 2^N$ -[question:AD620] \ No newline at end of file +Dieser Überlauf entspricht dem Übergang von $\qty{360}{\degree}$ zurück zu $\qty{0}{\degree}$. Das Phaseninkrement $K$ kann nahezu beliebig gewählt werden und muss keine Zweierpotenz sein. Dadurch lassen sich auch Ausgangsfrequenzen erzeugen, die keine ganzzahligen Teiler der Taktfrequenz sind. + +Eine DDS ist außerdem nicht auf Sinusschwingungen beschränkt. Enthält die Wertetabelle beispielsweise die Amplitudenwerte einer Dreieck- oder Sägezahnschwingung, kann die DDS auch diese Signalformen erzeugen. + +Die Qualität des Ausgangssignals hängt vor allem von der Stabilität und dem Jitter [index:Jitter] des Taktgenerators sowie von der Auflösung und Linearität des D/A-Wandlers ab. Durch die begrenzte Anzahl an Phasen- und Amplitudenwerten entstehen Quantisierungsfehler und zusätzliche spektrale Anteile. Ein nachgeschalteter Tiefpass unterdrückt einen großen Teil dieser unerwünschten Signalanteile. + \ No newline at end of file