Ответ на часто задаваемый мне вопрос "почему глючит ppm".
Начну несколько издалека, но надеюсь тем, кто только взял в руки пульт радиоуправления будет познавательно.
Для большинства не будет откровением, что обычная аналоговая сервомашинка управляется сигналом PWM. PWM (Pulse-width modulation) в переводе на русский означает Широтно-Импульсную Модуляцию или сокращенно ШИМ. Это значит, что передаваемая информация кодируется шириной импульса. В примере с сервомашинкой под информацией подразумевается угол поворота. За многие годы фактическим стандартом сигнала управления выше означенных аналоговых устройств стал ШИМ с частотой 50Гц и шириной импульса от 1000 до 2000 микросекунд. Для некоторой среднестатистической сервы это будет означать следующее:
Угол поворота сервы равен -60 градусов
Угол поворота сервы равен 0 градусов (центральное положение)
Угол поворота сервы равен 60 градусов.
Именно такой сигнал выдает приемник радиоуправления на каждом из своих каналов.
Надо так же сказать, что длина импульса у разных производителей и при разных настройках аппаратуры может варьироваться в некоторых пределах. За счет этого несколько расширяется и диапазон управляющих сигналов. Так большинство полетных контроллеров считает корректным длину импульса от 800 до 2200мкс.
Так же достаточно широкое распространение в бортовой и наземной электронике имеет передача PPM сигналов. PPM или Pulse-position modulation по сути является простейшим алгоритмом упаковки управляющих сигналов с нескольких каналов в один. Идея стара как мир и проста до безобразия: импульсы из нескольких каналов собираются в пачку (пакет или фрейм), следуя в нем друг за другом.
Внутри пачки каналы между собой разделяются паузами в 100-400мкс. Для того чтобы можно было определить начало пакета используется так называемый синхроимпульс. Его длина должна быть много больше максимальной длины канального импульса. Обычно это значение >2500мкс. Поскольку пакеты передаются циклически, за синхропаузой следует импульс первого канала. Далее второго, третьего… и так всех передаваемых каналов. Вообще, на эту тему на RCdesign есть хорошая статья ppm или pcm. С Вашего позволения, я не буду ее перепечатывать, а затрону несколько иную тему.
PPM можно найти, например, в слоте подключения внешнего модуля аппаратуры Turnigy 9X(R). Или на выходе приемника FrSky D8XP.
Последний «из коробки» имеет длину пачки 18мс. Правда, ее можно увеличить путем перепрошивки приемника до 27мс. Я подключил его к своему тестеру и выяснил следующее:
1. Длина пакета действительно 18мс
2. Длина паузы между каналами составляет около 350мкс
3. Количество каналов в пачке 8.
В этом то и кроется потенциальная проблема. И именно для ее решения FrSky выпустил прошивку с длиной пачки в 27мс. А проблема заключается в следующем…
Предположим, по каждому каналу передается крайнее минимальное состояние. Длина канального импульса составляет 1000мкс.
1000 умножим на 8 каналов, получим 8000мкс. В итоге получаем 18000 – 8000 = 10000мкс длину синхропаузы. Это значение больше 2500 и тут все правильно.
Теперь рассмотрим ситуацию, когда по каждому каналу передается крайнее максимальное положение. Длина канального импульса при этом составляет 2000мкс. Считаем…
2000 * 8 = 16000мкс. И синхропауза 18000 – 16000 = 2000мкс Упс…. Длина импульса синхропаузы меньше 2500 мкс и равна длине импульса канала. Как не трудно догадаться, пачки при этом сольются в единый конгломерат и ни один полетный контроллер не в состоянии будет найти импульс, соответствующий первому каналу. Раз невозможно найти первый канал, невозможно найти и все остальные. Итог – потеря управления и «морковка».
Именно эту проблему и решает перепрошивка. Если длину пачки увеличить до 27мс, то туда с лихвой укладываются все 8 каналов. Посчитаем самый пессимистичный вариант (по каждому каналу передается импульс длиной 2200мкс):
27000 - 2200*8 = 9400мкс.
Длина синхропаузы существенно превышает 2500мкс. Как следствие – стабильная работа.
Теперь пара слов о Turnigy 9XR. Один мой знакомый купил на ХК новый комплект FrSky XJT. К слову, у меня он тоже лежит, но на полномасштабное изучение все никак времени не хватает. А вч-модуль рассчитан на передачу 16 каналов. И вот приходит ко мне мой знакомый с вопросом: модуль работает нестабильно. Смотрим на настройки турниги: куча каких-то миксов, но они нас не интересуют. А вот в настройке сигнала для вч-модуля видим такую картину:
Тип сигнала – PPM
Кол-во каналов – 16
Длина фрейма(пачки) – 32.5мс
Длина паузы между каналами – 200мкс
После несложных расчетов получаем, что на информативную составляющую всех 16 каналов в максимуме необходимо 32000 микросекунд. Как видно, получившееся число меньше длины фрейма всего на 500мкс. Для корректной синхропаузы этого не достаточно. Таким образом ни о какой стабильной работе говорить не приходится. Тоже самое кстати касается и модуля OrangeRx DSM2/DSMX. Там проблема абсолютно такая же.
Посчитаем максимальное число каналов, которое можно передать с использованием PPM с заданными характеристиками (фрейм 32.5мс, пауза 200мкс).
2000мкс(макс. Длина канального импульса) + 200мкс(пауза между каналами) = 2200мкс на канал.
32500мкс – 2500мкс(мин длина синхропаузы) – 200мкс(пауза перед первым каналом) = 29800мкс
29800 / 2200 = 13 каналов. (В настройках турниги доступно либо 12, либо 14 каналов.)
При передаче большего числа каналов о стабильности говорить не приходится.
Вч-модуль DSM2/DSMX от оранжа я протестировал. 12 каналов он передает вполне уверенно и стабильно. Что же до модуля FrSky XJT… как использовать его «на всю катушку»?
В отличие от оранжевого вч-модуля, XJT помимо PPM может принимать на вход сигнал PXX (это вариант более сложного pcm-кодирования). Не буду углубляться в его устройство, скажу лишь, что 16 каналов он транслировать позволяет. В этом и есть выход – прошивка ER9X для турниги так же поддерживает связь с вч-модулем при помощи PXX кодирования.
Выводы: Производители, как правило, указывая поддержку устройством PPM, не указывают число каналов. Вместо этого они пишут длину фрейма. И все выше написанное наглядно показывает на сколько это важная характеристика. Используя PPM, не считайте его «резиновым», не полагайтесь безоглядно на то, что в него влезут ВСЕ каналы, что Вы хотите передать на модель. Немного устного счета поможет сохранить модель и спасет от незапланированных денежных трат.
S.Bus
Некоторое время назад
FUTABA представила на рынок новую революционную технологию
S.Bus. По аналогии с автомобильной шиной CAN, S.Bus позволяет избавиться от прокладки большого количества проводов: от приемника к каждому сервоприводу. Под эту технологию были выпущены специальные приемники, приводы, гироскопы и прочее оборудование. И стоят они конечно денег не малых…
Что же такое S.Bus и какова ее эффективность? На просторах интернета на эту тему до сих пор ведутся нешуточные споры. Все в основном сводится к двум точкам зрения:
1. Решение крайне полезное для больших и дорогих моделей.
2. Неоправданное удорожание оборудования. Возможность использования только фирменного оборудования Futaba.
И еще не известно, чем бы все кончилось, но как всегда подсуетились китайцы. На рынке появились дешевые приемники с выходом S.Bus и специальные декодеры, позволяющие подключать к шине обычные сервоприводы. А совсем недавно появился совсем уж невозможный в мире гигантов рынка продукт. Orange выпустила линейку приемников, работающих в стандарте DSM2(Horizon Hobbies USA) и имеющих в числе прочего выход S.Bus.
Давайте все же посмотрим повнимательнее на это изобретение и определимся, чем же оно может быть полезно рядовому моделисту. S.Bus – это не что иное как протокол передачи команд сервоприводам по цифровому последовательному порту.
Протокол этот является закрытым и Futaba его описание ни где не публиковала. Однако некоторое время назад я смог найти его описание на одном из зарубежных сайтов. Вот что мне удалось установить:
1. Протокол позволяет передавать информацию о 16-и пропорциональных каналах с разрешением 11бит на каждый и двух цифровых каналах (1 бит на канал).
2. Протокол передает информацию об ошибке пакета (Frame lost) и активации режима failsafe.
3. Скорость последовательного порта нестандартная – 100000 бод.
4. Длинна одного пакета 25 байт
5. Передача пакета происходит каждые 14мс для аналогового режима или каждые 7мс для цифрового.
Пакет данных устроен следующим образом:
[startbyte] [data1] [data2] .... [data16] [flags][endbyte] [startbyte] = 0xF0
[dataX] = 11 бит информации канала X, которые задают ширину импульса ШИМ в микросекундах.
[flags] = 8 бит, каждый из которых имеет следующее назначение:
7 – цифровой канал 2
6 – цифровой канал 1
5 – Frame lost
4 – включен режим failsafe
3 – не используется
2 – не используется
1 – не используется
0 – не используется
[endbyte] = 0x00
Надо так же иметь ввиду, что сигналы шины, как во всех продуктах Futaba, инвертированы.
Область применения.
Если Вы обладаете моделью самолета с размахом крыла 1.5м и управляющейся по 5-ти каналам без использования каких-либо систем стабилизации сложнее RX3S OrangeRX, то Вы скажете «а зачем козе баян» и будете правы. В таких случаях нет смысла усложнять оборудование. Никаких выигрышей оно явно не несет. У Вас большая модель? Тут каждый решает сам. Ведь обходились же как-то без этого раньше. А оправданы ли дополнительные вложения или нет – каждый решит сам.
На мой взгляд, самые интересные перспективы открываются для людей, которые занимаются строительством моделей с программируемым микроконтроллером на борту.
В общем случае возможны 2 варианта подключения к приемнику:
1. Использование обычного приемника с подключением микроконтроллера к каждому каналу. Данный вариант самый расточительный с точки зрения использования ресурсов микроконтроллера. Во-первых, надо задействовать столько выводов микроконтроллера, сколько каналов приемника мы хотим использовать. Для определения ширины импульсов надо задействовать таймер. При измерении ширины импульса же неизбежно возникает погрешность.
2. Использование приемника с выходом PPM. Отличие этого варианта от первого в том, что все каналы передаются последовательно друг за другом по одному проводу. Это позволяет экономить выводы и прерывания микроконтроллера. Остальные же проблемы сохраняются – надо использовать таймер и рассчитывать ширину импульса для каждого канала.
Что может дать нам использование S.Bus?
1. Использование обычного хардварного последовательного порта позволяет отказаться от прерываний. Теперь микроконтроллер будет принимать данные без использования ресурсов ядра.
2. Несколько несложных побитовых операций над 25-ю байтами позволяют получить точные данные сразу о 16-ти каналах. Если быть сосем точным, то о 16-ти пропорциональных, двух цифровых и о активации приемником режима failsafe. При этом нам не нужен таймер для вычисления времени. В пакете передаются уже готовые числа. Это же позволяет избежать погрешности: мы получим ровно те числа, которые передал приемник.
Теперь о минусах:
1. Нам нужен приемник с поддержкой S.Bus. В стандарте FASST(Futaba) можно использовать например FrSky TFR4, для аппаратуры - DSM2 можно использовать приемник OrangeRx R710.
2. Между приемником и микроконтроллером придется поставить инвертор. Для этих целей подойдет микросхема 74HC14. Она содержит сразу 6 необходимых нам элементов. 50 рублей, маленькая макетка и пять минут пайки.
Это что касается приема сигнала. А как обстоит дело с управлением сервоприводами? Опять рассмотрим типовую ситуацию:
ATmega 328 имеет всего 6 выводов, на которых можно генерировать ШИМ аппаратным путем. Стоит так же сказать, что при этом накладывается ряд ограничений на использование таймеров и прерываний. Можно генерировать ШИМ и программным путем, но для этого нам потребуются таймер и вычислительные ресурсы ядра. Ну и конечно же нам понадобится по одному выводу микроконтроллера на каждый канал управления (серву, ESC и пр.). На мой взгляд, это просто расточительство.
Чем же тут может быть полезен S.Bus? Ответ очевиден: вместо всего описанного выше нам понадобится все тот же аппаратный последовательный порт, все тот же инвертор и… несколько строчек кода для формирования байтового массива. Но родные сервоприводы Futaba использовать достаточно дорого. И в этом случае нам снова помогут предприимчивые китайцы. SBD4 S.BUS декодер за 500р. позволит нам подключить четыре обычные сервы или ESC к шине S.Bus. Есть также комплект с картой программирования. Увы, чтоб использовать все 16 каналов нам понадобится либо еще 3 последовательных порта микроконтроллера, либо хаб Futaba S.Bus Terminal Box 4-Way. Последнее предпочтительнее ввиду того, что на взятом для примера микроконтроллере всего один последовательный порт, а ATmega 2560 с четырьмя портами уже дороже и гораздо сложнее в распайке. Она уже не выпускается в удобном для сборки «на коленках» DIP корпусе. Хотя тут уже все зависит от конкретного места применения и используемых аппаратных средств.
Итого: В случае использования с микроконтроллерами S.Bus позволяет полностью избавиться от работы с ШИМ, переложив это на аппаратную часть. Как следствие – упрощение кода, уменьшение загрузки микроконтроллера и увеличение быстродействия.