UR5FFR

Радиолюбительские конструкции и программы
It is currently 23 Oct 2017, 15:21

All times are UTC + 2 hours




Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: 22 Nov 2016, 23:23 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: 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'е


Top
 Profile  
 
PostPosted: 23 Nov 2016, 23:47 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
Используемые компоненты и их примерные цены на aliexpress.com

Arduino Nano V3.0, CH340/ATmega328P MicroUSB - 2.15 USD
Attachment:
nano 328.png
nano 328.png [ 260.4 KiB | Viewed 29703 times ]


Если критичны габариты, а USB порт в готовом синтезаторе не нужен то можно использовать Arduino Pro Mini ATmega328P 5V - 1.63 USD
Attachment:
pro mini 328.png
pro mini 328.png [ 324.22 KiB | Viewed 29703 times ]


Чтобы запрограммировать Arduino Pro Mini надо подключить его к USB. На Pro Mini нет встроенного USB порта, поэтому нужен внешний переходник USB-UART. Их есть несколько разновидностей. Лучше брать те у которых выведен сигнал DTR - он используется для сброса контроллера при программировании. Без этого сигнала прийдется при программировании вручную нажимать кнопку ресет на плате Pro Mini. Переходники на основе PL2303 глючные. У меня стабильно валили 7ку х64 в BSOD пока не поставил старые драйвера. Не рекомендую.

Вот дешевый USB-UART на чипе CH340 - 0.79 USD
Attachment:
ch340 usb uart.png
ch340 usb uart.png [ 211.16 KiB | Viewed 29703 times ]


Вот несколько подороже с Micro-USB на чипе CP2102 - 1.02 USB
Attachment:
cp2102 usb uart.png
cp2102 usb uart.png [ 233.57 KiB | Viewed 29703 times ]


Оптический энкодер, 360-400 импульсов на оборот - 10 USD
На энкодере не экономим и всякие трещетки на 10 импульсов не покупаем
Attachment:
encoder.png
encoder.png [ 289.33 KiB | Viewed 29703 times ]


Дисплей LCD 1602 - 1.22 USD
Attachment:
lcd 1602.png
lcd 1602.png [ 199.21 KiB | Viewed 29703 times ]


Переходник LCD 1602 на шину I2C - 0.47 USD
Он нам понадобится не только для подключения дисплея, но мы так же подключим через него клавиатуру и выведем управляющие сигналы для трансивера (управления полосовыми фильтрами, аттенюатором, УВЧ и тп). Сделан такой модуль на чипе PCF8574, но отличается тем что на выходные пины разведены только 7 из 8ми выходов чипа. Но зато и стоит такой модуль в 3 раза дешевле чем аналогичный у которого выведены все 8 ног. Для наших задач отсутствие одной ноги - не принципиально
Attachment:
1602 i2c.png
1602 i2c.png [ 160.77 KiB | Viewed 29703 times ]


Модуль расширителя I2C на PCF8574 у которого выведены все 8 ног - 1.40 USD
Attachment:
pcf8574.png
pcf8574.png [ 135.58 KiB | Viewed 29703 times ]


Или на том же али можно купить PCF8574 по цене 2.00 USD за 10шт и распаять их - так будет еще дешевле, а обвязки у PCF8574 никакой не требуется.

Собственно сам Si5351 - 2.40 USD (продается партиями по 5 штук за 12 USD)
Attachment:
si5351.png
si5351.png [ 318.71 KiB | Viewed 29703 times ]


Для распайки Si5351 можно использовать переходник SOP10-DIP - 0.99 USD за 10 штук
Attachment:
sop10.png
sop10.png [ 283.06 KiB | Viewed 29703 times ]


Так как Si5351 у нас требует 3.3в, а ардуина запитана от 5в то нам потребуется преобразователь уровней. Можно конечно спаять самому на двух транзисторах, но проще купить готовый всего за 0.25 USD
Он 4х канальный - мы будем использовать только два канала
Attachment:
level converter.png
level converter.png [ 351.4 KiB | Viewed 29703 times ]


Матричную клавиатуру можно купить готовую в сборе всего за 0.69 USD
Attachment:
keypad.png
keypad.png [ 464.58 KiB | Viewed 29703 times ]


Итого мы уложились в 29 баксов. При этом у нас остались лишние 4 штуки Si5351.
Теперь дело за малым - соеденить все это в работающую конструкцию :)


Top
 Profile  
 
PostPosted: 24 Nov 2016, 00:33 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
Для любителей больших красивых экранов замечу что перечень деталей в предыдущем посте - это минимальная комплектация которая нужна для запуска синтезатора. Кроме LCD 1602 планируется поддержка следующих дисплеев

0,96" OLED 128X64 - 2.60 USD
Attachment:
oled.png
oled.png [ 161.52 KiB | Viewed 29702 times ]


TFT дисплеев с SPI размерами 1.8" 128X160 и 2.8" 240x320 по 3.40 и 6.20 USD
Attachment:
tft spi 3.png
tft spi 3.png [ 168.75 KiB | Viewed 29702 times ]

Attachment:
tft spi 2.png
tft spi 2.png [ 233 KiB | Viewed 29702 times ]


Nokia 5110 84*48 - 1.90 USD
Attachment:
nokia 5110.png
nokia 5110.png [ 149.96 KiB | Viewed 29702 times ]


Изменения в программе синтезатора при смене типа дисплея будут минимальные - раскоментировать нужную строчку кода


Top
 Profile  
 
PostPosted: 25 Nov 2016, 09:11 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
Схема синтезатора

Attachment:
schematic.GIF
schematic.GIF [ 32.41 KiB | Viewed 29682 times ]


Нумерация пинов соответствует нумерации, используемой в 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 - замкнуто)

Attachment:
LCD_I2C_1602.png
LCD_I2C_1602.png [ 203.89 KiB | Viewed 29689 times ]


Внутренности платы-переходника I2C для LCD 1602 (нумерация выводов: 1 - VSS, 2 - VDD, 3 - V0, ... 16 - K)

Attachment:
LCD_I2C_PCF8574.jpg
LCD_I2C_PCF8574.jpg [ 87.03 KiB | Viewed 29689 times ]


Top
 Profile  
 
PostPosted: 25 Nov 2016, 19:49 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: 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


Top
 Profile  
 
PostPosted: 26 Nov 2016, 22:19 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
В собранном виде на макетке выглядит вот так

Attachment:
DSC05007.jpg
DSC05007.jpg [ 292.02 KiB | Viewed 29650 times ]


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

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

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

Поэтому калибровку лучше производить на максимальной частоте. Я делаю ее на 30 MHz. Но если позволяют возможности частотомера то лучше ее производить на 50-70MHz. Частота калибровки изменяется константой в программе


Top
 Profile  
 
PostPosted: 30 Nov 2016, 09:56 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
Выложил исходные коды на гитхабе. Софт еще не закончен полностью и будет дорабатываться.
Открывать в среде Arduino файл Syntez.ino - остальные файлы проекта откроются автоматически.

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

Проект будет работать даже без подключения всех модулей. Например вполне достаточно подключить энкодер и дисплей


Top
 Profile  
 
PostPosted: 04 Dec 2016, 00:20 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: 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:
Скетч использует 15 906 байт (51%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 730 байт (35%) динамической памяти, оставляя 1 318 байт для локальных переменных. Максимум: 2 048 байт.

Исходные коды доступны там же на гитхабе.
Никаких сторонних библиотек для сборки теперь не нужно!

Отдельно хочу остановиться на управлении Si5351. По возможности библиотека использует multisynth делитель в режиме целочисленного деления. По различным отзывам это уменьшает фазовые шумы. Исключением являются режимы, когда необходимо генерировать три различные частоты гетеродина (тракты с двумя ПЧ - преобразование вверх). Так как Si5351 содержит только два ядра PLL то приходится идти на некоторый компромисс. Первый гетеродин всегда использует PLL_A и работает в режиме целочисленного деления в multisynth. Второй гетеродин использует PLL_B и так же работает в целочисленном режиме. Третий гетеродин использует PLL_B, и работает в целочисленном режиме если его частота кратна частоте второго гетеродина. В противном случае multisynth третьего гетеродина работает с дробным делителем. Это не должно существенно деградировать параметры тракта, т.к. второй фильтр ПЧ обычно достаточно "узкий" и преобразовываться на шумах третьего гетеродина по сути уже нечему.


Top
 Profile  
 
PostPosted: 04 Dec 2016, 13:17 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: 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 используется как образцовый для оценки и устранения дисбаланса.


Top
 Profile  
 
PostPosted: 04 Jan 2017, 22:37 
Offline
Site Admin

Joined: 21 Apr 2012, 21:00
Posts: 284
Location: Odessa
Позывной: UR5FFR
Напряжение пик-пик на выходе Si5351 на нагрузке 100ом

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

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


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next

All times are UTC + 2 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group