IL DDS

COSA E' e COME FUNZIONA

Tutti i moderni apparecchi radio utilizzano uno o più DDS per produrre le oscillazioni elettriche di cui hanno bisogno per il loro funzionamento.

DDS significa Digital Direct Synthesis , cioè il segnale sinusoidale prodotto da questo dispositivo è sintetizzato direttamente in modo digitale.

Per comprenderne il funzionamento bisogna considerare come viene riprodotto un suono in maniera digitale  come nei Compact Disk o nella riproduzione da computer.

In registrazione un suono (ad esempio una sinusoide) viene campionato un certo numero di  volte al secondo (nei CD è campionato 44100 volte ogni secondo),  i campioni vengono tradotti in numeri mediante un convertitore analogico-digitale (ADC)   e questi numeri memorizzati.

In riproduzione si leggono  i numeri memorizzati e poi mediante  un convertitore digitale-analogico (DAC ) si ricostruiscono i campioni iniziali. Il segnale elettrico così ottenuto è un pò a gradini, ma mediante un filtro Passa Basso si può ottenere di nuovo il  segnale  sinusoidale.

 

Campionando  20.000 volte al secondo  per un suono da 1000Hz si hanno 20 campioni per oscillazione, per 5.000 Hz solo quattro, ma i teorici ci assicurano che si può ricostruire molto bene, purché il filtro passa basso sia buono. La teoria prevede che si possano riprodurre frequenze fino a 10 000Hz purché si faccia seguire al DAC  un filtro passa basso ideale che faccia passare solo le frequenze sotto i 10 000 Hz. (Vedere teorema del Campionamento). Il motivo di tale limite è evidente. Basta pensare che a 10000Hz  il numero dei campioni si ridurrebbe a solo due per ogni oscillazione e non sarebbe più possibile quindi una ricostruzione esatta del segnale. Nella pratica bisogna fermarsi a frequenze alquanto più basse, per esempio  8000 Hz e progettare il filtro passa basso per tale valore.

Per memorizzare i singoli campioni si usano dei numeri interi in formato binario. Se si usano 8 bit si hanno a disposizione 2^8 cioè 256 livelli , 128 per i valori positivi e 128 per quelli negativi . Con 16 bit se ne hanno 65536. Più grande è il numero dei livelli, più fedele sarà la ricostruzione finale del segnale ma maggiore la mole dei dati  da memorizzare.

Alla stessa maniera funziona un DDs : legge i campioni  memorizzati in una ROM  e poi effettua una conversione  digitale-analogico, segue anche qui un filtro passa basso.

Ci sono però delle differenze  rispetto alla normale riproduzione di un suono. Mentre in un CD sono memorizzati milioni di campioni, nella ROM del DDS sono memorizzati solo i campioni di un ciclo e quando nella lettura si arriva alla fine si rincomincia dall'inizio poiché tutti i cicli sono tra loro uguali. In tal modo la riproduzione può procedere all'infinito.... suonando sempre la stessa musica!

Notiamo anche che se si varia la frequenza del clock di lettura varia la frequenza prodotta (come nei vecchi giradischi quando si variava la velocità). Ma questa strada non è utile per ottenere molte frequenze poichè si riproporrebbe il problema di produrre una frequenza di clock variabile. La frequenza di lettura sarà perciò fissa e la più stabile possibile.

La frequenza di uscita è ovviamente fissa ed è uguale alla frequenza del clock divisa per il numero dei campioni che si devono leggere,

si avrà:      F0=Fclock/M                dove M è il numero dei campioni da leggere. Risultato ovvio!

Per ottenere le diverse frequenze si deve seguire una via originale molto semplice da capire, forse un  meno semplice da realizzare.

La strada originale che  si percorre è semplicemente quella di leggere un campione ogni due, oppure uno ogni tre ecc.

In tal modo si ottengono le frequenze 2*F0,   3*F0,  ecc.  infatti   l'intera sinusoide viene percorsa in un tempo due o tre volte minore, i periodi saranno rispettivamente 1/2 o 1/3   e le frequenze corrispondenti saranno il doppio o il triplo. Ovviamente il numero di campioni corrispondenti ad una oscillazione saranno  sempre di meno man mano che la frequenza cresce, ma il teorema del campionamento ci assicura che con il filtro passa basso si otterrà in uscita ancora una sinusoide, purché si abbiano almeno  due campioni per oscillazione.

Supponiamo di aver suddiviso la sinusoide in 64 parti e di aver messo i corrispondenti 64  campioni in una tabella. (Non c'è neppure bisogno di effettuare un campionamento,poiché i valori possono essere facilmente calcolati). La tabella viene solitamente chiamata Wave Table.

Se leggiamo questi 64 campioni con la frequenza di clock di 640Khz (prendiamo tale valore per semplicità di calcolo!)  avremo in uscita una sinusoide con frequenza F= 640khz/64=10Khz.  

Leggendo un campione ogni due avremo la  frequenza doppia F=640Khz/64*2=20Khz    leggendone uno ogni tre F=640/64*3=30Khz . Avremo in tal modo tutti i multipli di 10Khz fino a 10Khz *32=320Khz (valore limite!) cioè fino alla metà della frequenza di Clock. In generale si avrà:

 Dove M è il numero di suddivisioni della sinusoide  e K è un numero intero che poi chiameremo Tuning Word poiché da esso dipende la frequenza prodotta.

F deve essere inferiore a metà di Fclock. (K deve essere minore di M/2)

Nell'esempio sopra la minima frequenza era 10 khz  e si potevano ottenere tutti i multipli di essa fino a metà della frequenza di clock. Si capisce subito che se volessimo ottenere frequenze che possano variare con il passo di un Hertz basterebbe prendere M=640 000.

Chiarita l'idea dobbiamo vedere come tutto ciò si possa realizzare.

Ciò di cui abbiamo bisogno sta all'interno di un integrato. Diamogli uno sguardo.

C'è una memoria da leggere, una ROM. Il costruttore ha già pensato a mettere in essa i valori necessari. Noi dobbiamo quindi pensare solo a leggerli.

Per  procedere nella lettura a passi di uno due tre, ecc. c'è un registro che può essere incrementato ad ogni colpo del clock proprio di quelle quantità che a noi interessano cioè 1, 2, 3, ecc. tale registro si chiama accumulatore di fase e il suo funzionamento può essere schematizzato come in figura:

Esso è un sommatore che somma i due numeri che compaiono ai suoi due ingressi. Su uno degli ingressi poniamo il nostro numero K e l'altro ingresso è collegato all'uscita. La somma viene trasferita all'uscita durante la salita del clock E' ovvio, perciò, che ad ogni colpo di clock l'uscita aumenta della quantità K. L'uscita del sommatore fornisce l'indirizzo per leggere nella memoria ROM dove sono contenuti i campioni della sinusoide. All'uscita della ROM avremo la successione dei diversi campioni.

Tutti i circuiti digitali lavorano con numeri in base 2 e i numeri sono costituiti da un certo numero di bit. Nell'esempio considerato sopra abbiamo diviso la sinusoide in 64 parti. Per classificare  i singoli campioni abbiamo bisogno di numeri che vanno da 0 a 63 cioè in notazione binaria da 0 a 111111 per cui servono 6  bit, allora il nostro accumulatore dovrà lavorare con 6 bit. Sia gli ingressi che le uscite saranno a 6 bit. Una tabella con 64 caselle richiede proprio 6 bit di indirizzo per poter accedere a ciascun valore. I 6 bit in uscita dall'accumulatore leggeranno uno alla volta i 64 campioni contenuti nella ROM.

Cosa succede quando sommando si oltrepassa il valore massimo 111111 (cioè 63)? Succede quello che accade in un contachilometri quando dopo  la cifra 99999 si passa a 00000. Nel nostro sommatore binario con 6 bit sommando 1 a 111111 si passa a 000000, ma è proprio quello che a noi serve per rincominciare daccapo nella lettura.

Qui sotto è schematizzato un ipotetico DDS che lavora con solo 6 bit. Si è stabilito che l'accumulatore abbia  solo 6 bit, quindi può sommare fino a 63 dopo ritornerà a zero. La ROM, indirizzata dai 6 bit dell'accumulatore, è costituita da 64 (cioè2^6) locazioni da 6 bit ciascuna (contenenti numeri da 0 fino a 63 ovvero da -32 a +31). Il numero K può essere variato a piacimento (esso dovrebbe essere inferiore a 32).

 Segue una simulazione in cui, premendo su Clock, si può vedere cosa succede nell'accumulatore e all'uscita della rom, all'arrivo degli impulsi di Clock

                                           ROM-- --->DAC---> passa basso

         K(TW)  --> Accumulatore

                 (accumulatore in decimale)           

 

Se si riportano su un foglio di carta a quadretti i numeri all'uscita della ROM si può vedere come vengano fuori le diverse frequenze al variare di K e come i campioni per ogni oscillazione diminuiscano sempre di più al crescere di K. Per K=1 si leggono tutti i valori contenuti nella ROM e quindi  una oscillazione contiene 64 campioni. Per K=32 ci sono solo due campioni (anzi in questo caso poiché il primo è 0 anche tutti gli altri sono 0).

Chi questo risultato vuol vederlo sullo schermo del computer può cliccare sull'immagine accanto. (è necessario, come per il quadro precedente, consentire l'utilizzo di contenuto attivo)

Dopo questo giochetto torniamo ai numeri. Con i valori riportati nell'esempio le frequenze prodotte non sarebbero molto utili. Infatti supponendo di adoperare un clock da 50 Mhz avremo, applicando la formula vista sopra, la frequenza minima Fmin=50/64=0.721250Mhz ed i multipli di essa.Se usassimo la frequenza di 64Mhz potremmo ottenere tutte le frequenze 1Mhz, 2Mhz,3Mhz ecc. Ma non è ancora questa l'utilità del DDS.

Esaminiamo un dispositivo commerciale, ad esempio AD9851 dell'Analog Device. In esso l'accumulatore è a 32bit quindi M = 2^32= 4294967296 e la frequenza di Clock può arrivare a 180Mhz.

Perciò la frequenza minima è (secondo la formula scritta sopra, con k=1)  Fmin=180Mhz/(2^32)=180 000 000Hz / 4294967296= 0,042Hz (circa 4 centesimi di Hz) e si potranno ottenere, variando K, tutti i multipli di tale valore fino a quasi la metà del Clock. Le frequenze prodotte dal DDS vanno,quindi, da meno di 1Hz a oltre  60Mhz, con variazioni di 4 centesimi di Hz . La stabilità di tale frequenze è quella del quarzo utilizzato, che può essere anche di notevole qualità visto che ne serve uno solo. Anche il rumore di fase è estremamente buono, praticamente quello del quarzo. Il DDS AD9951 è ancora migliore. Funzionando con Clock a 400Mhz (ma anche a 500) può produrre frequenze fino a 180 o 200Mhz.

Componente miracoloso dunque il DDS! Ma in mezzo a tante rose c'è anche una spina: le spurie! Cioè oltre alla frequenza desiderata esso produce anche altre frequenze, di potenza molto più bassa ma che possono dare fastidio in un ricevitore. Nell'AD9851 il livello di tali spurie era dichiarato dalla casa a circa -55dB rispetto alla frequenza desiderata (troppo poco!) ma nell'AD9951 tale livello scende a -70dB e tale valore è giudicato sufficientemente buono, cosicché si  possono ora realizzare ottimi ricevitori, anche a sintonia continua e su tutte le gamme, con estrema semplicità. Chi ha usato tale componente ha costatato che le spurie, anche se si possono notare, non danno praticamente alcun fastidio.

Nel nostro esempio l'accumulatore era a 6 bit , da 6 bit  l'indirizzo per la ROM e anche a 6 bit  i campioni memorizzati nella ROM. Nei DDS nominati sopra l'accumulatore è a 32 bit, si potrebbe pensare che a 32 bit sia tutto il resto. Purtroppo ciò non è possibile, poiché la quantità di memoria  diventerebbe estremamente elevata e il funzionamento con un Clock molto elevato diventerebbe impossibile. Perciò si riduce in numero di bit utilizzati dopo l'accumulatore. Consultando i data sheet  dei dispositivi si osservano i seguenti valori:

DDS

bit Accumul.

bit indirizzo ROM *

bit dati ROM *

esempio

6

6

6

AD9851

32

15

10

AD9854

48

17

12

AD9951

32

19

14

*NOTA Non si ha più in questi dispositivi una semplice ROM ma un blocco funzionale che genera i valori della sinusoide utilizzando tabelle di piccole dimensioni ed algoritmi, tuttavia dal punto di vista concettuale è la stessa cosa. Sull'argomento si può ricercare in internet:  DDS troncamento

E' evidente che più elevato è il numero dei bit utilizzati tanto più precisa è la sinusoide riprodotta, tale e quale come nella riproduzione della musica. Riducendo il numero dei bit si introducono degli errori sempre più rilevanti.

Il numero elevato di bit nell'accumulatore permette di avere risoluzioni di frequenza elevate, ma poi nell'indirizzo della ROM si trascurano i bit meno significativi e questo comporta una approssimazione chiamata troncamento di fase.

Se i singoli campioni sono memorizzati nella ROM con  pochi bit  si ha una approssimazione   che si chiama troncamento di ampiezza.

Ambedue i due troncamenti contribuiscono a determinare l'entità delle spurie. Nell'AD9951 si ha un livello di spurie più basso poiché il troncamento è minore. I radioamatori hanno iniziato a sperimentare con il 9851 a 10 bit, accusando molto le limitazioni delle spurie. Appena uscito il 9951 a 14 bit lo hanno subito adoperato (fra i primi I0CG) con grande soddisfazione. Chissà  se fra poco non potrà arrivare un dds a 18 o 20 bit (e che lavori a qualche Ghz)!

Il troncamento non aumenta il il rumore di fase. Infatti gli errori introdotti dal troncamento sono di entità ben determinata e si ripetono periodicamente. Essendo il segnale periodico, si può sempre considerare come la somma di frequenze multiple di una frequenza fondamentale. Il rumore di fase invece è essenzialmente qualcosa di casuale e dipende dal rumore dell'oscillatore di riferimento. Nelle applicazioni in cui il rumore di fase non è un problema si può usare il PLL interno, agganciato a un quarzo di frequenza piuttosto bassa, ma in tal caso il rumore di fase dipende dal VCO interno che non è a basso rumore.

Per far produrre al DDS una determinata frequenza F, bisogna dargli il corrispondente valore della costante K da sommare nell'accumulatore. K si può ricavare facilmente dalla formula vista in precedenza:   F=Fc/M*K  -->   K=M/Fc*F

Abbiamo sostituito K con TW (Tuning Word poichè da tale numero dipende la frequenza prodotta) ed attribuito ad M il suo valore che per l'accumulatore a 32 bit è 2^32.

Per ottenere la frequenza desiderata  è sufficiente, quindi, calcolare la corrispondente TW  e spedirla al DDS secondo le modalità previste dal particolare integrato. Generalmente si usa la modalità seriale, facendo viaggiare i singoli bit su una sola linea. I bit da inviare saranno  32, come quelli dell'accumulatore, sebbene il bit più elevato sia sempre 0 dovendo essere K minore di M/2.

Si illustreranno, probabilmente, in un'altro articolo i particolari tecnici per la  comunicazione tra il computer (o un pic) e il DDS.

Qui facciamo un'ultima considerazione sulla precisione della frequenza prodotta. Poiché si possono avere frequenze con variazioni di circa 0.09 Hz (AD9951 @ 400Mhz) l'imprecisione su una frequenza di 144Mhz è 0.09/144E6=6.25E-10 ammesso che riusciamo a procurarci un Clock di tale precisione! Derivandolo dal sistema GPS si possono raggiungere precisioni dell'ordine di 1 su 10^11 e quindi l'obbiettivo è realizzabile. Bisogna fare particolare attenzione alla imprecisione dei calcoli per non vanificare il tutto.

Non c'è bisogno di un Clock di valore particolare come  400Mhz, se ne  potrà  usare uno qualsiasi, ad esempio  di 489.996458Mhz. Basterà introdurre tale valore nella formula della TW. L'importante è che sia stabile e con basso rumore di fase. Se non si è in grado di  misurare con grande precisione tale frequenza è sufficiente introdurre un valore approssimato, impostare in uscita  una frequenza particolare, ad esempio 10.000 000Mhz, e poi confrontare la frequenza ottenuta con una frequenza campione (anche una stazione trasmittente che si ritiene essere precisa) apportando le opportune correzioni.

Spero con queste note di aver aiutato qualcuno a capire un pò di più il funzionamento di questo componente ormai di uso obbligato in ogni ricevitore, sia per accrescimento del bagaglio culturale di ogni  buon radioamatore sia per la soddisfazione di quelli, fortunatamente sempre più numerosi, che si dedicano alla sperimentazione.

IZ0CWZ Biagio Matassa (Gruppo Sperimentatori Frosinone)

Home Page