Arduino w połączeniu z generatorem AD9850

 

Moduł AD9850 służy do generowanie dwóch przebiegów sinusoidalnych i dwóch prostokątnych o częstotliwości do 40 MHz. Układ komunikuje się przy pomocy magistrali szeregowej lub wysyłając bity równolegle. Został wyposażony w przylutowane złącza golpin raster 2,54 mm umożliwiające wpięcie w płytkę stykową lub podłączenie za pomocą przewodów.

 

W przykładzie zostały zastosowane następujące elementy:

 

Podłączenie AD9850 z Arduino:

W celu obsługi generatora z wykorzystaniem interfejsu szeregowego należy połączyć układ z Arduino w następujący sposób:

 

Pin AD9850 Pin Arduino
W_CLK 2
FQ_UD 3
DATA 4
RESET

5

VCC 5 V
GND GND

 

 

Schemat połączenie układu AD9850 z Arduino Uno.

 

Program do Arduino

W przykładzie został wykorzystany następujący kod:

 

 #define W_CLK 2       // Pin 2 - Sygnał zegarowy magistrali komunikacyjnej (W_CLK)
 #define FQ_UD 3       // Pin 3 - Zmiana częstotliwości (FQ)
 #define DATA 4           // Pin 4 - Linia danych interfejsu szeregowego (DATA)
 #define RESET 5       // Pin 5 - Reset modułu (RESET)
 
 #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } // funkcja puls ustawia na moment stan wysoki
 
 // przesyłanie bajtu, bit po bicie do modułu AD9850 przez linię DATA
void tfr_byte(byte data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);   // po każdym bicie sygnał CLK ustawiany w stan wysoki
  }
}
 
 // częstotliwość obliczona według wzoru na 8 stronie dokumentacji = */2^32
void sendFrequency(double frequency) {
  int32_t freq = frequency * 4294967295/125000000;  // zegar 125 MHz na AD9850
  for (int b=0; b<4; b++, freq>>=8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0x000);   // bajt kontrolny, same zera "0" dla modułu AD9850  
  pulseHigh(FQ_UD);  // aktualizacja częstotliwości
}
 
void setup() {
 // konfiguracja pinów Arduino
  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);
 
  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);  // włączenie trybu interfejsu szeregowego
}
 
void loop() {
  sendFrequency(100000);  // podanie częstotliwości do generatora
  while(1);
}

 

Wygenerowany przebieg można obserwować np. na ekranie oscyloskopu.

 

Jeśli sygnał prostokątny nie pojawia się należy przekręcić potencjometr wbudowany w moduł AD9850. Służy on do regulacji wypełnienia przebiegu prostokątnego.

 

zapraszamy do współpracy!