• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

OrangeRx OpenLRS - Arduino+радиомодуль в диапазоне 433МГц





 

Вообще-то, LRS расшифровывается как Long Range System - система дальнобойной радиосвязи, в вольном переводе. Приставка Open означает открытое железо и исходный код прошивки. Хоть само устройство продается не так давно, но в интернете информации по нему более чем достаточно. В сухом остатке все сходятся к тому, что никакая она не LRS. Меня же больше заинтересовала приставка Open и диапазон 433МГц. Все дело в том, что способность радиоволны огибать препятствия тем больше, чем больше ее длинна. А т.к. последняя обратно пропорциональна несущей частоте, получаем что, при равной выходной мощности радиомодуль данного диапазона вблизи поверхности земли в разы выгоднее по дальности нежели диапазона 2.4 ГГц. Само по себе устройство состоит из двух компонентов: трансивер HopeRF rfm22b и микроконтроллер Atmega 328. В последнюю уже залит Arduino-загрузчик. Устройство поставляется в двух вариантах.
В корпусе внешнего вч-модуля JR:

 

 

В бескорпусном виде (плату прикрывает наклейка и термоусадка):

 

Причем последний заметно дешевле. На момент подготовки данного материала его цена всего 730р. Все свои опыты и эксперименты я проводил на нем. Технические характеристики устройства определяются характеристиками его компонентов. Полное описание можно найти в соответствующих даташитах.
 

Микроконтроллер:


Тактовая частота: 16МГц
Память программ: 32К
Интерфейс программирования: SPI, UART(благодаря Arduino-загрузчику)
Радиомодуль:
Выходная мощность: до 100мВт. Имеется 8 программно настраиваемых градаций (100mW,50mW, 25mW, 13mW, 6mW, 3mW, 1.6mW, 1.3mW)
Размер буфера приемопередачи: 2х64байт (Rx/Tx)
Возможность скачкообразного изменения канала передачи данных.
Аппаратный контроль адреса передачи данных.
Длинна адреса: 4 байта.
Адресом это называть не совсем правильно. Дело в том что передача данных осуществляется между двумя модулями, имеющими одинаковый заголовок(адрес).
Устройство уже содержит все необходимые цепи согласования уровней и стабилизатор на 3.3В. Питание осуществляется от источника 5В, которые подаются на соответствующие выводы колодки "Сh".
Для прошивки микроконтроллера в колодки SPI или UART подается питание 3.3В. 5В, поданные туда, спалят радиомодуль, т.к. его питание имеет потолок 3.6В.

 


Распиновка OrangeRx OpenLRS

 

Прошивка микроконтроллера
  Собственно, от идеи разрабатывать код прошивки "с нуля" я отказался сразу. За основу была взята прошивка Kha (https://github.com/openLRSng/openLRSng). Но о коде чуть позже. Сначала сама процедура заливки программы в микроконтроллер. Она не сильно отличается от прошивки Arduino Pro Mini.
  Для этого нам понадобится USB-to-TTL переходник с выходом "Reset". У меня в свое время такого под рукой не оказалось - не беда. Я нашел CraftDuino (аналог Arduino Uno).
1. Скачиваем (или пишем) прошивку.
2. Скачиваем среду Arduino с сайта Arduino.ru
3. Из платы извлекаем микроконтроллер и делаем следующее подключение:

 

4. Далее подключаем USB разъем Arduino к компьютеру.
5. При необходимости (если Windows не справится сама) устанавливаем драйверы TTL-моста. Их можно найти в папке среды Arduino. В итоге в диспетчере устройств появится новый COM-порт.
6. Запускаем среду Arduino и загружаем в нее прошивку.
7. Выбираем COM-порт.

8. Выбираем плату Arduino Pro or Pro Mini 5v/16MHz



9.Нажимаем кнопку "Загрузить". Прошивка компилируется и загружается в микроконтроллер. Готово!

Надо сказать, что это были еще даже не цветочки, а так... тест на работоспособность.
Как вч-модуль для радиоуправляемых моделей (и тем более дальнобойных) данный продукт меня не заинтересовал. Чтоб заставить его работать на многие километры, надо долго "курить" даташит и хорошо знать физику радиоволн. На первое у меня нет времени, а в радиоволнах я разбираюсь достаточно посредственно. Тот же Kha потратил на это куда больше времени и я тут ему полностью доверяю. Поэтому я взял за основу его прошивку и стал разбираться, что из этого агрегата можно выжать.

1. Устанавливаем распиновку меги на выходы устройства и радиомодуль

 

 Arduino pin

 Device pin

 A0

 rfm22b SDO

 A1

 rfm22b SDI

 A2

 rfm22b SCLK

 A3

 светодиод 1

 A4

 I2C SDA

 A5

 I2C SCL

 A6

 не распаян

 A7

 не распаян

 D0

 UART Rx

 D1

 UART Tx

 D2

 rfm22b IRQ

 D3

 RSSI Channel

 D4

 rfm22b nSel

 D5

 Channel 1

 D6

 Channel 2

 D7

 Channel 3

 D8

 Channel 4

 D9

 Channel 5

 D10

 Channel 6

 D11

 Channel 7

 D12

 Channel 8

 D13

 светодиод 2

 

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

2. Устанавливаем возможности HopeRF RFM22b


  Для этого все же обратимся к даташиту. Из последнего следует, что радиомодуль представляет собой трансивер, обеспечивающий двустороннюю связь. Выходная мощность 100 мВт - вполне достаточно, чтоб при не самых прямых руках пробить расстояние метров в 500-800. Радиомодуль имеет 3 программируемых входа/выхода GPIO. Так же у него есть интересная особенность: антенна подключается к внутреннему приемнику или передатчику по установке в 1 соответствующего внешнего входа радиомодуля - Tx, Rx. Передергивать их можно с микроконтроллера, но в схеме рассматриваемого устройства применено лучшее решение. Входы Tx и Rx радиомодуля соединены с выходами GPIO 0 и 1. Таким образом подключением антенны к приемнику или передатчику можно управлять при помощи внутренних регистров радиомодуля. Надо сказать, что все общение с радиомодулем происходит посредством программирования внутренних регистров. Большая часть даташита как раз и посвящена описанию их назначения. Так же производителем радиомодуля предлагается еще несколько полезных документов. Среди них AN440 - описание регистров и калькулятор, с помощью которого можно легко рассчитать необходимые значения регистров для инициализации радиомодуля. Я не буду останавливаться на этом подробно. Радиомодуль имеет два буфера по 64 байта для приема и передачи данных. Стоит заметить, что радиомодуль умеет передавать и принимать пакеты длиной до 255 байт. Но при этом разработчику придется следить за этими буферами. А это уже лишний геморрой. Так что я бы не стал использовать длину пакета более 64 байт. GPIO 2 в рассматриваемом устройстве подключен к выводу D2 меги. Это позволит нам использовать внешнее прерывание меги для оповещения о приеме пакета. Так же стоит учитывать, что пакеты передаются адресно. Чтоб пакеты данных ходили между двумя радтомодулями, они должны иметь одинаковый 4-х байтовый заголовок. Радиомодуль умеет разбивать весь диапазон несущей частоты на каналы заданной ширины и впоследствии переключать эти каналы. Для передачи данных между двумя модулями, последние должны в каждый момент времени трансляции иметь одинаковые каналы одинаковой ширины - несущие частоты обоих модулей должны совпадать. Так же радиомодуль может выдавать цифровое значение RSSI в диапазоне от 0 до 255. Это значение характеризует уровень принимаемого сигнала. Чем оно больше, тем связь стабильнее. В сочетании с возможностью менять канал произвольным образом, разработчик получает возможность разработать и реализовать алгоритм выбора наиболее подходящей несущей частоты для передачи данных. Таким образом можно повысить стабильность передачи и радиус действия связи. Код, реализующий эти функции, я извлек из прошивки Kha(еще раз спасибо ему за труды) и сгруппировал их в 3 файла. Каждый желающий может проделать подобную работу.

3. Назначение функций


  На базе полученных ранее функций, я сделал пример в лучших традициях Hello World. Для теста нам понадобится два устройства. В первую заливаем прошивку Master, а во вторую - Slave. Master читает из UART символ и передает его на второе устройство. При получении с последовательного порта символа "1" оба устройства зажигают светодиод, а при получении символа "0" - гасят.
Скачать пример можно по ссылке.

void rfm22_init() - инициализация и настройка радиомодуля;
void rfm22_SetChannel(uint8_t ch) - установка канала по номеру;
void rfm22_rx_reset() - установка режима приема для радиомодуля;
void rfm22_need_reboot() - перезагружает радиомодуль, если это необходимо;
void rfm22_sendPacket(uint8_t* pkt, uint8_t size) - передает пакет из массива байт pkt длиной size;
void rfm22_readBuffer() - получение принятого пакета данных в массив tx_buf
uint8_t rfmGetRSSI() - получение значения RSSI

Собственно, это уже "цветочки"...

4. Область применения


  Помимо прямого назначения, данное устройство может быть применено как обычное Arduino Pro Mini в робототехнических проектах, где необходимо организовать радиосвязь на больших расстояниях. В распоряжении разработчика остается шина I2C, два аналоговых входа, UART и еще 9 цифровых портов ввода/вывода. Описанные выше функции не задействуют таймеры. Так что последние в полном составе остаются в распоряжении разработчика.

Итого: это небольшое и недорогое устройство является достаточно интересным решением для создания распределенных проектов.
Напоследок ветка обсуждения на русскоязычном форуме: http://forum.rcdesign.ru/f90/thread302333.html
ветка обсуждения на англоязычном форуме: http://www.rcgroups.com/forums/showthread.php?t=1778553
Короткая, но очень полезная ветка на форуме "Радиокот": http://radiokot.ru/forum/viewtopic.php?f=20&t=38421
Страница продукта HopeRF rfm22b: http://www.hoperf.com/rf/module/fsk/RFM22B.htm

Аналог rfm22b от Silicon Labs si4432 Datasheet

 

По материалам rc-master,  автор Зайчиков Александр

 

Возможно вас заинтересует обзор по RC Helicopters и Drones от Clive

https://hobbyhelp.com/rc-helicopters

 

 

В начало обзора



Купить радиодетали для ремонта
 



Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 377



          

Радио для всех© 2024