%!TEX root = essence_of_hwsw.tex

\section{Convertitori AD \(\longleftrightarrow{}\) DA}

\subsection{Quantizzazione dei dati}
Il processo di digitalizzazione dei segnali analogici introduce il concetto di
\emph{quantizzazione}. Infatti mentre un segnale analogico pu\`o assumere
infiniti valori in un campo continuo la sua rappresentazione digitale pu\`o
assumere soltanto un numero finito di valori \emph{discreti}. Gli infiniti
valori del segnale analogico devono pertanto essere quantizzati ovvero
raggruppati in un certo numero di fasce delimitate da livelli fissi detti
\emph{livelli di quantizzazione}; a ciascuna fascia di valori analogici
corrisponder\`a un valore digitale. La distanza fra due livelli di
quantizzazione continui costituisce il \emph{passo di quantizzazione}
\(Q\)\footnote{Indicato spesso anche come \(LSB\)}, a cui corrisponde il valore del
bit meno significativo. 
\[ Q = \frac{V_{ref}}{2^n} \qquad FS = Q\cdot 2^n = V_{ref} \]
Un dato digitale ad \(n\) bit pu\`o esprimere \(2^n\) valori; il valore
digitale \(2^n\) viene pertanto associato al valore di fondo scala \(FS\) o \(FSR\)
(Full scale range) della grandezza analogica.

% diagramma segnale analogico lineare -> digitalizzato
\begin{figure}[H]
\centering
% \begin{adjustbox}{width=.4\linewidth}
    \begin{tikzpicture}%
    \begin{axis}[
        width=.5\linewidth,
        xlabel = { Time \(t\)},
        ylabel = { Original ~ \(v_a(t)\)},
        xmajorgrids = false,
        ymajorgrids = true,
        grid style = dashed,
    ]
    \addplot[
        domain = 0:4,
        samples = 100,
        color = blue
    ]{2*x};
    \end{axis}%
    % \begin{axis}[
    %     width = .5\linewidth,
    %     hide x axis,
    %     axis y line*=right,
    %     ymin = 0.5, ymax = 8.5,
    %     yticklabels = { 000, 001, 010, 011, 100, 101, 110, 111},
    % ]
    % \pgfplotsset{every y tick label/.append style={font=\small\tt}};
    % \end{axis} 
    \end{tikzpicture}%
% \end{adjustbox}%
\hfill%
% \begin{adjustbox}{width=.4\linewidth}
    \centering
    \begin{tikzpicture} 
    \begin{axis}[
        % axis lines = left,
        width=.5\linewidth,
        xlabel = { Time \(t\)},
        ylabel = { Reconstructed ~ \(v'_a(t)\)},
        xmajorgrids = false,
        ymajorgrids = true,
        grid style = dashed,
    ]
    \addplot[
        domain = 0:4,
        samples = 100,
        color = blue
    ]{floor(2*x + .5)} node [color = black, left=1em, font=\small] {$FS$};
    % \addplot[
    %     domain = 0:4,
    %     samples = 100,
    %     style = dashed,
    %     color = gray
    % ]{2*x};
    \draw [<->] (160, 200) -- (160, 300) node [below=5pt, right=3pt] {$Q$};
    \draw [color=darkgray] (130, 200) -- (180, 200);
    \draw [<->] (90, 200) -- (90, 250) node [left=2pt] {$\varepsilon$};
    \draw [color=darkgray] (80, 250) -- (120, 250);
    \end{axis}%
    \end{tikzpicture}%
% \end{adjustbox}
\end{figure}

\paragraph{Risoluzione.} In un ADC i valori digitali in uscita non riproducono
dunque fedelmente il segnale di ingresso ma ne danno una rappresentazione
approssimata tanto pi\`u precisa quanto minore \`e il passo di quantizzazione
\(Q\). Il numero di bit \(n\) in uscita di un convertitore AD, cos\`i come il
numero dei bit di ingresso di un convertitore DA viene generalmente chiamato
\emph{risoluzione}\footnote{Ogni tanto indicato anche come il valore del passo
di quantizzazione, dunque \(R = 2^{-n}\)}. 
\[ R = \log_2{\frac{V_{ref}}{Q}} = n \]

\paragraph{Errore di quantizzazione.} Avendo quantizzato il segnale analogico,
ogni valore non campionato sar\`a sostituito dall'ultimo valore misurato
(effetto `scaletta'). Perci\`o nel punto il cui l'errore del segnale digitale
sar\`a massimo rispetto a quello analogico, l'errore sar\`a di esattamente:
\[ \varepsilon = \frac{1}{2}Q \qquad \varepsilon_\% = \frac{1}{2^{n+1}} \]

\subsection{Campionamento}
Un altro concetto implicito nella conversione AD \`e quello di
\emph{campionamento} del segnale in vari istanti successivi. Infatti la
conversione consiste nel prelevamento di n campione del segnale ad un dato
istante e nella determinazione del corrispondente valore digitale, che
rester\`a fisso finch\'e non verr\`a prelevato un altro campione per una nuova
conversione. La frequenza con cui il segnale viene prelevato \`e detta
\emph{frequenza di campionamento}; essa ha un'importanza fondamentale di
riferimento al contenuto informativo del segnale campionato e alle
possibilit\`a di ricostruire fedelmente il segnale analogico originario.

\paragraph{Il teorema del campionamento} noto anche come teorema di
\emph{Shannon}, stabilisce che la frequenza di campionamento deve essere
maggiore o uguale al doppio di quella componente di frequenza pi\`u elevata del
segnale in esame. In altre parole, intuibilmente la frequenza di campionamento
\(f_c\) per un segnale \(v_a(t)\) deve essere \emph{sempre} essere magiore del
\emph{doppio} della frequenza maggiore dell'armonica del segnale \(f_M\).

\[ f_c \geq 2f_M \]

Per ricostruire fedelmente il segnale \(v_a(t)\) occorrer\`a trattare il segnale
campionato \(v'_a(t)\) con un filtro passa-basso la cui risposta sia piatta fino
alla frequenza \(f_M\) ed attenuante alla frequenza di campionamento \(f_c\).

\begin{figure}[H]
\centering
\caption{Diagramma di bode per il filtro passa-basso}
\begin{tikzpicture}
\def\ymax{5}
\def\ymin{-30}
\def\fw {200}

\begin{axis}[
    width = \linewidth,
    height = 4cm,
    ylabel = {Attenuazione},
    xlabel = {Frequenza \(f\)},
    xticklabels = \empty,
    yticklabels = \empty,
    ymin = \ymin, ymax = \ymax,
    grid = major,
    xmode = log, 
    xmin = 1e0, xmax = 1e5,
]
% mathematical model
\addplot[thick, color=gray,samples=80,domain=.0001:1e6]
    {20*log10(1/(sqrt(1+(x/\fw)^2))};

% simplified model
\addplot[thick, color=black] coordinates {(.0001, 1) (\fw, 1)};
\addplot[thick, color=black] coordinates {(\fw, 1) (\fw*100, -40)};

% frequencies
\addplot[color=black, dashed] coordinates {(\fw, \ymax) (\fw, \ymin)}
    node [color=black, above=12pt, left=1pt, font=\small] {$f_M$};

\addplot[color=black, dashed] coordinates {(\fw*2, \ymin) (\fw*2, \ymax)}
    node [color=black, below=12pt, right=1pt, font=\footnotesize] 
    {$2f_M$};

\addplot[color=black, dashed] coordinates {(\fw*12, \ymin) (\fw*12, \ymax)}
    node [color=black, below=12pt, right=1pt, font=\footnotesize] 
    {$f_c > 2f_M$};
\end{axis}
\end{tikzpicture}
\end{figure}

Bench\`e la frequenza di campionamento minima sia \(f_c = 2f_M\), in pratica si
preferisce campionare ad una frequenza maggiore per migliorare le prestazioni
del filtro, siccome i filtri reali attenuano maggiormente le frequenze pi\`u
distanti dalla frequenza di taglio.


\subsection{Sampling and Hold (Circuiti SH)}
Dal momento che i convertitori A/D impiegano un tempo \(t_{conv}\) finito
(generalmente da 20 ms a 1 ns) per digitalizzare un segnale analogico in
ingresso eventuali variazioni del segnale durante il processo di conversione
possono determinare errori significativi. Se la variazione del segnale
analogico \(v_a\) durante il tempo di conversione \(t_{conv}\) \`e superiore al
valore di \(Q\), il dato digitale di uscita non mantiene la risoluzione
specificata. Occorre quindi che sia rispettata la relazione

\[
    \max\Big (\dfrac{{\rm d}v}{{\rm d}t}\Big ) \approx 
        \max\Big (\frac{\Delta v_a}{\Delta t}\Big )
    \quad \leq  \quad \frac{Q}{t_{conv}}
\]

In alternativa questo problema pu\`o essere risolto utilizzando circuiti di
\emph{campionamento e mantenimento} (S/H) in grado di compiere un campionamento
`veloce' del segnale analogico e di mantenere stabile stabile durante tutto il
processo di conversione il valore acquisito.

% TODO schema circuito HS
\begin{figure}[H]
    \centering
    \placeholderfig{fig:circ:hs}
    \caption{Circuito di sampling e hold\label{fig:circ:hs}}
\end{figure}

Durante il campionamento il segnale di controllo \(V_c\) chiude l'interruttore
analogico consentendo al condensatore \(C\) di caricarsi al valore di \(v_a\); il
tempo di carica del condensatore \`e assai ridotta siccome le uniche resistenze
in gioco sono la resistenza in uscita dell'opamp \(U_1\) e la \(r_{on}\)
dell'interruttore. Idealmente da quando \(V_c\) apre l'interruttore il
condensatore rimane carico per un tempo infinito, permettendo al circuito di
misura di convertire il campione. In realt\`a sono presenti delle lievi perdite
dalle correnti di polarizzazione, dall'interruttore e dal condensatore stesso.
Per questo motivo occorre utilizzare componenti con prestazioni adeguate, ad
esempio operazionale con ingressi FET e condensatori al teflon.

\subsection{Multiplazione (Multiplexing)}
Nei casi in cui pi\`u segnali debbbano essere acquisiti da un unico sistema di
elaborazione o di trasmissione, si deve ricorre a tecniche di
\emph{multiplazione}. La multiplazione di un ingresso del convertitore A/D
\`e ottenibile semplicemente aggiungendo all'ingresso un \emph{multiplexer}, un circuito con pi\`u entrate ed una sola uscita, con delle linee di
controllo che permettono di selezionare quale linea viene collegata all'uscita.

\subsection{Convertitori digitale \(\rightarrow\) analogico ({\tt DA})}
\subsubsection{Convertitore a resistori pesati}
Nella figura~\ref{fig:dac:wr} \`e illustrato il circuito DAC con il principio
di funzionamento pi\`u semplice. L'ingresso \`e costituito da un segnale
binario di \(n\) bit; ciascun bit controlla uno dei commutatori \(S_0, S_1,  \dots
S_{n-1}\) in modo tale che ciascun resistore viene collegato alla tensione di
riferimento \(V_{ref}\) o a massa a seconda del valore 1 o 0 del bit.

\begin{figure}[H]
    \centering
    \placeholderfig{fig:dac:wr}
    \caption{Convertitore a resistori pesati\label{fig:dac:wr}}
\end{figure}

La corrente \(I_f\) che si ottiene collegando e scollegando gli interruttori \`e
definita dalla somma delle correnti di ogni ramo.
\[
    I_f = \frac{2^0 V_{ref}}{R}S_0 + \frac{2^1 V_{ref}}{R}S_1 
    + \frac{2^2 V_{ref}}{R}S_2 + \cdots + \frac{2^{n-1} V_{ref}}{R}S_{n-1}
\]
La tensione in uscita \`e generata dall'amplificatore \`e descrivibile quindi
come:
\[
    V_o = -V_{ref} \cdot\frac{R_f}{R}(2^{n-1}S_{n-1} + \dots 
    + 2^2 S_2 + 2^1S_1 + 2^0S_0 )
\]
In notazione ridotta:
\[ 
    V_o = -V_{ref}\cdot\frac{R_f}{R}\cdot 
        \sum_{i} 2^i\cdot S_i
\]

Il principale inconveniente di questo convertitore \`e costituto dal fatto che
esso richiede resistori di valore estremamente disomogeneo.

\subsubsection{Convertitore a scala R-2R}

Un miglioramento rispetto al convertitore a resistori pesati \`e illustrato
nella figura~\ref{fig:dac:r2r}; il convertitore a scala R-2R utilizza solo
resistori di due valori R e 2R. Si osservi che la resistenza vista da ciascuno
degli ingressi \(S\) vale sempre 3R, indipendentemente dalla configurazione dei
bit di ingresso.
\begin{figure}[H]
    \centering
    \placeholderfig{fig:dac:r2r}
    \caption{Convertitore a scala R-2R\label{fig:dac:r2r}}
\end{figure}
La tensione in uscita per un convertitore a scala R-2R \`e descritta in forma
generale dalla seguente relazione.
\[
    V_o = -\frac{V_{ref}}{2^n}\cdot\frac{R_f}{3R}\cdot
    (2^{n-1} S_{n-1} + \cdots + 2^2S_2 + 2^1S_1 + 2^0S_0)
\]
In notazione ridotta:
\[ 
    V_o = -\frac{V_{ref}}{2^n}\cdot\frac{R_f}{3R}\cdot
        \sum_{i} 2^i\cdot S_i
\]

Questo convertitore come per il convertitore a resistori pesati presenta due
inconveniente che limitano le prestazioni alle alte velocit\`a. I commutati di
questi ultimi quando sono a riposo sono collegati a massa, ma cos\`i facendo le
capacit\`a parassite dei conduttori vengono costantemente caricate e scaricate
dal cambiamento di stato del commutatore, rallentando il tempo di risposta.

\subsubsection{Convertitore a scala R-2R invertita}

Per ovviare al problema del convertitore a scala R-2R la scala invertita ha una
corrente costante che scorre nei resistori e che viene deviata verso
l'operazionale quando il commutatore \`e attivo.
\begin{figure}[H]
    \centering
    \placeholderfig{fig:dac:r2rinv}
    \caption{Convertitore a scala R-2R invertita\label{fig:dac:r2rinv}}
\end{figure}
La tensione in uscita per un convertitore a scala R-2R invertita \`e descritta
in forma generale dalla seguente relazione.
\[
    V_o = -\frac{V_{ref}}{2^n}\cdot\frac{R_f}{R}\cdot
    (2^{n-1} S_{n-1} + \cdots + 2^2S_2 + 2^1S_1 + 2^0S_0)
\]

\subsubsection{Caratteristiche e parametri dei convertitori DA}

I convertitori D/A in commercio accettano in ingresso dati digitali in formato
parallelo o anche seriale espressi in codici diversi, binario, binario con
offset, in complemento a due, BCD, con un numero di biti compreso generalmente
tra 8 e 16. I livelli elettrici dei dati di ingresso variano conla tecnologia
con cui sono realizzato i convertitori e possono essere TTL, CMOD, ECL\@.

% I valori della tensione di alimentazione e della tensione di riferimento
% (interna o esterna) dipendono dalla tecnologia con cui sono realizzati i
% circuiti e dalle polarit\`a del segnale analogico di uscita desiderato e
% consentito; occorre sempre prestare molta attenzione alle configurazioni
% circuitali suggerite dai fogli tecnici e ai valori massimi consentiti.

Per quanto riguarda la grandezza analogica di uscita, nella maggior parte dei
casi i convertitori forniscono una corrente, che pu\`o essere convertita in
tensione mediante un operazionale esterno. In altri casi gli integrati
contengono internamente un amplificatore operazionale e forniscono un'uscita in
tensione.

% Occorre poi citare, per l'ampia diffusione e le interessanti applicazioni che
% consento, i convertitori classificati come \emph{multiplying converter}. Essi
% sono progettati per funzionare con una tensione di riferimento esterna
% variabile, anche di frequenza considerevole, e forniscono in uscita un
% segnale proporzionale al prodotto del dato digitale di ingresso per il valore
% istantaneo della tensione di riferimento.

Un ultimo cenno meritano gli ingressi di controllo disponibili in numerevoli
convertitori: ingresso dati seriale, ingresso di selezione (\emph{chip
select}), controllo della memorizzazione dei dati digitali (\emph{strobe}),
ecc. Essi si rivelano molto utili in applicazioni in cui la sincronizzazione
e il controllo della conversione sono effettuati da un microprocessore.
\\

\noindent I principali parametri che definiscono le prestazioni dei
convertitori D/A sono:

\paragraph{Risoluzione.} Specifica il numero dei bit del dato digitale di
ingresso e conseguentemente il numero dei valori distinti del segnale analogico
in uscita.

\paragraph{Precisione.} Fornisce la misura della differenza fra il valore del
segnale analogico di uscita reale e quello ideale, per un dato codice di
ingresso; tiene conto di varie cause di errore, in particolare della non
linearit\`a del dispositivo e degli errori di guadagno e di offset della
circuiteria interna.

\paragraph{Linearit\`a.} In un convertitore D/A ideale, incrementi uguali del
dato digitale di ingresso devono produrre ingrementi uguali del segnale di
uscita; pertanto la curva di trasferimento ingresso-uscita \`e una retta.
\emph{L'errore di linearit\`a} esprime la massima deviazione della curva di
trasferimento reale da quella ideale. Generalmente l'errore di linearit\`a \`e
espresso in frazioni del passo di quantizzazione \(Q\) (es \(\dfrac{1}{4}Q\)). Si
noti che un errore di linearit\`a pari a \(\pm\dfrac{1}{2}Q\) \`e il massimo
consentito affinch\`e all'aumento del dato digitale di ingresso corrisponda un
aumento del segnale di uscita.

\paragraph{Tempo di assestamento} (\emph{Settling time}). \`E definito come il
tempo necessario affinch\`e il segnale analogico di uscita dopo una data
commutazione degli ingressi, si assesti e si mantenga in un determinato intorno
(generalmente)

\subsection{Convertitori analogico \(\rightarrow \) digitale ({\tt AD})}
\subsubsection{Convertitore a comparatori in parallelo}
\subsubsection{Convertitore ad approssimazioni successive}
\subsubsection{Convertitore a rampa digitale}
\subsubsection{Convertitore a doppia rampa}
\subsubsection{Convertitore \(\Sigma\Delta \) (Sigma-Delta)}
\subsubsection{Caratteristiche e parametri dei convertitori AD}