Русский
Русский
English
Статистика
Реклама

Hamradio

AIR TRANSPONDER Simple aviation transponder system. Простая система передачи и приёма параметров полёта

23.02.2021 18:07:11 | Автор: admin

Идея проекта AIR TRANSPONDER возникла, как говорится, не на пустом месте. Так уж вышло, что планеризмом, стал заниматься с 2001 года. По началу подлётывал на разных аэродромах, пока в 2007-ом году, по иронии судьбы прям под боком, в той местности где я теперь проживаю, обнаружил самый известный в нашей стране планерный аэроклуб 2-ой МАК. С тех пор там же и подлётываю.

Авиационный парк нашего аэроклуба простой, всё как у всех. Остатки былой славы Советского прошлого: Вильги, Бланики, Яки, Янтари которые бережём, своими руками восстанавливаем, и при надобности ремонтируем. Благо коллектив собрался очень дружный и толковый.

Планёр Бланик L13 Планёр Бланик L13

Учимся летать, а точнее парить на планёрах. Тут тоже как в любом другом АУЦ, программа обучения прежде всего буксировка и полёты по кругам до тошнотиков, несложные пилотажные зоны включая штопорные, и самое главное ради чего всё это парение. Это когда у тебя перья прорастают, а инструктор тебя научил восходящие потоки пятой точкой чувствовать при этом самостоятельно лететь уже можешь, но увы, летать далеко не отпускают. И это понятно, так как парение это целая наука! Не рассчитал не долетел. Сел в поле, хорошо если не на лес. Если что напомню, планер это всё же как самолёт, но только без мотора. L13 Бланик весит 295 кг без пилота. Лететь может не только вниз, но и вверх. Эта металлическая птица может набирать высоту благодаря восходящим потокам, совершать большие длительные переходы по небу, от облака к облаку Разложить планёр об кочки при посадке очень не хочется. Потому то руководитель полётов(РП) внимание уделяет немалое тому, где мы парим, как парим, на какой высоте, в каком потоке, на каком удалении, в каком месте за стартом или впереди старта Однако, не всегда есть возможность визуального контроля за бортами. Это бывает по различным причинам. Зона-парение, площадка, у кого маршрут и планёр скрывается с глаз. Есть конечно радиосвязь. Регламент обмена, доклад, и всё такое Хорошо, но всё же, необходимо больше. Иногда, казалось бы уже всезнающие планеристы, всё же увлёкшись потоком забываются, и уходят далеко за старт, да и другие причины так же бывают - азарт во чтобы то ни стало, найти тот самый термик... Как раз из-за подобных ситуаций, родилась идея того, чтобы можно было как-то следить за бортами всех пилотов, особенно курсантов, не обладающих необходимым опытом. Что бы РП мог всегда увидеть, подсказать, дать команду на выполнение. В общем дополнительно обезопасить весь процесс обучения. Так и появилась идея, установить на борт что-то, что может передавать параметры на землю.

Конечно же первое что пришло в голову это система ADSB и прочие xDSB. Всё это круто, но нереально дорого для нас, да и места нет для такой сложно аппаратуры, ко всему прочему имеющей вес. Другие коммерческие решения, так же оказывались дорогостоящими, либо не соответствующими нашей специфике, да и попросту не удобными.

Ну чтож. Пришлось, применить скромные радиолюбительские навыки.

Первое что было сделано определено техническое задание от которого и оттолкнулся.

Техническое задание

1. Первое и самое важное никаких сторонних операторов связи, никакого интернет, GSM, 5G и каких-либо других сетей, включая радиолюбительскую APRS. Только своя базовая станция(БС) на земле и транспондер в воздухе, за исключением GPS/ГЛОНАС приёмника тут уж никак.

2. Определено количество транспондеров в системе. Так как авиапарк не большой, то и количество было определено по количеству бортов 10 транспондеров в системе (хотя можно и больше).

3. Определён максимальный радиус действия системы. Основываясь на опыте полётов наших старожилов, и учитывая требования безопасности полётов, за основу было взят круг радиусом 35 км (думаю можно больше в раза два). Это расстояние, в которое попадают всё значимые населённые пункты на карте, дальше которых на парение мы не улетаем. Ну и примерно 100 километровый треугольный маршрут для зачёта. Если учесть, что речь идёт о обучении то новички редко за 8 км от старта уходят, то более чем достаточно.

4. Транспондер летательного аппарата должен в автоматическом режиме передавать:

  • Место

  • Высоту

  • Курс

  • Скорость курсовую

  • Скорость в потоке

  • Скороподъёмность

  • Номер борта

5. Транспондер должен передавать данные не реже 1 раза в 4 секунды.

6. Мощность транспондера в пределах 1 Ватта. Питание автономное.

7. Базовая станция (БС) должна принимать данные со всех транспондеров одновременно.

8. Данные полученные БС должны быть записаны в базу данных.

9. Данные полученные с транспондеров должны отображаться на карте в режиме реального времени.

10. Отображать данные можно на компьютере планшете смартфоне в WEB браузере. Повторюсь, НИКАКОГО ИНТЕРНЕТА!!! Всё оффлайн.

11. Базовая станция автономна: батарея, плюс антенна на СКП. Подключение компьютера к БС с помощью Ethernet или WIFI.

12. Решение должно быть максимально бюджетным, при этом габариты транспондеров должны быть такими чтоб ничему и никому не мешали.

Первый пункт многое перечеркнул. Если бы не этот пункт то, готовых решений, на просторах интернета, сходу найти можно с дюжину. Всяческих GPS трекеров любительских. Про коммерческие и вовсе молчу. Но всё работает в сетях операторов связи, либо офлайн... Это минус. (Хотя на будущее включить использование GSM канала в качестве неосновного аварийного всё же стоит).

Так же не стал привлекательным вариант с использованием APRS системы, а именно с развёртыванием своей сети не включенной в общую сеть. Слишком громоздко. Да и требования пунктов 2 и 4 исключили возможность использования этого протокола. Представьте 10 бортов должны циклично, каждые 4 секунды, передавать данные в которых кодировано 7 параметров. При этом они не должны мешать друг другу.

Изучено было много материала. Камнем преткновения стал протокол передачи данных. Конечно, я много смотрел в сторону AX25. Но как по нормальному совместить передачу данных через радиоэфир на малой мощности, от постоянно движущегося объекта, на условно большое расстояние, да так чтоб гарантированно, при этом объектов сразу 10. И чтоб данные отображались действительные - актуальность 4 секунды?

Пришло понимание того что передаваемый пакет должен быть коротким. Исходя из п. 10 и 5 получается:

4сек / 10бортов = 400мсек 1борт

Пункт 12 так же определил выбор используемых частот - 433 или 144 МГц.

Предварительно прикинул какое при этом количество знаков необходимо передавать:

  1. МЕСТО с определённой точностью - это данные GPS широта и долгота. Полный передаваемый параметр системой GPS это два 9-тизначных числа с плавающей запятой!!

  2. ВСОТА с определённой точностью. Полный параметр, передаваемый системой GPS 6 знаков.

  3. Скорость. курсовая Закладываю 3 знака.

  4. Скорость в потоке. Закладываю 3 знака.

  5. Скороподъёмность. 3 знака.

  6. Номер борта. 2 знака.

  7. Незабываем что необходимо хоть какое-то избыточное кодирование, плюс преамбулы начала передачи пакета, контрольные суммы в конце передачи. Назовём это Транспорт + 50% ресурса это примерно 15 знаков сверху.

В итоге что имеем: Необходимо кодировать и передавать в эфир ~ 50 байт, на частоте (433) 144МГц малой мощностью, со скоростью 400 мсек (примерная скорость 120 байт в секунду).

На помощь пришёл его величество случай. Как-то в один из зимних вечеров, пришёл ко мне товарищ и принёс мне простенькую самодельную метеостанцию, сделанную на ESP8266. Платка ESP и датчик BME280 всё без корпуса. Просто незатейливо, но всё работало. Идея со сбором метеоданных с того момента начала развиваться. Хотелось сделать больше, собирать больше различных данных. Явно не хватало анемометра и уровня осадков. Стал копать в этом направлении что есть. Перебрав опять же кучу материала, набрёл на статью об использовании датчиков OREGON SCIENTIFIC WRT810 и PCR800. И надо же, эти датчики есть в достаточном количестве в продаже, и даже не дорого! Заказал сразу два комплекта, себе и товарищу. Но проблема была в том, что к ним нет базы. Они беспроводные, работают по радиоканалу 433 MHz. Нужно было строить. В итоге был построен радио-модуль для приёма данных с этих датчиков, но самое главное то, что для этих датчиков не было поддержки в коде. На просторах интернет наткнулся на пост автора Invandy, в котором он описывает работу различных коммерческих датчиков, а также какие-то свои собственные разработки датчиков. На мой взгляд, это лучшая статья, и лучшая любительская работа. Ему спасибо! Начал изучать, и как водится допиливать этот проект под свои задачи. Всё получилось. Датчики были встроены успешно в проект и по сей день работают. Увидеть результат можно на narodmon.ru. Ссылка на проект git-lira.net. Результат впечатлил. Меня тут осенило. Стало понятно то, что идея применима к тому, что я искал столько времени. Просто, дёшево и сердито. Главное повторяемо!

Итак, за основу был взят код из проекта метеостанции Invandy https://github.com/invandy/Oregon_NR. Код существенно доработанный под мои задачи, но за идею ему ещё раз спасибо! Общая концепция проекта приобрела вот такой вид:

Блок-схема проекта.Блок-схема проекта.

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

Прошу принять во внимание тот факт, что речь далее пойдёт о передаче данных на разрешённых радиолюбительских частотах диапазона 2 метра, с мощностью не превышаемой разрешённую. То есть, в соответствии с радиолюбительским регламентом! Следовательно, для использования этого диапазона вы должны иметь радиолюбительский позывной(лицензию). Альтернатива - 433 MHz гражданский диапазон. Так же хочу отметить что согласно того же регламента, запрещено шифрование данных передаваемых радиолюбителями в эфир. Поэтому не стоит путать термины КОДИРОВАНИЕ и ШИФРОВАНИЕ. В данной статье речь идёт только о кодировании.

Формирование пакета.

Ну что же всё есть. Вооружившись начальными данными, и небольшим опытом вкратце обрисуем схему формирования пакетов.

Формирование пакета.Формирование пакета.

Теперь, что нам необходимо передавать, какие параметры. Основываясь на ТЗ и на параметрах полёта планёра Бланик L13 имеем следующие предельные значения:

Параметр

Предел измерений

Размер

Lat

+/- 179,999999

FFF FFFF

Lon

+/- 89,999999

FF FFFF

Speed

0 255 км/ч

FF

Alt

0 2550 м

FFFF

Vario

+/- 15 м.сек

0F

Curs

0 360 град.

0FFF

PVD

0 255 м.сек

FF

ID (номер борта)

0 9

FF

Длинна параметра. Полная.

Итого получается, что размер полезных данных (data) 26 ниблов! И это без транспорта. Слишком длинная посылка для радиоканала получается. С этим надо что-то делать. Не остаётся ничего кроме, как оптимизировать этот data блок.

Самое прожорливое значение lan и lon получаемые приёмником GPS. Для нашей специфики полётов такая высокая точность избыточна. Поэтому принято решения сократить кодируемые координаты до 3-х знаков после запятой, да и саму запятую необходимо бы убрать избавившись тем самым от неудобного числа с плавающей запятой. Сократили lat lon до 12 символов, помимо символов + и их кодировать достаточно одним битом 1/0 .

Формирование данных lat, lonФормирование данных lat, lon

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

Схема пакета V2.Схема пакета V2.

Можно сэкономить байт если использовать пустую часть нибла в переменной lat. В этом начальном нибле можно хранить флаги значений (+,-) для параметров lat, lon, vario. Использовать можно только последних три MSB.

Использование свободного бита.Использование свободного бита.

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

Так же ограничил длину остальных параметров транспондера:

Параметр

Предел измерений

Адресация/размер

Lat

+/- 179,999

0F FFFF

Lon

+/- 89,999

0F FFFF

Speed

0 255 km/h

FF

Alt

0 2550 м (255x10 - множитель 10)

FF

Vario

+/- 15 м

0F

Длинна параметра.

Если кодировать знаки +/- в конец переменных lat, lon а именно: использовать по одному биту значения 0, 1 как флаги знаков +/-. Пространство alt должно быть FF, так как не хватает места для указания параметра alt. Можно взять ещё один свободный бит из переменной lon.

Тесты и отладки показали то, что можно экономить байтовое пространство, и задействовать все свободные биты которые не использовались бы при заполнении. В таблице, параметры lat, lon, представлены адресным пространством начиная с 0F Так как при максимальном числе, например, lat = 179 я могу использовать всего три разряда этого нибла. Нулевой бит этого нибла(2x80) остаётся незадействованным. Поэтому я могу использовать его как флаг: 1 это -. 0 останется +. Напомню, что в системе GPS, в зависимости от полушария, значения могут быть и минусовыми.

Так же поступил и с ещё одним параметром var (vario) указание скороподъемности так же требует разных знаков. В данном случае параметр lon ещё более короткий чем lat. И в старшем байте остаются целых два свободных бита (4x08, 4x04), чем я и воспользовался. В итоге родился пакет версии 6.

На заметку: Для передачи координат lat/lon, необходимо было избавиться от запятой, так как тип float занимает большое пространство, что увеличивает размер пакета, тем самым снижая его надёжность, а также снижается общая производительность системы. Поэтому я кодировал значение целого числа отдельно от дроби(мантиссы).

Пакет v6.Пакет v6.

Ужимал пространство пакета, как только мог. Как можно увидеть из этой схемы, параметры curs и vario так же разделили между собой бит. Параметры alt кодируется значением от 0 до 255. На стороне БС этот параметр умножается на 10. Точность измерения в этом случае +/- 10 метров. Не очень то, но пришлось сэкономить. Параметр vario так же ограничен значением +/- 15 метров секунду. Для планеристов такие показатели во время полёта бывают крайне редко, как правило критические. Например, попал в грозовое облако, а вариометр с пределом всего 10 метров в секунду. Напомню, что полёты в облаках запрещены :).

Идентификаторы пакета

ID идентификатор пакета. Содержит версию протокола. Так же ID содержит номер канала (timeslot) адрес 1x0F.

Небольшое пояснение по принципу формирования каналов транспондеров. Использован timeslot то есть каждому транспондеру задаётся интервал и своё время передачи, в общем цикле равном 4 секундам. Например, первый транспондер начинает передачу на нулевой секунде, продолжительность 0,4 сек. Второй на 0,5-ой секунде, продолжительность 0,4 сек. Третий на 1-ой секунде и т.д

ID пакета v6. Определяется 4-мя ниблами.ID пакета v6. Определяется 4-мя ниблами.

Идентификация начинается с адресного пространства AAA + номер канала(ch). Тогда получаем:

  1. AAA1 протокол X AIR1 (канал1)

  2. AAA2 протокол X AIR2 (канал2)

  3. AAA3 протокол X AIR3 (канал3)

  4. AAA4 протокол X AIR4 (канал4)

И т.д.. (Префикс AIR для удобства. Ставится в соответствие с идентификатором на стороне БС и может быть любым)

Стендовые испытания

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

Неверно был расшифрован пакет

  • Неверно была определена длинна пакета

  • Неверно была определена CRC checksum

В итоге оказалось, что длинна пакета составляла 17 ниблов, а это 8 байт и 1 полубайт. Перепутал количество ниблов с длинной нумерация начинается с нуля. То есть первый нибл под номером НОЛЬ. Кроме этого сократилось пространство для полезной информации из-за неправильно подсчитанной мной длинны checksum. Длинна checksum составляла 5 ниблов, то есть 2,5 байта. Это особенность работы протокола OREGON V3. И Так как я в своей изначальной работе с метеодатчиками имел дело с допиливанием, как мне казалось, хорошо изученного протокола для PCR810, то результатом такой ошибки стало то, что в пакет не вошло 4 параметра:

  • Speed FF

  • ALT FF

  • VARIO F0

  • CURS 0F

Всего три байта.

Частично решено

1. Сократил checksum (избавился от CRC) до одного байта, занявшего пространство FF тем самым высвободил один байт.

2. Увеличил длину пакета на 1 нибл (пол байта). И сдвинул checksum вправо (окончание пакета).

Высвободившееся пространство использовал для параметра alt 0xFF. Ещё осталось пол байта vario. (При необходимости можно будет сдвинуть checksum ещё на пол байта вправо для параметра curs).

Пакет версии 7.

Результатом отладки стал пакет версии 7. Всего 19 ниблов. Если считать от 0-го, то последним будет 18-ый нибл.

Вид пакета v7. Пример: AAA10D5C909206170F5

Пакет v7Пакет v7

Сравнение типов пакетов

Для большего понимания, для сравнения приведу два типа пакетов.

Сравнение типов пакетов V2.1 (OREGON) и пакет V7 (AIR_TRANSPONDER)Сравнение типов пакетов V2.1 (OREGON) и пакет V7 (AIR_TRANSPONDER)

Первый это пакет протокола OREGON V2.1 на основе которого был разработан пакет транспондера.

Первое отличие в том, что поле СИНХРОНИЗАЦИЯ, ТИП, КАНАЛ, были слиты в единый короткий идентификатор, более экономный, но не потерявший своей информативности.

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

Третье отличие отсутствие CRC8. Контрольной суммы достаточно

Привожу ссылку на пост INVANDY в которой он описывает содержание различных пакетов OREGON - http://personeltest.ru/aways/habr.com/ru/post/525446/ - Весьма наглядно!

Полевые испытания

СКПСКП

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

Развёрнута базовая станция Старенький Macbook в качестве сервера. Приёмник - их было два, тестировались по очереди: Rado Shack и YAESU FT-11r В качестве преобразователя уровней двухканальный ОУ от оптического привода. Декодер их тоже было два: ESP8266 для беспроводного соединения с сервером, и Arduino UNO с ETHERNET шильдом для проводного соединения с сервером. Вариант на ESP8266 мне понравился больше, так как от него не было цифрового шума, и как ни странно обработка пакетов на ESP8266 была быстрее! Для беспроводного соединения рабочих станций с сервером, использовался WIFI роутер TP-LINK. Ну и в качестве рабочей станции ноутбук, или смартфон, да что под рукой было:) Да и самое главное антенна. Внешняя двух диапазонная антенна OMNI 144/433 MHz, с круговой диаграммой, и с коэффициентом усиления, по паспорту, 3,5/4 db.

Транспондер на борту Бланик L13Транспондер на борту Бланик L13

Транспондер был установлен на один из планёров. Кодер на Arduino Nano. В качестве трансмиттера YAESU FT-11r. Антенна была штатная резинка. На фотографии справа можно увидеть батарею, FT-11r, и беленькая коробочка. Вот оно в таком виде отлетало. Обзору и пилотированию не мешало, приём был хорошим :).

В результате полевых испытаний была обнаружена ошибка передачи параметра alt. При достижении высоты 255 метров, счётчик (указатель высоты), обнулялся. После чего отсчёт вновь продолжался с нуля. И так каждый раз до 255 и вновь сброс счётчика

Ошибка была на стороне приёмника (в библиотеке get_altitude) были установлены неверные типы данных byte. Для корректного приёма этого было достаточно, но для дальнейшей передачи параметров больше 255, нужно было увеличить полученное число на один разряд путём перемножения полученного значения на 10. В результате разрядность числа увеличивалась, превышая размеры указанного типа данных byte (всего 8 бит), не вмещающиеся в 8 бит старшие разряды отсекались. Так счётчик обнулялся через каждые 255 метров.

Решение было таким: Изменён тип данных всей библиотеки get_altitude до 16 бит тип данных word.

Итоги полевых испытаний

Итоги первых полевых испытаний порадовали. При излучаемой мощности 0.1 Ватт (не опечатка, да всего 100 милливатт) уверенны приём был в радиусе 8 км от точки. Жаль в те дни не было парящих маршрутов. Ходили вокруг да около старта те самые 8 км. От экрана я не отрывался. Следил за всеми перемещениями метки.

WEB интерфейс базовой станции. Отображение на карте и вывод параметров полёта.WEB интерфейс базовой станции. Отображение на карте и вывод параметров полёта.

В интерфейсе, если обратили внимание, я сделал так же метеосводку. Эти данные берутся с тех самых датчиков OREGON и BME280 которые устанавливались так же на аэродроме. На этой фотографии данные отсутствуют, но все датчики я так же оттестировал в полевых испытаниях. Тут проблем не было.

Тестирование проводилось на частоте 144.810 MHz мощностью 100 милливатт. Активные тесты начинаются с конца мая. Несмотря на небольшую мощность, высОты на которых работают транспондеры, позволяют излучать на приличные расстояния. Так что коллеги радиолюбители, на частоте 144.810 MHz с субботы по воскресенье каждую неделю до октября, могут послушать сигналы транспондеров и при желании, декодировать.

Надо пояснить почему всё-таки 100 милливатт. Минимальная мощность излучения FT-11r составляет 300 милливатт, максимальная 5 Ватт. Но батареи моих Yaesu давно вышли из строя. Разобрав корпуса батарей я установил в них li-ion батареи на 3,7 вольт. При таком напряжении эти радиостанции не выдают более 100 милливатт. В планах использование других источников питания и тестирование на 500 милливатт и на 1 Ватт.

По итогам полевых, боевых, лётных (как угодно...) испытаний были сделаны доработки:

15.07.20 Дополнен код приёмника. Теперь приёмник одновременно может принимать несколько транспондеров. Префиксы транспондеров AAA0 AAA9

22.07.20 Исправлен код транспондера. Транспондер может передавать, соответственно кодировать пакеты AAA0 AAA9

Замечание: Указатель префикса(заголовок) можно только в файле transponder_air.h Необходимо вынести define transponder в пользовательский *.ino файл скетч.

Каналы транспондеров или time_slot function

Поскольку отладка происходила на одном транспондере, то дальнейшей задачей стала отладка двух и более транспондеров в системе. Для этого необходимо описать функцию time_slot которая будет определять время начала передачи пакета, каждого транспондера, в зависимости от времени (префикс транспондера содержит номер канала номер таймслот).

Исходя из условий ТЗ, имеем:

qTX = 10 - кол-во транспондеров AIRx (AAAx) Начальное условие

iTX = 4 сек - интервал передачи расчётное условие, смещение времени не более 4 сек.

dTX = 0,4 сек - длительность передачи 1-го транспондера. Рассчитано и оптимизировано.

Тогда очевидно:

iTX / qTX = dTX;

dTX = 0,4 сек

Таким образом необходимо добиться что бы каждый транспондер начинал передачу в своё заданное время с циклом dTX 4 секунды. Для этого необходимо синхронизировать таймеры транспондеров с GPS time с точностью не ниже 0,1 сек. После чего отсчитывается 0-я секунда каждой минуты реального времени, от которой начинается отсчёт таймера. Например,

Транспондер

Начало передачи

Смещение от 0-ой секунды (offset_time)

AAA0

0-я секунда

0,0 сек

AAA1

0,4 сек

AAA2

0,8 сек

И т.д.

AAA9

3,6 сек

Формирование каналов (Time slot).

Порядок инструкций:

  1. Синхронизация с GPS

  2. Получение GPS_time_seconds

  3. Определение нулевой секунды любой минуты.

  4. Начало отсчёта от нулевой секунды

  5. Начало передачи пакета, по достижению счётчика.

Да. Скорее всего, при такой реализации, мы получим пару проблем:

1-я проблема. Из-за особенности работы Arduino возникнет разность нулевой отметки времени. Отсчёт millis у всех ардуин хоть немного, но отличаются друг от друга. Из-за этого, сразу после включения, различные сигналы транспондеров будут накладываться друг на друга в начальном минутном интервале даже после синхронизации с GPS_time.

Timeslot. Не синхронизированный пакет.Timeslot. Не синхронизированный пакет.

2-я проблема. При выполнении различных инструкций таймер счётчика, может периодически теряться.

1: Инструкция 50% ресурса

2: Инструкция 50% ресурса

3: Инструкция offset_time = doit_now возвратит FAIL

Потому что из таймера в память не пришло то значение счётчика секунд, которое было нужно, из-за того, что система была занята в этот момент другой процедурой. И попросту пропустила это время (например: при передаче в консоль, во время отладки).

Решение по второй проблеме, оказалось простым. Можно было использовать допуски +/- 0,2 сек. Но и этого не понадобилось. Опасения не подтвердились. Тесты показали, что заданные отметки времени своевременно отрабатывались инструкциями без пропусков (не в режиме отладки, вывод данных в консоль не производится!!!).

А вот по первой проблеме решение было таким:

  1. Получить время с точностью до 0,001 секунды

  2. Представить время в разрядной десятичной форме

  3. Определить разряды, отвечающие за минуты, секунды.

  4. Старшие разряды обнулить и не использовать. Таким образом, полученное переменное значение, повторяющееся в цикле, будет синхронно с GPS_time.

  5. Привязать millis counter к полученному значению.

  6. Задать смещение от нулевой секунды (offset_time)

Внимание, тут нас поджидает небольшая проблема! :) Дело в том, что значение time (параметр, отдаваемый библиотекой TYNY GPS и вообще приёмником GPS NEO M6), представляется в таком виде: hh min sec 0.00. То есть, миллисекунды всегда равны 00!!! В библиотеке они есть, но GPS приёмник их не может отдать из-за своей ограниченной функциональности.

Tiny GPS. Пустое значение millisec.Tiny GPS. Пустое значение millisec.

Применил, как мне кажется, весьма элегантное решение. Для наглядности кусок из скетча:

Синхронизация с нулевой секундой.Синхронизация с нулевой секундой.

Так как преобразование из DEC в HEX с сохранением вида числа (например, 59 DEC -> 0x59 HEX) затратное по количеству процедур и бла-бла-бла (сорри). По этому было решено использовать оператор - % (процент). Напомню, этот оператор заносит только остаток деления в переменную. Поэтому решение получилось очень простым. Взять параметр second, передаваемый gps.crack_datetime, и поделить его на 5 с сохранением остатка в ту же переменную second.

Так мы получаем цикличность параметра second, получаемого от GPS time, не от 0 до 60, а от 0 до 5-ой секунды с шагом 0,2 сек. То есть 0, 2, 4, 6, 8, 0 - каждые 5(пять) секунд! И так по кругу.

Таким образом получим прохождение через .0-ю секунду каждые 5 секунд. А так же, синхронизация пакетов происходит относительно быстро, за один цикл передачи транспондера - 5 секунд.

Замечу, что на период отладки, для удобства, я увеличил интервал отправки данных до 5 секунд. Но ничего не мешает вновь установить значение % 4 или даже % 3;

Еще одно важное замечание по поводу работы GPS NEO M6 и синхронизации времени gps. Синхронизация наступает только в том случае если есть приём данных GPS со спутников.

  1. У меня эти модули начинают принимать данные (лампочка начинает моргать), только на подоконнике, внутри комнаты. И то не всегда. Если облачная погода, то приходится к стеклу прислонять.

  2. Если приёмник впервые включается в вашей геолокации, то первоначальный расчёт данных, самим GPS приёмником при первом включении в ваших координатах, может занять до 20 минут при плохом приёме спутников!!!

  3. Во время отладки транспондера, подключённого через USB, при выводе данных в терминал система будет запаздывать, не попадать в свои тайминги. Что так же будет вводить в заблуждение. Проверять синхронизацию в таком случае можно на стороне Базовой станции.

Эти факторы необходимо учитывать при отладке и настройке системы. Но напомню про специфику полёты под открытым небом. Тут проблем с приёмом как правило нет.

По состоянию на момент написания статьи 21.01.2021, стендовые испытания проводятся с сентября по текущее время. Используются два транспондера непрерывно работающих на различных каналах (соседние ch0, ch1). За время тестирования, каналы формировались правильно, за исключением тех случаев когда пропадал приём GPS.

Из недостатков. При пропадании приёма GPS (стенд внутри помещения), происходит рассинхронизация каналов, по этому транспондеры начинают плыть. На синхронизацию (вхождение транспондера в свой таймслот) уходит не менее 5 секунд - цикл установленный на время отладки.

ТранспондерТранспондер

Статья в процессе написания.

Весь материал, включая библиотеки и схемотехнику по данному проекту, доступен на github.com

Подробнее..

SDR приёмник SoftRock Ensemble RX II

10.06.2021 16:07:13 | Автор: admin


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

В этой публикации я хочу рассказать об удивительной конструкции, которая изменила моё представление об аппаратуре для любительской радиосвязи и положила начало моему увлечению SDR (Software Defined Radio).

Речь идёт о SoftRock Ensemble RX II, который я использую в качестве контрольного радиоприёмника уже седьмой год.

На официальном сайте SoftRock Ensemble RX II продаётся или за $65 в виде набора, или за $85 собранным. При такой цене больше хочется говорить о достоинствах, чем о недостатках.

Особенностью приёмника является то, что он не работает автономно. Выход приёмника подключается к линейному входу звуковой карты компьютера. Синтезатор частоты приёмника управляется через USB.

Мной используется HF-версия SoftRock Ensemble RX II, которая работает в диапазоне частот 1,830 МГц. Этот диапазон разбит полосовыми фильтрами на четыре поддиапазона: 1,84 МГц; 48 МГц; 816 МГц и 1630 МГц.

Приёмник покупал набором. Впервые в жизни мотал катушки для диапазонных полосовых фильтров (ДПФ) на кольцевых сердечниках. Важным моментом было наличие сайта с подробной инструкцией по монтажу и наладке.

После правильной сборки конструкция заработала сразу. Когда же я увидел эфир на панорамном индикаторе, я понял, это любовь навеки!

Аппаратная часть


Как понятно из названия, SoftRock Ensemble RX II был не первым в линейке. Видимая простота схемотехнического решения приёмника отрабатывалась американским радиолюбителем Tony Parks (KB9YIG) годами.

Принцип действия малосигнального тракта проще объяснить на схеме радиоприёмника SoftRock Lite II младшего брата SoftRock Ensemble RX II. Схема взята из инструкции по монтажу и наладке:


Из схемы видно, что это гетеродинный приёмник с квадратурным детектором (QSD).

Схема источника питания (1 Power Supply) стандартная схема включения микросхемы линейного стабилизатора 78L05.

Принимаемый сигнал радиочастоты (РЧ) через диапазонный полосовой фильтр (ДПФ) C3, L1, C4 подаётся на первичную обмотку трансформатора T1. На выводе 2 трансформатора присутствует сигнал РЧ, синфазный принимаемому, а на выводе 4 противофазный. На среднюю точку вторичной обмотки T1 (выводы 3, 5) подаётся напряжение смещения, равное половине напряжения питания. Напряжение формируется делителем на резисторах R3, R4 и фильтруется конденсаторами C7, C14, C16. Смещение нужно для правильной работы ключей и операционных усилителей (ОУ).

Ключи из состава мультиплексора-демультиплексора U3 переключаются сигналами со счётчика Джонсона, собранного на U2. В любой момент времени открыт только один ключ.

Сигнал I (Inphase) формируется на конденсаторе C5 подачей на него через R1 напряжения с вывода 2 трансформатора T1 через открытый ключ 1B4 (фаза сигнала гетеродина 0), а также подачей через резистор R2 и открытый ключ 1B1 напряжения с вывода 4 трансформатора T1 (фаза 180).

Сигнал Q (Quadrature) формируется на конденсаторе C6 подачей на него через R1 напряжения с вывода 2 трансформатора T1 через открытый ключ 2B3 (фаза сигнала гетеродина 90), а также подачей через резистор R2 и открытый ключ 2B2 напряжения с вывода 4 трансформатора T1 (фаза 270).

Резисторы R1 и R2 нужны для выравнивания разницы сопротивления открытых ключей мультиплексора-демультиплексора FST3253.

Сигналы I, Q усиливаются инвертирующими усилителями на двух половинках U4 и подаются на линейный вход звуковой карты компьютера, где и производится дальнейшая обработка квадратурного сигнала.

От простого к сложному


SoftRock Lite II предназначен для приёма сигналов на участке какого-либо одного радиолюбительского диапазона. Параметры участка определяются частотой кварцевого резонатора X1 (см. 2 Local Oscillator) и частотой дискретизации звуковой карты.

При резонансной частоте кварца 28224 кГц и частоте дискретизации 96 кГц SoftRock Lite II будет принимать сигналы в диапазоне от 7008 до 7104 кГц. Диапазонный полосовой фильтр (C3, L1, C4), соответственно, должен иметь точно такую же полосу пропускания.

На рисунке ниже показан экран программы HDSDR. Выход приёмника подключен к линейному входу звуковой карты компьютера. Частота дискретизации звуковой карты 96 кГц. Центральная частота приёма 7056 кГц. На панорамном индикаторе безмятежное спокойствие, царящее на любительском диапазоне 40 м воскресным утром 6 июня 2021 года:


В отличие от SoftRock Lite II приёмник SoftRock Ensemble RX II имеет плавную настройку в диапазоне частот от 1800 кГц до 30 МГц, поэтому схема устройства дополнена синтезатором частоты Si570, управляемым через USB контроллером ATTiny85, и переключаемым четырёхдиапазонным ДПФ.

Схема ДПФ приёмника SoftRock Ensemble RX II взята из инструкции по монтажу и наладке:


ДПФ состоит из четырёх фильтров с полосой пропускания: 1,84 МГц; 48 МГц; 816 МГц и 1630 МГц. Фильтры переключаются сигналами SEL 0 и SEL 1 силами двух мультиплексоров-демультиплексоров FST3253 U8 и U9. Аттенюаторы R17, R18, R19 и R20, R21, R22 в цепях ДПФ Band 0 и Band 1 ослабляют на 14 dB входной сигнал на низкочастотных КВ-диапазонах, которые традиционно отличаются высоким уровнем помех.

Трансформатор T2 служит для гальванической развязки ДПФ и антенны. Первичная обмотка трансформатора T3 является входом QSD.

Схема управления и синтезатора частоты показана ниже:


Схема питается от разъема USB. Подключенный к шине USB микроконтроллер U1 управляет синтезатором частоты U3 по интерфейсу I2C. Выходной сигнал синтезатора через трансформатор T1 подаётся на вход счётчика Джонсона. В зависимости от частоты приёма микроконтроллер через оптроны U4 и U5 формирует сигналы SEL 0 и SEL 1 для переключения полосовых фильтров в ДПФ.

Особенностью схемы является то, что она гальванически развязана с малосигнальным трактом приёмника. Полигоны земель изолированы друг от друга, сигналы передаются через оптроны и трансформатор:


Это сделано, чтобы исключить перетоки по полигону земли между точкой подключения к разъему USB и точкой подключения к разъему звуковой карты.

Программная часть


Программная часть состоит из программы для управления и программы для обработки данных.

Для управления приёмником и его конфигурирования применяется программа CFGSR, созданная радиолюбителем из Нидерландов F.W. Krom (PE0FKO):


Порядок установки программы управления и нужных для её работы драйверов подробно описан в инструкции по монтажу и наладке.

Для правильной работы схемы управления нужно выбрать тип устройства. В нашем случае это SoftRock Ensemble RX II LF/HF(HF):


Для работы с SoftRock Ensemble RX II обычно используется программа HDSDR. Для связи HDSDR с CFGSR служит библиотека ExtIO_Si570.dll, которую после установки конфигуратора надо скопировать из папки, куда установлен конфигуратор, в папку, куда установлена HDSDR.

Выход приёмника подключен к линейному входу звуковой карты компьютера. Запускаем HDSDR. Выбираем источник сигнала SoftRock Si570. Устанавливаем рабочую частоту дискретизации звуковой карты. Пытаемся принять сигналы точного времени, которые передаются на частоте 9996 кГц:


Как видно по панорамному индикатору, сигналы точного времени мы принимаем на частоте 9994,18 кГц. Это нужно исправить!

Калибровка частоты


Опорный кварцевый генератор находится внутри корпуса синтезатора Si570. Калибровка опорной частоты производится прямо из конфигуратора вводом частоты настройки на радиостанцию и её фактической частоты вещания:


После проведения процедуры калибровки мы начинаем принимать сигналы точного времени, как и положено, на частоте 9996 кГц:


Теперь наш маленький аппаратно-программный комплекс можно смело использовать в качестве контрольного радиоприёмника с калиброванной шкалой.

Unfinished Sympathy


До знакомства с SoftRock Ensemble RX II такие вещи как синтезатор частоты, панорамный индикатор и управление радиостанцией с помощью компьютера были для меня атрибутами профессиональной связной техники, которая стоит отнюдь не $85.

Сборка приёмника оказалась простой и приятной. Инструкции по монтажу и наладке написаны простым и понятным техническим английским языком.

Использование панорамного индикатора позволяет не только слышать, но и видеть, что происходит в эфире.

Мне очень нравится SDR. Надеюсь, и вам тоже.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru