You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.8 KiB
104 lines
2.8 KiB
\section{DAC Unit}
|
|
|
|
The digital/analog unit works with the two-channel \gls{DAC} hardware peripheral. It can be used in two modes: \gls{DC} output, and waveform generation.
|
|
|
|
The waveform mode implements direct digital synthesis (explained in \cref{sec:theory_dac_dds}) of a sine, rectangle, sawtooth or triangle wave. The generated frequency can be set with a sub-hertz precision up to the lower tens of kHz. The two outputs can use a different waveform shape, can be synchronized, and their phase offset and frequency are dynamically adjustable.
|
|
|
|
\subsection{DAC Configuration}
|
|
|
|
\begin{inicode}
|
|
[DAC:dac@13]
|
|
# Enabled channels (1:A4, 2:A5)
|
|
ch1_enable=Y
|
|
ch2_enable=Y
|
|
# Enable output buffer
|
|
ch1_buff=Y
|
|
ch2_buff=Y
|
|
# Superimposed noise type (NONE,WHITE,TRIANGLE) and nbr. of bits (1-12)
|
|
ch1_noise=NONE
|
|
ch1_noise-level=3
|
|
ch2_noise=NONE
|
|
ch2_noise-level=3
|
|
\end{inicode}
|
|
|
|
\subsection{DAC Commands}
|
|
|
|
Channels are specified in all commands as a bit map:
|
|
|
|
\begin{itemize}[nosep]
|
|
\item 0x01 -- channel 1
|
|
\item 0x02 -- channel 2
|
|
\item 0x03 -- both channels affected at once
|
|
\end{itemize}
|
|
|
|
\begin{cmdlist}
|
|
0 & \cname{WAVE\_DC}
|
|
Set a \gls{DC} level, disable \gls{DDS} for the channel
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\cfield{u16} level (0--4095)
|
|
\end{cmdreq} \\
|
|
|
|
1 & \cname{WAVE\_SINE}
|
|
Start a sine waveform
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\end{cmdreq} \\
|
|
|
|
2 & \cname{WAVE\_TRIANGLE}
|
|
Start a symmetrical triangle waveform
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\end{cmdreq} \\
|
|
|
|
3 & \cname{WAVE\_SAWTOOTH\_UP}
|
|
Start a rising sawtooth waveform
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\end{cmdreq} \\
|
|
|
|
4 & \cname{WAVE\_SAWTOOTH\_DOWN}
|
|
Start a dalling sawtooth waveform
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\end{cmdreq} \\
|
|
|
|
5 & \cname{WAVE\_RECTANGLE}
|
|
Start a rectangle waveform
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\cfield{u16} on-time (0--8191)
|
|
\cfield{u16} high level (0--4095)
|
|
\cfield{u16} low level (0--4095)
|
|
\end{cmdreq} \\
|
|
|
|
10 & \cname{SYNC}
|
|
Synchronize the two channels. The phase accumulator is reset to zero.
|
|
& \\
|
|
|
|
20 & \cname{SET\_FREQUENCY}
|
|
Set the channel frequency
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\cfield{float} frequency
|
|
\end{cmdreq} \\
|
|
|
|
21 & \cname{SET\_PHASE}
|
|
Set a channel's phase. It is recommended to only set the phase of one channel, leaving the other at 0°.
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\cfield{u16} phase (0--8191)
|
|
\end{cmdreq} \\
|
|
|
|
22 & \cname{SET\_DITHER}
|
|
Control the dithering function of the \gls{DAC} block. A high noise amplitude can cause an overflow to the other end of the output range due to a bug in the \gls{DAC} peripheral. Use value 255 to leave the parameter unchanged.
|
|
|
|
& \begin{cmdreq}
|
|
\cfield{u8} channels
|
|
\cfield{u8} noise type (0--none, 1--white, 2--triangle)
|
|
\cfield{u8} number of noise bits (1--12)
|
|
\end{cmdreq} \\
|
|
\end{cmdlist}
|
|
|
|
|
|
|
|
|