Синтезатор на Si5351

умножители, ФАПЧ
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Синтезатор на Si5351

Post by UR5FFR »

В сети доступно несколько проектов синтезаторов на Si5351, но это либо простейшие конструкции, либо системы с закрытм исходным кодом, что затрудняет их применение. Либо код есть, но его настолько много, что проще написать заново с нуля. Собственно этим я и занялся когда мне потребовался синтез для очередной конструкции.

Техзадание было выработано такое:

1) Синтезатор собираем из готовых китайских модулей, которые можно купить на aliexpress. Процессор - Arduino Pro Mini/Nano. Дисплеи - 1602, TFT SPI, OLED. Модули расширителя I2C шины на PCF8574. Модули преобразования уровней 3,3v/5v. Оптический энкодер.
2) Полный сервис. Синтезатор должен обеспечивать режимы VFO A/VFO B, Split, RIT. Отображать S-метр, мощность, SWR. Обеспечивать защиту PA при превышении SWR.
3) Высокоуровневый код абстрагированный от "железа" - средства C++ полностью позволяют это сделать и мыслить в категориях высокоуровневых объектов. Это позволит достаточно легко менять дисплеи, логику работы и подключать дополнительную периферию
4) Поддержка различных раскладок преобразования частоты - single IF, up conversion, direct conversion. Минимальные изменения в коде для смены раскладки
5) Интенсивное использования I2C позволит реализовать весь функционал с запасом по использованию выводов контроллера.
6) Весь код открытый, проект open source. Особое внимание на разнесение кода по модулям и его "читабельность"

Исходные коды и схема выложены на github'е
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Используемые компоненты и их примерные цены на aliexpress.com

Arduino Nano V3.0, CH340/ATmega328P MicroUSB - 2.15 USD
nano 328.png
nano 328.png (260.4 KiB) Viewed 123896 times
Если критичны габариты, а USB порт в готовом синтезаторе не нужен то можно использовать Arduino Pro Mini ATmega328P 5V - 1.63 USD
pro mini 328.png
pro mini 328.png (324.22 KiB) Viewed 123896 times
Чтобы запрограммировать Arduino Pro Mini надо подключить его к USB. На Pro Mini нет встроенного USB порта, поэтому нужен внешний переходник USB-UART. Их есть несколько разновидностей. Лучше брать те у которых выведен сигнал DTR - он используется для сброса контроллера при программировании. Без этого сигнала прийдется при программировании вручную нажимать кнопку ресет на плате Pro Mini. Переходники на основе PL2303 глючные. У меня стабильно валили 7ку х64 в BSOD пока не поставил старые драйвера. Не рекомендую.

Вот дешевый USB-UART на чипе CH340 - 0.79 USD
ch340 usb uart.png
ch340 usb uart.png (211.16 KiB) Viewed 123896 times
Вот несколько подороже с Micro-USB на чипе CP2102 - 1.02 USB
cp2102 usb uart.png
cp2102 usb uart.png (233.57 KiB) Viewed 123896 times
Оптический энкодер, 360-400 импульсов на оборот - 10 USD
На энкодере не экономим и всякие трещетки на 10 импульсов не покупаем
encoder.png
encoder.png (289.33 KiB) Viewed 123896 times
Дисплей LCD 1602 - 1.22 USD
lcd 1602.png
lcd 1602.png (199.21 KiB) Viewed 123896 times
Переходник LCD 1602 на шину I2C - 0.47 USD
Он нам понадобится не только для подключения дисплея, но мы так же подключим через него клавиатуру и выведем управляющие сигналы для трансивера (управления полосовыми фильтрами, аттенюатором, УВЧ и тп). Сделан такой модуль на чипе PCF8574, но отличается тем что на выходные пины разведены только 7 из 8ми выходов чипа. Но зато и стоит такой модуль в 3 раза дешевле чем аналогичный у которого выведены все 8 ног. Для наших задач отсутствие одной ноги - не принципиально
1602 i2c.png
1602 i2c.png (160.77 KiB) Viewed 123896 times
Модуль расширителя I2C на PCF8574 у которого выведены все 8 ног - 1.40 USD
pcf8574.png
pcf8574.png (135.58 KiB) Viewed 123896 times
Или на том же али можно купить PCF8574 по цене 2.00 USD за 10шт и распаять их - так будет еще дешевле, а обвязки у PCF8574 никакой не требуется.

Собственно сам Si5351 - 2.40 USD (продается партиями по 5 штук за 12 USD)
si5351.png
si5351.png (318.71 KiB) Viewed 123896 times
Для распайки Si5351 можно использовать переходник SOP10-DIP - 0.99 USD за 10 штук
sop10.png
sop10.png (283.06 KiB) Viewed 123896 times
Так как Si5351 у нас требует 3.3в, а ардуина запитана от 5в то нам потребуется преобразователь уровней. Можно конечно спаять самому на двух транзисторах, но проще купить готовый всего за 0.25 USD
Он 4х канальный - мы будем использовать только два канала
level converter.png
level converter.png (351.4 KiB) Viewed 123896 times
Матричную клавиатуру можно купить готовую в сборе всего за 0.69 USD
keypad.png
keypad.png (464.58 KiB) Viewed 123896 times
Итого мы уложились в 29 баксов. При этом у нас остались лишние 4 штуки Si5351.
Теперь дело за малым - соеденить все это в работающую конструкцию :)
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Для любителей больших красивых экранов замечу что перечень деталей в предыдущем посте - это минимальная комплектация которая нужна для запуска синтезатора. Кроме LCD 1602 планируется поддержка следующих дисплеев

0,96" OLED 128X64 - 2.60 USD
oled.png
oled.png (161.52 KiB) Viewed 123895 times
TFT дисплеев с SPI размерами 1.8" 128X160 и 2.8" 240x320 по 3.40 и 6.20 USD
tft spi 3.png
tft spi 3.png (168.75 KiB) Viewed 123895 times
tft spi 2.png
tft spi 2.png (233 KiB) Viewed 123895 times
Nokia 5110 84*48 - 1.90 USD
nokia 5110.png
nokia 5110.png (149.96 KiB) Viewed 123895 times
Изменения в программе синтезатора при смене типа дисплея будут минимальные - раскоментировать нужную строчку кода
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Схема синтезатора
schematic.GIF
Нумерация пинов соответствует нумерации, используемой в Arduino-IDE. Для некоторых пинов так же указано их мнемоническое имя.

I2C модуль управления ДПФ, аттенюатором и УВЧ может меняться в зависимости от конструкции трансивера. Например если у вас 5ти диапазонный трансивер, то можно обойтись без дешифратора и сигналы с выхода PCF8574 подавать непосредственно на на ключи выбора диапазона. Если диапазонов больше то можно либо поставить дешифратор кода, либо поставить второй аналогичный модуль, что даст нам в сумме 14 линий вывода - более чем предостаточно для для управления входной частью трансивера.

Платы-переходники с I2C на LCD 1602 имеют 16 контактов - по числу контактов модуля 1602. Контакты на переходнике не пронумерованы. На схеме нумерация начинается с пина, который ближе к разъему I2C.

Джампер J1 включает подсветку и нужен только на модуле к которому подключен LCD 1602. Подстроечным резистором R1 управляем контрастом дисплея.

На плате есть 3 перемычки обозначенные A0,A1,A2. Они управляют адресом модуля на I2C-шине. По умолчанию все перемычки разомкнуты и модуль имеет адрес 0x27. В схеме синтезатора на модуле дисплея перемычки разомкнуты, на модуле клавиатуры замкнуты A0 (адрес 0x26), на модуле вывода сигналов управления декодером диапазонов замкнуты A1 (адрес 0x25). Ниже приведена таблица выбора адресе (0 - разомкнуто, 1 - замкнуто)
LCD_I2C_1602.png
LCD_I2C_1602.png (203.89 KiB) Viewed 123882 times
Внутренности платы-переходника I2C для LCD 1602 (нумерация выводов: 1 - VSS, 2 - VDD, 3 - V0, ... 16 - K)
LCD_I2C_PCF8574.jpg
LCD_I2C_PCF8574.jpg (87.03 KiB) Viewed 123882 times
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

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

Энкодер

Примененный оптический энкодер обеспечивает достаточно комфортную работу. По умолчанию в обычном режиме перестройка составляет 3kHz на оборот. В ускоренном режиме в 4 раза выше - 12kHz на оборот. Эти параметры можно изменить меняя константы в программе. Переключение между обычным и ускоренным режимом перестройки осуществляется автоматически в зависимости от скорости вращения валкодера.

Клавиатура

1. Ham - кнопка переключает режим непрерывного перекрытия 1-30MHz и работу на преднастроенных (любительских) диапазонах. В случа если трансивер не позволяет работать в режиме непрерывного перекрытия кнопка отсутствует.
2. BandUp, BandDown - переключение по диапазонам в режиме любительских диапазонов. Увеличить/уменьшить частоту настройки на 1МГц в режиме непрерывного перекрытия.
3. VFO A/B - на каждом диапазоне доступны два гетеродина с независимой частотой настройки. Кнопка позволяет переключаться между ними
4. VFO A=B - устанавливает частоту второго гетеродина равной частоте текущего. При этом переключение гетеродинов не происходит
5. USB/LSB - переключение принимаемой боковой полосы
6. Lock - блокировка валкодера и команд клавиатуры, которые могут привести к изменению частоты настройки. При этом вспомогательные функции остаются доступными (например включение аттеюатора)
7. Split - включает split-режим, в котором при переходе в режим передачи происходит переключение на другой гетеродин.
8. RIT - включает режим расстройки при приеме. Расстройка задается переменным резистором подключенным к пину A0 в пределах -1..+1kHz.
9. Zero - выставляет частоту "по нулям". Частота округляется до ближайшего целого числа kHz
10. Att/Pre - По кругу включает аттенюатор, УВЧ, или отключает оба
11. QRP - выставляет уровень на выходе QRP, который сигнализирует о необходимости снижения выходной мощности

Управляющие сигналы

1. TX вход - включение режима передачи. Вход защищен от дребезга контактов кнопки. В режиме TX блокируются любые действия с клавиатурой и валкодером. На выходе TX формируется активный управляющий сигнал.
2. Tune вход - включение режима настройки. Вход защищен от дребезга контактов кнопки. В режиме TUNE формируются управляющие сигналы TX, QRP и Tone. В результате формируется SSB сигнал передатчика частотой 1kHz (в заданной боковой полосе) пониженной мощности. Режим предназначен для безопасной настройки согласования с антенной.
3. TX выход - управляет трансивером переводя его в режим передачи. Таким образом синтезатор может блокировать передачу в зависимости от различных условий. Например при попытке передачи SSB в телеграфном режиме или при высоком КСВ на выходе трансивера. Режим может использоваться как для блокировки ошибочных действий оператора либо аварийных ситуаций, так и для преднамеренного ограничения возможности работы на передачу. Например на коллективных станциях и тп.
4. QRP выход - включает режим пониженной мощности
5. Tone выход - на этом выводе генерируется сигнал частотой 1kHz в режиме Tune. Необходимо подключить этот вывод через аттенюатор к микрофонному усилителю трансивера

Аналоговые сигналы

1. S-meter - вход S-метра
2. SWR REF/FWD - вход прямой/отраженной волны с КСВ-метра. При превышении порога блокируется сигнал TX, либо тракт переводится в работу пониженной мощностью - выдается сигнал QRP

Дисплей и прочий сервис

Дисплей отображает все режимы работы трансивера. Кроме этого отображается следующая вспомогательная предупредительная информация:
1. Выбрана неверная боковая полоса
2. Частота настройки находится в CW-участке диапазона

При переключении между диапазонами синтезатор запоминает для каждого диапазона следующие параметры:
1. Частоты гетеродинов A/B
2. Выбранный текущий гетеродин
3. Боковая полоса
4. Состояние Att/Pre
5. Состояние Split

По умолчанию при включении синтезатора частоты гетеродинов равны началу SSB-участка диапазона. Синтезатор не запоминает состояние диапазонов в EEPROM между сессиями работы (сделать такой функционал можно, но я не вижу в этом смысла).

Режим калибровки Si5351

Калибровка Si5351 осуществляется непосредственно в самом синтезаторе. Вход в режим калибровки - включение питания с нажатой кнопкой BandUp. В этом режиме на выходе CLK0 формируется сигнал частотой 30MHz. Вращая валкодер необходимо выставить эту частоту "по нулям", контролируя ее частотомером. При нажатии на кнопку Pre/Att происходит переход в режим точной настройки - меньшее изменение чатсоты на один оборот валкодера. Значение коррекции отображается на дисплее. Нажатии VFO A/B сбрасывает значение коррекции в ноль.
Из режима калибровки можно выйти с сохранением коррекции нажав BandDown или без сохранения, нажав BandUp
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

В собранном виде на макетке выглядит вот так
DSC05007.jpg
DSC05007.jpg (292.02 KiB) Viewed 123843 times
Отдельно хочу остановиться на запуске Si5351. Кварцы на частоты 25-27 MHz гармониковые. Но встроенный генератор на кварцах в корпусах HC-49 не запускается на 3й гармонике - кварц резонирует на основной частоте (8-9MHz). Интересно что Si5351 при этом работает и частоты на выходе генерирует, но они в три раза меньше. Никакими танцами с бубном завести генератор на гармонике с такими кварцами не удалось. Для нормального запуска надо брать мелкие кварцы-лодочки. С ними запуск идет без проблем.

Частота кварца может быть любой в диапазоне 10-40MHz. Производитель в аппноутах пишет что можно так же подавать и внешнее тактирование частотой (не пробовал). Естественно что при инициализации библиотеки работы с Si5351 необходимо выставить правильную частоту тактирования.

Теперь о калибровке. В библиотеке которую я использую подразумевается что ее будут производить на частоте 10MHz (зашиты константы в коде). Но при создании синтеза для up-conversion первый гетеродин работает на частотах 50 MHz и выше, и появляется погрешность установки частоты.

Поэтому калибровку лучше производить на максимальной частоте. Я делаю ее на 30 MHz. Но если позволяют возможности частотомера то лучше ее производить на 50-70MHz. Частота калибровки изменяется константой в программе
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Выложил исходные коды на гитхабе. Софт еще не закончен полностью и будет дорабатываться.
Открывать в среде Arduino файл Syntez.ino - остальные файлы проекта откроются автоматически.

Все, что возможно потребуется изменить при адаптации синтезатора находится в главном модуле Syntez.ino.
Поддерживаются 7 различных раскладок формирования частоты гетеродинов, в том числе двойное преобразование, переключаемые гетеродины, изменение рабочей боковой полосы сменой частоты первого/второго гетеродинов, раздельные множители по каждому гетеродину. Все максимально подробно описано в комментариях в коде.

Проект будет работать даже без подключения всех модулей. Например вполне достаточно подключить энкодер и дисплей
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Существенно переработал и оптимизировал код.

1) Отказался от ардуиновской реализации I2C Wire - она избыточна для этого проекта. Реализация I2C взята из примеров QRP Labs
2) Библиотека "LiquidCrystal I2C" адаптирована для работы через новый модуль i2c и включена в состав проекта
3) От использования библиотеки "Etherkit Si5351" для управления Si5351 я отказался - она слишком "тяжелая". По мотивам кода от QRP Labs написана простая библиотека для управления Si5351
4) Добавлен режим MODE_SINGLE_IF_RXTX для трактов имеющих отдельные смесители в формирователе/детекторе SSB
5) В результате рефакторинга кода уменьшился его объем на 5 кб и объем используемой RAM на 400 байт. Сейчас статистика такая:

Code: Select all

Скетч использует 15 906 байт (51%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 730 байт (35%) динамической памяти, оставляя 1 318 байт для локальных переменных. Максимум: 2 048 байт.
Исходные коды доступны там же на гитхабе.
Никаких сторонних библиотек для сборки теперь не нужно!

Отдельно хочу остановиться на управлении Si5351. По возможности библиотека использует multisynth делитель в режиме целочисленного деления. По различным отзывам это уменьшает фазовые шумы. Исключением являются режимы, когда необходимо генерировать три различные частоты гетеродина (тракты с двумя ПЧ - преобразование вверх). Так как Si5351 содержит только два ядра PLL то приходится идти на некоторый компромисс. Первый гетеродин всегда использует PLL_A и работает в режиме целочисленного деления в multisynth. Второй гетеродин использует PLL_B и так же работает в целочисленном режиме. Третий гетеродин использует PLL_B, и работает в целочисленном режиме если его частота кратна частоте второго гетеродина. В противном случае multisynth третьего гетеродина работает с дробным делителем. Это не должно существенно деградировать параметры тракта, т.к. второй фильтр ПЧ обычно достаточно "узкий" и преобразовываться на шумах третьего гетеродина по сути уже нечему.
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Добавил режим MODE_DC_QUADRATURE. Как легко догадаться в этом режиме на выходах CLK0 и CLK1 формируется сигнал гетеродина в квадратуре - сдвиг фаз 90 град. На осциллографе выглядит очень аутентично. В сети пишут что Si5351 обеспечивает погрешность сдвига фазы менее 1%.

Но не обошлось без ложки дегтя. В режиме задания фазы невозможно использовать дополнительные делитель на степень двойки (R_DIV). А так как минимальная частота ГУНа согласно даташиту 600MHz то получить на выходе квадратуру с частотой менее 600/128=4,7MHz нельзя. Но если очень хочется, то конечно можно. Мои исследования показали что ГУН работает примерно до частоты 260MHz. Это позволяет уверенно генерировать частоты до 3MHz и если попадется нормальный "тянущийся" экземпляр сишки то и до 2MHz.
В коде прописал ограничение по минимальной частоте в 2MHz. Если задать ниже то выходы будут отключены.

На третьем выходе CLK2 можно генерировать любую частоту. В режим MODE_DC_QUADRATURE эта возможность не используется и выход отключен. Потребность в дополнительном генераторе может возникнуть в SDR для автоматической калибровки амплитудно-фазового дисбаланса. В этом случае сигнал с выхода CLK2 используется как образцовый для оценки и устранения дисбаланса.
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Синтезатор на Si5351

Post by UR5FFR »

Напряжение пик-пик на выходе Si5351 на нагрузке 100ом

8mA - 3.2v
6mA - 2.8v
4mA - 2.0v
2mA - 1.2v

Измерял цифровым осциллографом с включенным делителем 1:10. Выход Si-шки был нагружен на резистор 100ом через разделительный конденсатор.
Locked