|
Дата: 01 Ноя 2003 20:43:33
#
Там не циферная клава. Там просто плюс-минус кнопки. Вообще контроллер синтезатора очень специфический - для дешевой УКВ вещательной станции делался. Т.к. на скорость выполнения пофиг, код писался на JALe - некой дебильной породии на паскаль.
Файл с железной частью проекта сливаю в копилку.
Известные ошибки и нарезки из описания ниже...
В папке hardware лежит папка TRANSMITTER. Схема связи синтезера с генератором -
почти НЕРАБОТОСПОСОБНА. В релизовой версии использован ГУН на двухзатворном полевике BF998. Вместо charge pump использована классическая схема на диф. опере. Схема выходного каскада усилителя - при этих
номиналах деталей - работает хреново. Очень хреново. Переписывать под
реальные номиналы впадлу. Да и не помню я их уже. Год назад делал
этот девйс.... В гербер файлах для платы процессора - глюк. Какая-то дорожка рядом с монтажной дыркой коротнула на землю. В pcb файлах глюка нет. Вывод. Контроллер можно смесло собирать, а вот ВЧ часть.... АХТУНГ!!!
______Кусок из доки которую писал про данный прибор....
На рисунке ниже показана таблица истинности фазовых детекторов для микросхемы ФАПЧ
mc145170 компании Motorola. Именно эта микросхема будет применена в нашем передатчике.
Она имеет два фазовых детектора. Детектор А подключен к выводу PDout и
функционирует следующим образом: если сигнал ГУНа по фазе отстает от опорного, то на
время отставания вывод переводится в состояние логического 0, если система находится в
состоянии синхронизма, то PDout переводится в состояние высокого импеданса, т.е.
попросту отключается, если происходит запаздывание сигнала от ГУНа, то PDout переходит
в состояние 1. При такой работе мы можем поставить на выход PDout конденсатор, который
будет как бы запоминать напряжение на управляющем входе ГУНа, которое соответствует
требуемой частоте (на самом деле дело не ограничивается просто конденсатором, и для
обеспечения эффекта маховика, добавляют RC цепь).
Второй фазовый детектор (B) работает немного иначе. Он подключен к выводам и . При
отставании переводится в состояние 0, при опережении переводится в 0. Во время
синхронизма оба выхода имеют короткие одновременные пульсации.
Почему именно MC145170-2 является наиболее подходящим вариантом для нашего
передатчика? Во - первых, это одна из немногих ИС, которая несет в себе два типа
фазовых детекторов, что дает нам возможность применять разные системы управления ГУН.
Во вторых, у этой ИС очень удобная система загрузки информации в регистры. Мы можем
обратиться к любому из регистров в случайном порядке, меняя количество тактовых
импульсов. (Об этом я расскажу при описании программы контроллера). В третьих, это
микросхема, проверенная временем и многими разработчиками, вследствие чего существует
огромное количество документации и примеров ее использования. В четвертых, ее цена
составляет 7$, что всего на 75 центов дороже, чем отечественный синтезатор 1508ПЛ1,
который славится своей нестабильностью.
Описание сервера TXER:
Итак, перейдем к описанию программной связки клиент-сервер для удаленного управления
передатчиком. На стороне сервера передатчик подключается к компьютеру через RS232
интерфейс, через который происходит двунаправленный полудуплексный обмен данными.
Режим работы системы имеет вид - запрос удаленного оператора, ответ передатчика,
исключением являются моменты, когда на передатчике производятся изменения нажатием
кнопок. В этом случае передатчик сам отсылает информацию о произошедших изменениях.
Итак, сообщения, которые могут пересылать между собой компьютер и передатчик:
Построены они следующим образом:
<байт дескриптора команды><или ничего или аргумент этой команды>
Сообщения, передаваемые передатчиком:
0x03 - дескриптор состояния усилителя
0x03 0х30 - значит, выключили усилитель
0x03 0х31 - включили
0x02 <stepBIG> <stepSMALL> <R_regH> <R_regL> <C_Reg> где
0x02 - дескриптор настроек
<stepBIG> - большой шаг настройки
<stepSMALL> - малый шаг настройки
<R_regH> - старший байт регистра R (регистр делителя опорного генератора)
<R_regL> - младший байт регистра R
<C_Reg> - регистр настройки MC145170
Например сообщение 0x02 0x64 0x05 0x01 0x90 <0xZZ> означает что большой шаг равен
100, малый 5, в регистре делителя R записано 400, регистр С в примере не привожу, т.к.
описания его битов и их назначение будет ниже.
0x01 <freq_H> <freq_L>
0x01 - дескриптор частоты
<freq_H> - старший байт регистра частоты
<freq_L> - младший байт
Тут маленькая хитрость. Если опорный генератор будет иметь частоту 4000КГц и в
делитель R записать 400, то шаг перестройки будет 10КГц. Соответственно при записи в
регистр N какого либо значения, это значение, умноженное на 10 и даст частоту в КГц.
Это избавляет нас от необходимости писать перекодировщик частоты в значения регистра N.
Например, 0x29 0x4A - это частота 105700КГц.
Сообщения, передаваемые компьютером:
0хА0 - Запрос состояния усилителя.
0хА1 - Включить усилитель, в качестве подтверждения выдаст состояние
0хА2 - Выключить усилитель, в качестве подтверждения выдаст состояние
0хF0 - Запрос частоты.
0хF1 <freqH> <freqL> - установить частоту, записанную в 16 битах freqH и
freqL. После установки передатчик на всякий случай скажет, что он установил на самом
деле.
0xBA - запрос настроек
0xBB - <stepBIG> <stepSMALL> <R_regH> <R_regL> <C_reg> - установить настройки, после
установки выдаст то, что установилось на самом деле.
Разобравшись с командами, приступим к описанию принципа действия сервера и клиента.
Начнем с сервера. Его основной задачей является транслирование данных из TCP сокета в
COM порт. По идее можно просто брать данные из файла сокета и направлять их в файл COM
порта. НО! Связь с передатчиком у нас полудуплексная, соответственно, когда идет
передача данных, прием невозможен. Значит в ситуации, когда мы пошлем последовательно
несколько запросов передатчику, то он попросту не сможет ответить. Можно сделать
задержку на передачу, но где гарантия, что сеть, как среда асинхронной передачи
данных, не создаст дополнительную задержку, и данные не пойдут единой пачкой, что
опять приведет к "захлебыванию" передатчика.
___________________________
Принципиальная схема блока управления представлена на рисунке ниже.
Основу этого блока составляет микроконтроллер PIC16F84, работающий на частоте
4Мгц, который стал почти стандартом в устройствах этого типа благодаря своему
удобству, производительности и доступности. За преобразование логических уровней
TTL<->RS232 отвечает микросхема max232. С помощью нее можно преобразовывать по две
линии в каждом направлении, но мы использует только по одной. Применение
однокристального преобразователя обусловлено тем, что во первых он требует минимальное
количество внешних деталей - всего 4 конденсатора по 1мкФ, что экономит площадь на
плате, а во вторых его цена составляет всего 1$. В качестве индикатора применяется 10
разрядный жидкокристаллический модуль на базе контроллера holtek HT1613, который
управляется по двухпроводной шине. К преимуществам этого ЖКИ можно отнести низкую
стоимость (около 3$) и экономию сигнальных линий. Но, к сожалению, у HT1613 есть
небольшой недостаток, его напряжение питания составляет 1.5В, поэтому на сигнальных
линиях и на питании мы вынуждены ставить делитель напряжения. Расчет этого делителя
производится по известным формулам.
_______
После включения сброс микроконтроллера происходит с микрозадержкой создаваемой
цепью R7 C11, нужно это для того, чтобы завершились переходные процессы в МК. Выход
RB2 подключен к транзистору, с помощью которого управляется реле включения усилителя
мощности. Кнопки управления вынесены на отдельную плату, там же расположены RC цепи
подавления дребезга контактов. Работает это следующим образом. Подключенные к кнопкам
выводы порта B, запрограммированы на подтяжку к питанию, соответственно конденсаторы
заряжены. При нажатии кнопки происходит плавная разрядка, а в случае появления
дребезга он успешно сглаживается, т.к. для новой зарядки конденсатора снова
потребуется время. Через разъем P1:1 возможно внутрисхемное обновление программы
микроконтроллера, что очень удобно для отладки. Через RA0, RA1, RA2 (ENB, DTA, CLK)
передаются сигналы в синтезатор частоты. К выводам Х12, Х15, Х20 подключается RS232
порт компьютера.
На рисунке ниже приведен рисунок печатной платы блока управления и платы кнопок. С
целью экономии (т.к. изготовлении фотошаблона для небольших партий является самым
дорогим этапом производства) плата кнопок выпиливается вручную. Размер платы 66х95 мм.
Для трассировки печатных плат применялась программа pcad2001 и трассировщик SPECCTRA.
________
Теперь о программе МК. Она состоит из основной программы и набора процедур для работы
с периферией, в частности с RS232 портом, с MC145170 и с ЖКИ.
Т.к. наше устройство не критично к скорости выполнения, то мы можем применять языки
высокого уровня для написания программ. Наиболее удобным и в то же время
производительным оказался язык JAL, который представляет собой гибрид C, Pascal и
других языков. Описание начнем именно с периферийный библиотек.
Библиотека pll.jal. Отвечает за загрузку данных в синтезатор частоты.
Несет в себе 4 функции:
pll_c(x) - загружает байт x в регистр С синтезатора.
pll_n(x,y) - загружает 2 байта в регистр N, причем первый байт несет старшие разряды
этого регистра, а второй младшие.
pll_r(x,y) - загружает байты x,y в регистр R, pll_enb - инициализирует синтезатор. В
силу
того что регистр R 15 битовый, байт x < 0x7
Библиотека ht_out.jal. Отвечает за вывод данных на ЖКИ.
Несет в себе 2 функции:
ht_byte(x) - выводит на экран цифру в х, причем x < 0x0F
ht_clear - очистка индикации ЖКb
Библиотека serial.jal. Отвечает за прием и передачу по RS232 интерфейсу.
Несет в себе 3 функции:
asynch_send( byte in x ) - отправляет байт в х, через RS232
asynch_receive (byte out x) - принимает байт в х, из RS232
poll (byte out y) - проверяет наличие данных в RS232, если данные есть, то
возвращает true и
записывает принятый байт в y
Принцип работы основной программы понятен из комментариев в приведенном в приложении
исходном коде.
Схемы, рисунки печатных плат и исходный код программы находится прилагаемом диске.
______________
|