События‎ > ‎

Мнимая нехватка мощности и первый взлет квадрокоптера

Отправлено 7 янв. 2013 г., 10:38 пользователем Олег Евсегнеев   [ обновлено 7 янв. 2013 г., 10:47 ]
Несмотря на уральские морозы за окном и отвратительную работу "Почты России", разработка первой модели квадрокоптера неуклонно двигается к завершению. На этот раз я расскажу об очередной проблеме, которая долгое время не давала роботу сделать свой первый полет. Далее повествование будет вестись в виде дневника.

Итак, день первый. После сборки рамы, установки всех компонентов, программирования и настройки ПИД контроллера, настал этап первого запуска квадрокоптера. Последовательность действий при запуске следующая:
1. Подключение LiPo батареи.
2. Включение питания контроллера квадрокоптера (на этом этапе происходит инциализация ESC).
3. Включение питания пульта.
4. Дистанционный запуск управляющего цикла.
5. Плавное увеличение тяги двигателей.

Приближая значение тяги к 30% машина начинает заметно вибрировать. Продолжаем повышать тягу. 50% - появляется небольшое вращение и вертикальное подергивание. И наконец 60% - ... остановка двигателей :(( При повторных попытках - то же самое. Двигатели просто вырубаются и ESC начинает издавать сигналы, аналогичные тем, которые звучат до момента их инициализации. Беда-беда, огорчение.

Первое что пришло на ум - не хватает мощности источника питания чтобы поднять такую тушу. Учитывая, что батарея была китайская - вполне себе разумное объяснение. 
Расчеты также подтверждают эту гипотезу:

Максимальная отдача моей GePower батареи 2200*30 = 66А
Максимальное потребление используемых двигателей 18*4 = 72А

К сожалению, проверить как работает квадрокоптер с более мощным аккумулятором сразу не получилось. Пришлось заказать в Hobbyking лютую батарею Turnigy 5000мАч 20C. Выход такой батареи 5000*20 = 100А.

Конечно, под подозрение попал и программный код контроллера. Но проведенные эксперименты не выявили ничего криминального. В частности, все 4 двигателя разгоняются до 100%, если с них снять пропеллеры. Кроме того, один двигатель с пропеллером также без проблем разгоняется до 100%.

Turnigy 5000mAh 3S
День X.
Спустя полтора месяца, наконец, пришла батарея. Перепаяв силовые коннекторы (у Turnigy 5000мАч они бананообразные), подключаем новый аккумулятор и запускаем процедуру взлета. Как и прежде, при 30% появляется вибрация. Ближе к 50% начинаются горизонтальные и вертикальные поползновения. При 60% - ... Опять остановка! :-E~~~~

Теперь стало ясно, что проблема вовсе не в источнике питания. Следующая гипотеза - нехватка сечения силовых проводов.

День Y. Заменив всю проводку, включая ту что на ESC, снова пытаемся взлететь. И опять fail... Все четыре двигателя останавливаются примерно на том же уровне тяги.

День Z. Исключив все очевидные причины, настало время ещё раз внимательно посмотреть на программную часть. Как я уже говорил, один двигатель работает замечательно, разгоняется до 100%, поэтому подозрения с кода и были сняты в свое время.

Однако, после концентрации внимания на программной части, было замечено, что телеметрия с квадрокоптера показывает сброс тяги двигателей в ноль за пару секунд до их отключения. Хотя простой сброс тяги не может заставить ESC извергать сигнал ошибки, это наблюдение явно указывает на программный источник проблемы.
Для того чтобы проследить за поведением ключевых переменных программы пришлось опять воспользоваться логом на FRAM памяти. И именно журналирование инцидента, помогло в итоге определить настоящую причину этой вредной ошибки.

Диагноз

После запуска управляющего цикла, контроллер начинает рассчитывать углы наклона и управлять тягой двигателей с помощью ПИД регулятора. При достижении определенной мощности всех четырех двигателей, в переменной отвечающей за угол наклона вдоль оси X (а иногда, вдоль Y), вместо действительного числа появляется nan

Как известно, причиной появления nan может стать деление на ноль, или попытка взять корень из отрицательного числа. В процедуре вычисления угла, действительно, имеется операция извлечения корня. Собственно, этот корень находится в функции приближенного арккосинуса. Подкоренное выражение здесь имеет вид 1-x, где x - косинус угла наклона, который вычисляется на основе показаний акселерометра.

Так вот ошибка заключается в том, что я забыл ограничить показания акселерометра, которые имеют геометрический смысл только в диапазоне от -1G до 1G. При достижении  двигателями некоторой мощности, акселерометр начинает зашкаливать, что вызывает выход за указанный диапазон. 

График показаний акселерометра


Как следствие, в арккосинус залезает недопустимое значение, что и приводит к появлению nan. Результатом любого выражение с nan также является nan, поэтому nan поступает и в генератор PWM, который управляет ESC.

Лечение

Наконец, после устранения ошибки и перепрограммирования контроллера настал момент икс. Как положено, приближаясь к 50% мощности машина начинает терять связь с поверхностью земли. При достижении 60% - взлет! Квадрокоптер отрывается от земли и устремляется... устремляется в бок:) но это уже совсем другая история.

Также из показаний журнала FRAM стало ясно, что фильтрация показаний акселерометра была явно недостаточна. В результате небольшой настройки ФНЧ шум значительно сократился, что явно пошло на пользу подсистеме стабилизации.

На очереди установка 10DOF устройства для более качественной стабилизации, а также гереметизация корпуса для осуществления первого зимнего полета.
Comments