ZL31ARM: generator sygnałowy DDS

Na początku trzeba sobie odpowiedzieć na pytanie – co to takiego Direct Digital Synthesis (DDS). Jest to cyfrowa metoda generowania dowolnych sygnałów bez udziału podzespołów analogowych. W generatorze takim sygnał odtwarzany jest na podstawie próbek zapisanych w pamięci w postaci cyfrowej, które są przetwarzane za pomocą przetwornika cyfrowo-analogowego.

Firma Analog Devices posiada bardzo bogatą ofertę tego typu generatorów pracujące przy rozmaitych częstotliwościach zegara sięgające nawet do 1GHz.

W niniejszym artykule opisane zostaną bliżej generatory DDS z serii AD983x posiadające magistralę szeregową:

  • AD9832 – maksymalny zegar taktujący 25MHz, układ zasilany napięciem od 2,97V do 5,5V,
  • AD9835 – maksymalny zegar taktujący 50MHz, układ zasilany napięciem od 4,75V do 5,25V.

Schemat blokowy układu (zaczerpnięty z noty katalogowej) przedstawiono na Rys. 1. Oba modele posiadają 10–bitowy przetwornik DAC oraz 32–bitowe słowo programujące częstotliwość sygnału wyjściowego. Układy te konfigurowane są za pomocą magistrali SPI. Przystosowane są one także do pracy jako generatory sygnału modulowanego częstotliwościowo (dwa przełączane rejestry częstotliwości) oraz fazowo (cztery przełączane rejestry fazy). Modulacja może być dokonywana za pomocą magistrali SPI bądź zewnętrznych pinów FSELECT (w przypadku zmiany częstotliwości) oraz PSEL0 i PSEL1 (w przypadku zmiany fazy).

 

Rys. 1. Schemat blokowy układów

Rys. 1. Schemat blokowy układów

 

W przedstawionej aplikacji zastosowano prosty zestaw startowy ZL31ARM, który posiada wbudowany programator. Na Rys. 3 przedstawiono schemat ideowy połączeń zestawu z układem AD9832, który został dołączony do interfejsu SPI1.

 

Rys. 2. Zestaw ewaluacyjny ZL31ARM

Rys. 2. Zestaw ewaluacyjny ZL31ARM

 

Rys. 3. Sposób dołączenia generatora DDS do płytki ZL31ARM

Rys. 3. Sposób dołączenia generatora DDS do płytki ZL31ARM

 

Napisany program umożliwia zmianę częstotliwości generowanego sygnału z wykorzystaniem komputera PC przy użyciu komunikacji szeregowej. Należy tu pamiętać, iż linii TxD i RxD nie podłączamy bezpośrednio do portu RS232. Należy je podłączyć przez konwerter napięć lub interfejs pośredniczący w komunikacji, np. ZL2USB.

W celu wygodnej pracy do aplikacji stosujących układy AD983x została przygotowana biblioteka. Została ona napisana w sposób zbliżony do bibliotek dostarczanych przez firmę STMicroelectronics – posiada zdefiniowaną strukturę inicjalizacyjną, której pola należy wypełnić, a następnie wywołać funkcję inicjalizującą. Struktura ta składa się z następujących pól:

  • freq0 – 32-bitowe słowo określające częstotliwość banku 0. Aby przeliczyć częstotliwość w Hz na odpowiednią wartość należy użyć funkcji AD983x_Hz2FreqReg() na przykład:
    AD9832Init.freq0 = AD983x_Hz2FreqReg(200000);
    co ustawi częstotliwość banku 0 na 200kHz.
  • freq1 – analogicznie jak powyżej tylko dla drugiego banku.
  • phase0 – 32-bitowe słowo określające fazę sygnału przy wyborze banku fazy 0.
  • phase1 – 32-bitowe słowo określające fazę sygnału przy wyborze banku fazy 1.
  • phase2 – 32-bitowe słowo określające fazę sygnału przy wyborze banku fazy 2.
  • phase3 – 32-bitowe słowo określające fazę sygnału przy wyborze banku fazy 3.
  • fselect – określa na podstawie jakiego banku częstotliwości ma być generowany sygnał. Zostały zdefiniowane dwie stałe do wyboru banku: AD983x_FrequencySelect_FREQ0 oraz AD983x_FrequencySelect_FREQ1.
  • psel – określa na podstawie jakiego banku fazy ma być generowany sygnał. Zostały zdefiniowane cztery stałe do wyboru banku:
    • AD983x_PhaseSelect_PHASE0,
    • AD983x_PhaseSelect_PHASE1,
    • AD983x_PhaseSelect_PHASE2,
    • AD983x_PhaseSelect_PHASE3.
  • selsrc – określa na podstawie jakiego źródła wybierana jest faza oraz częstotliwość sygnału:
    • AD983x_SyncAndSourceSelect_PINS – aktualna częstotliwość oraz faza zależą od stanu pinów FSELECT, PSEL0 oraz PSEL1.
    • AD983x_SyncAndSourceSelect_BITS – aktualna częstotliwość oraz faza zależą od ustawień rejestru.
  • sync – określa sposób w jaki przeładowywane są rejestry częstotliwości oraz fazy przy zmianie banku:
    • AD983x_SyncAndSourceSelect_ASYNCHRONOUS – zmiany następują w sposób asynchroniczny
    • AD983x_SyncAndSourceSelect_SYNCHRONOUS – zmiany następując w sposób synchroniczny wraz z narastającym zboczem sygnału MCLK.

W załączonym programie struktura ta wypełniana jest na samym początku funkcji głównej main. Na listingu poniżej przedstawiono stosowaną konfigurację.

 

Listing 1. Struktura służąca do inicjalizacji układu AD9832

 

Sama funkcja AD983x_Init() przed ustawieniem wszystkich parametrów pracy DDS ustawia odpowiednie porty oraz kontroler magistrali SPI, używany w komunikacji z układem. Ustawienia te wykonywane są na bazie definicji zawartych w pliku AD983x.h, przedstawionych na Listingu 2.

 

Listing 2. Definicje używanych elementów

 

Po ustawieniu wszystkich niezbędnych peryferiów, program realizuje nieskończoną pętlę.

 

Listing 3. Pętla główna programu

 

Przy każdym obiegu sprawdzana jest odbiorcza kolejka FIFO od USARTu. Jeśli cokolwiek się w niej znajduje to program stara się wyszukać znak ‘;’ sygnalizujący koniec komendy. Jeśli znak taki zostanie znaleziony to wartość sprzed niego zostaje przetłumaczona do zmiennej freq. Jeśli operacja ta przebiegła poprawnie (przed znakiem ; znajdowała się prawidłowa liczba) to następuje zmiana częstotliwości i odesłanie potwierdzenia „OK”. W przeciwnym wypadku odsyłany jest komunikat błędu „ERROR”.

Ten prosty przykład pozwala na zapoznanie się ze sposobem sterowania cyfrową syntezą sygnału (ang. DDS). Pozwala on jednocześnie na zmianę częstotliwości generowanego sygnału z poziomu komputera PC co autorzy wykorzystali do automatycznego pomiaru charakterystyk częstotliwościowych projektowanych układów.

Ustawianą częstotliwość należy wysyłać na odpowiedni port RS232 z ustawieniami 115200BAUD, 8N1. Częstotliwość wysyłamy jak zwykłą liczbę naturalną zakończoną znakiem „;”. W komunikacji z aplikacją nie należy stosować znaków końca linii.

Na zakończenie przykładowe oscylogramy sygnałów generowanych za pomocą przedstawionej aplikacji z układem AD9832.

 

Rys. 4. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 100kHz

Rys. 4. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 100kHz

 

Rys. 5. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 1MHz

Rys. 5. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 1MHz

 

Rys. 6. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 2MHz

Rys. 6. Zapis przebiegu sygnału sinusoidalnego o częstotliwości 2MHz

 

Autorzy:
Michał Waśkiewicz
Mateusz Kawałkiewicz

Do pobrania

Autor: