Sommario:

Generatore di segnale AD9833: 3 passaggi
Generatore di segnale AD9833: 3 passaggi

Video: Generatore di segnale AD9833: 3 passaggi

Video: Generatore di segnale AD9833: 3 passaggi
Video: Testing a Frequency Generator Module - Part 2 (Problem Diagnosis with the USB/Serial port) (#59) 2024, Dicembre
Anonim
Generatore di segnale AD9833
Generatore di segnale AD9833
Generatore di segnale AD9833
Generatore di segnale AD9833

Un generatore di segnale è un attrezzo di prova molto utile. Questo utilizza un modulo AD9833 e un Arduino Nano - tutto qui, nemmeno un PCB. Puoi opzionalmente aggiungere un display OLED. L'AD9833 può generare onde sinusoidali, triangolari e quadre da 0,1 Hz a 12,5 MHz - il software in questo progetto è limitato a 1Hz a 100kHz.

Ci sono stati altri Instructables che utilizzano un Arduino e un AD9833, qui e qui. Questo è più semplice e può essere utilizzato come generatore di sweep. I generatori di sweep aiutano a testare la risposta in frequenza di filtri, amplificatori e così via. A differenza degli altri modelli Instructables, questo non include un amplificatore o un controllo di ampiezza, ma puoi aggiungerli se lo desideri.

Passaggio 1: generatore di segnale più semplice

Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice
Generatore di segnale più semplice

Per il generatore di segnale più semplice, è sufficiente saldare il modulo AD9833 sul retro di Arduino Nano. Non è necessario alcun PCB.

Il modulo AD9833 che ho scelto è simile a questo. Non sto dicendo che sia il fornitore migliore o più economico, ma dovresti comprarne uno che assomigli a quella foto (o alla foto sopra).

Le connessioni tra i moduli sono:

  • terreni collegati tra loro
  • D2 = FSync
  • D3 = Clk
  • D4 = Dati
  • D6 = Vcc di AD9833

L'AD9833 è alimentato dal pin dati D6 dell'Arduino: l'Arduino può fornire una corrente sufficiente. Ho aggiunto un condensatore di disaccoppiamento da 100n perché pensavo di "dovrei" ma non ho notato alcuna differenza: c'è già un condensatore di disaccoppiamento sulla scheda del modulo AD9833.

Se fossi fantasioso, potresti preoccuparti del "terreno analogico" rispetto al "terreno digitale", ma se fossi fantasioso, spenderesti più di £ 4.

Il generatore di segnale più semplice è controllato e alimentato tramite un cavo USB da un PC. L'USB emula una porta seriale in esecuzione a 115200 bps (8 bit, nessuna parità). I comandi sono:

  • '0'..'9': sposta la cifra nell'array di frequenza "min"
  • 'S': imposta la frequenza AD9833 e produce un'onda sinusoidale
  • 'T': imposta la frequenza e produce un'onda triangolare
  • 'Q': imposta la frequenza e produce un'onda quadra
  • 'R': resetta AD9833
  • 'M': copia l'array di frequenza "min" nell'array "max"
  • 'G': sweep da "min" a "max" in 1 secondo
  • 'H': sweep da "min" a "max" in 5 secondi
  • 'I': sweep da "min" a "max" in 20 secondi

Il programma Arduino contiene due array di 6 caratteri "min" e "max. Se trasmetti una cifra, questa viene spostata nell'array "min". Se invii una "S", i caratteri dell'array "min" vengono convertiti in un longint e inviato all'AD9833. Quindi inviando la stringa

002500S

imposterà l'uscita AD9833 su un'onda sinusoidale di 2500Hz. Devi sempre inviare tutte e 6 le cifre. La frequenza minima è 000001 e la frequenza massima è 999999.

Se invii una "M", l'array "min" viene copiato nell'array "max". Se si invia una 'H', l'AD9833 emette ripetutamente una frequenza che aumenta gradualmente nell'arco di 5 secondi. Inizia alla frequenza "min" e 5 secondi dopo è alla frequenza "max". Così

020000M000100SH

spazia da 100Hz a 20kHz. La variazione di frequenza è logaritmica quindi dopo 1 secondo la frequenza sarà 288Hz, dopo 2 secondi 833Hz poi 2402, 6931 e 20000. La frequenza cambia ogni millisecondo.

Il ciclo si interrompe quando Arduino riceve un altro carattere, quindi fai attenzione a non inviare il comando seguito da ritorno a capo o avanzamento riga. Quel carattere in più interromperebbe il ciclo. Se stai usando il monitor seriale, c'è una casella in basso a destra che potrebbe dire ad esempio "Entrambi NL e CR" che (credo) invia caratteri dopo il tuo comando. Impostalo su "Nessuna fine di riga".

Puoi scaricare il programma EXE di Windows di seguito che invierà i comandi richiesti o potresti scriverne uno tuo. Il file INO di Arduino è anche qui.

Passaggio 2: aggiungi un OLED

Aggiungi un OLED
Aggiungi un OLED
Aggiungi un OLED
Aggiungi un OLED
Aggiungi un OLED
Aggiungi un OLED

Se aggiungi un OLED e due pulsanti, il generatore di segnale può funzionare da solo senza un PC.

Chi di voi ha letto il mio oscilloscopio Instructable riconoscerà la somiglianza. Il modulo AD9833 può essere aggiunto al mio oscilloscopio per produrre un "Oscilloscopio e generatore di segnale in una scatola di fiammiferi".

Il display è un OLED da 1,3 funzionante a 3,3V che è controllato da un chip SH1106 tramite un bus I2C.

Cerca su eBay OLED da 1,3". Non voglio raccomandare un venditore in particolare poiché i collegamenti diventano rapidamente obsoleti. Scegli uno che assomigli a quella foto, dica "I2C" o "IIC" e abbia quattro pin etichettati VDD GND SCL SDA (Alcuni display sembrano avere i pin in un ordine diverso. Controllali. Il nome corretto per l'orologio di I2C è "SCL" ma su eBay le schede possono essere etichettate come "SCK" come la mia nella foto.)

Una descrizione più completa della libreria OLED è nel mio oscilloscopio Instructable nel passaggio 8. Dovresti scaricare e installare la libreria dei driver SimpleSH1106.zip che si trova nel passaggio 8. (non voglio caricare un'altra copia qui e devo mantenere due copie.)

Il file INO può essere scaricato di seguito. I numeri di pin utilizzati per l'OLED sono dichiarati intorno alla riga 70. Se hai costruito il mio "Oscilloscopio e generatore di segnale in una scatola di fiammiferi" e vuoi testare questo file INO con esso, i numeri di pin alternativi sono abilitati tramite un #define.

Ho mostrato un layout stripboard per il circuito. Ci sono due stripboard: una per Nano e AD9833 e una per il display. Dovrebbero formare un panino. Le schede sono mostrate dal lato dei componenti. Fili sottili e flessibili uniscono le due schede. Fissare le schede insieme ai distanziatori saldati. Nel mio diagramma, il rame dello stripboard è mostrato in ciano. Le linee rosse sono collegamenti di filo sulla stripboard o fili flessibili che uniscono le schede. Non ho mostrato i cavi di alimentazione e "segnale".

Il modulo AD9833 è saldato sul lato rame della stripboard - sul lato opposto del Nano. Saldare i pin sulle strisce di rame, quindi inserire l'AD9833 su di essi e saldarlo.

Il display mostra una singola frequenza o le frequenze "min" e "max".

Ci sono due pulsanti: un pulsante "Orizzontale" per selezionare una cifra delle frequenze e un pulsante "Verticale" per cambiare quella cifra.

Alimento il generatore di segnale dal circuito che sto sviluppando - ho sempre 5V disponibili sulla mia postazione di lavoro.

Passaggio 3: sviluppi futuri

Sviluppi futuri
Sviluppi futuri

Potrebbe essere alimentato a batteria? Sì, basta aggiungere un PP3 da 9V collegato al pin RAW del Nano. In genere utilizza 20 mA.

Potrebbe essere alimentato da una singola cella al litio? Non vedo perché no. Dovresti collegare l'OLED Vdd e la sua resistenza di pull-up alla batteria da 3,7 V (dubito che l'uscita da 3,3 V di Arduino funzionerebbe correttamente).

Un generatore di sweep è più utile quando si testa la risposta in frequenza di un filtro se è possibile rappresentare graficamente l'ampiezza rispetto alla frequenza. Misurare l'ampiezza di un segnale è complicato: devi scambiare il decadimento del tuo rilevatore di inviluppo rispetto all'ondulazione per le basse frequenze e il tempo di risposta per le alte frequenze. Dopo aver costruito il tuo rilevatore di ampiezza, potresti alimentare la sua uscita nell'ADC dell'Arduino del "Simplest Signal Generator" quindi inviare il risultato, insieme alla frequenza corrente, al PC.

Questa pagina è un utile punto di partenza o cerca su Google "rilevatore di buste" o "rilevatore di picco". Nel circuito suggerito sopra, dovresti impostare la frequenza del segnale, attendere che si stabilizzi, impostare il pin Arduino A0 su output digitale basso, attendere per scaricare C, impostare A0 su input, attendere, quindi misurare con l'ADC. Fammi sapere come ti trovi.

Consigliato: