Радиомодемы OpenBee 433 Мгц на модулях RFM22B

Заказал я как-то (не подумав) модули RFM22B. При цене 15 баксов за пару - планировал всех обмануть и сделать дешёвые радиомодемы, аналоги телеметрийных модулей для ардупилота.

Получилось так. Ценник вышел - около 12 баксов за 1 модем.
За подробностями - добро пожаловать далее.

  • 17535
Comments
gorbln

ВНИМАНИЕ!
Плата переработана, в этом сообщении ссылки изменены и ведут на актуальную версию.
Итак.
Радиомодемы для ардупилота сделаны на других модулях HopeRF (ниже в комментариях есть ссылка на них незадорого), поэтому, естественно, прошивка от них не подойдёт для RFM22B. Стал искать варианты. Нашёл 4 штуки:

  1. Радиомодем на основе телеметрийного канала проекта OpenLRS/OpenLRSng. Из плюсов - т.н. хоппинг - переключение между несколькими частотными каналами (до 6). Минус - аплинк со стороны земли забит командами управления, ибо это всё-таки аппаратура управления, а потом уже радиомодем.
  2. RF22 - крутая библиотека для работы с модулями RFM под ардуино. Можно сделать всё. В том числе сотовую сеть модемов. Но надо раскуривать мануалы, долго и упорно, а учитывая, что я никаким местом не программист - не мой вариант.
  3. Проект OPLink. Главный минус - процессор STM. Ацкое УГ, с непомерными требованиями порога вхождения. Точнее, не проц УГ, а среда разработки. Не вариант вообще.
  4. Проект OpenBee от DIYDrones. Сделан на RFM и ардуине, open-source software. Есть схема. Минус - нет хоппинга и меню для изменения настроек (прикрутить можно, но уже лень).

Остановился я на последнем варианте, как наиболее понятном, и удовлетворяющем наличию радиодеталей.
В оригинале плата радиомодема исполнена в форм-факторе ZigBee. Мне это было ни к чему, поэтому плата была разведена простая прямоугольная:

Вся плата разведена в 1 слое. Номиналы подписаны прямо на чертеже. Можно было сделать верхний слой, но мне это показалось неудобным, в итоге ардуина ProMini просто напаивается сверху проволочками. В файле жёлтым (в слое К2) подписано к каким ногам ардуины идут какие контакты на плате. На пины выведены Rx, Tx, и питание. Питается плата 5 вольтами, установлен стабилизатор на 3.3. При желании можно над RFMкой установить экран из тонкой жести, для пущей помехоустойчивости. Я не ставил - лень.
Пара слов про диоды-индикаторы. Они сделаны с общим анодом, что потребовало изменения оригинального скетча. Сделано это потому, что у меня были трёхцветные светодиоды с общим анодом, и я их использовал. Если кто-то будет использовать индикаторы с общим катодом или отдельные диоды - можно использовать другой вариант платы (также есть в файле) и оригинальную прошивку.
Фото платы (версия устаревшая, ещё без стабилитронов, но для общего понятия без разницы):

“нижняя” сторона - здесь установлена RFM-ка, стабилизатор и индикатор.


“верхняя” сторона - здесь припаяна ардуина и пины для связи.

Компилировать проект и прошивать платы надо в СТАРОЙ версии Arduino IDE - 0.22. Иначе ничего не собирается, а если и собирается, то работает неправильно!

Чтобы поменять скорость порта и идентификатор радиоканала - надо перекомпилировать проект. В остальном - минусов нет.
Проверил модемы на скорости 115К, 9600 и 57К - работают без проблем, при условии, что проект компилировался в старой версии Arduino IDE.

После продолжительных тестов, удалось связать АРМ с MissionPlanner-ом при помощи этих модемов. Скорость желательно делать не меньше 57К, либо надо отключать передаваемые в поток параметры. Дальность не проверял, задачи такой пока не стоит. Вся эта бодяга затевалась, чтобы настраивать ПИДы, не подключая проводов на поле.
Обязательно отключать контакт TX от OSD, если таковое есть, иначе ничего не работает как надо. Собственно, это написано в “родной” вики ардукоптера.

Линки:
OpenBee на Flytron-е
Исходники OpenBee
Моя версия скетча, подправленная под другие светодиоды (переименовать в OpenBee.zip - хостинг режет доступ к Zip-ам)
Плата в формате Sprint Layout - актуальная
Плата в формате Sprint Layout - устаревшая
В устаревшем варианте жирными белыми линиями в слое К1 показаны линии реза для изготовления платы не ЛУТом, а нарезкой (ножом или на станке). Как показала практика - ЛУТом по времени так же, а результат красивее. Но если кому вдруг понадобится - вот.

В планах:
1) Полностью переделать входные цепи RX и TX. В идеале - LLC. Попроще - стабилитрон. Сделано, работает.
2) После прихода новых плат на Si4432 - полный редизайн модемов. Ардуина будет питаться, как ей и положено, 5 вольтами, а передатчик - тремя. Согласовываться будут уже они между собой. В качестве основного процессора думаю поставить Atmega8.
Разработка закончена, всё работает!
3) Если уж совсем попрёт - сделать настроечный режим, активизирующийся перемычкой.
Сделано, будет имплементировано в новой версии железа.
Работает и в новой, и в старой версии, плата выбирается дефайном.

P_L_Z

наверное и на такой штуке заработает ?

gorbln
P_L_Z;bt109047

наверное и на такой штуке заработает ?

По виду, распиновке и описанию - это тот же самый модуль (только в 2 раза дешевле). Однако, чипы на HopeRF-овских модулях промаркированы по другому. Если модуль такой же - то, с учётом того, что программа влазит в 8-ую мегу, которая стоит 20 рублей, можно сделать модемы вообще по 6 баксов, что уже укладывается в концепцию “бюджетный аналог рцтаймера”!
Заказал себе пару для эксперимента, спасибо за ссылку!

Вот, кстати, что пишут про RFM22 на AVRFreaks:

The IC on the RFM modules is a SiLabs Si4431 (RFM23) or Si4432 (RFM22). This chip can also be found on the EZRadioPro modules by SiLabs.

Так что есть все шансы на успех!

gorbln

Снял термоусадку, перезалил фотки. А то уж больно страшные были.

P_L_Z

у меня должны скоро прийти , заказывал чтобы сделать приемников под openlrs , но теперь видемо буду делать модемы)

alexeykozin

а какая выходная мощность и возможно ли раскачать?
родные телеметрийные модули всем хороши - кроме мощности

P_L_Z

100миливат , если србирать на rfm22bp то1 ватт, также существуют недорогие усилители на 5-7ватт

с родными модемами дела не имел но подозреваю что прикрутив к ним человеческие антенны можно существенно повысить уровень сигнала

gorbln

Народ, повремените радоваться. Я так и не смог пока связать APM с MissionPlanner-ом при помощи этих модемов. Есть несколько предположений, сейчас их проверяю. Хотя в терминале всё передаётся изумительно, никаких косяков ни на какой скорости.

Так. Походу, косяк с неработой пролифика и с неработой АРМ имеет общую причину. А именно - напряжение на ноге RX ардуины с моим делителем получается 1.6 вольта, что очевидно мало. надо менять делитель. сейчас ещё поэкспериментирую - расскажу

gorbln

Заставил работать модемы с АРМом!
Необходимо изменить делитель напряжения на ногу RX, а именно: сопротивления плеч должны быть 3.9К и 8.2К вместо 470 Ом и 1К.
Лучше даже побольше, 4.7К/10К, например.
Скорость нужна 57600. На меньшей скорости канал банально забивается флудом контроллера и связь установить очень трудно.
Ну и - преобразователь USB-UART на стороне компьютера должен быть FTDI.

P_L_Z

рассматривая APM модемы в интернетах , заметил что на плате у кроме модуля почти ничего нет
а вот эти модули по халяве www.aliexpress.com/item/…/1321281392.html

Lazy
P_L_Z;bt109089

также существуют недорогие усилители на 5-7ватт

Здесь нужен двунаправленный усилитель. Всё далеко не так просто.

P_L_Z
Lazy;bt109473

Здесь нужен двунаправленный усилитель. Всё далеко не так просто.

всеголишь однонаправленный + переключатель , да и вроде на rfm22b можно включить отдельно rx tx антенны

Lazy

Да да, всё очень просто…

P_L_Z
Lazy;bt109489

Да да, всё очень просто…

правда ?

Lazy

Да ясное дело…Берём готовую микруху, подключаем всё как в даташите и ничего не работает. Время переключения RX/TX должно быть не хуже 2 мс.

gorbln
Lazy;bt109535

Берём готовую микруху, подключаем всё как в даташите и ничего не работает.

О дааааа!!! Как это знакомо =))))

Lazy

До боли. 😃
Я к тому, что сделать переключаемый усилитель мощности для этих устройств - далеко не тривиальная задача, решаемая на коленке.

gorbln

Тривиальная, если однонаправленный. Но это для задач радиоуправления, а не для телеметрии.

Lazy

Однонаправленный купить ничего не стоит. 😃 Двунаправленный, 10 Вт - 2 штуки баксов.

gorbln

Ну там по описанию к микрухе - можно раздельные антенны ставить, и типа всё пучком. Но это по описанию =) А про него мы как раз выше во мнениях сошлись - подключаешь - и ничего не работает =)))

Lazy

Два антенных тракта? 😃 Давайте станем реалистами.

P_L_Z

…но в даташите,ж … как так ?? 😃

gorbln

Поправил схемотехнику модема. Убрал делитель напряжения, всунул вместо него стабилитрон. Работает отлично. Исчезли проблемы с Prolific-ом и ардуиной. Могу рекомендовать к повторению!!! 😎

Иван

Тестил на RFM23BP - работает, можно компилить и в 023 дуне… на дальность пока не тестил. Тестил через гипер терминал слал на него с другого компа поток от жпс эмулятора со скростью 115к и частотой 10герц

gorbln
P_L_Z;bt109469

рассматривая APM модемы в интернетах , заметил что на плате у кроме модуля почти ничего нет
а вот эти модули по халяве www.aliexpress.com/item/…/1321281392.html

Скромный реверс-инжиниринг данных модулей показал, что по факту это Si1000:

Однако, ценник на эти модули не отличается гуманностью, и легче купить на али HM-TRP.
Ещё, 3DRobotics не ставят никаких ограничителей на вход модулям. Получается, входы 5V tolerant, хотя в даташите про это не сказано ничего. По входу (TX/RX) стоит только резистор. Питание модуля - 3.3В, делается стабилизатором на плате модема.

Заказал себе пару HM-TRP, посмотрим, есть ли реальная разница с RFM22/Si4432
Апдейт: Реальная разница есть, да ещё какая. Но она не в аппаратной части (там как раз всё абсолютно идентично), а в софте. SiK firmware - мощная прошивка, в которой сделано всё, что я хотел сделать в этом модеме. Расковырять её “по-быстрому” и переделать под ардуину у меня не получилось.

gorbln

Сделал редизайн модема на модули Si4432.
Результатом доволен. Минимум соплей, красивый вид, технологичная конструкция.
Все задуманные фишки сделал - настроечное меню работает, даже на ATMega8, в которой оно немного усечено, но полностью работоспособно (убраны красивости и свистелки).
В ближайшее время напишу статейку, и выложу отдельной записью.
Пока - картинка для привлечения внимания:

Georg2012

Добрый день! заинтересовала Ваша работа с модемом на модуле Si4432. Где можно посмотреть скетч на этот модуль для ардуино. Заранее благодарен!

gorbln

Дык… Вот: habrahabr.ru/post/201366/

appolinari

Скажите пожалуйста, какой радиус связи у ваших модемов на модуле Si4432?
Пытаюсь сделать нечто подобное, на (arduino pro mini + Si4432) Связь пропадает через 20 - 30 метров.
Заранее благодарен!

gorbln

Не могу дать вам ответа, ибо не делал тестов на дальность. Целью изначально было лишь настраивать коптер без проводов, цели на дальность не ставилось. Многое зависит от антенн и их взаимного расположения. У меня и на модулях HM-TRP связь, бывало, пропадала в 10 метрах в неблагоприятной ситуации.

Иван
appolinari;bt132322

Скажите пожалуйста, какой радиус связи у ваших модемов на модуле Si4432?
Пытаюсь сделать нечто подобное, на (arduino pro mini + Si4432) Связь пропадает через 20 - 30 метров.
Заранее благодарен!

Есть пара ньюансов - si была на “соплях” к дуне прицеплена, ВСЕ это было запитано на 3.3, но заработало только когда кондер на на 6800мкф в дырки модулей по питанию поставил.
Это первый был:)
Второй - мощность какую поставили?
Есть ещё опенби проект - его пробовали слить дуням?

appolinari

Ясно, Спасибо!
Возможно вы сможете пролить свет на ещё одну сторону этого модуля…
Не подскажите, как можно програмно изменить его частоту и мощность?
ОпенБии скачал пару часов назад. Ещё не разбирался что там да как…

Иван
appolinari;bt132333

Ясно, Спасибо!
Возможно вы сможете пролить свет на ещё одну сторону этого модуля…
Не подскажите, как можно програмно изменить его частоту и мощность?
ОпенБии скачал пару часов назад. Ещё не разбирался что там да как…

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

appolinari

На какую менять, я сам не знаю… По идее, частота должна быть адекватно состыкована с антеной. А их китайский английский трудно понять.
В описании модуля написано :“SI4432 470MHz 1000m Wireless Module 470M 433mhz”.
Ниже они пишут так:
Ses the American SI4432 the latest version of IC, stable performance
Frequency range: 433.92M
High sensitivity up to -121dBm
Maximum output power: 20dBm
Data transfer rate: 0.123-256kbps
FSK, GFSK and OOK modulation mode

А в подсказках к модулю RF22, в библиотеке пишут, что по умолчанию модуль инициализируется на 434MHz:
Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
Что в принципе не так уж и далеко от заявленых выше 433.92MHz, особенно если учесть китайские припуски в точности… Проверить мне их не чем. Вот и приходится искать правду в сети…
Ведь и скорость как то можно менять в пределах 0.123-256kbps

gorbln

Всё же в коде есть. Файл “Functions_RFM.ino”:
if (AIRSPEED==38){
// 38.4Kbps data rate
_spi_write(0x6e, 0x09); //case RATE_384K
_spi_write(0x6f, 0xD5); //case RATE_384K

_spi_write(0x1c, 0x02); // case RATE_384K
_spi_write(0x20, 0x68);// 0x20 calculate from the datasheet= 500*(1+2*down3_bypass)/(2^ndec*RB*(1+enmanch))
_spi_write(0x21, 0x01); // 0x21 , rxosr[10–8] = 0; stalltr = (default), ccoff[19:16] = 0;
_spi_write(0x22, 0x3A); // 0x22 ncoff =5033 = 0x13a9
_spi_write(0x23, 0x93); // 0x23
_spi_write(0x24, 0x02); // 0x24
_spi_write(0x25, 0x6B-); // 0x25
_spi_write(0x2a, 0x1e);
}
Это настройка модуля на скорость в канале 38К

_spi_write(0x6d, 0x07); // 7 set power max power
Вот мощность. 7-максимум, 1-минимум, 0-выключено (вроде так)

if (AIRSPEED==38) _spi_write(0x72, 0x1F); // frequency deviation setting to 19.6khz (for 38.4kbps)
Вот ширина канала где настраивается (все эти параметры в датащите написано как рассчитывать)

//band 435.000
_spi_write(0x75, 0x53);
_spi_write(0x76, 0x7D);
_spi_write(0x77, 0x00);
Здесь задаётся, что мы используем диапазон 433 мегагерца. Чип работает от 200 до 900 (грубо), но все частоты поделены на диапазоны, для каждого свои настройки.

_spi_write(0x75, 0x40 + frequency_constant);
_spi_write(0x76, byte1);
_spi_write(0x77, byte0);
Это частота настраивается.

gorbln

З.Ы. Я разбирался в OpenBee, и понаисправлял там косяков. Их там было более чем достаточно. Да и сейчас есть, вот, пока искал вам куски кода, нашёл две штуки, исправил, перевыложил.

Как обычно, описание на хабре, все файлы лежат здесь.

appolinari

Спасибо! Направление уразумел. Буду копать дальше. 😃 пытался скопировать из файла “Functions_RFM.ino” функции, которые пишут в регисторы… Фокус не удался. 😃 Я до этого смотрел файл “RH_RF22.h” из библиотеки “radio_head”, нашёл адреса регистров, в которые записаны данные. Пока не сильно представляю себе, как менять эти данные, но думаю что разберусь. Щаз разбираюсь с “SPI” функциями.

appolinari

Нашёл в библиотеке дефолтные настройки для RH_RF22.
При запуске устанавливается
частота: 434.0 MHz,
мощность: 8dbm,
скорость: “FSK, No Manchester, Rb= 2.4kbs, Fd= 36 kHz”
На данной конфигурации связь модулей в городе, при почти прямой видимости держалась около 170метров.
Сегодня поменял настройки на:
частота: 433.92 MHz,
мощность: 17dbm, (при 20dbm связь держалась не долго, ардуино виснет)
скорость: “FSK, No Manchester, Rb= 19.2kbs, Fd= 9.6 kHz”
Расстояние возросло почти вдвое. Связь была при тех же условиях (на том же месте) на дистанции чуть более трёхсот метров.😒

Иван

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

appolinari

Я замерял потребление в режиме приём/передача. При отдаче в 20dbm, потребление 0,12А. Модуль запитан от зарядного устройства с отдачей в пол ампера. Так что я не думаю, что проседание тому виной. Тут скорее, какие то наводки влияют. Надо “экранировать” всё.

Иван

Чем меряли? 😉

appolinari

Экранирование не сильно помогло. Попытаюсь повесить конденсатор по питанию. Правда - 6800мкф не нашёл. Пока впаял 470мкф.😃 до дома доберусь, проверю что изменилось…

appolinari

Мерил этим:orig

Иван

Если оно пики меняет то норм. А если нет… 😃
Ёмкость по питанию крайне желательна

appolinari

Пики та штуковина не меряет… 470мкф не помогает 😦
Если даю мощность больше 8dbm, то виснет программа после двух - трех циклов приём/передача.

DossJ

Хотелось повторить проект но все ссылки не рабочие. Не могли бы Вы перезалить проект.