4410-4412/RAM: add amplitude ramp example

This commit is contained in:
occheung 2021-12-22 17:16:21 +08:00
parent 4b3f0c5612
commit 9251da4ce0
1 changed files with 53 additions and 5 deletions

View File

@ -566,11 +566,59 @@ Urukul was operated with a 50$\Omega$ termination to produce the waveform.
\end{axis}
\end{tikzpicture}
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{ad9910_amp_mod.png}
\caption{Expected waveform from the RAM modulation example}
\end{figure}
\subsection{Simple Amplitude Ramp (AD9910 Only)}
An amplitude ramp of an RF signal can be generated by modifying the \texttt{self.amp} array in the previous example.
\begin{minted}{python}
def prepare(self):
# Reversed Order
self.amp = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0]
self.asf_ram = [0] * len(self.amp)
\end{minted}
The generated RF output has an incrementing amplitude scale factor (ASF), increasing by 0.1 at every microsecond.
Once the ASF reaches 1.0, it drops back to 0.0 at the next microsecond.
The expected waveform over 1 cycle is plotted on the following figure.
Note that phase of the RF pulses may drift gradually.
Urukul was operated with a 50$\Omega$ termination to produce the waveform.
\begin{tikzpicture}[
declare function={
func(\x)= and(\x>=0, \x<1) * (0) +
and(\x>=1, \x<2) * (0.05*cos(deg(10*pi*\x))) +
and(\x>=2, \x<3) * (0.1*cos(deg(10*pi*\x))) +
and(\x>=3, \x<4) * (0.15*cos(deg(10*pi*\x))) +
and(\x>=4, \x<5) * (0.2*cos(deg(10*pi*\x))) +
and(\x>=5, \x<6) * (0.25*cos(deg(10*pi*\x))) +
and(\x>=6, \x<7) * (0.3*cos(deg(10*pi*\x))) +
and(\x>=7, \x<8) * (0.35*cos(deg(10*pi*\x))) +
and(\x>=8, \x<9) * (0.4*cos(deg(10*pi*\x))) +
and(\x>=9, \x<10) * (0.45*cos(deg(10*pi*\x))) +
and(\x>=10, \x<11) * (0.5*cos(deg(10*pi*\x)));
}
]
\begin{axis}[
axis x line=middle, axis y line=middle,
every axis x label/.style={
at={(ticklabel* cs:1.05)},
anchor=west,
},
every axis y label/.style={
at={(ticklabel* cs:1.05)},
anchor=south,
},
minor tick num=4,
grid=both,
height=8cm,
width=16cm,
ymin=-0.7, ymax=0.7, ytick={-0.5,...,0,...,0.5}, ylabel=Voltage ($V$),
xmin=0, xmax=11.5, xtick={0,...,11}, xlabel=Time ($\mu s$),
]
\addplot[blue, samples=1500, domain=0:11]{func(x)};
\end{axis}
\end{tikzpicture}
\newpage
Multiple RAM channels can also be synchronized.
Similar to the 10 MHz single-tone RF signals, specify \texttt{phase} when calling \texttt{dds.set()} in \texttt{configure\char`_ram\char`_mode}.