Заказал я как-то (не подумав) модули RFM22B. При цене 15 баксов за пару - планировал всех обмануть и сделать дешёвые радиомодемы, аналоги телеметрийных модулей для ардупилота.
Получилось так. Ценник вышел - около 12 баксов за 1 модем.
За подробностями - добро пожаловать далее.
ВНИМАНИЕ!
Плата переработана, в этом сообщении ссылки изменены и ведут на актуальную версию.
Итак.
Радиомодемы для ардупилота сделаны на других модулях HopeRF (ниже в комментариях есть ссылка на них незадорого), поэтому, естественно, прошивка от них не подойдёт для RFM22B. Стал искать варианты. Нашёл 4 штуки:
Радиомодем на основе телеметрийного канала проекта OpenLRS/OpenLRSng. Из плюсов - т.н. хоппинг - переключение между несколькими частотными каналами (до 6). Минус - аплинк со стороны земли забит командами управления, ибо это всё-таки аппаратура управления, а потом уже радиомодем.
RF22 - крутая библиотека для работы с модулями RFM под ардуино. Можно сделать всё. В том числе сотовую сеть модемов. Но надо раскуривать мануалы, долго и упорно, а учитывая, что я никаким местом не программист - не мой вариант.
Проект OPLink. Главный минус - процессор STM. Ацкое УГ, с непомерными требованиями порога вхождения. Точнее, не проц УГ, а среда разработки. Не вариант вообще.
Проект 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, если таковое есть, иначе ничего не работает как надо. Собственно, это написано в “родной” вики ардукоптера.
В планах: 1) Полностью переделать входные цепи RX и TX. В идеале - LLC. Попроще - стабилитрон. Сделано, работает. 2) После прихода новых плат на Si4432 - полный редизайн модемов. Ардуина будет питаться, как ей и положено, 5 вольтами, а передатчик - тремя. Согласовываться будут уже они между собой. В качестве основного процессора думаю поставить Atmega8.
Разработка закончена, всё работает! 3) Если уж совсем попрёт - сделать настроечный режим, активизирующийся перемычкой.
Сделано, будет имплементировано в новой версии железа. Работает и в новой, и в старой версии, плата выбирается дефайном.
По виду, распиновке и описанию - это тот же самый модуль (только в 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.
Так что есть все шансы на успех!
Снял термоусадку, перезалил фотки. А то уж больно страшные были.
у меня должны скоро прийти , заказывал чтобы сделать приемников под openlrs , но теперь видемо буду делать модемы)
а какая выходная мощность и возможно ли раскачать?
родные телеметрийные модули всем хороши - кроме мощности
100миливат , если србирать на rfm22bp то1 ватт, также существуют недорогие усилители на 5-7ватт
с родными модемами дела не имел но подозреваю что прикрутив к ним человеческие антенны можно существенно повысить уровень сигнала
Народ, повремените радоваться. Я так и не смог пока связать APM с MissionPlanner-ом при помощи этих модемов. Есть несколько предположений, сейчас их проверяю. Хотя в терминале всё передаётся изумительно, никаких косяков ни на какой скорости.
Так. Походу, косяк с неработой пролифика и с неработой АРМ имеет общую причину. А именно - напряжение на ноге RX ардуины с моим делителем получается 1.6 вольта, что очевидно мало. надо менять делитель. сейчас ещё поэкспериментирую - расскажу
Заставил работать модемы с АРМом!
Необходимо изменить делитель напряжения на ногу RX, а именно: сопротивления плеч должны быть 3.9К и 8.2К вместо 470 Ом и 1К.
Лучше даже побольше, 4.7К/10К, например.
Скорость нужна 57600. На меньшей скорости канал банально забивается флудом контроллера и связь установить очень трудно.
Ну и - преобразователь USB-UART на стороне компьютера должен быть FTDI.
Здесь нужен двунаправленный усилитель. Всё далеко не так просто.
Здесь нужен двунаправленный усилитель. Всё далеко не так просто.
всеголишь однонаправленный + переключатель , да и вроде на rfm22b можно включить отдельно rx tx антенны
Да да, всё очень просто…
Да да, всё очень просто…
правда ?
Да ясное дело…Берём готовую микруху, подключаем всё как в даташите и ничего не работает. Время переключения RX/TX должно быть не хуже 2 мс.
Берём готовую микруху, подключаем всё как в даташите и ничего не работает.
О дааааа!!! Как это знакомо =))))
До боли. 😃
Я к тому, что сделать переключаемый усилитель мощности для этих устройств - далеко не тривиальная задача, решаемая на коленке.
Тривиальная, если однонаправленный. Но это для задач радиоуправления, а не для телеметрии.
Однонаправленный купить ничего не стоит. 😃 Двунаправленный, 10 Вт - 2 штуки баксов.
Ну там по описанию к микрухе - можно раздельные антенны ставить, и типа всё пучком. Но это по описанию =) А про него мы как раз выше во мнениях сошлись - подключаешь - и ничего не работает =)))
Два антенных тракта? 😃 Давайте станем реалистами.
…но в даташите,ж … как так ?? 😃
Поправил схемотехнику модема. Убрал делитель напряжения, всунул вместо него стабилитрон. Работает отлично. Исчезли проблемы с Prolific-ом и ардуиной. Могу рекомендовать к повторению!!! 😎
Тестил на RFM23BP - работает, можно компилить и в 023 дуне… на дальность пока не тестил. Тестил через гипер терминал слал на него с другого компа поток от жпс эмулятора со скростью 115к и частотой 10герц
Скромный реверс-инжиниринг данных модулей показал, что по факту это Si1000:
Однако, ценник на эти модули не отличается гуманностью, и легче купить на али HM-TRP.
Ещё, 3DRobotics не ставят никаких ограничителей на вход модулям. Получается, входы 5V tolerant, хотя в даташите про это не сказано ничего. По входу (TX/RX) стоит только резистор. Питание модуля - 3.3В, делается стабилизатором на плате модема.
Заказал себе пару HM-TRP, посмотрим, есть ли реальная разница с RFM22/Si4432 Апдейт: Реальная разница есть, да ещё какая. Но она не в аппаратной части (там как раз всё абсолютно идентично), а в софте. SiK firmware - мощная прошивка, в которой сделано всё, что я хотел сделать в этом модеме. Расковырять её “по-быстрому” и переделать под ардуину у меня не получилось.
Сделал редизайн модема на модули Si4432.
Результатом доволен. Минимум соплей, красивый вид, технологичная конструкция.
Все задуманные фишки сделал - настроечное меню работает, даже на ATMega8, в которой оно немного усечено, но полностью работоспособно (убраны красивости и свистелки).
В ближайшее время напишу статейку, и выложу отдельной записью.
Пока - картинка для привлечения внимания:
Добрый день! заинтересовала Ваша работа с модемом на модуле Si4432. Где можно посмотреть скетч на этот модуль для ардуино. Заранее благодарен!
Скажите пожалуйста, какой радиус связи у ваших модемов на модуле Si4432?
Пытаюсь сделать нечто подобное, на (arduino pro mini + Si4432) Связь пропадает через 20 - 30 метров.
Заранее благодарен!
Не могу дать вам ответа, ибо не делал тестов на дальность. Целью изначально было лишь настраивать коптер без проводов, цели на дальность не ставилось. Многое зависит от антенн и их взаимного расположения. У меня и на модулях HM-TRP связь, бывало, пропадала в 10 метрах в неблагоприятной ситуации.
Скажите пожалуйста, какой радиус связи у ваших модемов на модуле Si4432?
Пытаюсь сделать нечто подобное, на (arduino pro mini + Si4432) Связь пропадает через 20 - 30 метров.
Заранее благодарен!
Есть пара ньюансов - si была на “соплях” к дуне прицеплена, ВСЕ это было запитано на 3.3, но заработало только когда кондер на на 6800мкф в дырки модулей по питанию поставил.
Это первый был:)
Второй - мощность какую поставили?
Есть ещё опенби проект - его пробовали слить дуням?
Ясно, Спасибо!
Возможно вы сможете пролить свет на ещё одну сторону этого модуля…
Не подскажите, как можно програмно изменить его частоту и мощность?
ОпенБии скачал пару часов назад. Ещё не разбирался что там да как…
Ясно, Спасибо!
Возможно вы сможете пролить свет на ещё одну сторону этого модуля…
Не подскажите, как можно програмно изменить его частоту и мощность?
ОпенБии скачал пару часов назад. Ещё не разбирался что там да как…
Смотря на какую поменять хотите, вообще и в этом и в других проектах в клиентах кода есть подсказки.
Мошьность менять - ищите слова в коде типа power они точно есть, я так делал:)
А вообще, для начала - комменты к коду читайте.
На какую менять, я сам не знаю… По идее, частота должна быть адекватно состыкована с антеной. А их китайский английский трудно понять.
В описании модуля написано :“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
Всё же в коде есть. Файл “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 (грубо), но все частоты поделены на диапазоны, для каждого свои настройки.
З.Ы. Я разбирался в OpenBee, и понаисправлял там косяков. Их там было более чем достаточно. Да и сейчас есть, вот, пока искал вам куски кода, нашёл две штуки, исправил, перевыложил.
Как обычно, описание на хабре, все файлы лежат здесь.
Спасибо! Направление уразумел. Буду копать дальше. 😃 пытался скопировать из файла “Functions_RFM.ino” функции, которые пишут в регисторы… Фокус не удался. 😃 Я до этого смотрел файл “RH_RF22.h” из библиотеки “radio_head”, нашёл адреса регистров, в которые записаны данные. Пока не сильно представляю себе, как менять эти данные, но думаю что разберусь. Щаз разбираюсь с “SPI” функциями.
Нашёл в библиотеке дефолтные настройки для 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”
Расстояние возросло почти вдвое. Связь была при тех же условиях (на том же месте) на дистанции чуть более трёхсот метров.😒
Попробуйте кондер повесить прямо на пины питания модуля - должно перестать виснуть. Виснет из-за проседания питания при передаче.
Я замерял потребление в режиме приём/передача. При отдаче в 20dbm, потребление 0,12А. Модуль запитан от зарядного устройства с отдачей в пол ампера. Так что я не думаю, что проседание тому виной. Тут скорее, какие то наводки влияют. Надо “экранировать” всё.
Чем меряли? 😉
Экранирование не сильно помогло. Попытаюсь повесить конденсатор по питанию. Правда - 6800мкф не нашёл. Пока впаял 470мкф.😃 до дома доберусь, проверю что изменилось…
Мерил этим:
Если оно пики меняет то норм. А если нет… 😃
Ёмкость по питанию крайне желательна
Пики та штуковина не меряет… 470мкф не помогает 😦
Если даю мощность больше 8dbm, то виснет программа после двух - трех циклов приём/передача.
Хотелось повторить проект но все ссылки не рабочие. Не могли бы Вы перезалить проект.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"3e5614843df9550077796a52":{"_id":"3e5614843df9550077796a52","hid":1354,"name":"Lazy","nick":"Lazy","avatar_id":null,"css":""},"41a86ce23df9550077793084":{"_id":"41a86ce23df9550077793084","hid":5155,"name":"Иван","nick":"Иван","avatar_id":null,"css":""},"45fa2ae03df9550077785987":{"_id":"45fa2ae03df9550077785987","hid":21428,"name":"appolinari","nick":"appolinari","avatar_id":null,"css":"user__m-banned"},"497ec4283df9550077772a70":{"_id":"497ec4283df9550077772a70","hid":43414,"name":"gorbln","nick":"gorbln","avatar_id":null,"css":""},"4e16dc883df9550077750981":{"_id":"4e16dc883df9550077750981","hid":92946,"name":"DossJ","nick":"DossJ","avatar_id":null,"css":""},"4e71d4e23df955007774e5d8":{"_id":"4e71d4e23df955007774e5d8","hid":99365,"name":"alexeykozin","nick":"alexeykozin","avatar_id":null,"css":""},"4f2a77f43df9550077748b6b":{"_id":"4f2a77f43df9550077748b6b","hid":112468,"name":"Georg2012","nick":"Georg2012","avatar_id":null,"css":""},"5144bc7d3df9550077738bc6":{"_id":"5144bc7d3df9550077738bc6","hid":142658,"name":"P_L_Z","nick":"P_L_Z","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"52547ce9997073007710d5d7","hid":17678,"title":"Радиомодемы OpenBee 433 Мгц на модулях RFM22B","html":"<p>Заказал я как-то (не подумав) модули RFM22B. При цене 15 баксов за пару - планировал всех обмануть и сделать дешёвые радиомодемы, аналоги <a href=\"http://rctimer.com/index.php?gOo=goods_details.dwt&goodsid=834&productname=\" class=\"link link-ext\" data-nd-link-orig=\"http://rctimer.com/index.php?gOo=goods_details.dwt&goodsid=834&productname=\" target=\"_blank\" rel=\"nofollow noopener\">телеметрийных модулей</a> для ардупилота.<br>\n<img class=\"image\" data-nd-image-orig=\"http://cnc.nm.ru/RadioModem.JPG\" src=\"http://cnc.nm.ru/RadioModem.JPG\" alt referrerpolicy=\"no-referrer\"><br>\nПолучилось так. Ценник вышел - около 12 баксов за 1 модем.<br>\nЗа подробностями - добро пожаловать далее.</p>\n","user":"497ec4283df9550077772a70","ts":"2013-10-08T21:45:13.000Z","st":1,"cache":{"comment_count":46,"last_comment":"5bf12ef29970730077140082","last_comment_hid":46,"last_ts":"2018-11-18T09:20:50.000Z","last_user":"4e16dc883df9550077750981"},"views":17535,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}