DIGITAL VCO




Introduzione

Il progetto presentato in queste pagine e' un DIGITAL VCO (Voltage Controled Oscillator) ovvero un oscillatore la cui frequenza e' controllata da una tensione ma generata in maniera digitale. Fornendo una tensione dall'esterno, il VCO genera un segnale ad onda quadra con frequenza proporzionale alla tensione applicata. Il progetto e' basato sul versatile microcontrollore a 8 bit della famiglia 10F322 prodotto dalla Microchip. Caratteristica principale del VCO e' la presenza di due tensioni di controllo: una per la regolazione di massima e uno per la regolazione fine del valore della frequenza. Il segnale di uscita e' un segnale di onda quadra con duty cycle al 50% e con ampiezza pari al valore della tensione di alimentazione del micro. Le applicazioni di questo semplice progetto sono tanti: VCO in un sistema a PLL, generatore di frequenza variabile, oscillatore di riferimento, etc

Idea di base

Si parte dal funzionamento del blocco NCO ( Numeric Controled Oscilator) ovvero dello oscillatore a controllo numerico presente nel micro 10F322 e di cui riportiamo lo schema a blocchi in figura.

schema a blocchi del modulo NCO

Figura 1: schema a blocchi del modulo NCO

Il modulo NCO e' in pratica un circuito DDS già trattato in questo sito con tutorial dedicato e con progetti basati su questa tecnica. Caricando i registri di incremento NCOxINCH e NCOxINCL, viene generato un segnale ad onda quadra con frequenza Fout partendo dal clock NCOx_clk proveniente da una sorgente interna ed esterna disponibile nel sistema. Dal datasheet del micro in questione possiamo estrapolare la formula che esprime il valore della frequenza Fout:

Fout = Fin x FWORD / ( 2^21)

dove FWORD e' una parola a 16 bit composta dai due registri di incremento NCOxINCH e NCOxINCL. Il blocco NCO inoltre può essere configurato per generare un segnale ad onda quadra con diversi valori di duty cycle e per pilotare il pin dedicato NCOx. per avere a disposizione il segnale generato esternamente. Può essere configurato per generare un segnale PFM. Volendo realizzare un oscillatore VCO scegliamo di configurarlo per generare un onda quadra PWM con duty cycle al 50%. Per essere un VCO ci deve essere il controllo della frequenza dell'oscillatore tramite una tensione esterna. Per soddisfare questa specifica si e' pensato di utilizzare il convertitore ADC, presente nel micro, per convertire la tensione esterna di controllo in una parola digitale da caricare nei registri di incremento. In convertitore ADC del micro e' a 8bit mentre il registro di incremento e' a 16 bit. In prima battuta si può pensare di caricare la parte MSB del registro di incremento con il valore derivante dalla conversione: caricare il registro NCOxINCH con il valore della conversione che e' a 8 bit. Questa soluzione semplice ed immediata porta alla generazione di frequenza con un incremento legato al bit LSB della conversione non molto fine in quanto la parte LSB del blocco NCO e' messo a zero. Per avere una generazione migliore e più fine si può pensare di pilotare la parte LSB ovvero il registro NCOxINCL tramite un'altra tensione esterna applicata ad un altro ingresso del micro. Collegando il modulo ADC anche a questo canale, il risultato della conversione e' quindi caricato nel registro di incremento NCOxINCL. Alla fine esce fuori un VCO con due regolazioni: una regolazione di massima e una regolazione fine della frequenza operata tramite due tensioni esterne. Inoltre, se si sceglie come sorgente di clock per il blocco NCO quella di sistema ovvero FOSC, allora la frequenza del VCO può essere cambiata anche cambiando il valore della frequenza di sistema FOSC agendo sul blocco oscillatore (tramite il suo registro di configurazione OSCCON). Per cui si può pensare di implementare un controllo tramite pulsante esterno del valore di frequenza di sistema per avere diversi range di frequenza di funzionamento del VCO: per ogni frequenza di sistema selezionata si avrà una frequenza minima, massima e uno step di incremento al variare delle tensioni di controllo.