Всем доброго! Выкатываю последнюю версию синтезатора со всеми подробностями.
Девяти-диапазонный синтезатор частоты "Meander SSB" спроектирован для работы в составе приемников/трансиверов по супергетеродинной схеме с одним преобразованием частоты и аппаратов прямого преобразования с квадратурным детектором (смесителем).
Построено устройство на недорогом американо-китайском микроконтроллере ESP32-WROOM 32, синтезаторе частоты SI5351, TFT дисплее с управлением по шине SPI, внешней EEPROM и декадном декодере переключателя ДПФ.
Конкретно описанный вариант рассчитан на работу с дисплеем - разрешением 240х320 пикселей, физический же размер дисплея может быть любым, от 2,4 дюйма до 3,2 дюймов. Данная версия испытана и отлажена на двух дисплеях:
1. ST7789_240x320.
2. ILI9341_240x320.
Так же в ресурсах проекта есть поддержка и других дисплеев с другими размерами и разрешениями. Их тоже можно применить, но для этого придется корректировать координаты индикаторов и размеры шрифтов в скетче программы.
Данная ревизия синтезатора отличается от предыдущих ревизий и предыдущих проектов наличием огромного функционала.
ТТХ
Два режима:
- Супергетеродинный с смещением ГПД вверх на величину ПЧ + опорный генератор, переключение между ВБП/НБП одной кнопкой. При этом меняются величины сдвига частот ГПД и ОГ (опорный гетеродин). Выход ГПД на CLK0, выход опорной частоты на CLK2.
- Квадратурный режим. Частота на выходе CLK0 равна частоте отображаемой на дисплее, такая же частота присутствует на CLK1*, но со сдвигом на 90 градусов относительно CLK0.
(Вот сейчас писал это и словно что-то почуял - включил синт и решил проверить. Так и знал! Пока мы с нейронкой допиливали остальное, на каком-то этапе поломали логику описанного выше. Сижу ищу ошибку — DeepSeek, как и положено китайскому ПО, завис....)
Исправлено спустя два часа.
Переключатель диапазонных фильтров.
При смене диапазона на одном из 8ми выходов декодера, построенного на микросхеме 74HC138, устанавливается низкий уровень (подтягивается к земле), в то время как все остальные имеют высокий уровень примерно 3,3В. О коммутаторе для этого декодера расскажу в другой раз.
Кроме автоматического переключения ДПФ по смене диапазона кнопками, предусмотрено переключение и при входе в границы диапазона перестройкой частоты энкодером. Это для тех, кто не умеет вовремя вынуть остановиться и крутит валдекодер от диапазона средних волн до СиБи диапазона. В этом случае переключение происходит автоматически на нижней границе диапазона. Если мы вышли за границы диапазона "крутилкой" и идем вверх по частоте, на экране вместо названия диапазона высвечивается два прочерка "--", а декодер продолжает отрабатывать покинутый диапазон до тех пор, пока мы не "докрутим" до следующего. Если мы крутим сверху вниз, то все происходит с точностью до наоборот: ДПФ переключится сразу при выходе за нижнюю границу диапазона на фильтр стоящего ниже и будет его "держать" до нижней границы нового, далее перейдет на еще более низкий. Для чего это нужно? Всё просто — что бы ни при каких условиях не оставлять смеситель без входного/выходного ДПФа.
Примечание: два самых верхних диапазона используют один и тот же диапазонный фильтр.
Меню настроек
При подаче питания удерживаем кнопку энкодера не менее трех секунд. Попадаем в меню настроек.
Перемещаемся по пунктам, вращая энкодер, заходим в пункт кнопкой энкодера.
Пункты:
- Калибровка кварца синтезатора. Подключаем CLK0 к частотомеру (или смотрим несущую на SDR приемнике) и крутим энкодер до тех пор, пока не получим реальную частоту, равную 25 МГц. Работает при любом режиме работы синтезатора (смещение на величину ПЧ игнорируется). Повторное нажатие на кнопку энкодера сохраняет значение калибровки во внутреннюю память контроллера. Если крутить калибровку слишком "далеко", кнопкой S7 "MOD" можно менять шаг настройки: 1Гц -> 10Гц -> 100Гц -> 1кГц.
- Частота ПЧ для нижней боковой.
- Частота ПЧ для верхней боковой.
- Частота опоры для нижней.
- Частота опоры для верхней.
- Минимальное напряжение S-метра.
- Максимальное напряжение S-метра.
- Усреднение реакции S-метра.
- Включить или выключить внешнюю память. (Если внешняя EEPROM не запаяна, а в меню включена, синтезатор подвисает.)
- Выбор режима работы синтезатора: супергетеродин или прямое преобразование.
- Сохранить и выйти.
- Выйти без сохранения.
Эти настройки хранятся во внутренней памяти контроллера, и программа в основном цикле может из неё только читать, ничего туда никогда не записывается, и теоретически повредиться не может — ваши настройки внезапно не слетят.
Режим "Передача"
При нажатии на педаль или кнопку тангенты (пин 13) синтезатор производит некоторые действия.
На пине 12 появляется напряжение 3,3В, которое управляет коммутатором прием/передача. Следом за этим отрабатывает звуковое оповещение пассивным бипером на пине 1 (ТХ). По задумке, с этого пина, ответвление через ФНЧ, делающий из меандра 1кГц синус с той же частотой, идет к выходу микрофонного усилителя. При нажатии на передачу этот "пип" улетает в эфир как маркер начала передачи.
После отпускания кнопки сначала идет "пип" длительностью 250 мс, а потом снимается напряжение с пина 12. Таким образом, в эфир улетает маркер окончания передачи.
Расстройка (RIT)
Позволяет, не трогая базовую частоту, подстроиться на оператора, у которого что-то не то со шкалой настройки.
Если включена расстройка RIT (+/- 5 кГц с шагом 10 Гц), то при передаче синтезатор её игнорирует, и передача ведется на базовой частоте. Расстройка активна до тех пор, пока мы её не отключим или не сменим диапазон или вид модуляции.
Шаг настройки
Для удобства использования предусмотрено пять "шагов": 10 Гц, 100 Гц, 1 кГц, 10 кГц и 100 кГц.
Смена шага округляет текущее значение частоты до частоты шага. То есть, если у нас была частота 7100.50 кГц, а шаг был 100 Гц, то при включении шага 1 кГц текущая частота округлится до 7100.00 кГц. Очень удобно. Теперь, если нужно перейти на более высокий шаг, не нужно предварительно обнулять частоту самостоятельно, чтобы после перехода синтезатор не шагал на 1 кГц от некруглой стартовой частоты. В старых версиях и в других синтезаторах это сильно бесило!
Смена шага вверх/вниз производится удержанием кнопок смены диапазона.
S-Метр
Вход измерителя (G36, или VP, или SP на плате) рассчитан на выпрямленный диодом и сглаженный небольшой емкостью сигнал звуковой частоты. S-Метр несколько выпадает из идеи "ретро-синтезатора" и при желании может быть отключен на стадии прошивки. Нужно просто закомментировать строку 1686. После добавления в начале строки двойного слеша "//" и прошивки контроллера, S-Метр в проекте остается, но на экран не выводится.
АТТ и PRE (Аттенюатор и Предварительный усилитель)
Данные узлы трансивера включаются/выключаются кнопкой энкодера: первый — простым нажатием, второй — удерживанием кнопки. Разумеется, они не взаимоисключают друг друга, и можно включать/выключать их в любых комбинациях.
Звуковая индикация
На пин G1 (ТХ) через гасящий резистор 100-200 Ом подключен пассивный бипер, такой же, как на материнских платах или в будильниках, с пакостным звонком, который слышно за квартал и за который в пять утра хочется набить кому-то морду! Резистор обязателен по двум причинам: без него слишком громко, и без него сам бипер просаживает линию передачи данных и мешает прошить контроллер. 100 Ом достаточно для того, чтобы МК успешно прошивался, и более чем достаточно для приемлемой громкости оповещения.
Сигнализирует он нажатие кнопок (давно мечтал это реализовать).
Память
В проекте применена микросхема внешней памяти - AT24C256C, в которую сохраняются динамические данные — те, которые многократно меняются в течении сессии: частота, диапазон, режим модуляции.
Обратите внимание на то, что все эти параметры для текущего диапазона записываются в память только при переходе на следующий или предыдущий. Это дает возможность при возврате на него загрузить из памяти частоту и режим модуляции, которые были на момент ухода, но! Это не позволяет загрузить после включения тот диапазон и те параметры, которые были на момент выключения. При включении система загрузит последнюю запись, а это та, которую он сделал при переходе, то есть предыдущий диапазон перед выключением. Для того чтобы загрузиться при новом включении синтезатора точно туда, откуда мы выключались, добавлена функция ручной записи текущего состояния — здесь и сейчас! Делается это кнопкой на пине G35. Перед выключением нажали, услыхали "тюлюлю" и можно выключать — состояние в памяти, и именно эта запись теперь последняя, а значит, загрузчик возьмет именно её. Я честно долго думал, много перебрал вариантов, но как сделать автосохранение при выключении так и не придумал.
По прикидкам, этой памяти хватит на десятилетия, сам синтезатор столько не проживет.
Если нет микросхемы памяти, синтезатор будет работать и без неё, загружая каждый раз при включении и каждый раз после смены диапазона значения по умолчанию. Чтобы синтезатор без внешней EEPROM работал стабильно и не зависал, в настройках нужно отключить внешнюю епром.
Вот так выглядит мой вариант печатной платы.
Все, кроме коммутатора ДПФ, собрано на одной плате. Размер платы подразумевает установку дисплея размером 2,8 дюйма. SMD микросхемы, модуль синтезатора и штыри для подключения периферии запаяны со стороны проводников, всё остальное — традиционно через отверстия с лицевой стороны.
Плата ESP32 запаяна непосредственно на "материнскую" плату, под ней — резисторы подтяжки и перемычка. Очевидно, последние нужно запаивать первыми. Дисплей подключается через колодку и крепится двумя винтами через латунные стойки. Высота стоек подбирается такой, чтобы дисплей вровень выпирал на одинаковую высоту: слева на стойках и справа на колодке.
Дыркам для винтового крепления доверять не рекомендую. У меня несколько дисплеев, и все они отличаются по "рассверловке". Перед переносом печати на текстолит приложите печать к реальному дисплею и убедитесь, совпадают/не совпадают отверстия.
Вот тут можно скачать архив со всеми необходимыми файлами проекта, включая печать в "SprintLayout 6" и схему в JPG и "Splan7". Структуру папок и файлов не меняйте, могут покрашиться пути.
Обязательным образом нужно установить самую свежую платформу ESP32 от Espressif и библиотеки, указанные вначале кода.
Так же обязательно установите библиотеку "LovyanGFX".
Кажется, всё. Если возникнут трудности, вы знаете, где меня найти, помогу чем смогу!
Спасибо за внимание и до новых встреч!
* Вообще квадратурный сигнал на CLK1 присутствует даже в супергетеродинном режиме, по задумке из двух одинаковых сигналов но сдвинутых на 90 градусов можно попытаться получить более "чистый" сигнал методом суммирования основной гармоники и вычитания третьей, складывая две частоты каким-то хитрым образом. Пока не придумал как именно, но интуиция подсказывает, что это реально.