Зайдя в очередной раз на сайт местного радиомагазина, обнаружил в продаже интересный девайс. Модуль DDS (direct digital synthesis) - синтезатор частоты на микросхеме AD9850. Такой:
Заявленные характеристики:
- частота генерации от 0,029 Гц до 62,5 МГц;
- количество разрядов ЦАП – 10;
- выходной ток ЦАП – до 10,24 мА при напряжении ограничения 1,5 В;
- встроенный компаратор для получения двух оппозитных ТТЛ выходов;
- возможность цифрового управления частотой как по параллельному, так и по последовательному интерфейсу;
- напряжение питания – 5 В;
- потребляемый ток до 96 мА.
И вот, приобретя данный девайс, я решил тряхнуть стариной и исключительно для удовольствия и из любви к искусству изготовить блок управления любительским КВ приемником прямого преобразования на диапазоны 40 и 80 метров.
Для управления модулем синтезатора будем использовать ARDUINO UNO R3 (в моем случае – китайский совместимый клон). Информацию о частоте и других параметрах будем отображать на алфавитно-цифровом ЖК дисплее 16*2, регулировать частоту будем энкодером, переключение диапазонов – логический уровень «0» или «1» на одном из входов ARDUINO.
Схема устройства:
Выходной синусоидальный сигнал снимается с выхода OUT2 платы синтезатора. Амплитуда 0,5 В, постоянная составляющая – 0,512 В, выходное сопротивление – 100 Ом.
Выдаваемые частоты по диапазонам:
- 80 м – 1745,00 – 1900,00 кГц (принимаемый диапазон 3490 – 3800 кГц);
- 40 м. – 3500,00 – 3610,00 кГц (принимаемый диапазон 7000 – 7220 кГц).
Смеситель приемника прямого преобразования работает на частоте гетеродина, равной половине частоты принимаемого сигнала, поэтому выходные частоты синтезатора имеют соответствующие значения. При этом на ЖК дисплей выводится значение частоты принимаемого сигнала, т.е. из диапазона, указанного в скобках.
Для регулирования частоты используется энкодер BR1 на 24 положения, 5 выводной, с кнопкой. Кнопка энкодера управляет режимом «Грубо/Точно». После включения устройства по умолчанию включен режим «Грубо». При этом шаг изменения частоты принимаемого сигнала – 1 кГц. При однократном нажатии на кнопку (вал) энкодера режим переключается в «Точно». Шаг изменения частоты принимаемого сигнала при этом уменьшается до 10 Гц. При этом на ЖК дисплее справа от значения частоты отображается буква «Т». Повторное нажатие кнопки энкодера возвращает режим «Грубо».
На нижнюю строку ЖК индикатора выводится полоса прогресса, отображающая текущую частоту относительно полного диапазона.
Переключение диапазонов осуществляется подачей логического «0» (диапазон 80 м) или «1» (диапазон 40 м) на вход «BAND». Вход активный, т.е. при обрыве линии, на нем присутствует логическая единица, благодаря подключенному внутреннему подтягивающему резистору контролера ARDUINO. Таким образом, для переключения диапазонов достаточно механической коммутации данного входа на массу.
На вход ААС подается напряжение АРУ приемника для вывода на дисплей показаний S-метра. В моем случае напряжение АРУ 6-10 В соответствует величине принимаемого сигнала S9- S1 соответственно. Значение S выводится на ЖК дисплей.
Кроссовая плата устройства односторонняя, разведена в программе SprintLayout, изготовлена методом ЛУТ. Вид со стороны элементов:
Готовая плата:
Поработав паяльником, получили набор:
В сборе:
В работе:
При разработке использовались материалы статьи: http://nr8o.dhlpilotcentral.com/?p=83
Схема простенького приемника для применения с данным синтезатором мной уже разработана, промоделирована. На времени сборка и наладка. Это будет следующая статья.
Прикрепленные файлы:
- Synthethizer_mod.lay (62 Кб)
- Synthethizer05.ino (10 Кб)
Комментарии (50) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Правда выход слабоватый наверно?
[Автор]
Я не гуру в программировании, а поэксить и создать генератор с такой точностью для любительской мастерской интересно.
[Автор]
float change_step = 0.5;
Строки 162 и 168 - изменение по нажатию кнопки:
change_step = 0.5;//грубая настройка
change_step = 0.005;//точная настройка
Я правильно понимаю?
Строка 32, начальное значение в кГц по умолчанию:
float change_step = 0.5; //это 0,5кГц
Строки 162 и 168 - изменение по нажатию кнопки:
change_step = 0.5;//грубая настройка -это 0,5кГц
change_step = 0.005;//точная настройка -это 0.005кГц = 5Гц
Если записать так:
change_step = 0.0005;//точная настройка -это будет шаг 0.0005кГц = 0,5Гц
[Автор]
Может, подскажите можно ли сделать несколько режимов настройки.
Например, четыре:
Грубая настройка 0,5Кгц оставляем
следующая настройка 0,1Кгц
потом 0,01кГц
и четвертая 0,001кГц
т.е. переключаются в последовательности по кругу.
[Автор]
Ловите. Четыре режима. Плюс убрал вывод на дисплей удвоенной частоты. Выводится реальная. Вместо буквы "Т" выводится номер режима (0,1,2,3).
Предупреждаю, что на практике не проверял. Теоретически, должно работать. А вообще - Ардуино прекрасная штука для изучения программирования. Это одно удовольствие - просто, как грабли. Современный электронщик должен знать, как минимум, три языка - родной, матерный и С
При старте выводится индикация "0" энкодером шагает по 0,5кГц. Частотомер на выходе AD9850 генератора подтверждает.
Нажимаю на кнопку энкодера на LCD выводится индикация "1" , НО шаг выставляет 0.001.
При следующих нажатиях индикация выводится "2"
шаг остается 0.001. Индикация "3" шаг 0.001.
Индикация "0" шаг остается 0.001 на 0,5 не переключается.
Резюме - при первом нажатии на энкодер выставляет change_step = 0.001 и последующие нажатия кнопки энкодера не меняют шаг.
Хотя индикация выводится от 0 до 3 по кругу .
Нехватка break;
записать надо так
change_step = 0.5;
break;
case 1:
change_step = 0.1;
break;
case 2:
change_step = 0.01;
break;
case 3:
change_step = 0.001;
break;
Я еще изменил количество символов для отображения частоты сигнала вот так:
lcd.print(Frequency, 3);// частота сигнала
Спасибо огромное за труд seawar!!!
Поправленый скетч прицепил
[Автор]
Просто Радиолюбители Советской Эпохи привыкли хорошо изучать инструкции. Ну и деду надо с внуками чем то увлекаться. 73!
[Автор]
[Автор]
[Автор]
Я в ардуино не силён.
Но есть такой синтез. И хочется многодиапазонности.
Если вам не трудно, дайте скетч для ардуино, чтобы на 8 диапазонов.
[Автор]
[Автор]
PS: В "полевых" условиях данный скетч пока не проверялся.
Я так думаю что ПЧ можно использовать любую, а как быть с преобразованием вверх и вниз одновременно?
[Автор]
[Автор]
Например: "if (current_band) >2 i_freq = -500 else i_freq = 500;"
[Автор]
[Автор]
( _Synthethizer05_mod_AVG.ino)
Или есть какой то более поздний вариант скетча, который обеспечивает работу в восьми диапазонах?
[Автор]
[Автор]
Каким выходам (band_commutator.spl) соответствуют входы А4, А5 и 13 Arduino?
[Автор]
Заложена хорошая фишка :) с изменением шага настройки. В режиме, когда шаг (Q или T) не отображается (Это третье состояние, Пустое знакоместо на индикаторе) ручкой энкодера производится переключение сразу в одну из трёх точек диапазона: начало, середину или конец.
[Автор]
Формируются сигналы диапазона 160м (000) и 80м (001). Остальные разряды при любой коммутации остаются нулями.
В корректности последних строк скетча есть сомнения.
Например в строке: return(digitalRead(band_select)+digit1+digit2)
аргументом является сумма: (band_select)+digit1+digit2 В то же время в выборе диапазона участвует только первое слагаемое: (band_select). И ещё вопрос:Почему для формирования разрядов Q2 и Q3 не использованы цифровые пины Ардуино? Ведь пины 8, 9, 10 и 11 остались свободными! Может имеет смысл задействовать для переключения диапазонов три цифровых пина?
Короче: будем думать :)
[Автор]
Да, еще замечание: диапазоны переключаются ТОЛЬКО последовательно. Скетч реагирует на изменение на пине 13 (чет - нечет). Так что, если пытаться переключать только старшие разряды, реакции не будет.
Спасибо за предоставленную информацию. Синтезатор должен получиться хороший. Будет работать. Всего доброго!
[Автор]
[Автор]
[Автор]