Переключатель антенн для трансивера своими руками

Записки программиста

Как сделать простой антенный переключатель

Внимательный читатель мог заподозрить, что сравнение двух антенн в посте Знакомство с тюнером MFJ-971 и антенной «длинный провод» подразумевает наличие у автора какого-то антенного переключателя (коммутатора). Такой переключатель у меня действительно есть, и он был сделан своими руками.

Идея не моя, я просто следовал инструкции из видео Алексея Игонина, RA3TLB. Пользуясь случаем, отмечу, что я c большим удовольствием смотрю все видео Алексея.

Использованные компоненты, их количество и стоимость:

Итого общая стоимость устройства составила 650 рублей ( что-то еще. Анализ при помощи КСВ-метра Mini60S и эквивалента нагрузки 50 Ом показал отсутствие влияния на КСВ на диапазонах от 160 до 20 метров. На диапазонах от 17 до 10 метров какое-то влияние есть, но оно незначительное. Так на 10 метрах без переключателя вы получите КСВ 1.0, а с ним — 1.06.

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

Данная проблема была изучена при помощи осциллографа, генератора сигналов MHS-5200A и нагрузки 50 Ом на диапазоне частот от 1 до 25 МГц. Размах сигнала при генераторе, подключенном через коммутатор, составил 6 В. Когда же генератор отключен, проходит сигнал с размахом 7 мВ. Из заметки Базовые аналоговые фильтры: теория и практика вы можете помнить формулу:

Таким образом, аттенюация составила 58.7 дБ.

Допустим, мы решили использовать RTL-SDR с апконвертором и данным переключателем, как не самый удобный панадаптер к трансиверу Yaesu FT-891. Спрашивается — спалим ли мы «отключенный» RTL-SDR, если включить трансивер на передачу полной мощностью 100 Вт?

Мощность 100 Вт соответствует 50 dBm, которая после аттенюации превращается в -8.7 dBm. Максимальная входная мощность чипа R820T2, согласно его даташиту, составляет 10 dBm (10 mW). Следовательно, устройство в безопасности. Экспериментально это также подтвердилось. Судя по подсчетам, в такой конфигурации мы можем спокойно работать даже с максимально разрешенной мощностью 1000 Вт (60 dBm).

Само собой разумеется, ничто не мешает сделать аналогичный переключатель и с большим количеством разъемов. В таком случае вместо тумблера будет удобнее воспользоваться галетным переключателем. Помимо тумблеров и переключателей с тем же успехом можно воспользоваться и реле. Это позволит сделать коммутатор, управление которым происходит удаленно. Если у вас есть тюнер, и в нем отсутствует функция bypass (как в моем MFJ-971), можно взять тумблер с двумя контактными группами и добавить bypass.

В общем, здесь открывается большой простор для творчества.

Источник

Автоматический переключатель антенн с управлением на МК

В радиолюбительской практике иногда возникает потребность сделать что-нибудь на микроконтроллере. Если не занимаешься такого рода поделками постоянно, то приходится долго гуглить нужное схемное решение и подходящие библиотеки для МК, позволяющие быстро решить задачу. Недавно захотелось мне сделать автоматический антенный переключатель. В процессе работы пришлось использовать многие возможности МК Atmega в одном компактном проекте. Тем, кто начинает изучать AVR, переходит с ардуино или эпизодически программирует МК могут быть полезны куски кода, использованные мной в проекте.

Читайте также:  Каркас для квадроцикла своими руками

Антенный переключатель задумывался мной как устройство, автоматически подключающее к трансиверу антенну, которая наилучшим образом подходит для рабочего диапазона коротких волн. У меня есть две антенны: Inverted V и Ground Plane, подключены они к антенному тюнеру MFJ, в котором их можно дистанционно переключать. Есть фирменный ручной переключатель MFJ, который хотелось заменить.

Для оперативного переключения антенн к МК подключена одна кнопка. Её я же приспособил для запоминания предпочтительной антенны для каждого диапазона: при нажатии кнопки более 3 секунд выбранная антенна запоминается и выбирается правильно автоматически после очередного включения питания устройства. Информация о текущем диапазоне, выбранной антенне и состоянии её настройки выводится на однострочный LCD дисплей.

О том, на каком сейчас диапазоне работает трансивер, можно узнать разными способами: можно измерять частоту сигнала, можно получать данные по интерфейсу CAT, но самое простое для меня – использовать интерфейс трансивера YAESU для подключения внешнего усилителя. В нём есть 4 сигнальных линии, в двоичном коде указывающие на текущий диапазон. Они выдают логический сигнал от 0 до 5 вольт и их можно через пару согласующих резисторов соединить с ногами МК.

Это еще не всё. В режиме передачи через тот же интерфейс передаются сигналы PTT и ALC. Это логический сигнал о включении передатчика (подтягивается к земле) и аналоговый сигнал от 0 до -4В о работе системы автоматического управления мощностью передатчика. Его я тоже решил измерять и выводить на LCD в режиме передачи.

Кроме того, тюнер MFJ умеет передавать на пульт дистанционного управления сигналы о том, что он ведет настройку и о том, что антенна настроена. Для этого на фирменном пульте MFJ предусмотрено два контрольных светодиода. Я вместо светодиодов подключил оптроны и подал с них сигнал на МК, так чтоб всю информацию видеть на одном дисплее. Выглядит готовый девайс так.

Коротко о самоделке вроде всё. Теперь о программной части. Код написан в Atmel Studio (Свободно скачивается с сайта Atmel). В проекте для начинающих демонстрируются следующие возможности использования популярного МК Atmega8:

  1. Подключение кнопки
  2. Подключение линии вход для цифрового сигнала от трансивера и тюнера
  3. Подключение выхода управления реле переключения антенн
  4. Подключение однострочного LCD дисплея
  5. Подключение зуммера и вывод звука
  6. Подключение линии аналогового входа ADC и измерение напряжения
  7. Использование прерываний
  8. Использование таймера для отсчёта времени нажатия кнопки
  9. Использование сторожевого таймера
  10. Использование энергонезависимой памяти для хранения выбранных антенн
  11. Использование UART для отладочной печати
  12. Экономия энергии в простое МК

Итак, начнём. По ходу в тексте будут встречаться всякие названия регистров и константы, свойственные для применяемого МК. Это не ардуино, здесь к сожалению, придётся почитать даташит на МК. Иначе вам не понять, что значат все эти регистры и как можно поменять их значения. Но структура программы в целом останется той же.

Первым делом подключим к МК кнопку

Это самое простое. Один контакт подключаем к ноге МК, второй контакт кнопки – на землю. Чтобы кнопка работала, понадобится включить подтягивающий резистор в МК. Он соединит кнопку через сопротивление с шиной +5В. Сделать это совсем просто:

Аналогично к шине +5В подтягиваются все цифровые входы, которые управляются замыканием на землю (оптроны, сигнальные линии от трансивера, сигнал PTT). Иногда лучше физически припаять такой резистор меньшего наминала (например 10к) между входом МК и шиной +5В, но обсуждение этого вопроса за рамками статьи. Поскольку все входные сигналы в проекте редко изменяют значения, то они для защиты от помех зашунтированы на землю конденсаторами в 10 нанофарад.

Читайте также:  Костюмы барабаса своими руками

Теперь у нас на входе PB2 постоянно присутствует логическая 1, а при нажатии на кнопку будет логический 0. При нажатии\отжатии нужно отслеживать дребезг контактов кнопки, проверяя, что уровень сигнала не изменился за время, скажем 50 миллисекунд. Делается это в программе так:

Теперь подключаем пищалку

Она будет давать звуковой сигнал подтверждения, что антенна записана в память МК. Пищалка это просто пьезоэлемент. Он подключается через небольшое сопротивление к ноге МК, а вторым контактом к +5В. Для работы этого зуммера нужно сначала настроить ногу МК на вывод данных.

Теперь ею можно пользоваться. Для этого написана небольшая функция, использующая временные задержки для переключения ноги МК из 0 в 1 и обратно. Переключение с необходимыми задержками позволяет формировать на выходе МК сигнал звуковой частоты 4 кГц длительностью около четверти секунды, который и озвучивает пьезоэлемент.

Для работы функций задержек не забудьте подключить заголовочный файл и настроить константу скорости работы процессора. Она равна частоте подключенного к МК кварцевого резонатора. В моём случае был кварц на 16МГц.

Подключаем к МК реле переключения антенн

Здесь нужно просто настроить ногу МК для работы на выход. К этой ноге через усиливающий транзистор по стандартной схеме подключено герконовое реле.

Подключение дисплея

Я использовал однострочный 16 символьный LCD дисплей 1601, добытый из старой аппаратуры. Он использует широкоизвестный контроллер HD44780, для управления которым в сети доступна масса библиотек. Какой-то добрый человек написал легкую библиотеку управления дисплеем, которую я и использовал в проекте. Настройка библиотеки сводится к указанию в заголовочном файле HD44780_Config.h номеров ног МК, подключенных нужным выводам дисплея. Я применил подключение дисплея по 4 линиям данных.

Особенностью моего экземпляра дисплея стало то, что одна строка на экране выводилась как две строки по 8 символов, поэтому в программе был сделан промежуточный экранный буфер для более удобной работы с экраном.

Функция update_display() позволяет выводить содержимое буфера на экран. Значения байтов в буфере это коды ASCII выводимых символов.

Вывод отладочной печати в COM порт

В МК есть UART и я его использовал для отладки программы. При подключении МК компьютеру надо только помнить, что уровни сигнала на выходе МК в стандарте TTL, а не RS232, так что понадобится простейший переходник. Я использовал адаптер USB-Serial, аналогичных полно на aliexpress. Для чтения данных подойдет любая терминальная программа, например от ардуино. Код настройки порта UART:

После настройки потока вывода, можно пользоваться обычным printf для печати в порт:

Программа использует печать вещественных чисел. Обычные библиотеки не поддерживают такой режим вывода, поэтому пришлось подключить полноценную библиотеку при линковке проекта. Она, правда, увеличивает серьёзно объем кода, но у меня был большой запас памяти, так что это было некритично. В опциях линкера нужно указать строку:

Работа с таймером и прерываниями

Для отсчёта интервалов времени в программе важно иметь счётчик времени. Он нужен для отслеживания, что кнопка нажата более 3 секунд и, следовательно, нужно запомнить в энергонезависимой памяти новые настройки. Чтоб измерить время в стиле AVR нужно настроить счётчик импульсов тактового генератора и прерывание, которое будет выполняться при достижении счётчиком заданного значения. Я настроил таймер так, чтоб он примерно раз в секунду выдавал прерывание. В самом обработчике прерывания подсчитывается количество прошедших секунд. Управляет включением\отключением таймера переменная timer_on. Важно не забывать объявлять все переменные, которые обновляются в обработчике прерывания, как volatile, иначе компилятор может их «оптимизировать» и программа работать не будет.

Читайте также:  Печень своими руками рецепты

Значение переменной passed_secs проверяется в главном цикле программы. При нажатии кнопки таймер запускается и далее в главном цикле программы проверяется значение таймера при нажатой кнопке. Если это значение превысит 3 секунды, то производится запись в EEPROM, а таймер останавливается.

Последнее, но самое главное – после всех инициализаций нужно разрешить выполнение прерываний командой sei().

Измерение уровня ALC

Производится с помощью встроенного аналого-цифрового преобразователя (ADC). Я измерял напряжение на входе ADC7. Надо помнить, что можно измерить значение от 0 до 2.5В. а у меня входное напряжение было от -4В до 0В. Поэтому я подключил МК через простейший делитель напряжения на резисторах, так чтобы уровень напряжения на входе МК был на заданном уровне. Далее, мне не нужна была высокая точность, поэтому я применил 8 битное преобразование (достаточно читать данные только из регистра ADCH). В качестве опорного источника использовал внутренний ИОН на 2.56В, это чуть упрощает расчёты. Для работы ADC не забудьте подключить на землю конденсатор 0.1 мкФ к ноге REF.

ADC в моем случае работает непрерывно, сообщая об окончании преобразования вызовом прерывания ADC_vect. Хорошим тоном является усреднять значения нескольких циклов преобразования для уменьшения погрешности. В моём случае я вывожу среднее из 2500 преобразований. Весь код работы с ADC выглядит так:

Использование EEPROM

Это энергонезависимая память в МК. Её удобно использовать для хранения всяких настроек, корректировочных значений и т.п. В нашем случае она используется только для хранения выбранной антенны для нужного диапазона. С этой целью в EEPROM выделен 16 байтный массив. Но обращаться к нему можно через специальные функции, определенные в заголовочном файле avr/eeprom.h. При запуске МК считывает информацию о сохранённых настройках в оперативную память и включает нужную антенну в зависимости от текущего диапазона. При длительном нажатии на кнопку в память записывается новое значение, сопровождаемое звуковым сигналом. Во время записи в EEPROM на всякий случай запрещаются прерывания. Код инициализации памяти:

Фрагмент кода обработки нажатия кнопки 3 сек и записи в память:

Использование сторожевого таймера

Не секрет, что в условиях сильных электромагнитных помех МК может зависнуть. При работе радиостанции бывают такие помехи, что «утюги начинают разговаривать», так что нужно обеспечить аккуратную перезагрузку МК в случае зависания. Этой цели служит сторожевой таймер. Использовать его очень просто. Подключите сначала в проект заголовочный файл avr/wdt.h. В начале работы программы после выполнения всех настроек нужно запустить таймер вызовом функции wdt_enable(WDTO_2S), а потом не забывать периодически сбрасывать вызовом wdt_reset(), иначе он сам перезапустит МК. Для отладки чтоб узнать по какой причине был перезапущен МК, можно использовать значение специального регистра MCUSR, значение которого можно запомнить и затем выдать в отладочную печать.

Экономия энергии для любителей экологии

Пока МК ничем не занят, он может заснуть и ждать наступления очередного прерывания. В этом случае экономится немного электрической энергии. Пустяк, но почему бы его не использовать в проекте. Тем более, что это очень просто. Подключите заголовочный файл avr/sleep.h. Тело программы состоит из одного бесконечного цикла, в котором нужно вызывать функцию sleep_cpu(), после чего МК немного засыпает и основной цикл останавливается до возникновения следующего прерывания. Они возникают при работе таймера и ADC, так что долго спать МК не будет. Режим спячки определяется при инициализации МК вызовом двух функций:

На этом пока всё. Переключатель я сделал, он успешно трудится на моей любительской радиостанции без сбоев. Надеюсь, предоставленный материал будет полезен начинающим.

Источник

Оцените статью
Своими руками