Мини DDS - простейший передатчик на диапазон 137 кГц и не только.


ВВЕДЕНИЕ


Описание недавно пересмотрено, добавлены актуальные версии программ. .hex файл для контроллера скомпилирован для кварца 12000 кГц!


Основа данной конструкции - разработки Jesper Hansen, DK5PT, ZL1BPU, DK1KQ. Еще в 2000 году Dieter Wulff DK5PT описал принцип действия в своей статье "A Software based DDS for 137 Kc" и воплотил "в железе" такой DDS.

Мне по ряду причин пришлось немного переделать этот синтезатор "под себя". Огромная благодарность Jesper Hansen за исходники на ассемблере под GNU лицензией. Пару слов скажу, что не устраивало в существующих конструкциях: у DK5PT управление сделано на кнопках, применен старый микроконтроллер, который проблематично приобрести спустя почти 10 лет. Схемотехника DDS от ZL1BPU и DK1KQ идентичная. Это очень функциональный ДВ передатчик, позволяющий работать CW, QRSS, DFCW, HELL, JASON. Правда, программу для контроллера от DK1KQ мне запустить так и не удалось, а программа от ZL1BPU стоит $10. Автор принимает $$ в конверте, а с нашей почтой такие фокусы не проходят. Управляющие программы написаны под DOS или WIN95/98 с прямым обращением к портам. Соответственно, под более свежими версиями Windows не работают.

Остался генератор Джеспера Хансена с открытым исходным кодом. В авторском варианте DDS умеет генерировать меандр, синус и треугольник от ~1 Гц до ~300 кГц (верхняя частота примерно равна частоте кварца / 30). Управление синтезатором производится через COM-порт компьютера. Очень полезная вещь в радиолюбительской лаборатории! Я лишь минимально изменил программу управления: выбросил формирование меандра и треугольного сигнала, ввел управление PTT трансивера и перевел мнемонику ассемблера на диалект ATMEL AVR Studio. Исходный код также открыт. Поэтому, улучшайте, модифицируйте на свое усмотрение. Исходник на ассемблере. За теорией Soft-DDS лучше обратиться к авторитетным источникам. Я приведу лишь необходимую математику для практического повторения описываемой конструкции.


НЕМНОГО НЕСЛОЖНОЙ МАТЕМАТИКИ.


Что нужно для DDS: дешевый микроконтроллер AT90S2313 или ATTINY2313 от Atmel , немного резисторов для ЦАП (если не нужен синусоидальный сигнал, то и ЦАП не нужен), несколько транзисторов или оптопар для гальванической развязки, стабилизатор 7805 и немного еще совершенно недефицитной мелочи.

КВАРЦ. Вот тут придется немного посчитать. Теоретически можно применять любой кварц в интервале 10-16 МГц, но главное условие - это возможность контроллера осуществлять связь с компьютером без ошибок. В контроллере есть такой регистр UBRR, определяющий скорость приема - передачи по UART. Вот кусочек программы на ассемблере, где происходит инициализация:

ldi r16,0x50 ; set uart speed to 9600 kbps for 12.5 Crystall

out UBRR,r16

UBRR рассчитывается по формуле:

UBRR = (Fcrystal /(UART Speed x 16)) -1

У меня стоит кварцевый резонатор на 12,500 МГц. Для него и для скорости 9600: UBRR=(12500000/(9600*16))-1=80,3802083333. Округляем до целого UBRR=80(10)=50(16). Далее, уже с округленным UBRR, проводим обратное преобразование и получаем реальную скорость: UART Speed = 12500000 / (16 x (80 +1))= 9645,06172. Определяем погрешность (9645,06172-9600)/9600*100%=0.469%

Для нашей задачи подходят кварцы с погрешностью скорости после такого пересчета не более 0,5%. Например, для 10МГц погрешность при скорости обмена 9600 составит около 0,16% и т.д. Определившись с кварцевым резонатором можно посчитать шаг перестройки синтезатора по частоте. Поскольку основной цикл программы выполняется за 9 тактов и аккумулятор фазы имеет разрядность 24 бита справедливо такое выражение:

Шаг = Fcrystal / (9 * 2^24) Гц, или = Fcrystal / (9 * 16777216). Для кварца на 12500000, шаг получается равным 0,0827842288547092. Впрочем, эти вычисления - головная боль для управляющей программы. Значение частоты посылается в виде 3-х байт, которые находятся делением желаемой частоты на шаг.

Например: 137777,0/ 0,0827842288547092=1664290,431959. Округляем до целого. Управляющее "слово" = 1664290 или 196522 в шестнадцатеричной нотации. После получения слова DDS выставит частоту: 1664290*0,0827842288547092=137776,9642406. Вот и вся математика. Для практической реализации DDS достаточно подобрать кварц для работы UART с погрешностью менее 0,5% и перекомпилировать программу контроллера для вашего значения UBRR. Если нет желания разбираться во всех этих ассемблерах - компиляторах, напишите мне на ew6gb(at)tut.by значение UBRR для вашего кварца и я вышлю готовую программу. А вариант под кварц 12.0 МГц можно вять тут.


СХЕМА.


Предлагаю два варианта. Один с преобразователем RS-232 как у ZL1BPU, другой на оптопарах AOT110 с гальванической развязкой трансивера и компьютера. Поскольку оптопары питаются от порта, для ноутбуков, скорее всего, потребуется подобрать резисторы или поставить другие оптопары. Для стационарного компьютера вариант с оптопарами я проверял - работает. Если не нужна синусоида, резисторы 2К (9 штук) и 1К (7 штук) на ногах контроллера 12-19 не устанавливаем. Меандр в таком случае снимается с 19 (РВ7) вывода.
Виталий, UA0AET, повторивший этот DDS, нашел способ борьбы с дрожанием фазы: для радикального улучшения качества сигнала - ЦАП обязателен и номиналы резисторов следует увеличить до 15, 7.5 кОм (вместо 2 и 1 кОм, соответственно). Спасибо.


ПРОГРАММИРОВАНИЕ КОНТРОЛЛЕРА.


Если Вы уже программировали ATMEL - контроллеры ранее, читайте следующий раздел. Если нет, вот схема SPI программатора и программа . Крайне желательно запаивать на плату уже запрограммированный чип, предварительно собрав примитивнейший программатор на кусочке монтажной платы или просто в воздухе:

Далее, запускаем PonyProg. Жмем Setup/Interface setup в меню и выбираем порт. Потом, Setup/Calibration, проводим калибровку скорости. Соединяем программатор с компьютером. Подаем питание на контроллер. В главном окне сверху справа выбираем AVR micro и, в зависимости от используемого контроллера, или ATTINY2313, или AT90S2313. Можно проверить правильность подключения и настройки, нажав кнопку "Read Device" слева. Если все нормально и ошибок не обнаружено, открываем .hex файл и давим кнопку "Write Device". Идет запись и проверка. Все. Программа на месте.

ВАЖНО! Для правильной работы контроллера ATTINY2313 нужно еще запрограммировать FUSE-биты. Дело в том, что эти микросхемы по умолчанию тактируются от встроенного RC- генератора, и без этой операции DDS будет работать с тактовой частотой порядка 1 МГц, а не с частотой кварца. Выбираем пиктограмму с "замком" "Security and configuration bits", в появившемся окне нажимаем "Read". Загружаются текущие значения. Снимаем все флажки. И жмем "Write". Готово.

Неправильной установкой FUSE-bits можно вывести контроллер из строя. У меня произошло такое однажды, когда программировал с кварцем, частота которого превышала паспортную для данной микросхемы. Снял все флаги, записал и потерял связь с контроллером. Попытки тактировать от внешнего генератора не привели ни к чему. :( Для пущей безопасности можно сначала снять все флажки кроме CKDIV8. Нажать "Write". Если все пройдет нормально, контроллер уже будет работать от внешнего кварца, но с делением тактовой частоты на 8. И уже потом снять флажок с CKDIV8 и снова записать FUSE-bits. Повторюсь, что все эти манипуляции справедливы только для TINY контроллеров.


ПРОТОКОЛ ОБМЕНА.


DDS понимает следующие команды:


УПРАВЛЯЮЩАЯ ПРОГРАММА.

Программа написана "под себя", но, надеюсь, будет полезна и тем, кто захочет повторить и использовать вышеописанную конструкцию.Скачать. Распакуйте архив в любую директорию. Получим 2 файла: dds_control.exe (собственно программа) и dds.ini (файл настроек). Прежде, чем запускать dds_control.exe нужно правильно установить параметры порта и значение частоты используемого кварца в dds.ini. Это первые 3 строки. Остальные строки можно не трогать. В моем варианте кварц заводился на более высокой частоте, что в принципе не имеет значения. Подбором Crystal в dds.ini и осуществляется калибровка.

[DDS]

DDS_Port=COM2

Port_Speed=9600

Crystal=12506800

Freq=137700

Mode=DFCW

Dot=1

MSG1=EW6BN

MSG2=EW6BN O EW6GB K

MSG3=GB

MSG4=GB

B_PAUSE=10

Подключаем DDS к выбранному порту и запускаем программу. Если настройка и распайка сделана верно увидим нечто подобное на:

Управляющая программа для DDS. Главное окно.

Пункт меню Setup позволяет изменять параметры порта (нужен перезапуск программы для вступления в силу сделанных изменений), Mode - QRSS или DFCW. Поскольку последний вид в Беларуси пока не разрешен, я не уделял особого внимания настройке GAP и иже с ними. Если кому будет нужно - с удовольствием сделаю. Dot - длина точки.

Кнопки на правой стороне окна позволяют управлять частотой, либо посредством "<" "<<" "<<<" ">>>" ">>" ">" с шагом 1, 10, 100 либо, установив флаг "Manual", набрать непосредственно с клавиатуры (только целое значение). Кнопки "Push PTT" и "Release PTT" позволяют проверять цепи прием/передача, а "Push Tone" и "Release Tone" подавать вручную сигнал на PA, или стартовать/ останавливать DDS, если он используется в режиме лабораторного генератора сигналов.

Слева расположены инструменты для проведения QSO или работы в режиме маяка. Все просто. Набираем нужный текст и жмем Send, соответствующий тексту. Автоматически поднимается PTT и начинается передача. Для расчета времени, необходимого для передачи сообщения в выбранной моде, служит кнопка "Recalc times on hints". Подведя курсор мыши к интересующему полю, получаем расчетное время передачи.

73! До встречи на 137. EW6GB in KO45CN