Generatore di segnali a frequenza variabile

 

GIl progetto presentato in queste pagine e' un generatore di segnali ( sinusoidale, quadra, dente di sega, triangolare, noise e custom) in cui  è possibile impostare la frequenza con la precisione tipica del DDS. Mediante dei tasti UP/DWN si incrementa/decrementa il valore della frequenza di uno step settabile mentre con un tasto SEL è possibile scegliere il tipo di segnale. Notevoli i campi d’applicazione (generatori di frequenza da laboratorio, di riferimento per PLL, DTMF, QRP e in tutte quelle applicazioni dove è richiesto generare segnali a frequenze stabili con notevole precisione.

Soluzioni circuitali

Nei progetti precedenti sulla tecnica DDS, è stata fatta una scelta di base: la forma d’onda dei segnali in uscita era un’onda quadra. Tale scelta era imposta dal fatto che era sfruttata la naturale mappatura dell’onda quadra considerando il bit MSB dell’accumulatore (per ulteriori chiarimenti rimandiamo ai progetti precedenti). Come è stato detto nel tutorial relativo al DDS la generazione mediante DDS richiede una ROM su cui mappare la forma d’onda da generare e un DAC che generi la forma d’onda analogica. Nel presente progetto vogliamo avere la possibilità di generare dei segnali che non siano un’onda quadra per questo sono necessari una ROM e un DAC. Vediamo quali accorgimenti tecnici sono stati usati per implementare la ROM e il DAC tenendo conto che il progetto si basa esclusivamente su un microcontrollore PIC.

Mappatura del segnale

Per la mappatura delle forme d’onda si può ricorrere alla memorizzazione di queste nello spazio di memoria del micro riservato al codice (program words memory) e utilizzando l’istruzione RETLW. Un’altra soluzione, laddove è possibile, è di implementare la funzione matematica che genera i campioni del segnale in uscita in funzione del ingresso fornito dall’accumulatore. L’unica cosa da fare, per la prima soluzione, è scrivere il relativo codice asm e ciò può essere fatto semplicemente avvalendosi di un foglio di calcolo tenendo conto del numero di punti da mappare come funzione dei N bit dell’accumulatore e il numero dei bit con cui quantizzare la forma d’onda in uscita. Nel caso della seconda soluzione è necessario individuare la funzione matematica.