YMFC-32: квадрокоптер на STM32 (Blue Pill)
Примечание
Автор проекта и всех материалов: J.M. Brokking (Joop Brokking), brokking.net. Ниже подробный пересказ его страниц и его файлы без изменений. Оригинал: ymfc-32_main.html (копия в Wayback Machine).
YMFC-32 — учебный полётный контроллер на STM32F103C8T6, программируется из Arduino IDE. Режим автовыравнивания включён, то есть при отпущенных стиках аппарат выравнивается сам. Цель та же, что у YMFC-AL: квадрокоптер с автостабилизацией на Arduino Uno: минимум понятного кода, который можно развивать. Оценка автора: около 135 долларов вместе с батареей, пультом, зарядкой и резисторами. Видеоуроки автора см. на странице Видео и ссылки на оригинальные страницы.
Файлы
YMFC-32.zip— скетчиYMFC-32_Setup_ver-1a(тесты и калибровка) иYMFC-32_Flight_Controller_ver-1a(прошивка).Arduino_STM32-master.zip— надстройка «STM32 for Arduino», которой пользовался автор (сторонний проект, 40 МБ).PWM→PPM для Flysky R6B(см. ниже).
Шаг 1. Программа
Скачать пакет и установить в Arduino IDE надстройку STM32 (автор показывает установку в видео про начало работы с STM32F103C8T6). Нужная версия надстройки лежит среди файлов.
Шаг 2. Железо (список автора)
рама 450 с платой питания; 4 комплекта «мотор 1000 kV + винт 10x4.5 + ESC»;
LiPo 3S 2200 мАч 30C, разъём XT60;
STM32F103C8T6 и гироакселерометр MPU-6050;
пульт Flysky FS-T6 на 6 каналов, зарядное 2S/3S;
набор резисторов 1/4 Вт, макетная плата из стеклотекстолита, светодиоды 3 мм (красный, жёлтый, зелёный).
Если вы раньше не летали на квадрокоптерах, автор советует сначала потренироваться на маленьком безопасном JJRC H36 в помещении: принцип управления такой же, но энергия не разрушительная. Сам автор предпочитает винты 8x4.5 (меньше нагрузка на моторы и ESC, лучше отклик).
Шаг 3. Сборка
Делитель напряжения R3/R4. Делит напряжение батареи на 11 (резисторы 1 кОм и 10 кОм обязательны), чтобы измерять заряд в полёте. При низком напряжении загорается светодиод, а программа автоматически повышает обороты для компенсации просадки.
MPU-6050. Единственный поддерживаемый датчик. Ориентация здесь критична: ось Z вертикальна, грани параллельны граням рамы, а точка на корпусе датчика должна смотреть на левый задний угол квадрокоптера. При неверной ориентации аппарат сразу перевернётся. Клеить на тонкий двусторонний скотч, не на поролон.
Пульт и приёмник. В отличие от YMFC-AL, подходит не любой пульт: нужны регулируемые конечные точки (endpoints) и субтримы, автор оставил код простым. Нужны стандартные импульсы 1000/1500/2000 мкс. Каналы подключаются к входам STM32 строго по порядку:
Канал приёмника |
Функция |
Вход STM32 |
1000 мкс |
1500 мкс |
2000 мкс |
|---|---|---|---|---|---|
1 |
крен (roll) |
A0 |
крен влево |
нет крена |
крен вправо |
2 |
тангаж (pitch) |
A1 |
нос вниз |
нет тангажа |
нос вверх |
3 |
газ (throttle) |
A2 |
низкий |
— |
высокий |
4 |
рыскание (yaw) |
A3 |
нос влево |
нет рыскания |
нос вправо |
Приёмник питается от +5 В BEC. Чтение сигналов выполняется через режим input capture (отдельное видео автора).
Регуляторы. Подключены земля и сигнал ESC 2, 3, 4; у ESC 1 подключён ещё и +5 В (BEC), от него питается контроллер. Если у регуляторов нет BEC, нужен понижающий преобразователь 7–28 В → 5 В от основной батареи. Сигналы:
Выход STM32 |
Положение мотора |
Направление |
|---|---|---|
B6 |
правый передний |
против часовой |
B7 |
правый задний |
по часовой |
B8 |
левый задний |
против часовой |
B9 |
левый передний |
по часовой |
Шаг 4. Тесты железа и калибровка ESC
Винты сняты, батарея не подключена, залить скетч настройки (YMFC-32_Setup), пройти тесты по видео (часть 3). Пульт должен быть настроен на 1000/1500/2000 мкс. Калибровка ESC: газ вверх, подключить батарею, после писка газ вниз, отключить батарею; следуйте руководству к вашему регулятору. В Setup есть пункты: чтение сигналов приёмника, сканер I2C, значения гироскопа, углы IMU, светодиоды, напряжение батареи, проверка вибраций моторов.
Шаг 5. Балансировка моторов и винтов
Идентична YMFC-AL (см. YMFC-AL: квадрокоптер с автостабилизацией на Arduino Uno): разбалансировка даёт шум датчиков и дёрганье моторов. В мониторе порта 57600 отправить 1 для мотора 1, держать раму, поднять газ до половины, смотреть числа вибрации (величина для сравнения, не стандартизована) и чувствовать рукой; клеить скотч на лопасти, пока вибрация не минимальна. Для выхода из теста мотора отправить q и повторить для моторов 2, 3, 4. Виброподвесы для датчика не помогают.
Шаг 6. Калибровка IMU
Акселерометр. Положить аппарат на ровную горизонтальную поверхность, залить Setup, в мониторе отправить h — запустится калибровка гироскопа и акселерометра, аппарат не двигать. В конце печатаются пять значений: manual_acc_pitch_cal_value, manual_acc_roll_cal_value, manual_gyro_pitch_cal_value, manual_gyro_roll_cal_value, manual_gyro_yaw_cal_value. Значения индивидуальны для каждого датчика, могут быть положительными и отрицательными. Первые два (смещения акселерометра) нужно вписать в Setup и в прошивку; иначе аппарат будет дрейфовать сильнее. Калибровать после сборки, после замены или перестановки датчика, после аварии.
Гироскоп. Последние три значения — смещения гироскопа. Переменная use_manual_calibration по умолчанию false: гироскоп калибруется автоматически перед каждым полётом. Если поставить true, будут использоваться вписанные значения и калибровки при старте не будет (зелёный светодиод загорается сразу, удобно для старта с движущегося объекта), но смещение гироскопа зависит от температуры и может вызвать дрейф. Рекомендуется оставлять false; при ручной калибровке делать её при той же температуре, что и в полёте, и повторять после сборки, смены датчика, аварии и при изменении температуры на ±5 °C.
Шаг 7. Прошивка полётного контроллера
Отключить батарею, залить YMFC-32_Flight_Controller, отключить USB, подключить батарею. Запуск моторов: газ вниз + рыскание влево. Остановка: газ вниз + рыскание вправо. Поднять газ почти до «невесомости»: аппарат должен выравниваться. Проверить, что стики крена и тангажа двигают аппарат в нужную сторону. Первый полёт — осторожно, на улице над травой.
Шаг 8. Светодиоды состояния
Три светодиода (красный, жёлтый, зелёный) показывают состояние при старте и в полёте; расшифровка дана рисунком на оригинальной странице (у нас в архиве: images/ymfc-32), а также в видео. Зелёный светодиод загорается после калибровки гироскопа.
Шаг 9. ПИД
При необходимости доработать ПИД-коэффициенты (видео про ПИД YMFC-3D, часть 5).
Конвертер PWM→PPM для Flysky R6B
Для YMFC-32 autonomous нужен PPM-сигнал минимум на 6 каналов. Приёмник Flysky R6B из комплекта T6 отдаёт 6 отдельных PWM-выходов, поэтому автор предлагает простой конвертер на Arduino Pro Mini (клон): резисторы 2,2 кОм и 3,3 кОм делят 5 В до 3,3 В для STM32 (микроконтроллер 3,3 В). Скетч в архиве выше, схема и описание на странице автора bain_pwm_to_ppm_for_r6b.html.
Q&A автора
Моторы замедляются/ускоряются на земле. Нормально: ПИД и IMU работают сразу после старта. Взлетать сразу. Если моторы крутятся по-разному, перекалибровать ESC и проверить командой
5.Дрейф при отпущенных стиках. Субтримы; автовыравнивание не есть удержание позиции.
Максимальный угол (по умолчанию около 33°): меняется коэффициентом 15 в расчёте
pitch_level_adjustиroll_level_adjust(13 → 37°, 14 → 35°, 15 → 33°, 16 → 31°, 17 → 29°, 18 → 27°), менять малыми шагами.
Фото и медиа
Фото сборки и схемы автора (14 на главной, 13 в «медиа») хранятся в нашем архиве сайта.
Видео автора (YouTube)
Видео проекта на канале автора MacPuffdog: плеер ведёт на оригинал, ролики лежат у автора.
Фото на сайте автора
Фотографии и рисунки к проекту лежат на сервере автора (у сайта нет HTTPS, поэтому здесь только ссылки, они открываются в новой вкладке). Копия всех файлов хранится у нас в архиве.