Moduł generatora sygnału DDS AD9850 (Direct Digital Synthesis). Generuje fale sinusoidalne i prostokątne w zakresie około 0–40 MHz, korzystając z wbudowanego zegara referencyjnego 125 MHz. Słowo strojenia częstotliwości jest ładowane przez prosty interfejs szeregowy (W_CLK, FQ_UD, DATA, RESET) albo przez 8-bitową magistralę równoległą (D0-D7). Wyjścia sinusoidalne ZOUT1/ZOUT2, wyjścia prostokątne/komparatora QOUT1/QOUT2. Zasilanie 5V.
| Pin | Sygnał | Opis |
|---|---|---|
ZOUT2 |
analog | Sine-wave DDS analog output from the AD9850 output network. |
ZOUT1 |
analog | Sine-wave DDS analog output from the AD9850 output network. |
QOUT2 |
digital | Square-wave comparator output derived from the DDS sine signal. |
QOUT1 |
digital | Square-wave comparator output derived from the DDS sine signal. |
GND |
ground | Ground reference for power, logic control, and output signals. |
RESET |
reset | AD9850 reset control input; use to initialize the DDS state. |
DATA |
data | Serial programming data input for loading frequency and control words. |
FU_UD |
digital | Frequency update strobe; latches loaded tuning word into the DDS. |
W_CLK |
clock | Serial word clock input for shifting programming data into the AD9850. |
VCC |
power | Module power input, typically 5 V for AD9850 operation. |
GND.1 |
ground | Ground reference for power, logic control, and output signals. |
D7 |
data | Parallel programming data bus bit 7 input for the AD9850. |
D6 |
data | Parallel programming data bus bit 6 input for the AD9850. |
D5 |
data | Parallel programming data bus bit 5 input for the AD9850. |
D4 |
data | Parallel programming data bus bit 4 input for the AD9850. |
D3 |
data | Parallel programming data bus bit 3 input for the AD9850. |
D2 |
data | Parallel programming data bus bit 2 input for the AD9850. |
D1 |
data | Parallel programming data bus bit 1 input for the AD9850. |
D0 |
data | Parallel programming data bus bit 0 input for the AD9850. |
VCC.1 |
power | Module power input, typically 5 V for AD9850 operation. |
Zasil moduł z 5V (VCC) i GND. Sterowanie szeregowe (zalecane, 4 linie): W_CLK (word clock), FQ_UD (frequency update / latch), DATA (dane szeregowe) i RESET, każdą do wolnego cyfrowego pinu mikrokontrolera. Uwaga: na tym module pin aktualizacji jest oznaczony jako FU_UD (= FQ_UD). Alternatywnie można użyć 8-bitowej magistrali równoległej D0-D7 oraz W_CLK/FQ_UD/RESET. Wyjścia: ZOUT1/ZOUT2 dostarczają sinus, QOUT1/QOUT2 wyjście prostokątne/komparatora. Moduł ma własny zegar referencyjny 125 MHz; dla płytek 5V nie są potrzebne zewnętrzne elementy zabezpieczające. W przypadku płytki 3.3V (ESP32/ESP8266) linie sterujące podłącz przez level shifter.
| Z | Do | Przewód |
|---|---|---|
board:5V |
x1:VCC |
red |
board:GND |
x1:GND |
black |
board:D8 |
x1:W_CLK |
green |
board:D9 |
x1:FU_UD |
blue |
board:D10 |
x1:DATA |
yellow |
board:D11 |
x1:RESET |
purple |
Ten przykład został napisany i sprawdzony kompilacją dla arduino-uno. Codey Online dostosuje go do każdej innej obsługiwanej płytki.
// Canonical beginner example for the AD9850 DDS Signal Generator Module
// This sketch sends a serial programming word to set an output frequency.
// Wiring used:
// D8 -> W_CLK
// D9 -> FU_UD
// D10 -> DATA
// D11 -> RESET
// 5V -> VCC
// GND -> GND
const int PIN_W_CLK = 8;
const int PIN_FQ_UD = 9; // Module label is FU_UD
const int PIN_DATA = 10;
const int PIN_RESET = 11;
const unsigned long CLOCK_HZ = 125000000UL; // AD9850 reference clock on the module
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 frequencyHz) {
// DDS tuning word = frequency * 2^32 / clock
uint32_t tuningWord = (uint32_t)((frequencyHz * 4294967296.0) / (double)CLOCK_HZ);
// Send 32-bit tuning word, LSB first
for (int i = 0; i < 32; i++) {
digitalWrite(PIN_DATA, (tuningWord >> i) & 0x01);
pulsePin(PIN_W_CLK);
}
// Control byte: 0x00 for normal 28-bit frequency mode
for (int i = 0; i < 8; i++) {
digitalWrite(PIN_DATA, LOW);
pulsePin(PIN_W_CLK);
}
// Latch the new frequency
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(9600);
while (!Serial) {
;
}
Serial.println(F("AD9850 DDS generator starting..."));
ad9850Reset();
// Set a beginner-friendly test frequency
ad9850SetFrequency(1000000.0); // 1 MHz
Serial.println(F("Output frequency set to 1 MHz"));
}
void loop() {
// Nothing to do here for the canonical example.
delay(1000);
}
Opisz, co chcesz zbudować. Codey Online napisze kod, narysuje schemat połączeń, skompiluje projekt i wgra go na płytkę bezpośrednio z przeglądarki.
Zacznij za darmo