OpenExpert - прошивка для передатчиков Expert Tiny/2G, Open/Orange LRS и HawkEye с протоколом Expert

OpenExpert TX

Открытый проект ПО передатчика для LRS Expert второго поколения и Open/Orange LRS. Исходные тексты расположены на github.com/baychi/OpenExpertTX
Описание на: github.com/baychi/…/Руководство-пользователя

Аппаратно поддерживаются модули передатчиков:

  • Expert Tiny LRS (Atmega168/328, RFM23BP);
  • Open/Orange LRS TX module V2 (Atmega328, RFM22B-);
  • Open/Orange LRS RX module V2 в режиме TX (Atmega328, RFM22B-);
  • Hawk Sky LRS TX module (Atmega328, RFM22BP).

PPM и SBUS

Реализовано подключение к передатчикам РУ или ретрансляторам по стандартам:

  • PPM - стандартный PPM сигнал на 6-12 каналов, с длительностью импульса 1-2 мс;
  • Futaba 750 мкс PPM – до 12 каналов PPM от Futaba с импульсами 0.5-1 мс;
  • SBUS - в обычном (период 14 мс) и HS (период 7 мс режиме).

Полярность сигналов значения не имеет. Все типы сигналов подаются на общий ICP или INT вход модуля. Тип протокола распознается автоматически. При отсутствии корректного входного сигнала передача в эфир не ведется. Реализован также режим отключения передачи при появлении флага FailSafe в SBUS протоколе или выхода одного из PPM импульсов за пределы 988-2011 мкс. Эта функция включается через 4-й регистр меню.
ПРИМЕЧАНИЕ: Лучшим вариантом является работа через SBUS протокол в режиме HS подключенный к передатчикам с ICP входом (Expert Tiny/2G или OrangeRX). В этом случае обеспечивается полное отсутствие неопределенности в длительности импульсов (джитмера) и минимальное время доставки. Часть пакетов SBUS принимаемых через INT вход (передатчик Open/Orange TX), будет неизбежно теряться, что несколько ухудшает время отклика. При работе через PPM, неопределенность определения длительности импульса составляет 0.5 мкс для классического PPM и 1 мкс для режима Futaba 750мкс. В дополнении к этому несовпадение шкал кодирования импульсов в протоколе приводит к максимальной неопределенности в 1 мкс, то есть реальная точность будет немного хуже 10 бит. Время доставки в PPM режиме возрастает на 15-20 мс.
10/11 бит и передача на лету

Протокол кодирования данных от Expert дополнен передачей 10 битых значений для каналов 1-7. Дополнительные биты кодируются в последнем управляющем байте пакета, если не требуется передавать команду установки FailSafe (код 01). Прием и воспроизведение 10 битных данных обеспечивают только приемники из проекта OpenTinyRX (github.com/baychi/OpenTinyRX). Прошивки от Expert смогут воспроизвести только 9 бит на первых 8 каналах. В остальном сохраняется полная совместимость протоколов. 11 бит для первых 10-ти каналов, реализуются за счет 11 и 12-го канала. Режим включается через регистр 5. Лучше всего работает в режиме SBUS. Не имеет смысла в режиме Futaba 750 мкс. Реализована передача данных на лету. Отправляемые байты готовятся непосредственно перед их передачей в эфир. Что для старших каналов дает выигрыш в 15-20 мс по времени доставки.
Прочие возможности

Алгоритм температурной подстройки частоты кварца (можно отключить регистром 3). Позволяет удерживать отклонение частоты передатчика в пределах +/- 2 кГц при изменении температуры среды от -20 до +50 градусов.
Реализована защита FLASH и настроек от разрушения. При несовпадении КС FLASH или EEPROM работа передатчика запрещается (возможен только вход в меню).
При работе может выдаваться отладочная информация: длительности канальных импульсов, статистика загруженности процессора и ошибок кадров SBUS.
Реализован автоматический выбор каналов (инициализация уникального номер линка и последовательности прыжков). Запускается, если при включении питания нажать и удерживать кнопку свыше 5 сек или по команде “rebind” из меню.
В программе задействован сторожевой таймер (WDT). Если модуль зависает более чем на 1 сек, WDT рестрартует его. В исправном модуле с неискаженной программой рестартов быть не должно.
Самодиагностика

В начале работы проверяется сигнатура и КС программы во FLASH. Если сигнатура не менялась, КС должна совпасть с ранее записанной. Если КС не совпала, а сигнатура (признак версии программы) неизменна, значит программа разрушена. Модуль переходит к непрерывному равномерному миганию индикатора отображая эту фатальную ошибку. При исправной программе, проверяется КС настроек. Если они разрушены, а сигнатура программы новая (как бывает при первом старте), модуль сбрасывает регистры в значения по умолчанию и выполняет автонастройку, как по команде rebind.
Описание меню

Меню реализовано как обычно - через UART. Передатчик подключается к ПК через адаптер USB->UART3.3В. Для общения используется любая терминальная программа. Скорость обмена 38400, формат байт 8N1, без квитирования, кодировка TTY. Вход в меню пока открыт на протяжении всего времени работы. Для входа надо нажать кнопку m или M. Затем подтвердить Enter-ом. При работе меню передача останавливается.

Управление передатчиком сводится к изменению значений регистров. Номера регистров, их значение и краткое описание выводится при каждом обновлении меню. Для изменения регистра необходимо ввести его номер, нажать Enter, затем ввести новое значение (0-255) и еще раз нажать Enter. Для выхода из меню необходимо ввести символ q (или Q) и нажать Enter. Ниже описывается назначение регистров:

  • 1 - Bind N – уникальный номер привязки. Приемник тоже должен иметь это значение в регистре 1, что-бы отличить свой передатчик от чужого.
  • 2 - Freq Corr – индивидуальная поправка частоты. Позволяет точно синхронизировать частоты приемников и передатчиков. Обычно лежит в пределах 180-220. Подстройку можно производить по параметру A= выдаваемым приемником, добиваясь близости значения к 0/255. Отклонения частоты свыше 7 или меньше 247 являются нежелательными. При отклонении больше 15 связь будет отсутствовать.
  • 3 - Term corr enable – разрешение температурной коррекции частоты передатчика (если не равен 0);
  • 4 - FS check enable – разрешение отключать передачу при обнаружении состояния FS. Использует флаг пакета SBUS или выход PPM импульса за диапазон 988-2011 мкс. Полезно при работе через ретранслятор;
  • 5 - 11 bit/10 ch enable - Разрешение режима 11 битного кодирования первых 10 каналов, за счет 11 и 12-го канала;
  • 6 - Debug output (1-PPM, 2-perf) – режим выдачи отладочной информации. Если выставлен младший бит, передатчик будет постоянно отображать длительности текущих PPM импульсов по всем активным каналам. Бит 2 включает выдачу дополнительных параметров производительности M= - максимальное время цикла разбора входного протокола, мкс; A= - среднее время цикла; В= - предельная загрузка входного буфера и E= - количество битых пакетов SBUS. Значение 00 в регистре 5 отключает выдачу отладочной информации;
  • 11-18 Hop F - Частоты прыжков по 8 ми каналам. Каждый из 8 регистров задает код частоты. Частота канала вычисляется по формуле F=433.075 МГц + 0.06*код в регистре. Эти значения должны полностью совпадать с аналогичными значениями регистра приемника;
  • 19 - Power switch chan (1-13) 0=off " – номер канала PPM, используемый для управления выходной мощностью RFMки (через ее регистр мощности). 13-й канал доступен только в SBUS режиме. Значение 0, запрещает управление мощностью (мощность будет определяться регистром 22);
  • 20 - Power min (0-7) – уровень мощности при нижнем положении тумблера управляющего канала (длительность PPM импульса < 1.3 мс). Код от 0-7 задает выходную мощность RFMки. Нулю соответствует минимальный уровень (около 1 мВт для RFM22B и 100 мВт для RFM23BP), 7-ке – максимальный уровень (100 мВт для RFM22B, 1 Вт для RFM23BP);
  • 21 - Power middle (0-7) - уровень мощности при среднем положении тумблера управляющего канала (длительность PPM импульса > 1.3 мс но меньше 1.7 мс);
  • 22 - Power max (0-7) - уровень мощности при верхнем положении тумблера управляющего канала (длительность PPM импульса > 1.7 мс), или когда управление мощностью не используется.

Кроме изменения регистров, меню поддерживает команды замера шумов ‘N’ (или ‘n’) и автонастройки передатчика ‘rebind’.
Замер шумов по всем или заданному диапазону частотных каналов производится командой ‘Nxx-yy’, где xx и yy - начало и конец сканируемой области. Если xx или yy не заданы, они принимаю значения по умолчанию: 0 и 255. На экран выводится основная статистика замера: минимальное, среднее и максимальное значение шума в канале. Если команда начинается с заглавной буквы N, на экран дополнительно выводится всевдографическая гистрограмма.
Команда ‘rebind’ выполняет сканирование эфира в течении около 7 сек (на это время зажигается индикатор) и, по результатам сканинрования, выбор 8-ми наименее зашумленных частот для прыжков. Так-же формируется уникальный номер линка. Если регистр поправки частоты (2) выходил за пределы 170-230, его значение сбрасывается в 199. При большом уровне шумов команда rebind может не найти нужное количество каналов, в этом случае на экран выводится предупреждение ‘Error: too noise!’ и попытки сканирования эфира повторяется снова и снова.
Индикатор и кнопка

В большинстве модулей используется единственный индикатор. В нормальном режиме работы (модуль исправен и есть входной протокол) индикатор мигает коротким вспышками с частотой пропорциональной текущей мощности. Отсутствие мигания говорит, что либо нет входного сигнала, либо произошел вход в меню.
Равномерное мигание сразу после включения свидетельствует о несовпадении КС программы или настроек в EEPROM. В этом режиме можно только войти в меню и поправить настройки EEPROM.
Непрерывное или почти непрерывное свечение индикатора говорит об ошибках обмена с RFMком или ее неисправности.
При нажатии кнопки во время работы на 0.5 сек и более, текущие положения PPM каналов отправляются приемнику для запоминания, как FailSafe состояние. Индикатор при этом горит, пока кнопка не отпущена.
Нажатие и удержание кнопки перед включением питания позволяет запустит процедуру автонастройки. Кнопку необходимо удерживать 5 сек, пока индикатор не загорится непрерывно. После отпускания кнопки, будет выполнена процедура автонастройки регистров прыжков и номера линка. Если уровень шумов вокруг передатчика слишком велик и процедур автонастройки не может найти 8-ми каналов, модуль 5 раз мигнет индикатором, а затем повторит сканирование эфира, до тех пор, пока каналы не будут найдены.
Информация в процессе работы

Через UART на скорости 38400 модуль выдает свое состояние. Обновление происходит при изменении состояния. До первого получения данных выдается строчка «Waiting start:». При нормальной работе тип входного протокола «PPMxx», «Fut750u PPMxx» или «SBUS». При потере входного сигнала выдается «Input lost:». Далее следует информация о температуре RFMки «T=xx» и вычисленной по ней поправке «Tc=x».
При ошибках в работе RFMки могут выдаваться сообщения «Timeout» - при отсутствии признаков передачи пакета или «RFM lock?» - при неадекватности ее регистра состояния.
Если в регистре 5 включен режим выдачи дополнительной информации (бит 2=1), через UART выдаются параметры M=ххх и A=xxx – максимальное и среднее время (в мкс) цикла обработки входного протокола. Они позволяют судить о загруженности процессора, особенно в ресурсоемком режиме SBUS. Параметры В=ххх - предельная загрузка входного буфера (текущий объем 180) и E=ххх - количество битых пакетов SBUS, выдаются только в SBUS режиме и позволяют судить о качестве его обработки.
При установленном бите 1 в регистре 5 на экран постоянно выводятся длительности принятых PPM импульсов в удвоенных микросекундах (середина = 3000).
Рекомендации по сборке

Исходники рассчитаны на сборку с помощью среды компилятора arduino версии 1.0.5 или выше. Каталог проекта должен называться OpenTiny_TX. Настройки проекта делаются в config.h. Перед каждой новой компиляциенй измените номер версии или подверсии в переменной version (файл config.h). Выберите тип платы передатчика: TX_BOARD_TYPE. Если выбрана плата передатчика Tiny от Expert, установите тип платы “Atmega168 PRO 5V 16 МГц” в меню “Плата” среды arduino. В остальных случаях выбирайте “Atmega328 PRO 5V 16 МГц”.

  • 11531
Comments
gorbln

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

baychi

Самые “открытые” схемы живут на Флайтроне:
www.flytron.com/pdf/OpenLRS_RX2.pdf
www.flytron.com/pdf/openlrs-m3-module.pdf
www.flytron.com/pdf/openlrs-m2-module.pdf

Но и остальные схемы, тоже не секрет, если надо (отличаются в мелочах, типа ножек, куда к Atmega328 подключена RFM22/23xx).

how-eee

Спасибо!
Первое поколение эксперта свое у меня уже налетала. Своим джиттером поднадоела.
Вот однажды решусь пуститься в авантюру “заказ с китая” и буду терпеливо ждать турнигу с модулем опенлрс. 😃

P_L_Z

телеметрия есть?

baychi

Телеметрии нет и в данном варианте не будет. Возможно будет, когда прикручу GSM модем, так как при этом радикально изменятся возможности использования LRS.
ИМХО в рамках FPV, доп. телеметрия не нужна. А вне FPV всякие FrSky/Futaba давно уже отелемтриелись. 😃

Shuricus

Спасибо Александр, что вы сделали то, что действительно хочется видеть в прошивке! Это большой шаг в неравном бою с Экспертом. 😃

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

baychi

У KHA, равно кака и у Эксперта нет отправки на лету. Пакет сначала готовится целиком, а затем отправляется, не меняясь в процессе отправки - то есть до следущего цикла передачи.

Не понял вопроса про RSSI. RSSI реализован в приемнике, передатчик тут не при чем.
В приемнике есть все варианты: как бипы на потеряные пакеты, так и класический RSSI или соотношение сигнал/шум с усреднением по выбору.

Shuricus

Если я правильно понимаю, ваша прошивка технически уже лучше чем у Эксперта.
Значит ли это, что железо Эксперта тоже не обязательно и тех же результатов можно добиться на железе HawkEye?

(Прошу прощения про RSSI, естественно приемник…)

alexeykozin

е-мае. неужто ломанули, вот они корни необъяснимой агрессии эксперта…
“с протоколом Expert” это жесть. анализатором протоколов работали или делали дизасемблирование прошивки?
скорее всего свой код он авторским правом не защищал да и частично скорее всего взял из открытых проектов в лицензировании которых указан на запрет закрытия кода основанного на открытом.

клевый мануал!
так держать!

Shuricus

Все наоборот - прошивка была сделана после проявления необъяснимой агрессии Экспертом, поскольку Александр предложил Эксперту поправить и улучшить некоторые вещи, в результате чего был, как и многие другие, послан в пешее путешествие. Что и привело к единственному решению как-то улучшить прошивку - написать ее заново. Прошивку никто не ломал, прав не нарушал. Использование настроек протокола аналогичных Экспертовскому законом не запрещено! 😃 Код аналогичной прошивки давно лежит в открытом виде.

Просто прошивка теперь сделана с точки зрения здравого смысла (это я больше про приемник говорю), а не с коммерческой и очень своеобразной точки зрения Эксперта.

ВладимирВл

А переключение мощьности не каналом ППМ, а “железным” переключателем на “ногах” меги возможно реализовать?

baychi

Уже реализованно в последней версии: rcopen.com/forum/f90/topic341906/249
25 и 26-я ноги Меги с коммутацией на землю.

alexeykozin

логичнее регулировку мощности было бы повесить на переменный резистор
крайние ноги резистора + и гнд а центральную на аналоговый вход атмеги
и интуитивно понятный интерфейс и не надо назначать регистры под комбинации ног
в регистрах можно задавать минимум для аналогового минимума и максимум мощности

baychi

А зачем нам плавная регулировка?
ИМХО она бессмысленна. 2-3 уровня - вполне достаточно.
А тем кому нужны “специальные фичи” легко могут их запрограммировать сами.