RDS кодер

 

   По работе возникла острая необходимость установки на сетях радиовещания кодеров RDS для повышения сервисных функций оных, как основной - передача приёмника от станции к станции с помощью альтернативных частот. Идеальным вариантом была бы покупка готовых кодеров серии Фора-600, однако цены на них, как и на китайские аналоги внезапно взлетели в небеса. Даже приобрести простенький микрокодер от pira.cz без задействования третьих стран стало невозможным.

   Поиски по форумам типа vrtp.ru  также не принесли ничего интересного. В основном это конструкции на PIC-процессорах, с минимальными возможностями. Тем не менее кое-что из форумов почерпнуть полезного удалось.

   *далее в тексте будет достаточно профессиональных сокращений, для понимания которых необходимо изучить хотя бы поверхностно стандарт RDS*

   Необходимые требования к кодеру - статический PS, достаточное количество AF в памяти (10 минимум), 64 символа RT с флагом А/В, возможная поддержка RTAir (т.е. отработка групп 0А и 2А), синхронизация поднесущей с передатчиком 19 кГц.

   Предлагаемая схема не является оригинальной разработкой, это компиляция нескольких известных конструкций. Основа - RDS кодер за авторством G. Laroche, http://www.g.laroche.free.fr/english/hardware/RDS_USB_ATmega32.html . Из неё взят основной вычислительный узел на Atmega32. Стабилизатор питания Атмеги 5 Вольт на схеме не показан. Синхронизация 19 кГц - из какой-то древней разработки кодера RDS, в которой у автора хватило сил только на схему; напряжение питания микросхемы стабилизировано за счёт встроенного стабилитрона. Модулятор на полевом транзисторе - дань RA3AAE как автору простых конструкций.

   Первый недостаток выбранной схемы - работоспособность исключительно при наличии сигнала синхронизации 57 кГц, без него процессор зависает. Вполне вероятно, что это недостаток прошивки, тем не менее генератор на 561ГГ1 выдаёт сигнал и без синхронизации - для работы не пойдёт, но для сохранения работы процессора этого достаточно. Сам генератор синхронизируется по гармонике, что является его штатным режимом. С его выхода сигнал подаётся как на процессор, так и на модулятор.

   С выхода процессора получаем софтовый бифазный сигнал, который проходит через трёхзвенный ФНЧ на модулятор. После модулятора установлен ВЧ-фильтр на частоту 57 кГц. Параметры катушки и конденсатора не даю, их можно подобрать или рассчитать, исходя из имеющихся в наличии. У меня катушка на 7.5 мГн, ранее стоявшая в трёхпрограммном громкоговорителе, и конденсатор 1000 пФ. Для индуктивности 1 мГн применяется ёмкость 6800 пФ, для 2 мГн - 3300 пФ.

   Управление кодером осуществляется через RS-232 TTL (интерфейс 5 вольт, инвертированный). От описанного автором не отличается. Соединение по USB исключил, поскольку запустить не смог (снова прошивка?).

   Выяснилось, что прошивка кодера рабочая, но сырая. В частности, неверно кодировались блоковые последовательности в части AF и DI, причём последнее влияло вплоть до изменения предустановленного PTY. Эти ошибки исправлены, сорцы и оттранслированную прошивку можно скачать тут.

   Настройка. Не подавая сигнал 19 кГц на 561ГГ1, устанавливаем частоту генерации близкой к 57 кГц. При этом времязадающие конденсатор 1500 пФ, резистор 2.2 кОм и потенциометр (желательно многооборотный) могут потребовать подбора, поскольку разброс параметров у микросхемы может достигать 20%. При подаче 19 кГц светодиод "Захват" должен загораться (не обязательно ярко). Данный этап настройки должен производиться с тем блоком питания, с которым в дальнейшем будет работать кодер. Об иных вариантах частотозадающих элементов будет ниже.
   Программируем Атмегу, запускаем совместно с генератором. На выходе КП302 должен появиться
RDS-сигнал примерной, по отношению к стандарту, формы (нужен осциллограф). Сердечником катушки устанавливается максимальный уровень сигнала на выходе. Чем большая индуктивность у катушки, тем больший уровень сигнала можно получить - в моём случае от пика до пика получилось 2 Вольта, при индуктивности 0.45 мГн (дроссели из телевизоров) - до 0.5 Вольта.

    Фьюзы на Атмегу:

 

    Обязательно установить BOD чтобы не портилось содержимое flash-памяти и при сбоях питания не слетали ранее сделанные настройки (Внимание! для маломощной версии Атмеги фьюзы BOD'а будут иными!). Фьюз CKOPT необходим для "полноразмерной" генерации кварца, чтобы от него тактировать другие элементы схемы, о которых будет чуть ниже.

   Вид тестового экземпляра:

 

   Управление кодером через СОМ-порт - устанавливаем параметры порта в 19200-8-N-2. Использовать только инвертированные TTL-уровни! Либо дополнительно используйте MAX232. Мне оказалось достаточно иметь в наличии USB/UART переходник без МАХ-а на выходе, его можно приобрести в Чип_и_Дип, что-то типа такого, https://www.chipdip.ru/product/usb-to-ttl-4-pin-wire (ссылка от января 2023 года).

    Несмотря на выдаваемую кодером при включении картинку-справку, работает по ней далеко не всё. К примеру, прочитать какой-либо параметр через команду R невозможно, выдаётся ошибка буфера. Но это и не надо, достаточно воспользоваться кнопкой сброса и прочесть все параметры разом. Запись параметров (ещё раз рекомендую прочтение стандарта RDS):

S PS " PSNAME " - имя программного сервиса. Обязательно 8 символов. Только статический PS.

S PI <PInumber> - программный идентификатор, в десятичной нотации. К примеру, для радио Вера PI 7B21, значит мы должны собрать команду S PI 31521.

S PY <PTYnumber> -  номер PTY из стандарта. PopMusic=10, Religion=20, etc.

S TP <0/1> - маркер ТР (обычно 0).

S TA <0/1> - маркер ТА (обычно 0).

S MS <0/1> - маркер MS (Музыка - речь, обычно 1)

S DI <0-15> - маркер идентификатора декодера. Обычно ставится 7 (Стерео - Compressed - Artificial Head).

S RT "radiotext 64 symb - закрывающие кавычки можно не ставить, однако обязательно завершать кодом /r (перенос строки, но об этом ниже).

S 2A <n> - какая по счету будет группа 2А после выпуска групп 0А. Ноль деактивирует группу 2А (радиотекст не выходит в эфир).

S NA <n> - количество альтернативных частот. Ноль отключает их выдачу. Максимально 25. При проверке высвечивается как NbAF.

S AF x ffff - программирование альтернативных частот, где х - номер частоты, от 0 до 25, ffff - частота в сотнях килогерц, без запятых. Для примера, 877 = 87.7 МГц, 1036 = 103.6 МГц. При просмотре мы увидим не сами частоты, а сдвиг в сотнях кГц от частоты 87.5 МГц, в соответствии со стандартом. К примеру, если мы задали частоту 930 = 93 МГц, то при проверке (сбросе контроллера) она высветится как 55 (в соответствии со стандартом, в десятичной нотации).

Команда S ST  не используется и ни на что не влияет.

G <0/1> - останавливает или запускает генерацию потока RDS.

E - стирает всю введённую пользователем информацию и возвращает её к базовым установкам. Требует подтверждения "Y" (большой буквой), после чего генерация потока останавливается (запуск - G 1)..

 

    Если для связи используется терминальная программа типа Гипертерминал, то вполне возможно создать текстовый файл, в котором прописать все установки пользователя, после чего просто загнать его в кодер. Радиотекст указать в последней строке, после чего обязательно перевести курсор на следующую строку. Рекомендуется перед записью радиотекста пользователя, предварительно записать в память строку из 64-х пробелов, чтобы стереть старые данные.

    Если используете альтернативные частоты, то одна из частот должна быть записана местная, на которой и работает этот кодер.

Пример выдачи информации через программный декодер:

 

   Готовые печатки для установки в существующее оборудование

 

 

    Пример размещение платы кодера внутри корпуса вещательной машины фирмы Digiton Digiline DRC110:

 

 

    Ещё одним вариантом синхронизации является простое умножение частоты 19 кГц. Этот вариант немного более сложен в наладке, однако исключается температурная нестабильность генератора на микросхеме (который, по своей сути, является простым RC-генератором со всеми вытекающими), что не позволяет работать кодеру в широком спектре температур (а у нас получается от нуля до +60 как минимум, если оборудование стоит в каком-нибудь контейнере, а не в тепличных условиях радиоцентров).

    Схема достаточно проста.

 

    На входе схемы, как и в предыдущей, стоит ограничитель с делителем, позволяющий использовать различные уровни входного сигнала. Далее сигнал подаётся на усилитель-ограничитель на первом элементе обычной логической микросхемы. Прямоугольные импульсы с выхода каскада преобразуются с помощью RC-цепочки 20 пФ - 100 кОм в остроконечные импульсы, которые, через второй элемент и транзистор, подаются на "звенящий" контур, настроенный на третью гармонику 57 кГц. С контура, через второй усилитель и формирователь, сигнал 57 кГц подаётся далее на контроллер.

    К561ЛЕ5 использовать возможно, но, из-за иной внутренней структуры, красивых остроконечных импульсов на выходе второго элемента не получится вообще. Для работы такой схемы переходной конденсатор необходимо увеличить с 20 до 120 - 200 пФ.

    Резистор на базу транзистора лучше поставить 30 -  47 кОм.

    Для настройки нужен осциллограф. Измеряя в точке "А" и подстраивая контур, выставляем синусоиду на максимальный уровень. На картинке хорошо виден "удар" 19 кГц и три затухающих колебания ("звона") после него.

 

    В точке "Б" должен получиться меандр. На всякий случай замеряем выходной сигнал частотомером.

    Данные контура аналогичны ранее применённому. Однако на фото ниже использован промышленный контур 0.4 - 0.8 мГн с конденсаторами общей ёмкостью 12200 - 12400 пФ (0.01 мкФ + 2200 / 2400 пФ). Сигнал на третий элемент снимается с отдельной катушки связи (что правильнее). Разумеется, чем больше индуктивность коллекторной обмотки, тем выше уровень выходного сигнала с контура, и он визуально "чище".

 

 

    Описанные выше варианты предназначены для установки в современные передатчики, имеющие выход синхронизации 19 кГц для подключения внешнего кодера RDS. Однако в старых и некоторых зарубежных передатчиках (Elenos, CTE Int.) выхода 19 кГц нет. Также это относится и к монофоническим передатчикам. Поэтому, для установки кодера требуется, чтобы в кодере уже находился стабильный генератор 19 / 57 кГц. Обычно это делается на паре-тройке корпусов стандартной логики (к примеру, 4046 + 4017 или 561ГГ1+561ИЕ8) и дополнительном кварце 4.332 МГц. Было решено пойти более простым путём и разместить на "волшебном поле" ещё один контроллер ATtiny2313, занимающимся вопросами DDS, т.е. непосредственной генерацией частоты 57 кГц. Контроллер тактируется уже установленным на плате кварцем 12 МГц, подключённом к Atmega32, сигнал с неё снимается с 13 ножки и подаётся на 5 ножку ATtiny2313.  Схема очень проста:

 

 

    Питание на контроллер подаётся через гасящий диод. Не разбирался почему, но при слегка пониженном напряжении питания сигнал с микросхемы выходит более "чистый" (нет ошибок приёма при использовании RDS Decoder'а).

    Вид экземпляра кодера с дополнительным генератором:

 

 

    Исходник и прошивку на ATtiny2313  можно скачать тут. Описание расчёта переменных для выбранной частоты будет дано чуть позже. Фьюзы для контроллера:

 

 

    Разрешение для SPI оставлено на всякий случай, если придётся программировать чип в коротконогом SMD корпусе. Лишний раз напоминаю, что это не делитель тактовой частоты 12 МГц, а полноценный синтезатор.

 

Если кто-то пожелает сделать для себя печатную плату, то герберы тут.

 

UPD 19.11.2023. Как было упомянуто выше, при использовании катушек с малой индуктивностью, уровень выходного сигнала невысокий, поэтому иногда возникает затруднение с раскачкой модулятора передатчика. Для более универсального применения кодера сделан простой усилитель выходного сигнала на операционнике УД708 по стандартной схеме. Коэффициент усиления каскада 10, питание можно подавать как 5, так и 12 Вольт. Выходной уровень сигнала регулируется выходным потенциометром кодера, желательно его установить в пределах 0.7 - 1.2 Вольта.

 

 

ТуДу-лист.

1. Разобраться с зависанием процессора при отсутствии синхронизации - сделано, достаточно исключить прерывания из-за висящего в "воздухе" входа RX, притянув его через резистор к питанию.

2. Разобраться с USB-соединением - решено не делать. Не нужно. Исключено из прошивки.

3. Выкинуть ненужное для замены контроллера на Atmega8 (что декларируется предыдущим автором прошивки).

4. Описать, какие надо изменить переменные в исходнике для тиньки для генерации других частот.

5. Ввести протокол UECP для совместимости с существующим оборудованием и софтом.

 

Если кто-то отшаманит софт - дайте знать, оттестирую и опубликую с сохранением авторства.

 

Продолжение следует...

На главную...