![]() |
![]() |
|||||||||||||||
Радиоуправление Самолетом на MRF49XA
Автор: Ubermann, ubermann@yandex.ru Хочу поделиться с вами своим опытом в создании самодельного цифрового радиоуправления самодельным самолетом. Данная статья ориентирована прежде всего на тех, кто недавно начал изучать микроконтроллеры и жаждет самостоятельно создать летающую игрушку с индивидуальными возможностями. Как начинающему радиолюбителю мне еще со школы хотелось научиться создавать радиоуправление. Данная область привлекала возможностью своими руками создавать интересные игрушки с редкими функциями, вроде запуска ракеты с лодки на озере, электромеханической руки у машинки для перетаскивания грузов, или еще чего. Итак, что же должно представлять из себя радиоуправление. Во-вторых, пульт управления должен уметь преобразовывать движения рук пилота в радиокоманды, (т.е. кодировать управление пилота) а бортовой приемник понимать эти команды и на их основе управлять моторами (т.е. декодировать), лампочками, или еще чем. <b>В-третьих</b>, понимать движения рук рук пилота пульт должен через джойстики и регуляторы (вроде переменных простых резисторов). Джойстики нужны непосредственно для управления положением рулей самолета, а регуляторы для подстройки средних положений этих рулей, т.е. положений, в которые они встают, когда пилот отпускает джойстики. Иногда ведь бывает, что руль при изготовлении настроен не идеально, и немноrо приподнят или опущен, либо в полете выясняется, что самолет немного кренит в какую-нибудь сторону, и чтобы компенсировать, надо чуть-чуть подстроить рули. В качестве уникальной функции, которых не найдешь в магазинных самолетах, я решил реализовать функцию пуска ракеты с самолета. Для этого достаточно на секунду открыть мощный транзистор, и пустить большой ток с бортового аккумулятора на воспламенитель. В качестве воспламенителя можно использовать кусочек тонкой нихромовой нити (0.1-0.2 мм квадр) длиной пару сантиметров, и закрученной в пружинку на швейной иголке (в форме пружинки намного лучше нагревается). Когда нажимаю кнопку, раскаляется докрасна и выгорает. Фитиль от китайской пиротехнической ракеты поджигает легко. В качестве ракеты можно использовать как раз китайскую пиротехническую. Тут я, правда, еще не испытывал функциональность, и ничего из опыта сказать не могу. Одно скажу точно: надо быть крайне осторожным, т.к. ракета со стабилизатором полетит только вверх (но стабилизатор - тяжелый и неудобный груз для самолета), а без него полетит по непредсказуемой траектории (эти ракеты делают на коленке в Китае, и никто не гарантирует, что струя газа будет толкать ракету строго прямо) и может привести к самым негативным последствиям. Поэтому не советую с этим связываться. Однако, данную функциональность можно запросто переделать под метание макета бомбы или еще чего, где в качестве нагрузки будет какой-нибудь механизм вроде, например, электромагнита, держащего/отпускающего макет бомбы. Правда, и тут надо быть осторожным, т.к. при отпирании транзистора произойдет короткое замыкание бортового аккумулятора. На мгновение ток будет ограничен за счет сопротивления магнитного поля электромагнита, а затем ток резко вырастет, и закончится все плохо. Либо транзистор сгорит напрочь, либо аккумулятор испортится, а то и чего хуже воспламенится или взорвется (иногда случается с литиево-полимерными). Так что тут надо быть крайне осторожным... СХЕМЫ АППАРАТУРЫ: Приемник: Пульт-передатчик: Про обозначения на схеме: Джойстик J1 управляет элеронами по оси X и рулем высоты по оси Y. Джойстик J2 управляет рулем направления по оси X, а ось Y осталась неиспользованной. Кстати, изначально я пытался экономить на радиопередаче. И слал пакеты только когда величины меняли свое значение на какое-то дельта от прежнего. Но поскольку иногда пакеты теряются, то смена положения джойстика или ручки может не дойти до приемника, особенно на большой дистанции от пульта. Поэтому я решил сделать по-простому, но более надежно. И на микроконтроллере циклично измеряются напряжения на регуляторах и джойстиках и сразу же шлются на приемник, не зависимо от того, поменялись они или нет. Это повышает точность поворота моторов, скорость их реакции, и надежность доставки информации до приемника. Питание схемы от 9V Duracell батарейки типа "Крона". На входе у пульта стоит стабилизатор LM78M05 для питания схемы напряжением в 5 вольт. И также LM1117-3.3 для питания MRF49XA напряжением в 3.3 вольта. Кстати, MRF49XA действительно вполне нормально работает от 5 вольт. В первой версии моего приемника он питался так. И до сих пор работает, сколько я его не гонял последние полгода. По-умолчанию у MRF49XA двухпроводная линия питания. Я же прочитал статью товарища Blaze и еще вот эту , и решил в качестве антенны использовать штырь. В datasheet описан переходник, так называемый Balun (От слов Balanced-Unbalanced), от двухпроводной линии питания антенны к однопроводной. При этом наилучшие характеристики приема-передачи будут, если антенны будут с волновым сопротивлением в 50 Ом. Наиболее подходящее и простое тут, на мой взгляд, это четвертьволновой штырь. Говорят, у него сопротивление где-то около 40 Ом, вроде. Достаточно близко.а несущую частоту выбрал максимально возможную для данного радиотрансивера, т.е. 915 МГц, чтобы по прямой видимости било дальше. Ведь, как известно, чем выше частота, тем дальше ловится сигнал на прямой видимости, но хуже преодолевает препятствия. Указанные на схеме значения для Balun взяты из datasheet. В качестве антенны использовал кусок провода длиной четверть длины волны. Для 915 МГц это около 82 мм. Далее... Главный недостаток MRF49XA, на мой взгляд, это его маленький буфер приема - всего 2 байта. Думаю, авторы чипа считали, что при приеме микроконтроллер должен считывать приходящий пакет по байту-двум за цикл. Но в моем случае ситуация сложнее. ШИМ я реализовал логически простым способом: ставим единицу на одну ШИМ-ножку, ждем нужное время длительности сигнала, и переводим в ноль, а затем следующую ножку аналогично, и так по циклу. Управляющий ШИМ для моторов в классическом понимании представляет из себя цифровой импульс длительностью от 1 до 2 миллисекунд, повторяющийся с периодом в 20 миллисекунд. Период может быть другим. Если взять меньший, то моторы чуть быстрее реагировать будут, если побольше, то медленнее. А вот длительность импульса - та самая управляющая величина. Так вот длительность одного главного цикла меняется в пределах от 5 миллисекунд до 10 миллисекунд (5 ШИМ-ножек, по 1-2 мсек на каждую). Т.е. если пульт будет посылать байты чаще, чем по 2 в 10 мсек, то скорее всего они будут теряться. Таким образом, за один цикл мы можем посылать не более 2-х байт. Сначала я хотел посылать пакеты по 4 байта: байт номера устройства - упрощенный аналог IP адреса, байт номера функциональности (которой выставляем значение), байт самого значения, и байт чексуммы - число битов в первых трех байтах. Но безуспешно повозившись с этой затеей, забил и сделал просто по 2 байта: байт номера функциональности, и байт значения. Касательно телеметрии, в случае моей аппаратуры оказалась какая-то проблема, которую я так и не смог разрешить. Пакеты с приемника на пульт приходят кривые. Причем, я сделал два приемника по ходу разработки. Оба между собой успешно передают пакеты в обе стороны. Но ни один пульту пакет передать не может, хотя функции и библиотеки использую в прошивках одинаковые. Порты на ввод-вывод выставлены правильно. А вместо первого байта приходит всегда какое-то число больше 100, но меньше 250. Не знаю, с чем это связано. Но модуль передатчика (он у меня отсоединяемый) для пульта я менял однажды (старый глючить стал) и проблема осталась. В общем, загадка... Передача по USB так же осуществляется командами по 2 байта аналогично. Значения также меняются от 0 до 100, а номера функциональностей от 0x60 до 0x71. Правда, кодирование нуля тут отсутствует - USB и так передает надежно. Протокол передачи я использовал CDC. Мне понравилась идея общаться с устройством через COM порт на компе. Это удобнее, чем с HID, на мой взгляд. Особенно из-за несложной привязки методов к event-ам прихода на комп пакета. Прогу для компа писал на .NET с Windows Forms. Главный недостаток CDC устройства это найти для него драйвер. Себе на комп я когда-то поставил, но где взял и как делал, не помню. Сейчас найти не могу... Вот фото получившихся устройств. Приемник: Пульт управления: Правда, приемник на фото первой версии - на нем отсутствует LM1117-3.3. Второй версии уже стоит на самолете.:) Программировал микроконтроллеры я через свой Pickit3. Штырь на джойстике сделан для более точного и плавного поворота. САМОЛЕТ: Составная электронная часть самолета: Самолет получился тяжеловат - 533 грамма. Но мотор на максимальных оборотах вполне тянет его вертикально вверх. Окошко перед пропеллером сделано специально для обдува радиатора приемника (где PIC18F4431 греется). ЗАМЕЧАНИЯ ОТ АВТОРА: 2) Настоятельно рекомендую не возиться с теми джойстиками для Arduino, которые я использовал. Они достаточно грубы для управления самолетом. Сложно с ними управлять. Лучше купите самый дешевый пульт радиоаппаратуры, вытащите оттуда начинку, и используйте его замечательные джойстики. Там тот же самый принцип - на переменных резисторах. Но из-за своей конструкции эти джойстики намного точнее и удобнее. К тому же, коробка пульта будет неплохим корпусом для устройства. 3) Управлять самолетом сложно. В наше время часто ставят гироскопические стабилизирующие устройства. Не пробовал такое, но думаю, поможет в стабилизировании самолета в воздухе. Советую попробовать. 4) У магазинных самолетов на пультах управления, как правило, есть специальный разъем для подключения к компу. Через программу-симулятор можно потренироваться на виртуальном самолете прежде, чем запускать реальный. Очень удобно для новичков. Однако, в самодельной аппаратуре я такой разъем не предусмотрел. В этом большой минус своей аппаратуры - тренироваться придется на реальном самолете изначально. Поэтому советую сделать самолет попроще, чем предлагает Сергей Шевырин и поменьше размером. Я сделал самолет с размахом крыла 110 сантиметров, и теперь мучаюсь его чинить после каждого неопытного полета. 5) 28 ножек микроконтроллера PIC18F2550 маловато для толкового пульта. Рекомендую использовать его расширенный аналог PIC18F4550 с 44 ножками. Тогда вместо светодиодов можно будет прикрутить ЖК дисплей, со всеми его возможностями. Отдельно хочу заметить про недостаток PIC18F2550. У них отсутствуют ANSEL-регистры. А конфигурация аналоговый/цифровой для портов выставляется специфическим способом, который сильно ограничивает возможности по разметке на плате. Из-за этого, как видно выше на фото, пульт превращается в "воронье гнездо" с неудобным переплетением проводов. 6) Регуляторы лучше делать из линейных переменных резисторов. Не советую брать китайские, у которых есть встроенный замедлитель поворота ручки. Быстро изменить положение во время полета не получится. А бывает нужно иногда... 7) Из задач на будущее: Надеюсь, моя статья оказалась кому-нибудь полезной. В приложении добавляю коды прошивок приемника и пульта, код программы компьютера для взаимодействия к пультом посредством USB, а так же разметку платы приемника. Плата пульта получилась не очень удачной, поэтому разметку выкладывать не буду.
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |