Cинтезатор частоты. МодернизацияЭтот материал
был опубликован в журнале 1. ВведениеДавным давно, когда компьютеры были большими, а точнее в апреле прошлого года, вниманию почтеннейшей публики было предложено описание синтезатора частоты КВ-трансивера [1]. Это однопетлевой PLL-синтезатор с частотой сравнения 4кГц, но, благодаря использованию оригинальной методики формирования мелкой сетки путем сдвига частоты опорного кварцевого генератора, имеющий шаг перестройки частоты 12..15Гц. Кроме того, его отличает несколько необычный способ управления частотой -- с помощью манипулятора телеграфного ключа, без использования традиционного валкодера. За время, прошедшее с момента публикации, этот синтезатор был успешно повторен многими радиолюбителями, что доказывает правильность заложенных в нем решений. Разумеется были вопросы, замечания, выявились некоторые недостатки (кстати, благодарю всех, кто откликнулся на эту публикацию, ваши советы были учтены при доработке конструкции). И вот, настал момент, когда масса свалившихся на меня замечаний и предложений достигла критического значения, что заставило превозмочь свою природную лень и взяться за написание сего опуса. :-) Эта статья является продолжением вышеназванной публикации и для правильного восприятия материала рекомендую вначале ознакомиться с [1]. Если у вас нет под рукой журналов 'Радиолюбитель. КВ и УКВ' NN4,5 за 1998г., здесь можно найти электронный вариант. Нет необходимости описывать достоинства данной конструкции, нашей целью является 'выявление недостатков и их устранение'. Итак... 2. НедостаткиДа, чаще всего мне пеняли на то, что нет в моем синтезаторе валкодера... Конечно, через неделю работы с манипулятором про валкодер вспоминаешь все реже, через две -- начинаешь привыкать, а через месяц вообще не представляешь как можно работать иначе... но, все-таки валкодер пришлось делать. Правда это повлекло за собой удаление из программы функций телеграфного ключа. Дело в том, что примененная в синтезаторе однокристальная ЭВМ имеет объем памяти программ всего 2К, и поверьте, это не очень много. Даже писанная на Ассемблере, вручную оптимизированная программа, так и норовит выйти за этот, предназначенный ей судьбой предел. :) Так что же делать? - но об этом чуть позже. Второй, менее заметный, но не менее неприятный недостаток -- дискретность установки значения ПЧ 1кГц. И это при том, что точность индикации частоты -- 100Гц. Получается что необходимо либо подгонять частоту фильтра основной селекции и опорного кварцевого генератора трансивера к круглому (с точностью до 1кГц) значению, либо мириться с систематической погрешностью индикации частоты, причем на всех диапазонах, и к тому же, имеющей на разных диапазонах разный знак. Причина -- опять же упрощение программы с целью уменьшения объема кода. Третьим недостатком является необходимость тщательнлй и скрупулезной настройки опорного кварцевого генератора 8мГц. Если бы этот генератор не перестраивался с помощью ЦАП то никакой проблемы не возникло бы. Все решилось бы одним подстроечным конденсатором... Но увы. Чаще всего, при установке нужного перекрытия по частоте, нижняя частота генератора сдвигается, при попытке точно выставить частоту 'съезжает' перекрытие. А подтачивать кварц ой как не хочется... Ведь только от него зависит общая стабильность синтезатора. Но при неточно выставленном кварце появляется погрешность установки частоты синтезатора, причем разная на разных диапазонах. Да еще зависящая от коэффициента деления. Четвертый недостаток -- невозможность работы с преобразованием вверх. Это с самого начала не предусматривалось и ввести простыми средствами в существующую программу было невозможно. Пятый, и, наверное, последний недостаток заключается в том, что этот синтезатор изначально проектировался для одной фиксированной ПЧ. Естественно, все его параметры жестко 'зашиты' в ПЗУ и могут быть изменены только путем перекомпиляции программы и полного переписывания EPROM (памяти программ). Это было обусловлено тем, что примененная однокристальная ЭВМ не имеет энергонезависимой памяти (EEPROM или NVRAM), а использовать внешнюю микросхему памяти не хотелось, так как это очень здорово повысило бы стоимость изделия. К тому же, процедуры работы с внешней энергонезависимой памятью тоже занимают драгоценное место в памяти программ. Так что же делать? -- 3. Менять процессор!Да, многие из нас знакомы с понятием 'апгрейд'. Когда-то мы сменили РК-86 на 'Синклер','Синклер' на IBM PC/XT, затем XT на AT-286 ('двойку'), 'двойку' на 'тройку', 'тройку' на 'четверку', 'четверку' на 'Пентиум', 'Пентиум' на 'Целерон'... И конца этому процессу не видно. Но, пардон, это я отвлекся. :) Итак, конечно, AT89C2051, это очень приятный процессор. Система команд MCS-51 (то бишь не надо изучать что-то новое), дешевый, широко распространенный. Но увы, он больше нас не устраивает. И как хорошо что фирма 'Atmel' все это время не стояла на месте и разработала новое семейство однокристальных ЭВМ -- AVR (AVR -- это зарегистрированная торговая марка фирмы 'Atmel'), построенных на основе Enhanced RISC Architecture (улучшенная RISC архитектура). Это серия AT90Sxxx. Можно много писать о достоинствах этих процессоров, проще посмотреть на http://www.atmel.com. Из этой серии нам наиболее подходит AT90S2313. Он полностью совместим по цоколевке с AT89c2051 и может быть вставлен в ту же панельку, практически без переделки схемы. Но зато он примерно в 12 раз производительней (при той же тактовой частоте) имеет 'на борту' 128 байт энергонезависимой памяти (EEPROM), очень эффективную систему команд, так что при том же объеме памяти программ (EPROM) на нем можно реализовывать более сложные алгоритмы. Правда система команд не имеет ничего общего с AT89C2050 и программу пришлось полностью переписывать, но это, как говорится, 'мои проблемы'. :) А вот вашей проблемой будет... 4. Аппаратная доработка синтезатораПрежде всего, разберемся что такое валкодер и как его подключить. Что нам требуется от валкодера? -- преобразование угла поворота в цифровой код. Вы никогда не разбирали компьютерную мышку? Если да, то наверняка заметили там диск с прорезями и две оптопары светодиод-фотодиод. Да, это и есть всеми нами любимый валкодер. Диск вращается, пересекает своими 'спицами' световой поток -- на выходе получается импульсный сигнал. При равной ширине прозрачной и непрозрачной областей диска это будет меандр. Для того, что бы отследить направление вращения диска устанавливается вторая оптопара, так смещенная относительно первой, что бы импульсы идущие с нее были сдвинуты по фазе относительно первых на 90 градусов. См. Рис.1. На Рис.2 показано относительное расположение диска валкодера и оптопар для получения необходимого фазового сдвига. Алгоритм определения направления вращения очень прост. Процессор периодически проверяет состояние сигнала на выходе оптопары 1 и ожидает положительного перепада. Дождавшись перепада от лог.0 к лог.1 немедленно проверяет состояние сигнала на выходе оптопары 2 и если это лог.1 -- фиксирует шаг вверх по частоте. В противном случае -- шаг вниз. Это все конечно хорошо, но есть тут одна большая неприятность: валкодер, с которым действительно удобно работать, должен выдавать не менее 500..1000 импульсов на один оборот. Конечно, в кустарных условиях, 'на коленке' такой валкодер сделать невозможно. Придется или искать промышленное устройство (подобные узлы используются в станках с ЧПУ) или делать самодельный валкодер с диском в 30..50 штрихов и пытаться как-то обойти эту проблему программно. Пример самодельного валкодера, который можно взять за основу при изготовлении, можно найти в [2]. А можно, кстати, попытаться смастерить что-то из уже упоминавшейся выше мышки... Принципиальная электрическая схема валкодера приведена на Рис.3. Здесь можно увидеть два операционных усилителя, включенных как компараторы. Они предназначены для формирования импульсов, подаваемых на вход процессора синтезатора. В данном примере использованы два из четырех ОУ микросхемы LM324 -- одного из самых распространенных счетверенных операционных усилителей. Два оставшихся не используются. В принципе, тут может работать любой операционный усилитель допускающий однополярное питание напряжением +5В. Сигналы с выхода валкодера 'WalOut1' и 'WalOut2' необходимо подать на входные клеммы процессорной платы синтезатора 'Man In' (XS3, XS4), как вы понимаете, вместо манипулятора. Напряжение питания +5В на схему валкодера можно снять с пятивольтового стабилизатора DA3 процессорной платы, а можно использовать отдельный стабилизатор, благо они сейчас дешевы. Замена процессора (правильней было бы написать 'однокристальной микро-ЭВМ', но 'процессора' короче) AT89C2051 на AT90S2313 требует небольшой доработки. В связи с тем, что у нового процессора активный уровень сигнала 'reset' изменился на противоположный и цепи аппаратного сброса находятся на кристалле, надо изъять из схемы конденсатор C6 (конденсатор, включенный между выводом DD1.1 и плюсом питания) и вместо него впаять резистор номиналом примерно 1к. Резистор удобнее ставить вертикально. Несколько изменилась конфигурация клавиатуры и назначение клавиш. Расположение клавиш новой клавиатуры изображено на Рис.4. На рисунках Рис.5 и Рис.6 приведен чертеж печатной платы клавиатуры. И, наконец, надо исправить маленькую неточность в прошлой статье. На печатной плате присутствуют фильтрующие RC-цепочки, не отраженные на принципиальной схеме. Они подключены к контактам xs13..xs16. Номиналы резисторов -- 100 Ом, конденсаторов -- 1000 пФ. Кроме этого изменилось назначение некоторых выходных контактов синтезатора. Сигнал 'CW out' перенесен с xs19 на xs12. На xs19 теперь сигнал управления внешним делителем '4/8', используемым при работе с значением ПЧ более 8мГц. Кстати, о делителях. На Рис.7 приведена схема одного из вариантов первого смесителя трансивера, совмещенная с делителем на 2/4, который может использоваться с данным синтезатором. Схема очень простая и комментариев не требует. И, наконец, последнее, что заслуживает вашего внимания, это... 5. Описание новой версии программыКак было уже сказано, программа претерпела существенные изменения. Прежде всего в десять раз повышена точность внутреннего представления частоты, изменены алгоритмы пересчета внутреннего представления частоты в десятичный формат, пригодный для отображения на индикаторе, что позволило задавать любое значение ПЧ от 0 до 167мГц, причем значение ПЧ задается индивидуально для каждого диапазона с точностью 100Гц. При работе с преобразованием вверх обеспечивается полное перекрытие всего КВ участка (1..30мГц). Введены два дополнительных диапазона: 50мГц и 144мГц. Хотя сам синтезатор и не позволяет работать прямо в этих диапазонах, он может правильно индицировать частоту при работе трансивера с трансвертерной приставкой. Достаточно только корректно установить значение ПЧ. Введен сервисный режим, в котором пользователь вручную может изменить все настройки синтезатора, как то: значение ПЧ для каждого диапазона, значение частот ГУН, значения частот диапазонов, коэффициенты деления внешнего делителя частоты, раскладку клавиатуры, начальную скорость перестройки частоты валкодером, скорость сканирования. Кроме этого были изменены некоторые режимы работы. Обратимся к рисунку Рис.4 и разберем функциональное назначение клавиш.
А теперь осталось самое интересное -- 6. Редактирование энергонезависимой памятиОСТОРОЖНО, ЭТО ОЧЕНЬ ОТВЕТСТВЕННАЯ ОПЕРАЦИЯ. НЕВЕРНЫМИ ДЕЙСТВИЯМИ ЛЕГКО ЛИШИТЬ СИНТЕЗАТОР РАБОТОСПОСОБНОСТИ! В ЭТОМ СЛУЧАЕ ИСПРАВИТЬ СИТУАЦИЮ МОЖНО БУДЕТ ТОЛЬКО ПЕРЕПИСАВ EEPROM C ПОМОЩЬЮ СПЕЦИАЛЬНОГО ПРОГРАММАТОРА. Для того что бы войти в сервисный режим редактирования энергонезависимой памяти необходимо нажать любую клавишу и, удерживая ее, произвести аппаратный сброс процессора, например выключить и снова включить питание, или на короткое время соединить с массой DD1.1. Если вы сделали все правильно, на дисплее появится надпись: EE 00-22Две буквы 'Е' в первой и второй позиции дисплея показывают что синтезатор находится в сервисном режиме редактирования EEPROM. Затем, после пробела следует двухразрядное шестнадцатиричное число -- адрес ячейки памяти и через тире -- содержимое этой ячейки, также в шестнадцатиричном виде. Нажимая клавиши 'A<->B' и 'Dial' можно, соответственно, уменьшать и увеличивать адрес ячейки, а клавишами 'M->A' и 'Lock' изменять содержимое ячейки, находящейся по этому адресу. Для записи нового значения ячейки памяти в EEPROM достаточно нажать клавишу 'Enter'. Чтобы выйти из сервисного режима можно нажать клавишу 'ESC' или просто выключить питание. Исходное состояние электрически перепрограммируемого ПЗУ (EEPROM) приведено в Таблице 1. В таблице 2 приведена та же информация, но пригодная для записи в EEPROM c помощью программатора. Таблица 1. Дамп EEPROM для синтезатора с ПЧ 5мГц.
Таблица 2. Дамп EEPROM в Intel HEX формате
Разберем назначение каждого байта EEPROM. С адреса 0h по 0bh находится таблица перекодировки клавиатуры. В этой таблице содержатся коды клавиш, расположенные в порядке возрастания их номеров. То есть клавиша с кодом 22h возвращает цифру 0, с кодом 15h -- цифру 1 и так далее. Соответственно, клавиша с кодом 16h возвратит цифру 0ah, а с кодом 12h -- 0bh. Если мы в этой таблице поменяем два кода местами то цифры, возвращаемые клавишами, имеющими эти коды, тоже поменяются. 000000 22 - код
клавиши, возвращающей 0 Если вы не хотите 'рубить сук на котором сидите', не стоит менять коды клавиш, которые используются для редактирования EEPROM. Например, если вы испортите код клавиши 'Enter', вы больше уже ничего не сможете сделать. Останется только переписывать EEPROM с помощью программатора. И вообще, если вы решили редактировать эту секцию -- сначала трижды подумайте. С адреса 0ch по 12h находятся значения частот границ ГУН-ов. Они представлены как двухбайтные шестнадцатиричные числа. Причем, для того что бы уложить их в два байта, значение частот было разделено на 256 (по сути, был отброшен младший байт). 00000c 36 - верхняя
частота ГУН1 или нижняя ГУН2 Младший байт двухбайтного числа находится по младшему адресу. Значит мы имеем: Vfo12 = 0436h; Переведем в десятичный формат и умножим на 256: 0436h = 1078*256 = 275968; Таким образом мы получили границы частот ГУН-ов, представленные с точностью 100Гц. VFO1 - ???????..27.5968мГц; Частоты нижней границы нижнего ГУН-а и верхней верхнего в вычислениях не используются и в таблице не приведены. Теперь, зная границы ГУН-ов для своей ПЧ, вы можете проделать обратную операцию, а именно: взять значение частоты, округленное до 100Гц, разделить его на 256, перевести в шестнадцатиричный формат и занести в соответствующую ячейку EEPROM. Не забудьте, младший байт по младшему адресу! По адресу 14h находится ячейка, определяющая начальную скорость перестройки частоты валкодером. Ее значение может лежать в диапазоне 0..0ah. 0 -- минимальная скорость перестройки, 0ah -- максимальная. По адресу 15h находится ячейка, определяющая скорость перестройки в режиме сканирования частоты. Ее содержимое может принимать значение: 00000000b = 0h -- скорость
перестройки 400 шагов в секунду; По умолчанию установлен код 7h, что соответствует 50 шагам в секунду. С адреса 16h по 41h находится таблица значений промежуточной частоты для всех диапазонов. Каждое значение представлено четырехбайтным двоичным числом. Если на этом диапазоне частота ПЧ прибавляется к частоте входного сигнала -- число положительное, если вычитается -- отрицательное.
Диапазоны расположены в памяти в следующем порядке: 50 - 0fffb450fh; Мы видим, что в таблице присутствуют четыре различных числа: 0c350h, 0fffb450fh, 0ffff3cb0h, 0ffeced2fh. Первое из них положительное, остальные отрицательные. Знак числа определяет старший бит старшего байта. Если он равен единице -- число отрицательное. Переведем эти числа в формат, более понятный человеку. 00000c350h = 50000 На диапазонах 1.9, 3.5, 7, 10 значение ПЧ равно 50000 (5 мГц, округленное до 100Гц), на 14, 18, 21, 24, 28 -- -49999. На этих диапазонах ПЧ вычитается из рабочей частоты трансивера. Разумеется, эти значения можно скорректировать в ту или в другую сторону, добиваясь точного соответствия частоты приема/передачи и показаний индикатора синтезатора. Таким образом можно скомпенсировать неточность установки частоты опорных кварцевых генераторов. Особо отметим диапазоны 50 и 144мГц. В этом случае трансивер работает на одном из КВ-диапазонов совместно с трансвертером, переносящим спектр частот приема/передачи, в УКВ диапазон. Например, трансвертер 144 мГц с частотой первого гетеродина 120мГц переносит область частот 24.0..24.5 в диапазон 144.0..144.5мГц. Для правильного отображения на дисплее синтезатора частоты 144мГц при работе в диапазоне 24мГц мы должны занести значение ПЧ: 144-(24-5)=125, где: 125 - значение ПЧ,
заносимое в таблицу; Так как это значение вычитается из частоты приема/передачи -- число в таблице должно быть отрицательным. Таким же образом можно вычислить значение ПЧ для трансвертера 50мГц. Если ПЧ вашего трансивера отличается от приведенного в данной таблице, таблицу необходимо скорректировать. Для этого, как и в случае занесения значений частот ГУН-ов, надо следовать от обратного. Взять свое значение ПЧ, округлить его до 100Гц, перевести в шестнадцатиричный формат, если на этом диапазоне частота вычитается -- вычесть это число из 0ffffffffh (можно просто побитно проинвертировать и прибавить единичку) и побайтно занести в соответствующие ячейки EEPROM. (Еще раз повторю: младший байт по младшему адресу). С адреса 46h по 71h располагается таблица диапазонов. Она содержит для каждого диапазона трехбайтное число -- значение частоты, на которую перейдет синтезатор при переключении на данный диапазон и один байт, определяющий состояние порта, управляющего коэффициентом деления внешнего делителя частоты. Таким образом, на каждый диапазон в таблице отведено четыре байта. 000046 fc a6 0
- значение частоты диапазона 50мГц 00004a 44 48 00
- значение частоты диапазона
1.9мГц 00004e a0 8c 00
- значение частоты диапазона
3.5мГц 000052 00 13 01
- значение частоты диапазона 7мГц 000056 50 8b 01
- значение частоты диапазона 10мГц 00005a 00 26 02
- значение частоты диапазона 14мГц 00005e 08 c3 02
- значение частоты диапазона 18мГц 000062 2c 3a 03
- значение частоты диапазона 21мГц 000066 a8 cc 03
- значение частоты диапазона 24мГц 00006a 90 4d 04
- значение частоты диапазона 28мГц 00006e dc fe 15
- значение частоты диапазона 144мГц Для примера, переведем в десятичный формат частоту диапазона 144мГц: 15fedch = 1441500. Байт порта может принимать следующие значения: 10010011b = 93h
- коэффициент деления 2; Необходимо отметить, что все вышесказанное справедливо для версии программы 1.91a от 26.01.1991г. В последующих версиях возможны некоторые изменения, которые, разумеется, будут отражены в документации к синтезатору. Здесь можно взять дамп EEPROM (56K) от последней версии программы. 7. Заключение. А что же дальше?А дальше планируется серьезная переделка 'железа'. Переход с 1508ПЛ1 на однокристальный синтезатор фирмы 'Motorola', использование вместо самодельного ЦАП -- промышленного, например 572ПА1 в оригинальном включении, переход на процессор AT90S4414 или AT90S8515, перевод печатной платы на SMD-компоненты (по-русски говоря, на компоненты для поверхностного монтажа), объединение в одной программе возможностей управления валкодером и функций телеграфного ключа, связь синтезатора с компьютером, а может даже управление синтезатором через радиоканал посредством TNC... Планов много, было бы время и здоровье... 8. Литература
(c)1999г. Alexey L. Beliansky |