Найти в Дзене
Tcukavin13

AD9833 – программируемый генератор сигналов от Analog Devices. Программирование.

Программирование микросхемы прямого цифрового синтеза AD9833.
Оглавление

Для отладки будем использовать готовую оценочную плату AD9833 совместно с контроллером STM32F429ZITx на плате nucleo. Для настройки воспользуемся кодогенератором STM32CubeMX.

Под свои нужды были адаптированы два вида реализации библиотеки с использованием аппаратного и программного SPI.

Для программной реализации SPI необходимо выбрать любые три ножки микроконтроллера и настроить их на выход в режиме Push-Pull, а затем переопределить дефайны в h-файле библиотеки для каждой ножки FSYNC, sDATA и sCLK.

Для аппаратной реализации нужно настроить SPI и добавить указатель на используемый аппаратный модуль SPI в h-файле библиотеки. Также надо настроить любую ножку на выход в режиме Push-Pull для линии FSYNC и переопределить её дефайн в h-файле библиотеки.

В библиотеке очень много комментариев поэтому код библиотеки приводить тут не буду. Ссылки на аппаратную и программную реализацию библиотеки, а также на готовый проект и документацию прикреплю в конце поста.

Пример работы с аппаратным SPI.

SPI настраиваем в режиме ведущего, только передача.

SPI mode: Master, Transmit Only.
SPI mode: Master, Transmit Only.

Не забываем установить Clock Polarity в High, так как сброс лини FSYNC в ноль когда sCLK находится в 1 – необходимое условие начала кадра и также «защёлкивание» данных идёт по нисходящему фронту.

SPI settings.
SPI settings.

Для работы библиотеки необходимо проинициализировать микросхему вызовом соответствующей функции. Загрузить и выбрать регистры частоты и фазы (если необходимо) и выбрать форму сигнала.

// Инициализация AD9833
ad9833_init();

// Установка регистра частоты 0 (FREQ_0) на частоту 5кГц:
ad9833_set_frequency(0, 5000);

// Выбор регистра частоты 0:
ad9833_set_freq_out(0);

// Установка формы сигнала и включение генерации:
ad9833_set_mode(AD_SINE);

// Для остановки генерации сигнала выбрать режим OFF:
ad9833_set_mode(AD_OFF);

С помощью соответствующих функций возможно изменение фазы сигнала, по умолчанию фаза равна нулю.

Далее приведу тестовый кусочек кода, в котором через каждые 5 секунд меняется режим работы микросхемы AD9833. После инициализации генерируется синус, частота берётся из первого регистра – 2кГц, затем синус с частотой 4096 Гц из второго регистра и на конец треугольник с частотой 4096 Гц.

Пример использования библиотеки.
Пример использования библиотеки.

Результаты:

Отличное соотношение сигнал/шум без применения какой либо фильтрации на выходе.

Синус 2кГц.
Синус 2кГц.
Синус 4096 Гц.
Синус 4096 Гц.
Треугольник 4096 Гц.
Треугольник 4096 Гц.

Прикреплённые материалы:

Библиотека с аппаратным SPI: https://drive.google.com/file/d/19dUkgkxUvOKh_ZxGKoy2DkiCNSYalTcG/view?usp=sharing

Библиотека с программным SPI: https://drive.google.com/file/d/1RZFo9dnBVBu_BrumciQb-GuOQ0kUSGAm/view?usp=sharing

AD9833 пример работы: https://drive.google.com/file/d/1qjT95a7Lyqb1xrDRoUrEyUfZ6wYIooBW/view?usp=sharing

Техническое описание и рекомендации по программированию: https://drive.google.com/file/d/12DhABqJcfDSMntjD_w1kXBB2eMD8b71Q/view?usp=sharing

На сайте разработчика можно оценить работу микросхемы: https://tools.analog.com/en/simdds/?part=AD9833&fin=25M&mult=1&ftw=D1B7&rso=111111&harmonicDB=-50&useFilters=0