Arduino библиотека за управление на AD9838 / AD9838 Arduino Library
/kn34pc.com/справочник/...
Analog
Devices AD9838 - 11 mW Power, 2.3 V to 5.5 V, Complete DDS
Features:
- MCLK speed: 16 MHz (B grade), 5 MHz (A grade)
- Output frequency up to 8 MHz
- Sinusoidal and triangular outputs
- On-board comparator
- 3-wire SPI interface
- Power-down option
- 11 mW power consumption at 2,3 V
***
Поради неудобството при боравенето с миниатюрния 4 х 4 мм 20-LFCSP-WQ корпус
на AD9838 за целите на експериментите си приспособих наличната ИС към помощна
преходна платка с последващо заливане на монтажа и свързващите проводници с
двукомпонентно лепило. Предвид ниската опорна и работна честота това не се
отрази по някакъв начин на очакваните параметри на DDS.
Максималната честота на опорния кварцов генератор е 5 MHz (за AD9838A) или 16 MHz
(за AD9838B). Поради липса на готов монолитен генератор експериментите си
проведох с генератор, изпълнен с 16 MHz кварцов резонатор и ИС 74HC00. Опорен генератор с по-добри параметри откъм
стабилност на изходната честота, фазови шумове и др. вероятно би бил по-подходящ за други
поставени цели.
Библиотека за управление на AD9838 под Arduino / AD9838 Arduino Library:
ad9838_lib_v0.2.zip
Тестовият Arduino sketch е за една постоянна изходна честота: (напр. 1 000 000
Hz).
При Fmclk с честота 16 MHz от опорния генератор, максималната изходна честота на DDS AD9838 е около Fmclk/3 или Fmax =
16/3 = 5,300 MHz.
AD9833, AD9834 и AD9838 са еднакви по управление. Бих могъл да използвам една библиотека на управление, но в конструкциите си искам да диференцирам
управлението на трите DDS чипа. Затова предпочитам библиотеките да са отделни.
***
Library constructor:
AD9838(uint8_t, uint8_t,
uint8_t);
Arduino изводи към FSYNC, CLK, DATA на AD9838
***
Публични процедури:
void init(uint32_t xt);
инициализация на библиотеката
xt - честота на опорния кварцов генератор, в Hz (напр. 16000000 Hz)
void set_freq(uint32_t frequency);
установяване на изходната честота
frequency = 0 ... Fxtal/3, в Hz (0 ... 5300000 Hz)
при MCLK = 5 MHz, мин. стъпка е 0,02 Hz
при MCLK = 16 MHz, мин. стъпка е 0,06 Hz
void dac_control(uint8_t
state);
състояние на DAC, софтуерно управление на изхода на DDS
state = 0
DAC е включен (по подразбиране)
state = 1
DAC е изключен
void internal_clock_control(uint8_t
state);
вътрешни оперативни вериги на опорния сигнал
state = 0
Internal clock е включен (по подразбиране)
state = 1
Internal clock е изключен
void set_wave(uint8_t
wave);
избор на форма на изходния сигнал
wave = SINE
синусоидален изходен сигнал (по подразбиране)
wave = TRIANGLE
триъгълен изходен сигнал
***
Пример 1: Прост VFO генератор за един обхват
ad9838_enc.zip
- VFO генератор на 160m: (1,800 ... 2,000) MHz
- с/без корекция на честотата с +/- IF (хетеродинен приемник / приемник с пряко преобразуване)
- механичен енкодер с 20 стъпки/оборот с бутон
- стъпки на изменение на честотата: 1 kHz, 500 Hz, 50 Hz
- "кръгово" превключване на стъпките: 1 kHz -> 500 Hz -> 50 Hz -> 1 kHz ...
***
За тест съм избрал VFO генератор за приемник на 160m с междинна честота IF =
500 kHz (ЕМФ): Fhet = Fin + IF -> Fhet =
(2300000 ... 2800000) Hz.
Обхватът, границите му, междинната честота,
математическата функция между Fприемник/Fхетеродин/Fмеждинна
честота, стъпките на енкодера и др. в
програмния код са примерни. Дори в този си опростен вид
конструкцията е подходяща за сигнал-генератор, хетеродин и др.
Добре би било в изхода да се добави нископропускащ филтър,
буфер/усилвател.
AD9838, пример 1 - прост VFO генератор
за един обхват
Забележка: Програмният код (или части от него) е за некомерсиално използване!
Препратки и материали:
1. AD9838, Analog Devices -
11 mW Power, 2.3 V to 5.5 V, Complete DDS [pdf][826kb]
2.
AD9833 Waveform Generator, www.vwlowen.co.uk
3. AD7C
AD9850 DDS VFO, www.ad7c.com
4. Arduino библиотека за управление на AD9833,
kn34pc.com
5. Arduino библиотека за управление на
AD9834, kn34pc.com
LZ2WSG, Силистра
10 октомври 2018 година