Я увлекаюсь авиамоделизмом, в основном радиоуправляемыми моделями на бесколлекторных двигателях, но в последние годы данная сфера престала быть нишевой, и поэтому цены на компоненты заметно выросли. Без того дорогие проверенные бренды стали еще дороже, поэтому я все чаще выбираю более бюджетные аналоги с AliExpress или от малоизвестных производителей. Но тут возникает проблема: как убедиться, что дешёвый мотор выдаст заявленные характеристики, и будет надёжным в полёте?

Конечно, есть инструменты вроде Betaflight, которые отлично справляются с настройкой полётных контроллеров и дают данные о работе мотора по обратной ЭДС. Но я бы хотел получать дополнительно независимые данные о таких харакетритиках как RPM, потребляемый ток, напряжение, тяга двигателя и его температура.

Скрытый текст

Нормально реализовать пока что получилось только RPM

Кроме того, хотелось бы реализовать в программе автоматические испытания: постепенное изменение газа с фиксацией всех измеряемых параметров в реальном времени.

В статье расскажу, как я реализовал эту идею, что мой стенд умеет сейчас, с какими проблемамми я столкнулся и какие улучшения планирую. Все материалы я оставлю в свободном доступе. А основным вдохновением для меня стала вот эта старенькая статья:

RThrust — система автоматического тестирования БК моторов
Я довольно давно увлекаюсь мультикоптерами, и все это время я ищу способы заставить коптеры летать д...
habr.com

Цели проекта и аппаратная реализация

Основная идея: полностью исключить любые датчики, которые требуют механического вмешательства в конструкцию самого двигателя. Тестировать будем только сам бесколлекторный мотор: ESC в экспериментах считается идеальным. Кроме того, мне хотелось собрать все данные в одном месте: чтобы одна программа одновременно управляла газом, считывала обороты, электрические параметры и сохраняла всё в удобном виде.

Для реализации выбрал простую и бюджетную модульную архитектуру на базе Arduino Nano. Стенд состоит из трёх основных частей:

Модель
Модель
... и реальный прототип
... и реальный прототип
  • Измерительный и управляющий блок – Arduino Nano: генерирует PWM-сигнал для ESC, считывает показания датчиков, обменивается данными с компьютером по UART.

  • Силовая часть – программируемый источник питания (у меня лабораторный Keysight, но подойдёт любой стабильный БП или АКБ) и стандартный ESC с тестируемым мотором.

  • Механическая основа – универсальная стойка для фиксации мотора и точного позиционирования датчиков для повторямости экспериментов.

Основным датчиком для измерения оборотов стал самодельный тахометр на базе модифицированного инфракрасного датчика препятствий HW-201 для Arduino. Я разделил фотодиод и светодиод, перенеся их в отдельную рамку в форме фотоворот, разместив фотодиод сверху для снижения уровня помех от внешнего освещения. Обработка сигнала с датчика реализована с использованием прерываний, настроенных на падение уровня сигнала.

Чтобы убедиться, что моя конструкция правильно измеряет обороты, я провёл серию экспериментов, где в качестве эталона использовал телеметрию Betaflight через стек SpeedyBee F405 V3. Тесты проводил на бесколлекторном двигателе BrotherHobby Avenger 2816 750KV. Вместо пропеллера использовал болванку шириной 30 мм, на фото. Питание экививалентное 4S (14.8 В). Хоть это и маловато для такого двигателя, но это максимальное, которое может выдать мой БП, а для достоверной валидации хотелось бы исключить фактор батареи. Так как болванка практически не оказывает нагрузки на двигатель, можно считать, что он работал в режме холостого хода.

Результаты следующие:

Доля газа, %

RPM (тахометр)

RPM (телеметрия)

Разница, %

10

1500

1480

1.33%

30

3600

3700

2.78%

50

5700

5800

1.75%

70

7800

7800

0%

90

9500

9500

0%

100

10200

10200

0%

Показания телеметрии в Betaflight были округлены до сотен, поэтому в таблице мы видим максимальное расхождение менее 3 %. При этом абсолютные значения оборотов отлично соответствуют теоретической оценке по формуле KV × V (750 × 14.8 ≈ 11 100 об/мин на холостом ходу).

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

Программная часть

Код для Arduino не является чем-то уникальным. Он умеет принимать значения газа "в процентах", и через библиотеку Servo генерирует ШИМ-сигнал для управления двигателем, а так же она должна обрабатывать все сигналы с датчиков.

Приложение на Python (с использованием PyQt5 для интерфейса) это визуальная оболчка, упрощающая взаимодейсвтие с Arduino.

Интерфейс программы
Интерфейс программы

Вот его основные возможности:

  • Подключение оборудования: программа автоматически ищет доступные COM-порты, позволяет выбрать нужный и подключиться к Arduino.

    Так же можно подключить БП от Keysight (при наличии драйверов), для управления им через программу, а не вручную. Его я использовал в качестве амперметра, это подключение не обязательное для работы.

  • Ручное управление мотором: через serial порт программа отправляет Arduino все те же данные в процентах. Это поле предлагается использовать для минимальной проверки работоспособности двигателя. Так же есть "стоп кран" с привязкой к горячей клавише.

  • Автоматический тест: суть теста в пошаговом изменении газа двигателя. Программа позволяет задавать исследуемые границы (как от меньшей к большей, так и наоборот), размер шага газа, длительность работы на каждом шаге, для получения значений в устоявшемся режиме, и отдельным параметром идет переодичность сохранения данных.

    После нажатия «Начать испытание» программа сама последовательно меняет газ, ждёт заданное время, собирает данные и строит графики в реальном времени. Зависимости значений по осям можно изменять. Есть прогресс-бар, чтобы понимать, сколько осталось. Данные программа сохраняет в двух форматах: csv и json, по нажатию соответствующих клавиш.

    Так же в реальном времени программа выводит логи обо всех действиях, для быстрого выявления ошибок.

Результаты

С помощью этой программы я смог получить данные о работе двигателя пр ивсез возможных позициях газа, а так же динамику разгона мотора при резком изменении газа от 0 до 100 %.

Динамика разгона
Динамика разгона

Самым главным недостатком текущей системы является использованный источник питания. Несмотря на удобство прямого подключения к ПК и возможность автоматизации, он вносит ряд существенных ограничений: не позволяет проводить силовые испытания под нагрузкой и ограничивает частоту дискретизации электрических параметров всего до 5 Гц. Поэтому в дальнейшем планируется полностью заменить его на аккумуляторную батарею, а для измерения тока и напряжения подключить отдельные датчики напрямую к Arduino (например, ACS758 или аналог).

Кроме того, многие авиамоделисты наверняка укажут на ошибку в размещении двигателя. Этот вариант был выбран сознательно — из-за простоты реализации и фиксации, а также из-за отсутствия в текущей конструкции тензодатчика для измерения тяги.

Так же были проведены температурные испытания двигателя. Так как в мое распоряжение временно попала ИК Камера, были сделан ряд фото во время работы с видом сверху.

Была идея так же автоматически формировать подобные изображения во время работы, с привязкой по времени, но этот опыт показал, что колокол работающего двигателя вносит существенные погрешности в измерения, сильно смазывая картинку. Так что придется видимо использовать близкорасположенные датчики под обмотками (думаю встроить их в импровизированную универсальную подставку).

Материалы