Generatore di Segnali

Immagine

L’idea del generatore di segnali scaturisce dalla necessità di avere uno strumento di laboratorio a basso costo, con le caratteristiche di un’apparecchiatura semiprofessionale. Il modo più veloce e semplice di progettare un generatore di segnali con buone caratteristiche è quello di utilizzare un integrato ad hoc. Quindi dopo un’attenta analisi, ho optato per i sistemi a DDS (direct digital syntesis). In particolare ho utilizzato l’AD9833 dell’Analog Devices; sostanzialmente è un sintetizzatore digitale di onde sinusoidali, quadre, triangolari; come si può notare dal datasheet, ha un ampio range di funzionamento (0Hz-25Mhz), e una precisione impostabile che dipende da quest’ultimo. Il progetto completo prevede quindi il pilotaggio del DDS con il classico micro, io ho utilizzato un ATmega8515; inoltre l’impostazione della frequenza avviene tramite una tastiera, la frequenza, e i vari menu che ho previsto vengono visualizzati tramite un semplice display alfanumerico 16×2.

 

Introduzione:

Il DDS viene programmato/pilotato via software dal microcontrollore Atmega8515 caricando un registro a 28 bit con l’informazione binaria sulla frequenza che si vuole in uscita. Il clock massimo è di 25Mhz, cui corrisponde una risoluzione di 0.1Hz; al diminuire della frequenza di pilotaggio aumenta la precisione disponibile sulla frequenza d’uscita. L’interfaccia con cui è pilotato il dispositivo è a tre fili “SPI”, disponibile sulla maggior parte dei micro. Nel mio progetto non utilizzo tutte le potenzialità dell’AD9833, come il poter generare segnali modulati in frequenza o in fase; infatti, da un’attenta analisi dello schema interno si possono notare due registri per la frequenza e due per la fase. Vengono posti tutti a zero, e verrà caricato solo uno di quelli di frequenza, che conterrà l’informazione binaria sulla frequenza d’uscita. Tutti i blocchi interni sono controllati dal control register; in cui ogni bit corrisponderà un determinato settaggio del DDS. Esempio: selezione di un determinato registro frequenza, tipo di segnale d’uscita ecc. Questo verrà opportunamente caricato dal firmware del micro tramite la porta SPI.

 

Tool di sviluppo:

I tool di sviluppo utilizzati nel progetto sono: la scheda STK500 di Atmel e AVR studio 4.

 

Caratteristiche dell’apparecchiatura:

  • Utilizzo del DDS AD9833 prodotto dall’Analog Devices.
  • Utilizzo del microcontrollore ATmega8515.
  • Range di funzionamento da 0,04Hz a 1,999999Mhz.
  • Risoluzione 0,04Hz.
  • Selezione dell’onda sinusoidale, quadra e triangolare.
  • Funzione sweep preimpostata, durata 6s, range 0Hz-50Khz, utilizzabile con qualsiasi forma d’onda.
  • Interfacce utente, display e tastiera, entrambe alfanumeriche.

 

Mappa di flusso generale sul funzionamento del generatore di segnali:

 

 

 

 

 

 

 

 

 

 

 

 

 

Un pò di teoria sul DDS:

In generale un segnale sinusoidale viene rappresentato in termini della sua ampiezza A(t) = sine(ωt), come si può notare, però la funzione è non lineare, quindi difficilmente ricostruibile digitalmente; sé, però consideriamo l’informazione di fase, essa è lineare in natura e si ripete ciclicamente a ogni periodo. La velocità angolare dipende dalla frequenza come dal prodotto ω = 2πf. Quindi sapendo che la fase è lineare e dando come intervallo di riferimento il periodo del master clock, la rotazione di fase sarà:

ΔPhase = ωΔt

Esplicitando rispetto a ω si ha:

ω = ΔPhase/Δt = 2πf

Esplicitando rispetto a f e sostituendo il periodo di riferimento Δt con 1/fmclk si ha:

F = ΔPhase x fmclk/2π (fmclk = master clock)

Quindi il funzionamento del DDS si basa sulla formula precedentemente ricavata. La formula viene implementata digitalmente attraverso una serie di componenti: l’oscillatore controllato numericamente (NCO), un modulatore di fase, una SIN ROM e un convertitore digitale analogico (DAC). Questi componenti sono visibili nello schema a blocchi dell’AD9833 nella figura seguente.

 

 

 

 

 

 

 

 

 

 

 

 

 

Considerando che l’accumulatore di fase è a 28 bit (in realtà contiene due registri a 28 bit selezionabili indipendentemente), nella formula F = ΔPhase x fmclk/2π, il parametro “2π” viene mappato su 28 bit, quindi 2π = 2^28, in definitiva F = ΔPhase x fmclk/2^28; dove fmclk/2^28 rappresenta la risoluzione.

Esempio:
Se si vuole in uscita una frequenza di 400Hz, bisogna caricare uno dei registri a disposizione, con il valore binario determinato come segue: ΔPhase = F x 2^28/fmclk = 400[Hz] x 2^28/10[Mhz] = 29F1[16].



Mappe di flusso sul funzionamento dell’AD9833:

Per ottenere l’uscita desiderata dal generatore di segnali, si dovranno seguire alcune procedure di settaggio nell’AD9833; vedere la mappa di flusso del DDS nelle figure che seguono, e quella del micro che pilota tutti i blocchi. Nelle mappe di flusso si noteranno delle barre su alcuni blocchi, questo perché io non ho implementato nessuna funzione che preveda l’utilizzo della fase del segnale (come ad esempio nelle modulazioni PSK). In particolare la prima cosa da fare è resettare il dispositivo per un corretto funzionamento, questa operazione porterà l’uscita del dispositivo (l’uscita del DAC, vedi schema a blocchi) in alta impedenza in modo da evitare transienti sul carico, nel frattempo si effettuerà il setup dei vari blocchi, infine si abilita l’uscita ponendo il bit reset del control register a 0. Tutta la procedura completa sarà più chiara nelle mappe di flusso seguenti.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mappe di flusso del firmware:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Il firmware:

Il programma è composto da parecchie routine che sono descritte in un documento allegato, qui verrà spiegato il funzionamento a grandi linee dell’algoritmo che gestisce tutto il sistema. Come ho già descritto nei paragrafi precedenti, l’interfaccia utente è composta da vari menu, per selezionare la modalità sweep o normale. Nei sottomenu si può poi scegliere il tipo di onda con relativa frequenza oppure il tipo di onda da sweeppare. Nel caso in cui si sceglie la modalità di generazione segnale con relativa frequenza, questo porterà a una serie di passaggi prima che il segnale esca dal chip DDS. Prima di proseguire apriamo una piccola parentesi. Considerando che abbiamo a disposizione un micro a 8 bit e una tastiera con una numerazione limitata, non possiamo caricare dalla stessa dei valori che superano il 9, ma se avessimo una tastiera con una numerazione maggiore, non potevamo di certo inserire valori maggiori di 256, questo perché i registri sono a 8 bit; quindi per inserire frequenze che raggiungono il milione, i valori verranno caricati sullo stack, per poi essere ricostruiti con una look up table, quindi andremo a prelevare un valore alla volta dallo stack, cercheremo il peso corrispondente nella look up table e lo sommeremo di volta in volta, per ricostruire la frequenza digitata, queste operazioni saranno effettuate chiaramente tutte in binario. Dopo di che il valore di frequenza che sarà spalmato su quattro registri verrà moltiplicato con una costante che deriva dalla formula del DDS. Adesso dovrà essere opportunamente formattato per esser trasferito tramite porta SPI all’AD9833. Per generare lo sweep di una qualsiasi onda, l’algoritmo in questo caso parte dalla frequenza più bassa è incrementerà il valore fino a una certa frequenza, tra un incremento e l’altro ci sarà una pausa, che concorrerà a formare la durata dello sweep.



Schema elettrico:

 

 

 

 

 

 

 

 

 

 

 

Lo schema elettrico è più chiaro nel file allegato; perché può essere anche zoomato. Il generatore è alimentato a 5V con un assorbimento di massimo 60mA, la tensione di 5V è tipica di tutti i dispositivi nello schema. Mentre il resto dei componenti è stato descritto, rimane il buffer del clock, esso smista il segnale sia al DDS sia al micro, questo piccolo chip pilota il quarzo, e ne stabilizza il segnale d’uscita, i componenti di contorno servono a polarizzare nella zona lineare il buffer e a ottenere il circuito oscillante di Pierce. Le capacità intorno al DDS eliminano eventuali transitori e accoppiamenti che possono sporcare il segnale, così come le capacità collegate all’alimentazione. Un componente importante da notare è la resistenza di carico del DDS, questa deve essere tarata per ottenere il segnale voluto d’uscita; poiché l’impedenza totale d’uscita vista dai diversi segnali disponibili è diversa da segnale a segnale.

Componenti:

I componenti con i valori sono visibili nello schema elettrico allegato, il micro utilizzato è l’ATmega 8515.

Risorse del microcontrollore utilizzate:

  • Memoria FLASH utilizzata 31,1% (2548)
  • Di cui codice 2278
  • Di cui costanti 270
  • Registri utilizzati r16-r24, r0, r1, r8-r14: N°t 16
  • Utilizzo porte: PA(8/8), PB(3/8), PC(3/8), PD(8/8)
  • Considerazioni sull’uscita del DDS:

    Considerando che il DDS è sensibile alle variazioni del master clock si è dovuto utilizzare come riferimento di clock un oscillatore al quarzo bufferizzato, che risulta più stabile di un qualsiasi altro oscillatore. Nonostante questo, durante la costruzione dei segnali si verificano degli errori intrinseci (naturali e non eliminabili) che modificano leggermente la frequenza all’uscita. Il massimo scostamento è stato calcolato su un campione di 13 valori (l’errore si ripete uguale nell’intero range), è stata utilizzata la seguente formula per determinare il massimo scostamento dal valore digitato:
    ErroreMax %= |Valore_Digitato – Valore_Misurato| X 100 = 1.6%

    Conclusioni:

    Limitazioni del dispositivo:

  • Non si può in alcun modo generare delle forme d’onda arbitrarie.
  • La durata dello sweep non si può abbassare al di sotto dei 4/5 secondi, a causa della limitata velocità di trasmissione della porta SPI del microcontrollore.
  • Non si può variare il duty cicle dell’onda quadra, se non predisponendo una circuiteria esterna.
  • Miglioramenti possibili:

  • Implementazione segnali modulati in fase e in frequenza.
  • Sistema per i segnali di sincronismo.
  • Circuiteria per l’implementazione dell’offset, dell’attenuazione e variazione del duty cicle.
  • Amplificatore di potenza lineare, in modo da elevare il livello dell’uscita, e renderlo conforme a quella di un dispositivo professionale.
  • 13 Comments

    1. FEDDY85 13 aprile 2012
    2. slovati 12 aprile 2012
    3. divivoma 13 aprile 2012
    4. Emanuele 14 aprile 2012
    5. FEDDY85 14 aprile 2012
    6. skylab 15 maggio 2012
    7. FEDDY85 16 maggio 2012
    8. FEDDY85 16 maggio 2012
    9. skylab 17 maggio 2012
    10. FEDDY85 17 maggio 2012
    11. FEDDY85 22 aprile 2012
    12. FEDDY85 21 giugno 2012
    13. FEDDY85 12 aprile 2012

    Leave a Reply