Часто, в радиолюбительской практике необходим простой функциональный DDS (прямой цифровой синтез частоты) генератор. Для получения определенной частоты...
Я разработал простой генератор синуса на микросхеме от Analog Devices AD9832. Схема генерировала синусоиду от 0.005 до 12 МГц с шагом 0.005 Гц. Но, пока я ждал доставки микросхемы AD9832, был разработан простой DDS генератор с использованием микроконтроллера AT90S2313 и резистивной матрицей.
Генератор управляется через RS232 небольшой Windows-программой и может генерировать следующие формы сигналов: синус, треугольник, пила, прямоугольник в диапазоне частот начиная с 0.07 Гц до 200-300 кГц с шагом 0.07 Гц (зависит от применяемого кварца).
Я не хочу вдаваться в детали работы DDS-генератора. Исходный код прилагается, он очень простой и в нем легко разобраться.
Схемотехника устройства тоже простая, в ней есть 4 главных детали: регулятор напряжения, приемопередатчик RS232, микроконтроллер AT90S2313P и резистивная матрица (R2R). Матрица R2R подключена к выводам МК portB, т.о. образуя простой ЦАП и позволяющая получить 256 уровней напряжения.
Микросхема MAX603 также используется для реализации функций включения/выключения генератора, через последовательный интерфейс RS232 (сигнал DTR). Когда вы закрываете программу генератора на компьютере, то и DDS-генератора по поступившему сигналу выключается, т.о. экономя батарейки.
Программный код написан на ассемблере. Код небольшой и отличается большим быстродействием главного цикла. Это сердце кода генератора. Главный цикл содержит 7 строчек кода.
Остальной код — таблицы форм сигналов и коммуникационный код.
Аккумулятор фазы — 24 бит, при помощи него устанавливается разрешение. Максимально генерируемая частота и разрешение также зависит от используемого кварца:
Разрешение = Частота кварца/150994944
fOut = Аккумулятор * Разрешение
В моем случае кварц был на 11.059200 МГц, т.о. разрешение составило 0.073242188 Гц.
Для того, чтобы получить выходную частоту 1 кГц, необходимо в аккумулятор фазы записать значение 0x003556 (13654 dec). Это даст 1000.048835 Гц. Вполне достаточная точность для радиолюбителя.
Коммуникационный код программы также прост и позволяет записывать значения в аккумулятор фазы и выбирать тип формы сигнала.
Скачать исходник на ассемблере и программу под Windows