Un generatore di funzioni sinusoidali e quadre con il modulo DDS AD9850 e PIC24F16KA102 semplice e fantastico !!!

Qualche tempo fa un mio amico, l' Ing. F.V, mi chiese di realizzare un generatore di onde quadre da utilizzare per un trasmettitore  sulle onde medie. Allora pensai di sfruttare il modulo AD9850 che per lo scopo mi sembrava l'ideale. Quello  che vedete in basso in figura è il risultato finale. Per realizzarlo ho fatto riferimento al progetto seguente link:

progetto arduino dove però il micro usato è un Atmega238 mentre io ho usato un PIC24F16KA102.

Lo schema elettrico

 

Passiamo ora alla descrizione di questo generator ricordando che il lavoro principale lo svolge il modulo AD9850.

Il modulo in questione è:

I pin di questo modulino sono i seguenti:

Si distinguono i pin CLK,UP,DATA,RESET,SIN1,SIN2,SQ1,SQ2 e i pin di alimentazione che in questo circuito è di 3.3V. Il microcontrollore ha il compito di trasmettere la word al modulo AD9850 per generare la frequenza in uscita. Visualizzare gli step e la frequenza al momento generata. In questo circuito è presente anche una eeram che mantiene in memoria l'ultima frequenza impostata anche dopo lo spegnimento del sistema. Ma andiamo per ordine,vediamo come bisogna trasmettere i 4 byte al modulo dopo aver calcolato il numero necessario per generare la frequenza voluta. Dal data sheet la formula riporta che  Fout=N *fosc/2^32 da cui

N=Fout*2^32/fosc dove Fout è la frequenza che si vuole in uscita. Le funzioni sviluppate per inizializzare

il modulo sono:


    _Reset();//Resetta il modulo
     Clock_Gen();//Genera un clock
    _Up_Date(); // //Aggiorna

Riporto una frazione di codice

/*******************************************************************************
 *                      Generazione impulso reset
 ******************************************************************************/
void _Reset(void){
    
    __delay_ms(1);
    AD_9850_RESET=1;
    __delay_ms(1);
    AD_9850_RESET=0;
}

/*******************************************************************************
 *                         Generazione clock
 ******************************************************************************/
void Clock_Gen(){
    
    AD_9850_CLK=1;
    __delay_ms(1);  
 
    AD_9850_CLK=0;
    __delay_ms(1);
}

/*******************************************************************************
 *                         Update dati
 ******************************************************************************/
void _Up_Date(void){
    
     AD_9850_UP=1;
     __delay_ms(1);
     AD_9850_UP=0;
     __delay_ms(1);
}

pi c'è la funzione che invia i 4 byte per generare la frequeenza

sendFrequency(tuning_freq);

/******************************************************************************
 *           Trasferimento word verso il modulo AD9850.
*******************************************************************************/
void sendFrequency(double frequency) {
        unsigned long freq1 = frequency * 4294967296/AD9850_CLOCK;  //
        int b;
    for ( b = 0; b < 4; b++, freq1 >>= 8) {
        tfr_byte(freq1 & 0x000000FF);
       
      }
       tfr_byte(0x000); //
      _Up_Date(); //
}

I 4 byte saranno inviati dal micro sul piedino DATA AD 9850 del modulo . Sui piedini SIN1,SIN2,SQ1,SQ2 sono presenti i segnali d'uscita sinusoidali e quadri in fase e sfasati di 180 gradi. Nella EERAM viene mantenuta l'ultima word relativa all'ultima frequenza selezionata. La lettura e la scrittura avviene con il protocollo I2C.

 

I 2 encoder rotativi ENC1 e ENC2 permettono di selezionare la frequenza e gli step

rispettivamente. Gli step selezionabili sono :

1 Hz", "10 Hz", "50 Hz", "100 Hz", "500 Hz",
"1 kHz","2.5 kHz","5 kHz","9 KHz", "10 kHz", "100 kHz", "500 kHz". Le frequenze vanno da un minimo di 1Hz fino a 2MHz.

I due led LD1 e LD2 si accendono quando la variazioni degli encoder rotativi sono positive sia per gli step che per le frequenze mentre e si spengono

con quelle negative.

Per la visualizzazione è stato scelto il display 1.8 TFT SPI 128x160 V1.1 ST7735S.

Andamenti

Vista retro

 

 

VIDEO

 

 

Download Firmware

No comments

Leave your comment

In reply to Some User