Программы
Статьи

Игорь Уватенков (R9JD)

Приветствую коллеги и начинающие радиолюбители! Эта статья для вас, в ней я расскажу о своем опыте по построению антенных переключателей, это будет несколько вариантов. Девиз: «От простого к сложному!»

Разложим по полочкам… Что же такое антенный переключатель и из каких компонентов состоит? Смотрим рисунок ниже. В состав входит пульт управления, исполнительный блок и линия связи. Пульт управления располагается в шеке оператора, коммутационный блок может располагаться на мачте, это удобно, если у вас мультибенд (несколько антенн на одной траверсе). Вы прокладываете один кабель от шека до мачты, а там, наверху, исполнительный блок коммутирует с помощью реле нужную антенну на кабель идущий к передатчику или приемнику. Блок может располагаться и в помещении, при этом кабели со всех антенн нужно привести и подключить к нему.

Блок схема антенного коммутатора

ПУЛЬТ УПРАВЛЕНИЯ

Суть пульта управления: В этом блоке происходит формирование напряжения, которое подается на реле коммутационного блока, что будет внутри блока и с помощью каких элементов вы соберете переключатель — это уже второй вопрос. То ли это будет ручное переключение, то ли электронный модуль, все зависит от поставленной цели и текущих возможностей.

Самым простой и доступной конструкцией пульта могут служить обыкновенные многопозиционные переключатели. В качестве таковых можно использовать галетные переключатели. Переключатель выбираете такой, на сколько позиций необходимо переключения, проще говоря — по количеству антенн. Если не нашли нужного, то можно секции одной галеты (пластина на которой расположены переключающие контакты) объеденить. Например, переключатель на 3 положения, а на галете таких 3 секции, вы соединяете центральные переключающие контакты всех секций — это и будет общий центральный контакт, в итоге получите 9 позиций. Активно используются и кулачковые переключатели (крайний справа на ркартинке), уже со шкалой!

Галетные переключатели

Можно использовать кнопочные переключатели с взаимоисключающим режимом работы. При нажатии одной из кнопок, она фиксируется с помощью механизма защелки на самом переключателе, остальные отключаются, тем самым всегда остается включенной одна позиция. Это удобно, исключает ошибки коммутации антенн. Сегодня промышленность выпускает переключатели разных видов и даже со встроенными светодиодами для индикации. Думаю схему переключателя рисовать излишне, разберетесь самостоятельно.

Кнопочные переключатели

А теперь рассмотрим электронные переключатели. Такие модули собирают на основе транзисторных ключей или ключей на микросхемах, возможно использовать в качестве ключей тиристоры. Более продвинутый вариант — микропроцессоры. Логику поведения переключателя закладывают при проектировании устройства. 

Первая схема (Рис.1) коммутатора на переключение 4-х антенн, выполнена на D-тригерах самой распространенной микросхеме в микропроцессорных системах - К155ТМ2. Пульт представляет из себя (левая часть схемы) четыре тактовые кнопки (без фиксации), две микросхемы и транзисторные ключи. Применение тригеров обусловлено тем, что они хранят неограниченное время установленное состояние и меняют его только в момент, когда происходит переключение (смена устанавливающих напряжений на соответствующих выводах микросхемы).

Немного лирики о тригере. D-триггер (от английского DELAY) называют информационным триггером, также триггером задержки. D — триггер может управляться (переключаться) как уровнем тактирующего импульса, так и его фронтом. Для триггера типа D, состояние в интервале времени между сигналом на входной линии и следующим состоянием триггера формируется проще, чем для любого другого типа.

D-триггер имеет как минимум две входные линии: вход данных «D», от английского Data (данные), и вход синхронизации «C» от английского же Clock (импульс, строб). Используя эти входы можно заставить триггер работать либо как элемент памяти, либо как счетный триггер. Рассмотрим более подробно входные сигналы (триггер с выводами 1…6). При подаче на вход S уровня логического нуля триггер установится в единичное состояние. Это означает, что на прямом выходе (вывод 5) появится логическая единица. Если же теперь подать логический ноль на R-вход, то триггер сбросится. Это значит, что на прямом выходе (вывод 5) появится уровень логического нуля, а на инверсном (вывод 6) будет присутствовать логическая единица. 

Таблица состояний тригера К155ТМ2

Когда говорят о состоянии триггера, имеется в виду состояние его прямого выхода: если триггер установлен, то на его прямом выходе высокий уровень (логическая единица). Соответственно, на инверсном выходе все с точностью до наоборот, поэтому инверсный выход часто при рассмотрении работы схемы просто не упоминают.

Логическую единицу на входы R и S можно подавать сколько угодно: состояние триггера не изменится. Это говорит о том, что для входов R и S рабочим является низкий уровень. Именно поэтому входы RS обозначаются на схеме в виде маленького кружочка, который обозначает, что рабочий уровень сигнала низкий или инверсный. Это общее правило для всех условных графических обозначений микросхем. Если вы захотите более подробно ознакомится с данным классом устройств — шагайте в интернет или в библиотеку.

Поскольку входы RS являются приоритетными, мы в своей реализации схемы, будем использовать как обычный RS тригер, управлять будем входами R и S, а входы данных и синхронизации посадим на землю.

Рассмотрим работу схемы Рис.1. При нажатии на кнопку SB1, на устанавливающий вход S1 подается логический ноль (замыкаем вход кнопкой на землю), при этом на выходе Q1 тригера устанавливается логическая единица. С инверсного выхода Q1, логический ноль через диоды подается на входы R — сброса всех тригеров, кроме первого в «нулевое состояние». Диоды нужны, чтобы исключить ложное срабатывание. Далее сигнал высокого уровня с выхода Q1 поступает на транзисторный ключ. Ключ нужен для усиления тока и напряжения коммутации исполнительных устройств, в данном случае это реле. С выхода ключа напряжение подается на реле выходного блока. Реле может быть на рабочее напряжение 12V, 24V, 27V, 36V.  На выходе тригера для индикации включенного канала (антенны) установлен светодиод через резистор номиналом 470 — 1К. Аналогично работают остальные каналы переключателя, их может быть неограниченное количество, вы можете сделать 2,3,8…20…, зависит от вашего планирования и необходимости в них. Клонируйте их по аналогии.

Схема антенного переключателя на 4 позиции

Вторая схема Рис.2, реализована на логических микросхемах К155ЛА4 и К155ЛН1. Принцип логического исключения каналов, если один включен, то остальные выключаются. Обращаю внимание на то, что блок кнопок должен быть с взаимоисключающей фиксацией. 

Схема антенного переключателя на 4 позиции на К155ЛА3

Скажу честно, схема Рис.1 более стабильна и предпочтительна для исполнения. В схеме Рис.2 имеется неоправданная избыточность.

Третий вариант пульта управления — применение микроконтроллера. Очень популярный проект Arduino, доступен для как для начинающих так и мастеров. Выбираем плату микроконтроллера под наши нужды из самых маленьких, см. фото:

Варианты плат микроконтроллера Ардуино

Для 8-ми канального вполне подойдет любая из плат. У меня в наличии имеется имеется Arduino Pro Micro, на ее основе и выполним пульт. Транзисторные ключи и внешний блок коммутации типовые, как на предыдущих схемах, о них и вариантах изготовления поговорим чуть позже. Схема подключения выглядит так:

Схема антенного переключателя 1х8 на базе Ардуино

8 входов ≥ 8 выходов. К контактам 2-9 платы подключаем кнопки, эти же контакты (порты) «подтягиваем на землю», для исключения ложных срабатываний с помощью резисторов номиналом 1К. При замыкании контактов кнопки, на порты подается высокий потенциал — логическая «1». Программа «зашитая» в микропроцессор обрабатывает эти сигналы и в зависимости от логики, выдает на выходных портах (10,16,14,15,А0,А1,А2,А3) «логическую единицу» либо «логический ноль». Далее на транзисторный ключ и внешний блок коммутации. Модуль получается очень компактный. Для исключения дребезга контактов, паралельно резисторам кнопок целесообразно подключить конденсаторы емкостью 0.047-0.1 мк. К контакту RAW подключается внешнее питание, рекомендуется +9V. С этого пина через внутренний стабилизатор, напряжение преобразуется в стабилизированное +5V, питает МК (микроконтроллер) и присутствует на выводе VCC. К этому выводу и подключаем общий провод кнопок. Вывод GND платы — это общий провод (земля).

Схема готова, пишем программу управления (скетч) для МК. Логика проста: нужно опросить входные порты и в зависимости от нажатой кнопки установить высокий уровень на соответствующем выходном порту, остальные сбросить в ноль. 

Для написания и закачки в микроконтроллер Ардуино используется среда разработки Arduino. Официальный сайт здесь. С него можно скачать последнюю версию IDE. На русскоязычном сайте можно познакомиться с аппаратной платформой, языком программирования и кратким описанием среды разработки. В интернете много сайтов псвященных данной платформе, этому проекту уже несколько лет и он очень популярен в мире среди «Кулибиных». Как пользоваться средой, думаю, разберетесь, сложного ничего нет. Достаточно почитать документацию и подключить МК к компьютеру через USB порт. После настройки и запуска среды, копируем скетч (см.ниже), «заливаем» его в МК с помощью команды «компилировать и выгрузить» и наслаждаемся работой нашего пульта управления. Время на програмиирование МК занимает меньше минуты. Вся прелесть в том, что мы влюбой момент времени можем дополнить, изменить программу МК и перезалить с новым алгоритмом. Это можно делать неограниченное количество раз, модернизируйте «до посинения»!

А вот и скетч для схемы Рис.3:


// Антенный переключатель 1х8 v.1.00
// © Игорь Уватенков (R9JD)
// Скетч написан под Arduino Pro Micro
// Возможно использование на других версиий МК с назначением соответствующих портов входа/выхода

//Порты для выходов переключаемых антенн
int ant1 = A3;
int ant2 = A2;
int ant3 = A1;
int ant4 = A0;
int ant5 = 15;
int ant6 = 14;
int ant7 = 16;
int ant8 = 10;
//Порты для кнопок
int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int bt4 = 5;
int bt5 = 6;
int bt6 = 7;
int bt7 = 8;
int bt8 = 9;
int NumButton; //Номер нажатой кнопки

void setup () {
// Назначаем порты на вход
pinMode (bt1,INPUT);
pinMode (bt2,INPUT);
pinMode (bt3,INPUT);
pinMode (bt4,INPUT);
pinMode (bt5,INPUT);
pinMode (bt6,INPUT);
pinMode (bt7,INPUT);
pinMode (bt8,INPUT);

// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
pinMode (ant4,OUTPUT);
pinMode (ant5,OUTPUT);
pinMode (ant6,OUTPUT);
pinMode (ant7,OUTPUT);
pinMode (ant8,OUTPUT);
}

void SetButton () //Определяем номер нажатой кнопки
{
if (digitalRead (bt1) == HIGH) {NumButton = 1;}
if (digitalRead (bt2) == HIGH) {NumButton = 2;}
if (digitalRead (bt3) == HIGH) {NumButton = 3;}
if (digitalRead (bt4) == HIGH) {NumButton = 4;}
if (digitalRead (bt5) == HIGH) {NumButton = 5;}
if (digitalRead (bt6) == HIGH) {NumButton = 6;}
if (digitalRead (bt7) == HIGH) {NumButton = 7;}
if (digitalRead (bt8) == HIGH) {NumButton = 8;}
}

void loop ()
{
SetButton ();
switch (NumButton) { //Выбираем что и где нужно установить в зависимости от номера нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 4: {digitalWrite (ant4, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 5: {digitalWrite (ant5, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 6: {digitalWrite (ant6, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 7: {digitalWrite (ant7, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant8, LOW);
break;
}
case 8: {digitalWrite (ant8, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant1, LOW);
break;
}
}
}

Для начала неплохо, чтобы понять принцип работы. Мы реализовали логику восьми входных линий и восьми выходных, но у нас целый микроконтроллер, так примитивно использовать его было бы не рационально! Давайте добавим интеллекта в наш проект. Для этого определим задачу, пульт должен:

    • Работать в ручном режиме
    • Работать в автоматическом режиме
    • Индикация режимов
    • Декодировать диапазонный протокол Band Data YAESU
    • Декодировать диапазонное напряжение ICOM

В современных трансиверах имеется специальный выход с данными о текущем диапазоне. Например, YAESU, ELECRAFT и некоторые другие производители, использует паралельный код для определения диапазона, протокол Band Data, а ICOM для этих целей — уровень напряжения. Схема с изменениями:

 Схема антенного переключателя 1х8 на базе Ардуино версия 2

Как вы заметили, кнопки подключаются всего на один контакт. Вы спросите: «Как это, вместо восми контактов — один?» Да один, все просто, кнопки к порту 9 подключаются через резистивный делитель, каждая кнопка снимает с делителя свой потенциал, поскольку это аналоговый вход с функцией АЦП (аналого-цифровой преобразователь, он выдает значения от 0 до 1023, максимальное значение соответствует 5V). Анализируя уровень напряжения с резистивного делителя, можно определить номер нажатой кнопки, что и будет реализовано в программе обработки.

Есть маленький нюанс. Иногда начинающие допускают ошибку, не обеспечивая присутствие на порту постоянного напряжения, отличного от того, что будет измеряться. Для чего это нужно? В момент нажатия кнопки, на порту четко присутствует потенциал с делителя. В момент отпускания кнопки и между нажатиями кнопок, на порту появляется случайное значение (измерять то, нечего!), которое меняется достаточно быстро и наша программа будет «сходить с ума» пытаясь сделать переключение каналов. Чтобы такого не происходило мы через резистор R25 привязываем порт к VCC и будем анализировать в программе, учитывая этот потенциал.

Я не сказал еще о кнопке SB9 — эта кнопка для переключения режима «Авто/Ручной» (при ее нажатии чередуются включение/выключение режима). Изначально в программе будет установлен авторежим, это когда происходит переключение каналов заранее запрограммированых относительно декодера диапазонов. Ручной режим предусматривает отключение декодера и управление пультом «в ручную» — нажимаем ручками, контролируем глазками.

Для дешифровки сигналов BAND DATA YAESU используется двоичный код согласно таблице:

Диапазон 160 м 80 м 40 м 30 м 20 м 17 м 15 м 12 м 10 м 6 м
частота 1.8 Мгц 3.5 Мгц 7 Мгц 10 Мгц 14 Мгц 18 Мгц 21 Мгц 24 Мгц 28 Мгц 50 Мгц
Band A 1 0 1 0 1 0 1 0 1 0
Band B 0 1 1 0 0 1 1 0 0 1
Band C 0 0 0 1 1 1 1 0 0 0
Band D 0 0 0 0 0 0 0 1 1 1
НЕХ код 1 2 3 4 5 6 7 8 9 А

Что касается дешифровки диапазонного напряжения ICOM, то здесь ситуация немного иная. Разработчики приняли решение кодировать диапазоны уровнем напряжения, и их решение несколько неудачное, диапазоны WARC объедины с КВ диапазонами. На порты МК более 5 вольт подавать нельзя (а исходное до 8V), поэтому диапазонное напряжение ICOM будем делить с помощью резистивного делителя R21, R22. Для дешифровки прочитаем значение на порту 8 АЦП и в зависимости от диапазона переключм выходной порт в логическую единицу, остальные сбросим в ноль.

Диапазон Стандартные напряжения ICOM Уровни напряжения с делителя по схеме
160 м 7.0 — 8.0 v 4,3 — 4,8 v
80 м 6.0 — 6.5 v 3.68 — 4.05 v
40 м 5.0 — 5.5 v 3.06 — 3.43 v
20 м 4.0 — 4.5 v 2.43 — 2.81 v
17/15 м 3.0 — 3.5 v 1.81 — 2.18 v
12/10 м 2.0 — 2.5 v 1.19 — 1.56 v
30 м 0.1 — 1.2 v 0

Обращаю ваше внимание (!) Прежде чем залить скетч в МК, необходимо откалибровать уровни показаний (измерений) на входах АЦП 9  (кнопок) и  (ICOM) для вашего экземпляра МК, т.к. для разных плат МК все таки имеются расхождения, хоть и небольшие. При необходимости подкорректировать в скетче значения диапазона срабатывания. Для измерений можно использовать простенький скетч (см.ниже). Методика такая: Заливаем скетч в МК, запускаем программу измерений, открываем монитор порта в среде программирования, нажимаем последовательно кнопки переключения каналов, а в мониторе порта смотрим показания и записываем на бумажку измеренное среднее значение. Для ICOM — просто подаем с блока питания стандартные напряжения из таблицы и так же записываем то, что намерил нам порт АЦП. Далее, если есть необходимость, вносим изменения в основной скетч, указываем в условиях диапазон отклонений с учетом небольшой разницы в меньшую и большую сторону от среднего значения.

//Скетч для выборки калибровочных значений на портах АЦП (9 и 8)

int analogPin = 9; // номер порта АЦП на котором производится измерение, измените его при переходе к другому порту
int val = 0; // переменная для хранения считываемого значения

void setup ()
{
Serial.begin (9600); // установка связи по serial
}

void loop ()
{
val = analogRead (analogPin); // считываем значение
Serial.println (val); // выводим полученное значение

delay (1000); //Ждем секунду
}


Исходя из вышесказанного делаем дополнения в программной части. Я умышленно включил в проект возможность дешифровки диапазонов двух разных способов от производителей радиолюбительского оборудования, для того, чтобы вы могли выбрать свой вариант, под ту аппаратуру, которую используете. В скетче можете удалить часть кода, которая не нужна. Блоки помечены комментариями.


// Антенный переключатель 1х8 v.1.01
// © Игорь Уватенков (R9JD)
// Скетч написан под Arduino Pro Micro
// Возможно использование на других версиий МК с назначением соответствующих портов входа/выхода

int ant1 = A3; //Порты выходов переключаемых антенн
int ant2 = A2;
int ant3 = A1;
int ant4 = A0;
int ant5 = 15;
int ant6 = 14;
int ant7 = 16;
int ant8 = 10;

int dataD = 2; //Порты BAND DATA
int dataC = 3;
int dataB = 4;
int dataA = 5;

int btn = 9; //Порт кнопок
int btauto = 7; //Порт установки режимов Авто/Ручной
int dataIcom = 8; //Порт чтения диапазонного напряжения ICOM
int ledauto = 6; //Порт индикации
boolean setauto = true; //Режим авто
int NumButton = 1; //Номер нажатой кнопки
int Trcvr = 1; //Применяемое оборудование (1-Yaesu, 0-Icom)
int Band; // диапазон


union InBandData {
struct {
unsigned dt0: 1;
unsigned dt1: 1;
unsigned dt2: 1;
unsigned dt3: 1;
} bits ;
uint8_t value;
};
InBandData BD; // Переменная для хранения состояния кода диапазона

void setup () {
// Назначаем порты на вход
pinMode (dataA,INPUT);
pinMode (dataB,INPUT);
pinMode (dataC,INPUT);
pinMode (dataD,INPUT);
pinMode (btauto,INPUT);
// Назначаем порты на выход
pinMode (ant1,OUTPUT);
pinMode (ant2,OUTPUT);
pinMode (ant3,OUTPUT);
pinMode (ant4,OUTPUT);
pinMode (ant5,OUTPUT);
pinMode (ant6,OUTPUT);
pinMode (ant7,OUTPUT);
pinMode (ant8,OUTPUT);
pinMode (ledauto,OUTPUT);
}

void SetButton () //Определяем номер нажатой кнопки
{
if (analogRead (btn) >= 900 && analogRead (btn) ≤ 910) {NumButton = 1;}
if (analogRead (btn) >= 877 && analogRead (btn) ≤ 887) {NumButton = 2;}
if (analogRead (btn) >= 853 && analogRead (btn) ≤ 863) {NumButton = 3;}
if (analogRead (btn) >= 816 && analogRead (btn) ≤ 826) {NumButton = 4;}
if (analogRead (btn) >= 761 && analogRead (btn) ≤ 771) {NumButton = 5;}
if (analogRead (btn) >= 670 && analogRead (btn) ≤ 680) {NumButton = 6;}
if (analogRead (btn) >= 490 && analogRead (btn) ≤ 500) {NumButton = 7;}
if (analogRead (btn) ≤ 20) {NumButton = 8;}
}

void SetAntenna (int val)
{
switch (val) { //Выбираем порты которые нужно установить в зависимости от нажатой кнопки
case 1: {digitalWrite (ant1, HIGH); //Устанавливаем «1» выход антенны 1, остальные сбрасываем в «0»
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 2: {digitalWrite (ant2, HIGH); //Устанавливаем «1» выход антенны 2, остальные сбрасываем в «0»
digitalWrite (ant1, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 3: {digitalWrite (ant3, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 4: {digitalWrite (ant4, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 5: {digitalWrite (ant5, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 6: {digitalWrite (ant6, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant8, LOW);
break;
}
case 7: {digitalWrite (ant7, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant1, LOW);
digitalWrite (ant8, LOW);
break;
}
case 8: {digitalWrite (ant8, HIGH);
digitalWrite (ant2, LOW);
digitalWrite (ant3, LOW);
digitalWrite (ant4, LOW);
digitalWrite (ant5, LOW);
digitalWrite (ant6, LOW);
digitalWrite (ant7, LOW);
digitalWrite (ant1, LOW);
break;
}
}
}

uint8_t BinBandData () //Считываем двоичный код Band Data Yaesu 
{
BD.value = 0;
if (digitalRead (dataA) == HIGH) {BD.bits.dt0=1;} else {BD.bits.dt0=0;};
if (digitalRead (dataB) == HIGH) {BD.bits.dt1=1;} else {BD.bits.dt1=0;};
if (digitalRead (dataC) == HIGH) {BD.bits.dt2=1;} else {BD.bits.dt2=0;};
if (digitalRead (dataD) == HIGH) {BD.bits.dt3=1;} else {BD.bits.dt3=0;};
switch (BD.value){
case 1: Band = 160; break;
case 2: Band = 80; break;
case 3: Band = 40; break;
case 4: Band = 30; break;
case 5: Band = 20; break;
case 6: Band = 17; break;
case 7: Band = 15; break;
case 8: Band = 12; break;
case 9: Band = 10; break;
case 10: Band = 6; break;
}
}

void BandIcom () //Считываем уровень диапазонного напряжения Icom 
{
if (analogRead (dataIcom) >= 910 && analogRead (dataIcom) ≤ 1023) {Band = 160;}
if (analogRead (dataIcom) >= 783 && analogRead (dataIcom) ≤ 837) {Band = 80;}
if (analogRead (dataIcom) >= 635 && analogRead (dataIcom) ≤ 711) {Band = 40;}
if (analogRead (dataIcom) >= 511 && analogRead (dataIcom) ≤ 574) {Band = 20;}
if (analogRead (dataIcom) >= 369 && analogRead (dataIcom) ≤ 437) {Band = 15;}
if (analogRead (dataIcom) >= 228 && analogRead (dataIcom) ≤ 294) {Band = 10;}
if (analogRead (dataIcom) >= 0 && analogRead (dataIcom) ≤ 127) {Band = 30;}
}

void loop ()
{

if (digitalRead (btauto) == HIGH && setauto == false) {setauto = true;}

if (digitalRead (btauto) == HIGH && setauto == true) {setauto = false;}

if (setauto == false) //Если ручной режим
{
digitalWrite (ledauto, LOW); //Тушим светодиод режима Авто
SetButton (); //Получаем номер кнопки
}
else //Если авторежим включаем каналы
{
digitalWrite (ledauto, HIGH); //Включаем светодиод режима Авто
if (Trcvr == 1){BinBandData ();} //Декодируем диапазон
else{BandIcom ();}
//Ниже, в блоке условий, нужно указать какая антенна будет включена в авторежиме,
//в зависимости от декодированного диапазона присвоить, NumButton номер нажатой кнопки.
//По номеру кнопки программа включит нужный канал,
//номер кнопки соответствует номеру канала (антенны)
if (Band == 160) {NumButton = 1;} //КВ диапазоны
if (Band == 80) {NumButton = 2;}
if (Band == 40) {NumButton = 3;}
if (Band == 20) {NumButton = 4;}
if (Band == 15) {NumButton = 5;}
if (Band == 10) {NumButton = 6;}
if (Band == 30) {NumButton = 7;} //WARC диапазоны
if (Band == 12) {NumButton = 8;}
//if (Band == 17) {NumButton = 7;}
//if (Band == 6) {NumButton = 8;}
}
SetAntenna (NumButton);

delay  (300); //Мониторим три раза в секунду, можете поставить свое время (в милисекундах)
}

КЛЮЧИ КОММУТАЦИИ

Ключи выполняются по классической схеме на составных транзисторах либо на транзисторных сборках. Если у вас уже имеются готовые внешние блоки и реле запитаны с общим заземлёным проводом, то выбирайте схему Рис.5а (транзисторных сборок ключей с общей землей, подобной ULN2003 не видел, возможно они есть…) Если у реле оба контакта обмотки реле независимы, то рациональнее выбрать схему Рис.5б, проще с точки зрения монтажа и в этом случае используется всего одна восьмиканальная микросхема ULN2003A вместо кучи радиоэлементов. Схема канала Рис.6а, а цоколевка микросхемы на Рис.7. При выборе микросхемы обращайте внимание на количество каналов, поскольку выпускаются они с 7 и 8 каналами!

Приведенные схемы ключей (Рис.1-Рис.4 и Рис.5а), немного отличаются тем, что светодиод в первых включен до ключа, а в последней схеме после ключа, что позволяет видеть работоспособность ключа. Для резистора включенного последовательно со светодиодом нужно подобрать номинал в зависимости от применяемого св.диода и напряжения питания реле. На Рис.5б и Рис.6б — способы подключения реле к ключам.

Немного лирики: ULN2803A является массивом транзисторов Дарлингтона в корпусе DIP18 или SO18. Она состоит из 8 транзисторов с общим эмиттером и внутренними подавляющими диодами для индуктивных нагрузок. Каждый транзистор обладает пиковым током нагрузки 600мА (непрерывный 500мА) и может противостоять напряжению 50В в ВЫКЛ. состоянии. ULN2803A обладает входным резистором 2.7кОм для 5В TTL и КМОП для упрощения взаимодействия с семейством логических элементов. Выводы входов находятся напротив выводов выхода для упрощения разводки платы. Выходы возможно подключать параллельно для увеличения тока. Имеются внутренние помехоподавляющие диоды. Выходное напряжение до 50В. Как видите ничего придумывать не нужно, все уже есть готовое, бери и паяй.


Транзисторные ключи для антенного переключателя

БЛОК КОММУТАЦИИ

Внешний блок коммутации выполнен на печатной плате из двустороннего стеклотекстолита с максимально возможной толщиной фольги. Реле установлены переключающими контактами максимально близко к объекту переключения. При отключеном питании пульта управления все выходные контакты (антенны) будут заземлены. При включении одного канала, остальные остаются заземлёнными, это нужно для того, чтобы расстроить не работающие антенны и не искажать диаграмму направленности рабочей антенны, а также снять статическое напряжение и различного рода наводки. К тому же при выключеном пульте исключается прямое попадание разряда молнии по кабелю в передатчик или приемник. Многие производители антенных коммутаторов игнорируют это, по крайней мере я не встречал «нормальных» моделей. У них всегда подключена одна антенна, вне зависимости от того работает пульт или нет. По моему, при форсмажорной ситуации, пусть лучше выйдет из строя блок коммутации нежели трансивер! Поэтому я развел платы в SPRINT LAYOUT с учетом сказанного. Восьмиканальные платы общей землей качаем здесь, с общим «плюсом» (для ULN2003A) качаем отсюда. Четырехканальные — с общей землей здесь, с общим плюсом здесь. Размер плат на 4 канала 100х100 мм, на восемь каналов 140х140 мм, на плате разведены места для установки диодов и конденсаторов, либо навесных, либо SMD, ставьте по выбору. Внешне выглядят так:

Блоки коммутации антенн 1х4 и 1х8

В качестве релюшек я выбрал герметичные RT314024. Работают в диапазоне температур от минус 40 до плюс 85 С, 24 вольта постоянного тока, две контактных группы, расстояние между контактами 2.5 мм, ток коммутации 16 А, время срабатывания 3 миллисекунды, габариты 29х12.7х15.7 мм, стоимость в зависимости от производителя и продавца 70-150 руб за шт. В общем класс!!! Для мощности в киловатт есть запас, это вполне достойный вариант. Есть аналогичные релюхи, высота их чуть больше и время срабатывания до 7-10 миллисекунд, установочные размеры те же: TRA2 D24VDC-S-Z (см.фото).


Реле RT314024 и TRA2 D-24VDC-S-Z 

Еще можно использовать Вакуумные реле П1Д-1В, П1Д-3В, П1Д-4В, ток протекающий через контакты от 3 А (П1Д-1В) до 7.5 А (П1Д-3В, П1Д-4В) по паспорту, рабочее напряжение на частоте 30 Мгц = 1.5 Кв. На том, что я перечислил, свет клином не сошелся, можете поискать в интернете подходящий вариант, главный критерий большой ток коммутации, расстояние между контактов не менее 2 мм, герметичность и рабочее напряжение удобное для пульта управления 12, 24 или 27 вольт. Я выбрал 24 в поскольку имеется готовый блок питания. Любителям QRO можно взять мощные вакуумные (В1В-1В, В1В-1В1, В1В-1Т1, В1В-1Т2), и как следствие изготовить другую плату.

Мощные вакуумные реле для блока коммутации

Коммутатор собирается в металлическом (дюралевом) корпусе, можно купить готовый корпус. Сверлятся отверстия под ВЧ разъемы по маске платы, корпуса ВЧ разъемов крепляются болтами к корпусу блока либо непосредственно, либо через распорные втулки вместе с платой (первый вариант надежнее). Далее плата «надевается на установленые разъемы и центральные жилы припаиваются к плате. Экраны ВЧ разъемов соеденены через корпус коммутатора и подключаются к плате отдельным проводом. Плату крепить отдельно нет необходимости, она прочно удерживается на распаяных разъемах. Выводы для питания релюшек выводятся на боковой разъем, и экранированым проводом спускаются в шек к пульту управления. Для этих целей подходит кабель экранированная „витая пара“ для внешней прокладки, его можно приобрести в любом компьютерном магазине.

Данный проект можно дорабатывать и развивать под те нужды, которые захотите иметь у себя в шеке. Я рассказал о базовых принципах и начальных этапах программирования. После приобретения некоторого опыта можете переходить к более сложным системам. Успехов вам в развитии!


Просмотров: 21135