Делаем радиоуправление для самолета / Хабр
Прочитав этот пост загорелся и я идеей склепать свой самолетик. Взял готовые чертежи, заказал у китайцев моторчики, аккумуляторы и пропеллеры. А вот радиоуправление решил сделать самостоятельно, во-первых — так интереснее, во-вторых — надо себя чем-то занять пока посылка с остальными запчастями будет ехать, ну и в третьих — появилась возможность соригинальничать и добавить всяких плюшек.
Осторожно, картинки!
Как и чем управлять
Нормальные люди берут приемник, втыкают в него сервомашинки, регулятор скорости, двигают рычажки на пульте и радуются жизни не задаваясь принципами работы и не углубляясь в подробности. В нашем случае такое не пройдет. Первой задачей стало узнать каким макаром управляются сервомашинки. Все оказывается достаточно просто, у привода есть три провода: + питания, — питания и сигнальный. На сигнальном проводе прямоугольные импульсы изменяемой скважности.
Итак, если мы хотим установить привод в крайнее левое положение нужно слать импульсы длительностью 0,9мс с интервалом 20мс, если в крайнее правое — длительность 2,1мс, интервал тот же, ну со средними положениями аналогично. Как оказалось, регуляторы скорости управляются аналогично. Те, кто в теме скажут что это обычный ШИМ, который реализовать на любом микроконтроллере — плевое дело. Вот и я так решил, купил в местном магазине сервомашинку и склепал на макетке для нее так называемый сервотестер на ATtiny13. И тут оказалось, что ШИМ не совсем простой, а с подводными камнями. Как видно из вышеприведенной диаграммы, скважность (отношение длительности импульса к длительности периода) от 5% до 10% (в дальнейшем я за крайние положения принимаю импульсы длительностью 1,0мс и 2,0мс) для 256-значного ШИМ счетчика ATtiny13 это соответствует значениям от 25 до 50. Но это при условии, что на заполнение счетчика уйдет 20мс, а на деле так не получится и для частоты 9,6МГц и предделителя 1024 нужно ограничить счетчик значением 187(ТОР), в таком случае у нас получится частота 50,134Гц. В большинстве (если не во всех) сервомашинок нету точного генератора опорной частоты и поэтому частота управляющего сигнала может немного плавать. Если оставить ТОР счетчика 255, то частота управляющего сигнала будет 36,76Гц — на некоторых приводах оно будет работать (возможно с глюками), но далеко не на всех. Итак, теперь у нас 187-значный счетчик, для него 5-10% соответствуют значениям от 10 до 20 — всего 10 значений, немного дискретно получится. Если думаете поиграть с тактовой частотой и предделителем ниже привожу сравнительную табличку для 8-битного ШИМа:
Но ведь у большинства микроконтроллеров есть 16-битный (и больше) таймер для генерации ШИМ. Здесь проблема с дискретностью сразу пропадет еще и частоту можно точно выставить. Долго расписывать не буду, сразу даю табличку:
Я не думаю, что для китайской сервомашинки есть существенная разница в 600 и 1200 значений, поэтому вопрос с точностью позиционирования можно считать закрытым.
Многоканальное управление
С одной сервомашинкой разобрались, но для самолета их нужно минимум три и еще регулятор скорости. Решение «в лоб» — взять микроконтроллер с четырьмя каналами 16-битного ШИМ, но такой контроллер будет стоять дорого и, скорее всего, займет много места на плате. Второй вариант — запилить программный ШИМ, но занимать процессорное время — это тоже не вариант. Если снова посмотреть на диаграммы сигнала, то 80% времени он не несет никакой информации, поэтому рациональнее было бы ШИМом задавать только сам импульс 1-2мс. Почему скважность изменяется в таких узких пределах, ведь проще было бы и формировать и считывать импульсы со скважностью хотя бы 10-90%? Зачем нужен тот неинформативный кусок сигнала занимающий 80% времени? Я заподозрил, что, возможно, эти 80% могут занимать импульсы для других исполнительных механизмов, а потом этот сигнал разделяется на несколько разных. То есть, в периоде длительностью 20мс могут уместится 10 импульсов длительностью 1-2мс, затем этот сигнал каким-то демультиплексором разделяется на 10 различных с длительностью периода как раз 20мс. Сказано — сделано, нарисовал в PROTEUS такую схемку:
В роли демультиплексора — 74HC238, на его вход E подаются импульсы с выхода микроконтроллера. Эти импульсы — ШИМ с периодом 2мс (500Гц) и скважностью 50-100%. У каждого импульса своя скважность, обозначающая состояние каждого канала. Вот так выглядит сигнал на входе Е:
Для того, чтобы 74HC238 знал на какой выход подать текущий сигнал используем PORTC микроконтроллера и входы A, B, C демультиплексора. В результате на выходах получаем такие сигналы:
Сигналы на выходе получаются правильной частоты (50Гц) и скважности (5-10%). Итак, нужно генерировать ШИМ частотой 500Гц и заполнением 50-100%, вот табличка для настройки предделителя и ТОР 16-битного счетчика:
Интересно, что возможное количество значений ШИМа ровно в 1000 раз меньше частоты таймера.
Программная реализация
Для ATmega8 с тактовой частотой 16МГц в AtmelStudio6 все реализуется следующим образом: вначале задефайним значения счетчика для крайних положений сервомашинок:
#define LOW 16000U #define HIGH 32000U
затем инициализируем генератор ШИМа на таймере/счетчике1:
OCR1A = HIGH; //Устанавливаем ТОР TCCR1A = 0<<COM1A1 | 0<<COM1A0 | 1<<COM1B1 | 0<<COM1B0 | 0<<FOC1A | 0<<FOC1B | 1<<WGM11 | 1<<WGM10; //Запускаем неинвертированный Fast PWM на выходе OC1B с верхним значением счетчика, которое записанно в OCR1A TCCR1B = 0<<ICNC1 | 0<<ICES1 | 1<<WGM13 | 1<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10; //предделитель 1 TIMSK = 1<<OCIE1A | 1<<OCIE1B | 0<<TOIE1; //Разрешаем прерывания по совпадению
Остается реализовать прерывания:
ISR(TIMER1_COMPA_vect) //прерывание по достижению верхнего значения счетчика, непосредственно перед началом следующего импульса { //c_num- переменная, обозначающая номер текущего канала, channels - массив значений каналов if (c_num <= 7) { OCR1B = channels[c_num]; } else { OCR1B = 0; //отключаем ШИМогенератор для несуществующих в демультиплексоре 8 и 9 канала } } ISR(TIMER1_COMPB_vect, ISR_NOBLOCK)// прерывание возникающее в конце импульса { if (c_num <= 7) { PORTC = c_num; //для каналов 0-7 выводим номер канала на PORTC } //и изменяем значение счетчика от 0 до 9 if (c_num >= 9) { c_num = 0; } else { c_num++; } }
Глобально разрешаем прерывания и готово, забивая в channels значения от LOW до HIGH изменяем значения на каналах.
Реализация в железе
Ну с теорией разобрались, пришло время все это реализовать. Мозгом системы выбран микроконтроллер ATmega8A, тактируется от кварца на 16МГц (не потому, что я захотел 16000 позиций сервомашинки, а потому, что у меня такие валялись). Управляющий сигнал для МК будет поступать через UART. В результате получилась вот такая схемка:
Спустя некоторое время появилась вот такая платка:
Два трехштыревых разъема я не припаял потому, что они мне не нужны, а не подряд они впаяны поскольку у меня нету металлизации отверстий, а в нижнем разъеме дорожки с двух сторон, можно было бы заменить проволочкой, но программно нету проблемы выводить сигнал на любой разъем. Также отсутствует 78L05 ибо в моем регуляторе двигателя есть встроенный стабилизатор (ВЕС).
Изначально думал втыкать его прямо в плату, но эта конструкция не помещалась в самолетик, пришлось сделать через шлейф. Если изменить прошивку, то контакты разъема для программирования можно использовать для включения/отключения каких-нибудь системам (бортовые огни и т.п.)
Плата обошлась примерно в 20грн = $2.50, приемник — 30грн = $3,75.
Передающая часть
Самолетная часть есть, осталось разобраться с наземной аппаратурой. Как уже писалось ранее, данные передаются по UART, на каждый канал по одному байту. Вначале подключал свою систему проводом через переходник к компьютеру и команды слал через терминал. Чтобы дешифратор определял начало посылки, а в будущем выделял посылки адресуемые именно ему, вначале шлется байт-идентификатор, затем 8 байт определяющих состояние каналов. Позже стал использовать радиомодули, при отключении передатчика все моторчики начинали дико дергаться. Дабы отфильтровать сигнал от шумов, десятым байтом шлю XOR всех 9 предыдущих байт. Помогло, но слабо, добавил еще проверку на таймаут между байтами, если он превышается — вся посылка игнорится и прием начинается заново, с ожидания байта-идентификатора.
Число в нижнем левом углу — контрольная сумма. Передвигая ползунки на компе двигались рули на самолете! Вообщем отладил я все это и стал думать о пульте ДУ, купил для него вот такие джойстики:
Но потом меня посетила одна мысль. В свое время я тащился от всяких авиасимуляторов: «Ил-2 Штурмовик», «Lock On», «MSFSX», «Ка-50 Черная Акула» и др. Соответственно был у меня джойстик Genius F-23 и решил я прикрутить его к вышеописанной проге с ползунками. Погуглил как это реализовать, нашел этот пост и получилось! Управлять самолетиком с помощью полноценного джойстика, мне кажется, гораздо круче, чем маленькой палочкой на пульте. Вообщем все вместе изображено на первой фотке — это нетбук, джойстик, преобразователь на FT232, и подключенный к нему передатчик HM-T868. Преобразователь подключается 2м кабелем от принтера, что позволяет закрепить его на каком нибудь дереве или чем-то подобном.
Пуск!
Итак, есть самолетик, есть радиоуправление — Поехали!(с) Первый полет производился над асфальтом, результат — сломанный пополам фюзеляж и полувырванный двигатель. Второй полет производился над более мягкой поверхностью:
Последующие полетов 10 были тоже не особо удачными. Основной причиной я считаю сильную дискретность джойстика — по крену он выдавал только 16 значений (вместо возможных 256), с осью тангажа — не лучше. Но так как в результате испытаний самолет был значительно поврежден и не подлежит ремонту:
— проверить правдивость этой версии пока не представляется возможным. В пользу этой версии говорит и зафиксированная на видео попытка выровнять самолет — он летит накрененным, а потом резко заваливается в противоположную сторону (а должен плавно). Вот более наглядное видео:
Дальность действия аппаратуры — примерно 80м, дальше тоже ловит, но через раз.
Ну вот и все, благодарю за внимание. Надеюсь, приведенная информация окажется для кого-то полезной. Буду рад ответить на все вопросы.
В архиве схема и разводка платы для Протеуса.
схемы и конструкции своими руками
Главная » Квадрокоптеры
Квадрокоптеры
Автор Станислав На чтение 14 мин. Просмотров 75 Опубликовано
Радиоуправление своими руками
Вот, представим, например, что я разработчик телевизора на китайском заводе. Я должен выпустить 40 тысяч бюджетных телевизоров и мне прислали для них детали, такие, какие остались на складе. Процессоры и платы везде одинаковые, но осталось следующие виды обвязки: три матрицы, три тюнера, три контроллера пульта. Например, 10 тысяч матриц одного вида, 20 тысяч второго, и 10 тыс. третьего. Документация на матрицы разная – одной нужно послать команду 0xEF для отображения красного цвета, а другой – такую же для зелёного. Мы пересылаем нашему единственному узкоглазому программисту служебку – а создайте мне, мол, три вида разных прошивок, чтобы работало на всех матрицах. Программист берёт библиотеки и подготавливает проекты. Теперь настала очередь тюнеров: так как они тоже от трёх производителей, то и для них микропрограмма разная. Уже у нас есть 9 видов прошивок. Теперь ещё и пульты надо приделать. Итого для серии в 40 тысяч телевизоров есть 27 разных прошивок. Программист по-быстрому прошивает все платы, соответственно установленному на них железу, после чего эти прошивки выбрасывают. Больше они не нужны – следующее железо будет уже другим, и программист будет писать всё заново.
Разобрать готовый код нельзя. Если перепутать прошивку, телевизоры будут показывать зелёное там, где должен быть красный, и смотреть их будет нельзя. Нельзя также самому сделать “гибридную прошивку”, т.к. это нужно дизассемблировать программу, а ассемблер также уникальный под каждый процессор. Документацию и всё сопутствующее присылает производитель – в открытом доступе вы этого также не найдёте.
Вот, например, документация на такой контроллер. В ней 5 страниц. Вы думаете, в них описан весь принцип работы? Нет. Это – коммерческая листовка, показывающая лишь ВОЗМОЖНОСТИ прибора для того, чтобы завлечь потенциальных покупателей. Как только вы сделаете заказ, вам пришлют толстую книжку в 100-200 страниц, по который вы должны будете разобраться, как, собственно, на этом сделать прибор. Это – закрытая архитектура, а потому, в свободном доступе этой книжечки никогда не было.
Непрофессионализм заключается в:
А. Неопытности мастера. Мастер выучил блестяще всю теорию, но своими руками провёл ещё слишком мало операций. Он не знает нюансов: например, при разогреве платы, паяльная маска и клей под дорожками сильно размягчается. Достаточно одного неаккуратного движения пинцетом или ножом, чтобы вырвать кусок текстолита и перерезать тончайшие дорожки, на восстановление которых до исходного вида потом уйдут сутки работы.
Мастер захотел переклеить разбитый дисплей, но не учёл, что подложка под ним металлическая, а скотч, который закрывал конденсаторы по питанию дисплея, съехал или не был наклеен. Клей застыл, всё красиво и аккуратно, мастер включает телефон и ничего – экран тёмный, контроллер питания раскалился или вообще сгорел. Работа сделана, но выгоды не будет – лишь убыток.. Теперь, ему надо покупать новый дисплей, отковыривать свой же свежий клей (а он не так уж и просто отойдёт, пока новый), проклеивать скотч и менять КП, если он всё-таки сгорел от замыкания. Проблема устраняется опытом и тренировкой в свободное время на донорских платах и сгоревших/устаревших телефонах, которые не жалко загубить. В самом худшем случае тренировка идёт на клиентских устройствах, поэтому мастерская первые пол-года точно будет в большой беде, и позже пойдёт на исправление только, если мастер на самом деле толковый, но просто неопытный.
Б. Пофигизме мастера и неаккуратной работе. Мастер знает некоторые нюансы, но то-ли из ненависти к окружающему миру, то-ли из за низкого IQ работает так халатно, что лишь добавляет дополнительные неисправности в прибор. Например, отклеивая аккумулятор телефона, порвёт шлейф на матрицу. Пытается паять феном Micro-USB разъем, не извлекая платы, тем самым, поплавив корпус телефона. Разбирает ноутбук для замены термопасты и ломает петли. Примеров много. Таких, как правило, лечить бесполезно.
Вот это – единственный момент, который зависит от клиента. Выбирать нужно правильных мастеров и тогда, скорее всего, получите гарантированный результат. Но всё равно, учитывая вышеперечисленные непоправимые проблемы вы можете получить своё устройство обратно в исходном виде (при хорошем раскладе). Вы можете принести два одинаковых телевизора, и один вам починят, а второй нет. Т.к. у первого замкнуло маленький конденсатор, который достаточно просто за 10-15 минут работы отпаять, чтобы устройство завелось, а у второго пропало уникальное ПО под его матрицу, тюнер и пульт, восстановить которое при жизни уже невозможно.
Спасибо всем, кто дочитал, теперь, надеюсь, тем, кто понесёт свои вещи в сервис будет более понятно, какие могут быть основные проблемы и причины отказа в ремонте.
Написал Kekovsky спецом для Pikabu и Сообщества Ремонтёров.
Радиоуправление: схемы и конструкции своими руками
Схемы и конструкции радиоуправления, которые несложно собрать своими руками. Литература по системам радиоуправления
– аналоговые схемы радиоуправления;
– разработки на микросхемах;
– схемы радиоуправления на микроконтроллерах;
– готовые модули приемник – передатчик;
– самодельные модули приемник – передатчик;
– применяемые антенны;
– вопросы настройки самодельных модулей
– и многое другое, что связано с радиоуправлением.
1. Четырехкомандная система радиоуправления
2. Передатчик радиоуправления на микросхеме
3. Передатчик и приемник системы радиоуправления
4. Модуль передатчика радиоуправления на цифровой микросхеме
Подборка статей Владимира Днищенко для конструкторов аппаратуры радиоуправления:
Основные принципы пропорционального радиоуправления моделями (1.1 MiB, 9,587 hits)
Формирователи команд для аппаратуры пропорционального управления (805. 3 KiB, 4,971 hits)
Рулевые машинки для аппаратуры пропорционального управления (1.1 MiB, 6,462 hits)
Радиоканал для аппаратуры пропорционального радиоуправления (1.5 MiB, 4,384 hits)
Радиоканал на транзисторах для аппаратуры пропорционального радиоуправления (1.2 MiB, 4,531 hits)
Аппаратура пропорционального радиоуправления (8.9 MiB, 5,574 hits)
ПРиемник прямого преобразования на интегральной микросхеме (693.2 KiB, 4,025 hits)
Простой супергетеродин для аппаратуры радиоуправления (764.0 KiB, 4,101 hits)
Радиоканал с частотной модуляцией для аппаратуры радиоуправления (752.1 KiB, 4,698 hits)
Книга Владимира Днищенко для конструкторов аппаратуры радиоуправления:
Дистанционное управление моделями (3.2 MiB, 7,182 hits)
аппаратура модули передатчик приемник Радиоуправление самодельное своими руками сделать схема
Пульт дистанционного управления | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Радиоуправление в Power Apps — Power Apps
- Статья
- 2 минуты на чтение
Элемент управления вводом, показывающий несколько вариантов, из которых пользователи могут выбрать только один за раз.
Описание
Элемент управления Radio , стандартный элемент управления вводом HTML, лучше всего использовать только с несколькими взаимоисключающими параметрами.
Элемент управления может иметь горизонтальное или вертикальное расположение.
Ключевые свойства
По умолчанию — значение элемента управления до его изменения пользователем.
Элементы — источник данных, который отображается в элементе управления, таком как коллекция, список или диаграмма.
Макет – Расположение опций вертикально или горизонтально.
Значение – Значение элемента управления вводом.
Selected — запись данных, представляющая выбранный элемент.
Все свойства
Выравнивание — Расположение текста относительно горизонтального центра его элемента управления.
BorderColor — цвет границы элемента управления.
BorderStyle — является ли граница элемента управления сплошной , пунктирной , пунктирной или Нет .
BorderThickness — Толщина границы элемента управления.
Color — цвет текста в элементе управления.
DisplayMode — разрешает ли элемент управления ввод данных пользователем ( Edit ), только отображает данные ( View ) или отключен ( Disabled ).
DisabledBorderColor — цвет границы элемента управления, если для свойства DisplayMode элемента управления установлено значение Disabled .
DisabledColor — цвет текста в элементе управления, если для его свойства DisplayMode установлено значение Disabled .
DisabledFill — цвет фона элемента управления, если для его свойства DisplayMode установлено значение Disabled .
Заливка — Цвет фона элемента управления.
FocusedBorderColor — цвет границы элемента управления, когда элемент управления находится в фокусе.
FocusedBorderThickness — Толщина границы элемента управления, когда элемент управления находится в фокусе.
Шрифт — название семейства шрифтов, в котором отображается текст.
FontWeight — Вес текста в элементе управления: Bold , Semibold , Normal или Lighter .
Высота — Расстояние между верхним и нижним краями элемента управления.
HoverColor — цвет текста в элементе управления, когда пользователь удерживает на нем указатель мыши.
HoverFill — цвет фона элемента управления, когда пользователь удерживает на нем указатель мыши.
Курсив — выделение текста в элементе управления курсивом.
LineHeight — расстояние между, например, строками текста или элементами в списке.
OnChange — действия, выполняемые, когда пользователь изменяет значение элемента управления (например, настраивая ползунок).
OnSelect — действия, выполняемые, когда пользователь касается или щелкает элемент управления.
PaddingBottom — расстояние между текстом в элементе управления и нижним краем этого элемента управления.
PaddingLeft — Расстояние между текстом в элементе управления и левым краем этого элемента управления.
PaddingRight — расстояние между текстом в элементе управления и правым краем этого элемента управления.
PaddingTop — расстояние между текстом в элементе управления и верхним краем этого элемента управления.
PressedColor — цвет текста в элементе управления, когда пользователь касается или щелкает этот элемент управления.
PressedFill — цвет фона элемента управления, когда пользователь касается или щелкает этот элемент управления.
RadioBackgroundFill — Цвет фона кругов в переключателе.
RadioBorderColor — цвет круга для каждой опции в переключателе.
RadioSelectionFill — цвет, отображаемый внутри круга выбранного параметра в переключателе.
Радиоразмер – Диаметр кругов в радиокнопочном управлении.
Сброс — возвращает ли элемент управления значение по умолчанию.
SelectedText (устарело) — строковое значение, представляющее выбранный элемент.
Размер — размер шрифта текста, отображаемого на элементе управления.
Strikethrough — показывает ли линия текст, отображаемый на элементе управления.
TabIndex — Порядок навигации с помощью клавиатуры по отношению к другим элементам управления.
Подсказка — пояснительный текст, который появляется, когда пользователь наводит курсор на элемент управления.
Подчеркивание — отображается ли строка под текстом, отображаемым на элементе управления.
Видимый — отображается ли элемент управления или скрыт.
Ширина — Расстояние между левым и правым краями элемента управления.
X — расстояние между левым краем элемента управления и левым краем его родительского контейнера (экран, если нет родительского контейнера).
Y — Расстояние между верхним краем элемента управления и верхним краем родительского контейнера (экран, если нет родительского контейнера).
Отличный ( DataSource , 4 ColumnName )
Пример
Добавить Radio .
[«Стандарт», «Премиум»]
Не знаете, как добавить, назвать и настроить элемент управления?
Добавьте элемент управления Label , переместите его ниже элемента управления Radio и задайте для свойства Text элемента управления Label следующую формулу:
If(«Премиум» в Pricing. Selected.Value, «200 долларов в день», «150 долларов в день»)
Хотите получить дополнительную информацию о функции If или других функциях?
Удерживая нажатой клавишу Alt, выберите любой вариант в элементе управления Radio .
Элемент управления Label показывает соответствующий текст по вашему выбору.
(необязательно) Удерживая нажатой клавишу Alt, выберите другой вариант, чтобы убедиться, что отображается соответствующий текст.
Рекомендации по доступности
Цветовой контраст
В дополнение к стандартным требованиям к цветовому контрасту обеспечьте адекватный цветовой контраст между:
- RadioSelectionFill и RadioBackgroundFill
- RadioBackgroundFill и Fill
Поддержка чтения с экрана
- Убедитесь, что для каждого параметра установлено значение .