SKU: OT3459 Číslo položky: NA416 EAN: 8720618690838
Generátory signálu / funkční generátory jsou velmi užitečné od RF až po embedded logiku, ale obvykle nejsou úplně levné.
Dobrá zpráva: s tímto modulem AD9850 DDS si s trochou montáže vytvoříte vlastní flexibilní, funkční a snadno použitelný Arduino generátor frekvence!
S LED displejem, otočným potenciometrem a Arduinem si vytvoříte snadno použitelný, samostatný generátor signálu. (Nezapomeňte si pak pořídit CP2102 USB na TTL Serial Converter, pokud jej ještě nemáte doma)
Můžete se také rozhodnout jej kombinovat pouze s Arduino Uno na breadboardu.
Úplně jinou cestou je použít tento modul k vytvoření vlastního Software Defined Radio (SDR).
Stručně řečeno, pěkný modul, se kterým se dá začít!
Vlastnosti:
POUŽITÍ:
Takto připojíš AD9850 DDS Modul generátoru signálu k Arduino UNO nebo ESP32, s ukázkovým sketchem, který můžeš hned nahrát.
Tento projekt ovládá modul AD9850 DDS přes 4vodičové sériové rozhraní a generuje přesné frekvence sinusového a obdélníkového signálu. Arduino inicializuje modul DDS a periodicky přepíná výstupní frekvenci mezi 1 kHz, 10 kHz a 100 kHz. Připojte osciloskop nebo měřič frekvence k ZOUT1 (sinusový signál) nebo QOUT1 (obdélníkový signál) a zkontrolujte výstupní signál.
/*
* ==================================================================
* Generated by Codey.online — https://www.codey.online
* ==================================================================
* Project : AD9850 DDS Sine & Square Wave Generator
* Board : Arduino UNO (arduino:avr:uno)
* Parts : AD9850 DDS Signal Generator Module
* Libraries : none (built-in)
*
* Codey Online is an AI-powered browser IDE for Arduino and ESP32.
* Describe your project and Codey writes the code, draws the wiring
* diagram and uploads it to your board, straight from the browser.
* This code is free to use, modify and share, without warranty.
* ==================================================================
*/
const int PIN_W_CLK = 8;
const int PIN_FQ_UD = 9; // Labeled FU_UD on module
const int PIN_DATA = 10;
const int PIN_RESET = 11;
const unsigned long AD9850_REF_CLOCK = 125000000UL; // 125 MHz reference oscillator
void pulsePin(int pin) {
digitalWrite(pin, HIGH);
delayMicroseconds(1);
digitalWrite(pin, LOW);
delayMicroseconds(1);
}
void ad9850Reset() {
digitalWrite(PIN_RESET, HIGH);
delayMicroseconds(1);
digitalWrite(PIN_RESET, LOW);
delayMicroseconds(1);
pulsePin(PIN_W_CLK);
pulsePin(PIN_FQ_UD);
}
void ad9850SetFrequency(double freqHz) {
// Calculate 32-bit tuning word: (freq * 2^32) / ReferenceClock
uint32_t tuningWord = (uint32_t)((freqHz * 4294967296.0) / (double)AD9850_REF_CLOCK);
// Transmit 32-bit frequency tuning word (LSB first)
for (int i = 0; i < 32; i++) {
digitalWrite(PIN_DATA, (tuningWord >> i) & 0x01);
pulsePin(PIN_W_CLK);
}
// Transmit 8 control/phase bits (all 0 for normal operation)
for (int i = 0; i < 8; i++) {
digitalWrite(PIN_DATA, LOW);
pulsePin(PIN_W_CLK);
}
// Latch the updated frequency into the DDS core
pulsePin(PIN_FQ_UD);
}
void setup() {
pinMode(PIN_W_CLK, OUTPUT);
pinMode(PIN_FQ_UD, OUTPUT);
pinMode(PIN_DATA, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
digitalWrite(PIN_W_CLK, LOW);
digitalWrite(PIN_FQ_UD, LOW);
digitalWrite(PIN_DATA, LOW);
digitalWrite(PIN_RESET, LOW);
Serial.begin(115200);
while (!Serial) {
;
}
Serial.println(F("AD9850 DDS Generator Initialized"));
ad9850Reset();
}
void loop() {
const double testFrequencies[] = {1000.0, 10000.0, 100000.0};
for (int i = 0; i < 3; i++) {
double freq = testFrequencies[i];
ad9850SetFrequency(freq);
Serial.print(F("Output frequency set to: "));
Serial.print(freq);
Serial.println(F(" Hz"));
delay(3000);
}
}
Wiring diagram and example code generated by Codey.online — https://www.codey.online
Tento projekt generuje přesné sinusové a obdélníkové signály pomocí modulu AD9850 DDS řízeného pomocí ESP32. Sketch prochází sekvencí frekvencí (1 kHz, 10 kHz, 100 kHz a 1 MHz) každé 3 seconds. Připojte osciloskop nebo měřič kmitočtu k ZOUT1 pro sinusový signál nebo k QOUT1 pro obdélníkový výstup.
/*
* ==================================================================
* Generated by Codey.online — https://www.codey.online
* ==================================================================
* Project : AD9850 DDS Signal Generator with ESP32
* Board : ESP32 DEVKIT V1 (esp32:esp32:esp32doit-devkit-v1)
* Parts : AD9850 DDS Signal Generator Module
* Libraries : none (built-in)
*
* Codey Online is an AI-powered browser IDE for Arduino and ESP32.
* Describe your project and Codey writes the code, draws the wiring
* diagram and uploads it to your board, straight from the browser.
* This code is free to use, modify and share, without warranty.
* ==================================================================
*/
// AD9850 DDS Signal Generator Demo on ESP32
const int W_CLK_PIN = 18;
const int FU_UD_PIN = 19;
const int DATA_PIN = 23;
const int RESET_PIN = 5;
// 125 MHz reference clock crystal on board
const double REF_CLK = 125000000.0;
const double testFrequencies[] = {1000.0, 10000.0, 100000.0, 1000000.0};
const int numFrequencies = sizeof(testFrequencies) / sizeof(testFrequencies[0]);
int currentFreqIndex = 0;
void pulseHigh(int pin) {
digitalWrite(pin, HIGH);
delayMicroseconds(1);
digitalWrite(pin, LOW);
delayMicroseconds(1);
}
void resetAD9850() {
pulseHigh(RESET_PIN);
pulseHigh(W_CLK_PIN);
pulseHigh(FU_UD_PIN); // Enable serial load mode
}
void sendFrequency(double frequency) {
uint32_t tuningWord = (uint32_t)((frequency * 4294967296.0) / REF_CLK);
// Send 32-bit frequency tuning word (LSB first)
for (int i = 0; i < 32; i++) {
digitalWrite(DATA_PIN, (tuningWord >> i) & 0x01);
pulseHigh(W_CLK_PIN);
}
// Send 8 control/phase bits (0x00 for 0 phase offset)
for (int i = 0; i < 8; i++) {
digitalWrite(DATA_PIN, LOW);
pulseHigh(W_CLK_PIN);
}
// Latch new frequency to output
pulseHigh(FU_UD_PIN);
}
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("AD9850 DDS Signal Generator Initializing...");
pinMode(W_CLK_PIN, OUTPUT);
pinMode(FU_UD_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(RESET_PIN, OUTPUT);
digitalWrite(W_CLK_PIN, LOW);
digitalWrite(FU_UD_PIN, LOW);
digitalWrite(DATA_PIN, LOW);
digitalWrite(RESET_PIN, LOW);
resetAD9850();
Serial.println("AD9850 ready!");
}
void loop() {
double freq = testFrequencies[currentFreqIndex];
sendFrequency(freq);
Serial.print("Output frequency set to: ");
Serial.print(freq, 0);
Serial.println(" Hz");
currentFreqIndex = (currentFreqIndex + 1) % numFrequencies;
delay(3000);
}
Wiring diagram and example code generated by Codey.online — https://www.codey.online