Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор

в 13:00, , рубрики: ham radio, ruvds_статьи, SDR, системы связи, схемотехника

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 1


Аппаратура SDR (Software-defined Radio), как и следует из названия, представляет собой программно-аппаратный комплекс. В предыдущих частях цикла были рассмотрены преимущественно аппаратные решения радиотракта трансивера Selenite Lite. В большей части данной публикации будет рассмотрена та часть радиостанции, которая предназначена для управления «Radio» и его связи с «Software».

Речь пойдёт о контроллере, на котором реализовано составное устройство USB, включающее в себя звуковое устройство USB и виртуальный COM-порт. Данная конфигурация позволяет управлять трансивером извне по CAT-интерфейсу и производить обмен аудиопотоками с программой, которая производит обработку сигналов для работы в эфире.

Все части цикла статей о создании любительской радиостанции:

▍ Контроллер трансивера Selenite Lite

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 2

На рисунке выше приведён практически «минимальный набор» компонентов контроллера, необходимый для работы MVP проекта «Селенит». Из схемы можно исключить ещё несколько компонентов, например, «часовой кварц» с батарейкой, которые оставлены «на вырост».

В «минимальный набор» входит MCU STM32F411CEU6, аудиокодек TLV320AIC3104IRHB и синтезатор частоты Si5351A-B-GT. Схемы включения всех этих микросхем совершенно стандартные. Обмен аудиопотоками между MCU и кодеком осуществляется по интерфейсу I2S2, управление кодеком и синтезатором производится по интерфейсу I2C3.

Переключение полосовых фильтров блока ДПФ производится сигналами S1 и S2. Переключение режимов «приём-передача» производится сигналами TX, QSE_EN и QSD_EN.

Разъём PTT (Push-To-Talk) предназначен для подключения телеграфного ключа или кнопки (педали) PTT, но при этом выполняет ещё две дополнительные функции. При загрузке контроллера с низким уровнем на любом из контактов разъёма PTT при подключении по USB контроллер определяется как устройство DFU. При загрузке MCU с высоким уровнем на входе BOOT0 к разъёму подключён UART1.

Питание контроллера осуществляется или от разъёма USB, или от внешнего источника +5В через контакты разъёма XS1. «Цифровая» и «аналоговая» части трансивера питаются от одной и той же микросхемы линейного стабилизатора напряжения +3.3 В, обозначенной на схеме как U1. Радиотракт трансивера и синтезатор «развязаны» по питанию от MCU через дроссели. Линейный стабилизатор напряжения U2 (+1.8 В) служит для питания «ядра» кодека.

Работа контроллера в качестве звукового устройства USB подробно разобрана в публикации: Звуковая карта USB на STM32. Часть 1: Используем I2S-кодек

Пример использования контроллера в качестве CAT-интерфейса радиостанции приведён в публикации: CAT-интерфейс для трансивера «Радио-76»

▍ Тактирование контроллера

Внимательный читатель уже заметил, что в схему контроллера включён синтезатор Si5351A-B-GT, работа которого в качестве генератора плавного диапазона была описана в предыдущей части цикла. Оставшийся свободным выход и вторая PLL синтезатора здесь используются в качестве источника тактовой частоты контроллера. Кроме экономии средств это даёт неочевидные преимущества, которые мы сейчас рассмотрим.

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 3

На рисунке выше приведена схема тактирования MCU. Выбор частоты HSE, равной 24576 кГц, может показаться странным, но имеет вполне резонное обоснование.

Радиостанция SDR является аппаратурой прямого преобразования только в её «аналоговой» части. Если проследить путь выделенного QSD аналогового сигнала ЗЧ, то он далее подаётся на вход кодека, который преобразует его сначала в отсчёты (samples, частота дискретизации 96 кГц), затем в битовый поток интерфейса I2S (тактовая частота 3072 кГц), а затем – в битовый поток интерфейса USB (тактовая частота 12 МГц). Кроме того, для нормальной работы кодека с потоком 96К, на него должен поступать сигнал MCLK с частотой 24576 кГц.

На радиоприёмный тракт трансивера всё вышеперечисленные сигналы оказывают достаточно серьёзное воздействие. Ситуация усугубляется ещё и тем, что все эти сигналы взаимодействуют по принципу «все со всеми» и за счёт «биений частот» могут создавать сильные широкополосные помехи.

Теперь, если произвести калибровку задающего генератора синтезатора с помощью частотомера или методом, описанным в публикации «Радиолюбительские измерения: когда нет частотомера», то мы сразу получим точную установку частоты не только квадратурного гетеродина, но и всех тактирующих сигналов контроллера.

Решение получилось достаточно необычным: затраты на оборудование сократили, но при этом избавились от ряда интерференционных помех. Благодаря этому решению количество «поражённых точек» радиотракта было сокращено до четырёх: 12000, 12288, 24000 и 24576 кГц. Другие точки есть, но они не так заметны, особенно при работе с хорошей внешней антенной.

▍ Расширение функциональности MVP

Как уже говорилось выше, даже в «минимальный набор» контроллера входят компоненты, добавленные туда «на вырост». На рисунке ниже представлено «расширение» контроллера:

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 4

В первую очередь, это оборудование для организации пользовательского интерфейса (UI): TFT-дисплей 2.4” HL1 с разрешением 320х240 точек на дюйм, инкрементный энкодер S6 и кнопочная клавиатура S1…S5.

Дисплей подключён к интерфейсу SPI1, сигналы энкодера обрабатываются с помощью таймера TIM2, выход клавиатуры подключён к встроенному АЦП (ADC) микроконтроллера.

«Расширенный» вариант контроллера предусматривает также управление режимом внешнего усилителя мощности (PA) подачей туда сигнала TX через оптронную развязку U3 и данных по интерфейсу I2C через буфер шины PCA9515A.

Микросхема EEPROM DD3 с управлением по интерфейсу I2C включена в набор совсем «на вырост».

▍ Квадратурный модулятор

Благодаря решению разработать универсальную печатную плату для всех исполнений трансивера Selenite Lite и разместить органы управления непосредственно на ней, на плате осталось достаточно места для размещения квадратурного модулятора (QSE).

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 5

Схема квадратурного модулятора приведена на рисунке выше и представляет собой смеситель по схеме Тэйло «наоборот». Отличие данного решения от «традиционных» заключается в отсутствии в цепях формирования сигналов четырёх инвертирующих усилителей на ОУ. Схему удалось упростить благодаря наличию у кодека дифференциальных каскадов на выходе ЦАП (DAC), которые формируют четыре сигнала со сдвигом фаз 0°, 90°, 180°, 270° без всякой дополнительной «обвязки».

Выходы микросхемы DD6 подключены через резисторы R33, R34 к тому же широкополосному ВЧ-трансформатору TR1, что и микросхема DD5 приёмного смесителя (QSD) трансивера. Выводы 1A и 2A микросхемы DD5 подключаются к трансформатору при низком уровне сигнала QSD_EN. Выходы DD6 – при низком уровне сигнала QSE_EN.

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 6

На максимальном уровне сигнала однотонального генератора из состава программы HDSDR на нагрузку 50 Ом, подключённую к антенному разъёму платы, QSE трансивера выдаёт мощность порядка 0.125 Вт на всех любительских диапазонах, кроме 160 м (0.080 Вт)

▍ Встроенное ПО контроллера

Встроенное ПО контроллера разработано в среде STM32CubeIDE с использованием библиотеки HAL. Исходный код проекта расположен по адресу: https://github.com/dmitrii-rudnev/selenite-lite

Проект «Селенит». Часть 5: Контроллер, встроенное ПО и квадратурный модулятор - 7

Программное обеспечение проекта организовано по блочно-модульному принципу. При запуске main.c производится инициализация компонентов библиотеки HAL и всех периферийных устройств, включая устройство FS USB. В процессе инициализации создаются глобальные переменные, включая переменную trx, предназначенную для хранения состояния трансивера и его текущих настроек.

Далее в бесконечном цикле производится запуск обработчика состояния интерфейса PTT (ptt_if.c), предназначенного для непосредственного управления радиостанцией: переключения режима «приём-передача», настройки частоты гетеродинов, переключения гетеродинов, переключения ДПФ и т.п.

Интерфейс CAT (cat_if.c) производит обмен данными с виртуальным COM-портом. Интерфейс DSP (dsp_if.c) предназначен для работы с кодеком и звуковым устройством USB. Интерфейс пользователя (user_if.c) служит для обработки состояния энкодера и клавиатуры, а также вывода информации на дисплей. Запуск обработчиков состояния этих интерфейсов (handlers) производится из ptt_if.c.

Исходный код проекта не содержит драйвер составного устройства USB, только виртуальный COM-порт. Связано это с тем, что изначально проект использовал версию STM32Cube FW_F4 V1.26.2. Текущая версия среды разработки от ST использует HAL версии STM32Cube FW_F4 V1.27.0 с другой структурой устройства USB и на предыдущую версию библиотеки вернуться не даёт.

Принципы объединения дуплексного звукового устройства USB и виртуального COM-порта в составное устройство USB подробно разобраны в публикации:
Составное устройство USB на STM32. Часть 4: Два-в-одном

Пример реализации CAT-интерфейса на STM32F411CEU6:
CAT-интерфейс для трансивера «Радио-76»

Надеюсь, кому-то более компетентному в программировании, чем я, удастся актуализировать проект под текущую версию HAL, и он поделится с миром результатом.

Обновление «прошивки» трансивера в штатном режиме производится через подключение по USB. Контроллер трансивера переводится в режим DFU нажатием на телеграфный ключ при включении питания.

▍От автора

Преимуществом трансивера Selenite Lite по сравнению с большинством других любительских SDR-радиостанций является управление по CAT-интерфейсу, а также наличие встроенной звуковой платы. Реализовано это на недорогих микроконтроллере и аудиокодеке.

Применение в качестве источника тактовой частоты «половинки» используемого, в качестве квадратурного гетеродина синтезатора, частоты Si5351A является нетривиальным решением, позволившим, с одной стороны, упростить конструкцию, но и с другой стороны, повысить качество обработки сигналов.

Размеры печатной платы трансивера во многом обусловлены размерами и взаимным расположением дисплея, клавиатуры и энкодера, которые включены в состав контроллера «на вырост».

Теперь о печальном…

Одним из главных мотивов забросить проект для меня была необходимость самостоятельной разработки программного обеспечения. И были на то обстоятельства неодолимой силы…

Попытки привлечь кого-нибудь из профессиональных программистов поработать над адаптацией готового open source ПО для трансивера mcHF под мой проект привели к тому, что все они вежливо отказались, но дали мне ряд ценных советов:

  1. Пользоваться Linux Debian.
  2. Подробно изучить Reference Manual конкретного MCU.
  3. Освоить, наконец-то, что-то объектно-ориентированное, например C++.
  4. Не пользоваться никаким IDE: только vim, make и CMSIS.
  5. Не отвлекать людей от работы, ибо всё есть в интернет.

Расчётные шесть человеко-месяцев на проект на глазах превращались в «десять лет без права переписки», и тогда я решил «стрелять себе в ногу».

Сначала я поставил на свой компьютер STM32CubeMX. Для MS Windows, естественно, и стал разбирать сгенерированный на HAL код и примеры для отладочных плат. Параллельно на этих примерах шло освоение синтаксиса Си. Так мне удалось самостоятельно «обвязать» всю «периферию».

Крепким орешком оказалось звуковое устройство USB, но и с ним удалось разобраться: спасибо romanetz_omsk и Andreas Richter (DF8OE).

Публикацией цикла про составное устройство USB я намеревался проект «Селенит» закрыть. Однако публикация имела резонанс, и я решил повременить с закрытием и приступить к разработке печатной платы опытного образца трансивера Selenite.

Ничто не предвещало… Но об этом, и о чудесном превращении трансивера Selenite в Selenite Lite читайте в следующей, заключительной части цикла.

Схема электрическая принципиальная, перечень элементов и рисунок печатной платы SDR-трансивера Selenite Lite содержатся в документе «Selenite Lite User Manual», расположенном в репозитории проекта «Selenite Lite».

Больше информации о проекте можно найти в некоммерческом telegram-канале «Проект «Селенит».

72/73! de RD9F

Источники:

1. Dan Tayloe. Ultra Low Noise, High Performance, Zero IF Quadrature Product Detector and Preamplifier
2. Поляков В.Т. Радиолюбителям о технике прямого преобразования – М.: Патриот, 1990
3. CAT-интерфейс для трансивера «Радио-76»
4. Составное устройство USB на STM32. Часть 4: Два-в-одном
5. Звуковая карта USB на STM32. Часть 1: Используем I2S-кодек

Автор: Дмитрий Руднев

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js