Home
Accesso / Registrazione
 di 

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 16x2.

 

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.


  • AllegatoDimensione
    Routine.pdf50.75 KB
    Schematic.pdf49.96 KB
    Firmware.pdf110.83 KB

     

     

    Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
    ritratto di IC2

    Generatore di segnali

    Le limitazioni di velocità dell'spi sono dettate dal microcontrollore o dal componente analog device, potresti considerare un update ad un micro superiore sempre Atmel.
    In questo modo si potrebbe tentare l'avventura di genereare forme d'onda arbitrarie?

    ritratto di FEDDY85

    Ciao, il problema della

    Ciao, il problema della velocità è dato dal micro, infatti la massima velocità di segnalazione è la metà di quella del master clock che pilota tutto il sistema 10,245MHz, l'spi del DDS come puoi notare anche dal datasheet può arrivare fino a 40Mhz su questo modello. Chiaramente si può adottare un micro superiore, che avrà sicuramente una SPI più veloce; per quanto riguarda la generazione di onde arbitrarie, sicuramente ad ogni modo, da questo DDS non le potrai ottenere, a causa della circuiteria custom interna, anche utilizzando un micro superiore; a meno che, non utilizzi direttamente quest'ultimo per la generazione dei segnali. In realtà io avevo pensato di implementare l'architettura DDS su dispositivi FPGA, in modo da poter avere un sistema che potesse fornire anche segnali arbitrari e/o con altre caratteristiche, rispetto all'ad9833; purtroppo tempo e denaro sono tiranni.

    ritratto di slovati

    Questo progetto è molto

    Questo progetto è molto interessante (molto utile la tastiera per l'inserimento della frequenza) e consente di realizzare uno strumento indispensabile per il laboratorio di elettronica. In passato ricordo il generatore di funzioni MAX038 di Maxim (probabilmente ora è fuori produzione). Qual'è il costo totale dei componenti (circa)?

    ritratto di FEDDY85

    Non considerando l'iva e le

    Non considerando l'iva e le spese di spedizione, su RS i prezzi per componente sono:

    AD9833 -> 8,73 euro
    ATmega8515 -> 3,78 euro
    Display 16x2 -> 4,62 euro
    Tastiera -> 12,46 euro
    La versione del buffer che ho utilizzato io non è più disponibile su RS, ci sono altri che comunque andrebbero bene; dovrebbe costare qualche decina di centesimi di euro.

    Quindi il totale circa, sarà di 29,59 euro.

    ritratto di divivoma

    Bel progetto.. per ora forse

    Bel progetto.. per ora forse quello più completo sia dal p.to di vista pratico che teorico/professionale ;)

    ritratto di Emanuele

    Interessante generatore

    Un generatore di segnali è uno strumento necessario nel laboratorio del progettista elettronico!

    Concordo sulle implementazioni da fare, in particolare l'amplificatore di uscita per ottenere valori un poco più elevati.

    Inoltre doterei il sistema di una porta seriale, la usart del micro non è usata. Si potrebbe quindi collegarlo al PC e tramite un comune programmino di comunicazione seriale, impostare le forme d'onda direttamente. Ma anche avere a schermo segnalazioni in tempo (quasi) reale. L'utilizzo di un micro più performante sarebbe necessario, almeno per sfruttare pienamente la velocità del AD933.

    Per la generazione delle forme d'onda arbitrarie, la vedo dura....
    http://instrumentation.analog.com/en/electronic-test-measurement/arbitrary-waveform-genera...
    La vedrei come una vera e propria espansione con un altro canale gestito da un dsp dedicato (o fpga)

    Ottima l'introduzione al DDS

    ritratto di FEDDY85

    Sicuramente hai ragione

    Sicuramente hai ragione Emanuele; per rendere più professionale il generatore bisognerebbe controllare lo stesso anche da PC, oltre a effettuare le migliorie già elencate e utilizzare un microcontrollore superiore; Secondo il mio modesto parere, per implementare forme d'onda arbitrarie, converrebbe a questo punto utilizzare direttamente un FPGA, la versione che integra magari un micro, quindi configurare il dispositivo secondo l'architettura base di un DDS, e integrare anche le funzioni per generare segnali arbitrari.

    ritratto di giacomo rinaldi

    Ciao fede .. sono giacomo ..

    Ciao fede .. sono giacomo .. complimenti .. mi servirebbe un generatore .. quanto ti devo ? posta un video per fare vedere bene il comportamento

    ritratto di FEDDY85

    Ciao Già...chiaramente non mi

    Ciao Già...chiaramente non mi devi niente, se ti interessa lo puoi riprodurre e migliorare naturalmente, per quanto riguarda il collaudo, adesso non ho a disposizione l'oscilloscopio purtroppo, e quindi non sò come farti vedere realmente il suo comportamento....però ti posso assicurare che quando l'ho testato, la riproduzione era fedele....Saluti.

    ritratto di vuku

    Complimenti progetto davvero

    Complimenti progetto davvero interessante

    ritratto di skylab

    forme d'onda

    Ciao, come hai fatto a togliere gli scalini dovuti alla conversione digitale/analogica?
    io ho provato a costruire il progetto, ho però dei problemi sulla forma d'onda triangolare e quadrata....
    Saluti

    ritratto di FEDDY85

    Scusami, praticamente ho

    Scusami, praticamente ho trovato un errore nello schema elettrico che ho allegato, dovrebbe essere quello, che ti dà problemi; devi modificare la connessione al trimmer d'uscita, infatti, semplicemente, devi collegare l'out dell'ad9833 in parallelo allo stesso e sempre da qui prendi l'uscita del generatore, l'altro capo del trimmer con il suo punto centrale lo devi collegare a massa (stai attento a non regolare il trimmer all'estremo che collega l'uscita direttamente a massa altrimenti si brucia il DDS). Spero di essere stato comprensibile. Saluti.

    ritratto di FEDDY85

    Ciao, mi sorprende questa

    Ciao, mi sorprende questa cosa che mi dici, in quanto l'integrato ha già tutto il necessario per generare forme d'onda complete, quindi ha già anche un filtro interno per la costruzione dei segnali; inoltre ti posso dire che io l'ho testato su un oscilloscopio, variando la frequenza e la forma d'onda e naturalmente non ho notato scalini in nessuna forma d'onda. Probabilmente c'è qualcosa che non va nella costruzione fisica, praticamente sull'uscita dovresti aver inserito un trimmer che va settato in modo diverso a seconda se la forma d'onda è sinusoidale/triangolare o quadra, perchè altrimenti vedi un segnale saturato o troppo attenuato, quindi devi fare ogni volta una calibrazione sul trimmer quando passi da un'onda sinusoidale/triangolare (considera che siccome l'onda sinusoidale e triangolare, vengono generate entrambe dal dac, dovresti avere problemi anche su quella sinusoidale, l'onda quadra invece non viene generata dal dac) a quadra; penso che il problema tuo sia questo, ma potrei sbagliarmi, fammi sapere! saluti.

    ritratto di skylab

    generatore

    Ciao, premetto che ho utilizzato un modulo dds già assemblato, acquistato su ebay e adattato al progetto. la forma d'onda sinusoidale presenta le scalinature dovute alla conversione, l'onda triangolare risulta deformata, sembra più una sinusoide schiacciata...
    L'onda quadra invece sembra che cambi di fase ciclicamente...

    ritratto di FEDDY85

    Purtroppo senza vedere la

    Purtroppo senza vedere la scheda che hai acquistato e senza lo schematico in dettagli non ti so rispondere in merito ai problemi che descrivi.....prova a implementare magari alla lettera lo schema che ho postato io!

    ritratto di Franco1975

    forme d'onda

    Ciao, ho realizzato il tuo progetto, ma ho notato che le forme d'onda sono molto distorte,
    l'onda triangolare risulta triangolare dai 100 Hz ai 200 KHz, al disotto risulta quasi un dente di sega, sopra i 200 KHz presenta scalinature dovute alla conversione e i picchi smussati; l'onda quadra idem, sotto i 100 Hz i fronti di salita e discesa non sono ripidi e sopra i 200 KHz è molto distorta.

    ritratto di FEDDY85

    Ciao...

    Tieni presente che c'è un errore nello schematico, che può portare ai problemi che descrivi...ho già spiegato in una risposta precedente come porvi rimedio, fai riferimento quindi ai commenti precedenti e fammi sapere se il problema persiste.....

     

     

    Login   
     Twitter Facebook LinkedIn Youtube Google RSS

    Chi è online

    Ci sono attualmente 5 utenti e 121 visitatori collegati.

    Ultimi Commenti