Добавить в корзинуПозвонить
Найти в Дзене
Старый радиолюбитель

Si5351+Arduino для UW3DI.

Продолжаю описывать свои эксперименты синтезатором на Si5351. Сделав синтезатор на фиксированную частоту, я решил расширить его функционал, подключив к нему всего лишь кнопку. Это позволило переключать синтезируемые частоты и дало возможность применить его в аппарате, по схемотехнике аналогичном знаменитому UW3DI. Ведь частенько от этой схемы отказывались из-за того, что не было набора кварцев для первого гетеродина. И, даже имея этот набор, не получиться охватить диапазоны 160, 30, 17 и 12 метров. А простенький синтезатор позволяет решить эти проблемы. Для программы я использовал библиотеку si5351mcu.h. Кнопка была подключена к цифровому входу Ардуино D7, который был программно (PULLUP) подтянут к напряжению питания. В программе демонстрируется возможности привязки частоты второго генератора к тем или другим диапазонам с целью автоматического изменения полосы пропускания (НБП или ВБП). В UW3DI это не нужно, так ка частоты первого гетеродина на нижних диапазонах выше частоты сигнала, а

Продолжаю описывать свои эксперименты синтезатором на Si5351. Сделав синтезатор на фиксированную частоту, я решил расширить его функционал, подключив к нему всего лишь кнопку. Это позволило переключать синтезируемые частоты и дало возможность применить его в аппарате, по схемотехнике аналогичном знаменитому UW3DI. Ведь частенько от этой схемы отказывались из-за того, что не было набора кварцев для первого гетеродина. И, даже имея этот набор, не получиться охватить диапазоны 160, 30, 17 и 12 метров. А простенький синтезатор позволяет решить эти проблемы.

Для программы я использовал библиотеку si5351mcu.h. Кнопка была подключена к цифровому входу Ардуино D7, который был программно (PULLUP) подтянут к напряжению питания.

Рис. 1. Работающий синтезатор с переключением частот кнопкой.
Рис. 1. Работающий синтезатор с переключением частот кнопкой.

В программе демонстрируется возможности привязки частоты второго генератора к тем или другим диапазонам с целью автоматического изменения полосы пропускания (НБП или ВБП). В UW3DI это не нужно, так ка частоты первого гетеродина на нижних диапазонах выше частоты сигнала, а на верхних ниже. Но если выбрать преобразование ВВЕРХ, то такая функция понадобиться.

Текст скетча короткий, но все работает.

#include "si5351mcu.h" // подключаем библиотеку для управления si5351mcu

Si5351mcu Si; // создаем объект библиотеки

int ButtonPin=7; // назначаем пин подключения кнопки

int i=1; //счетчик диапазонов (от 0 до 5)

int flag = 0; //флаг состояния кнопки (0 или 1)

// определяем значения частот

long F1=10000000; //диапазон 3,5 МГц

long F2=13500000; //диапазон 7,0 МГц

long F3=8000000; //диапазон 14,0 МГц

long F4=15000000;//диапазон 21,0 МГц

long F5=22000000;//диапазон 28,0 МГц

long F6=22500000;//диапазон 28,5 МГц

long F7=500000; //Верхняя БП

long F8=503000; //Нижняя БП

void setup() {

Si.init(25000000); // инициируем библиотеку и назначаем частоту кварцевого резонатора, если у вас 27 МГц, то просто скобки

Si.correction(2800);// назначаем коэффициент коррекции (нужно подобрать)

Si.setPower(0, SIOUT_4mA); // устанавливаем максимальный выходной ток на выходе 0

Si.setPower(1, SIOUT_4mA); // устанавливаем максимальный выходной ток на выходе 1

Si.reset();

pinMode(ButtonPin, INPUT_PULLUP); // подтягиваем пин подключения кнопки к источнику питания

}

void loop() {

// обрабатываем состояние кнопки

if(digitalRead(ButtonPin) == HIGH && flag == 0) // если кнопка не нажата, то переменная flag = 0

{

i ++; // диапазон увеличивается

flag = 1; // значение flag меняется на противоположный

if(i > 5) // Если номер диапазона превышает максимальный

{

i = 0; // то отсчет начинается с нуля

}

}

if(digitalRead(ButtonPin) == LOW && flag == 1) // если на пине низкий лог. уровень

{

flag = 0; // значение flag меняется на противоположный

}

// формируем на выходе 0 частоту в соответствии со значением i

if (i==0) Si.setFreq(0, F1);

if (i==1) Si.setFreq(0, F2);

if (i==2) Si.setFreq(0, F3);

if (i==3) Si.setFreq(0, F4);

if (i==4) Si.setFreq(0, F5);

if (i==5) Si.setFreq(0, F6);

// формируем на выходе 1 частоту или 500 или 5003 для изменения полосы (сделано для примера)

if (i==0||i<3) Si.setFreq(1, F7); // на первых трех диапазонах ВБП

if (i==3||i<7) Si.setFreq(1, F8); // на остальных диапазонах НБП

delay(200); // пауза в 0,2 с

Si.reset(); // перезапуск библиотеки и повторение опроса кнопки

}

Теперь можно подключить еще кнопку и изменить программу так, чтобы одна увеличивала частоту, а другая - уменьшала. Еще одну кнопку можно подключить для выбора полосы вручную, что может потребоваться про работе разными типами модуляции. Ведь, если на нижних диапазонах используют НБП для SSB и CW, то для работы на этих диапазонах FT8 требуется ВБП.

Еще одним шагом будет подключение ЖК-дисплея, на который будет выводиться диапазон и используемая полоса.

И еще немного о чистоте выходного сигнала синтезатора. Да, он не идеален, но из этого положения есть выход: использовать деление частоты и ключевые смесители. Ну а для чистого синуса нужно делать ФНЧ. Их и понадобиться всего три: с частотой среза 13,5 МГц, 24 МГц и 550 кГц.

P.S. Для любителей SDR: на выходах синтезатора можно получать сигналы с одной частотой и со сдвигом фаз. Но мне кажется гораздо проще поставить на выходе два D-триггера, и можно иметь сдвиг фаз 0 90, 180 и 270 градусов,благо синтезатор работает до 180 МГц/

Всем здоровья и успехов в эти жаркие дни!