Достав с чердака основную плату простенького трансивера на ЭМФ с 2-мя КТ315 в УПЧ, однажды сделанную мною в далекие 0-е решил сделать синтезатор для нее. Покопавшись в ящике моего рабочего стола нашел дисплейчик когда-то покупавшийся для синтезатора на диапазон 2 метра. Дисплей примитивный, KO-4B2 с контроллером HT1611. Подробное описание его работы описано ЗДЕСЬ. Также обнаружил пару контроллеров AT90S2313 фирмы "ATMEL" с всего 2кБ FLASH-памяти и 128 байтами энергонезависимой памяти EEPROM. Не стал заморачиваться синтезатором с ФАПЧ так как надо лепить ГУН-ы делители и т.д. Порывшись еще нашел платку DDS-генератора для ARDUINO на AD9850 купленную когда-то на E-BAY за 6$. Короче вот с всего этого и решил сделать подобие синтезатору частоты а-ля ГПД. Собственно схема электрическая принципиальная:
Проект включая чертежи печатных плат под SMD и стандартные комплектующие в Proteus 7.8 ЗДЕСЬ. Не буду описывать работу схемы, так как основную часть работы делает программа микроконтроллера. Пишу на Си в среде CodeVisionAVR, проект открытый скачать можно ЗДЕСЬ. Изначально синтезатор задумывался для работы с частотой ПЧ 500кГц, но позже в ходе экспериментов с платой трансивера на ЭМФ решил последний сменить на простенький 6-ти кристальный кварцевый фильтр. Поэтому программа написана для Fпч 8862500 Гц(PAL-овские кварцы). Из-за очень маленького объема FLASH-памяти микроконтроллера(программа занимает 98,5%) в синтезаторе нет никаких сервисных меню и сменить Fпч возможно только в тексте программы:
if (b==3) {freq=(4294967296/100000000)*(f[b]-8862500);} else {freq=(4294967296/100000000)*(f[b]+8862500);};
Синтезатор рассчитан на работу в 4-х любительских диапазонах 160, 80, 40 и 20 метров, имеет 4-выхода с открытым коллектором и защитным диодом для управления диапазонными полосовыми фильтрами(ДПФ). Переключение диапазонов одной единственной кнопкой SB1 по кругу, при смене диапазонов и после выключения синтезатора частоты запоминаются в EEPROM:
eeprom long f[4]={1900000,3650000,7050000,14150000};
Диапазоны ограничены по частоте переделы которых можно изменить в программе в большую или меньшую сторону в массиве:
eeprom long f_m[2,4]={
{1810000,3500000,7000000,14000000},
{2000000,3800000,7200000,14350000}
};
Опорный генератор для DDS я использовал на 100МГц фирмы RALTRON(такие ставлю в SDR-ы), можно применить другой на частоту 100...125Мгц. Частота генератора прописывается вручную в 62 строке программы:
if (b==3) {freq=(4294967296/100000000)*(f[b]-8862500);} else {freq=(4294967296/100000000)*(f[b]+8862500);};
Перестройка по частоте организована с помощью примитивного энкодера из шагового двигателя(ШД). Я использовал от принтера EPSON фирмы MITSUMI M42SP-6TG. Пробовал самые разные... работают все! Формирователь импульсов энкодера сделан по схеме на рис.1 ОТСЮДА. В программе работает по внешнему прерыванию INT0:
interrupt [EXT_INT0] void ext_int0_isr(void) //Прерывание по вращению энкодера
{ s++;
if (!val) {f[b]=(f[b]/step*step)+step;} else {f[b]=(f[b]/step*step)-step; };
SaveDds(f[b]);
}
Реализована функция "УМНОГО" энкодера. Путем измерения количества импульсов за определенный промежуток времени изменяется шаг перестройки синтезатора. В моем варианте при медленном вращении шаг 10Гц, при "плавном" вращении 100Гц и 500 при "быстром". Параметры управления "УМНЫМ" энкодером можно менять в ту или иную сторону под любое количество импульсов ШД.
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ c++;
if (c==30) {SaveDds(f[b]); ss=s; s=0; c=0; };
if (ss>10) {step=100;} else {step=10;};
if (ss>20) {step=500;};
Функцию "выравнивания" шага перестройки при его смене реализовал математическим методом по формуле:
f[b] = ( f[b] / step * step ) - step;
Где f[b] - частота текущего поддиапазона и step - шаг перестройки
Ну вот это все что умеет данный синтезатор...
Есть задумка добавить остальные КВ-диапазоны, но боюсь что памяти мк не хватит так как уже 98,5% занято. Можно переписать софт на более "компактном" языке программирования, но увы умею только на Си. Если возникнут вопросы, добро пожаловать на ФОРУМ.
C ув.Александр UR4QBP 73!
|