Добрый день, уважаемый читатель. Как и в других моих статьях, я решил что-то собрать полностью с нуля, а именно – машинку на радиоуправлении.

Будет описан мой пройденный путь: от печати готового проекта до разработки и печати новой платформы; от разработки первой версии печатной платы для использования коллекторного DC мотора до реализации управления бесколлекторным BLDC мотором с датчиками холла; от локального управления до реализации полудуплексного обмена данными на расстояние в сотни метров с передачей телеметрии.

Вновь потратил на разработку пару лет, но никуда не спешил. Это лишь мое хобби.

«Long story short…»

На реализацию данного проекта меня подтолкнули видеоролики с 3D печатной платформой от Egor NiKO. Он начинал печатать проект OpenRC, а затем провел усиление конструкции и разработал вою модифицированную раму. С нее я начал долгие и интересные вечера 3D печати.

Печать готовой модели

У меня есть собранный принтер с большим столом. Склеил 3D модель рамы (в исходном варианте она из двух половинок) и отправил на печать. На первом этапе печатал почти весь конструктив из PETG пластика. Шел сентябрь 2023 года.

Затем на печать отправились первые конструктивные элементы.

Пока печатал конструктивные элементы, приехали первые запчасти (дифференциалы, приводы, амортизаторы, двигатель и сервопривод).

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

Первая тестовая сборка рамы с конструктивными элементами

Покупка колес показалась мне не таким интересным решением, если их можно напечатать. Разработал 3D модель разборных колес Borbet-A. На фото тестовая примерка. Уже конец октября 2023 года.

Тестовая проверка работоспособности механизма.

Диски есть, а как же покрышки? Моделируем и печатаем из FLEX А75. Резину клеить не планировал, диски разборные, а фиксацию обеспечивают пазы и выступы.

Наружная стенка 2мм, заполнение 10%.

Не стал заморачиваться с рисунком протектора и взял его из какой-то готовой модели из открытых источников.

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

Фото первой собранной шасси на колесах.

Первая пробная механика готова, настало время разработать печатную плату.

Электроника

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

Микроконтроллер решил взять STM32F103. У него есть встроенный аппаратный многоканальный ШИМ.

Начну с полумостов. Изначально я не предполагал, как и в какую конфигурацию разрастется мой макет, потому на плате появилось 4 полумоста. Да не просто полумосты, а полумосты без специализированных драйверов. Схему подсмотрел в дешевых контроллерах управления велоколесами. Дополнительно стянул управляющие сигналы к сигнальной земле, чтобы во время программирования не возникало «сквозняков».

На фото подписал два состояния комплиментарного переключения. Красным отмечены открытые, синим закрытые транзисторы. При разработке я допустил ошибку, на схеме отметил исправление. Ввиду того, что в схеме электровелосипеда оба управляющих сигнала полумоста подключены к одному источнику сигнала, то и полярность их совпадает. Разделил сигналы для возможности задания DeadTime во время переходных процессов.

В схеме полумоста использованы два N-канальных полевых транзистора. Соответственно, чтобы открыть ключ верхнего плеча, необходимо на затворе обеспечить потенциал выше, чем напряжение питания. На данном этапе целевое напряжение питания схемы составляло 6.8-8.4 (В). И вместо установки готового повышающего преобразователя, поставил схему вольтодобавки. В качестве источника тактового сигнала выступил один из аппаратных таймеров микроконтроллера.

Разрисую оба состояния схемы для понимания принципа работы. Красным отмечены открытые, синим закрытые транзисторы и диоды.

«Летающий» конденсатор C200 является основным переносчиком заряда и удвоителем напряжения. С учетом всех падений напряжений на диодах, на конденсаторе C201 будет напряжение чуть меньше, чем двойное напряжение питания. Этот источник питания используется для работы полумостов.

Как и писал выше, для первых тестов, буду использовать двигатель постоянного тока, но заложу возможность использования BLDC, причем как с датчиками холла, так и с возможностью слежения за фазами.

С холлами проблем нет, а ловить переход через среднюю точку неактивной фазы (в 6-шаговом режиме управления) решил по такой схеме:

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

Для защиты от превышения по току был использован токовый датчик ASC712 и схема компарирования. Сигнал с выхода схемы подключен к аппаратному защитному входу таймера микроконтроллера. Также выход датчика тока подключен к АЦП микроконтроллера для возможности измерения потребляемого тока.

Рулевое управление

Сервопривод рассчитан на 5В и потребляет большой ток. На плату установил достаточно мощный DC-DC понижающий преобразователь. Пока не заказал комплектующие, заложил возможность использовать adjustable версию.

Телеметрия

У микроконтроллера почти не осталось свободных ног, по этой причине для измерения напряжений и температур, использовались 2 входа АЦП микроконтроллера, аналоговые линии подключены через мультиплексор CD74HC4052 и повторители.

На первый взгляд смотрится не плохо, но как получить значение температуры? Необходимо использовать уравнение Стейнхарта-Харта, для которого вычислим коэффициенты A, B и C:

На этапе тестирования верхние резисторы были заменены на 30кОм и были вычислены коэффициенты. Расчет получения значения температуры, в моем случае, получился следующим:

NTC_A = 0.001001056066;
NTC_B = 0.000236524661;
NTC_C = 0.000000225486;
NTC_UP_R = 30000;
ADC_max = 4095;
NTC_Ln = log((adc_raw * NTC_UP_R)/(ADC_max - adc_raw));
temp = (1/(NTC_A + NTC_B  NTC_Ln + NTC_C  NTC_Ln*NTC_Ln*NTC_Ln)) -   273.15;

Небольшие погрешности в 2-3 градуса для меня были не критичны, и я не проводил калибровку отдельных каналов. Резисторы использовал с погрешностью 1%.

Также на плату добавлены: акселерометр, гироскоп и компас (PS: не ставьте компас близко к мощному BLDC мотору)

Для радиоуправления и получения телеметрии использовался приемопередатчик NRF24L01.

Плата спроектирована, заказана и пришла. Настало время пайки, в этом мне снова помогал самодельный микроскоп и паяльные станции.

Тестовое включение, тест на волшебный дым пройден.

PS: на фото программатор из моей самой первой статьи.

Цифровая часть запустилась, теперь необходимо организовать канал связи, но с чем?

Придумываем пульт.

Взял для теста два переменных резистора (которые на улице зимой подкинут проблем), микроконтроллер, экран и приемопередатчик.

Пишу заново библиотеку для NRF24L01. Протокол общения следующий: пульт является мастером, он передает машинке команды управления, запрашивает подтверждение приема. Машинка вместе с подтверждением приема передает обратно телеметрию.

Каких-то несколько дней по вечерам и все заработало. Данные передаются в обе стороны. На дворе конец января 2024 года.

Управление и телеметрия передаются, связь есть, сервопривод крутится, осталось разобраться как управлять коллекторным мотором.

Включать на полную силу и менять направление вращения тоже не сложно. Необходимо просто открывать полностью противоположные ключи полумостов. На фото два варианта – обведенные сплошным цветом или штриховано.

Но когда нам необходимо регулировать мощность и скорость вращения, то необходимо использовать ШИМ. ШИМ – это постоянные переключения ключей и это самый «горячий» режим, ведь во время открытия/закрытия ключа кратно увеличивается сопротивление, а соответственно и нагрев.

Проблему сквозных токов удается избежать благодаря настройке DeadTime, задавая временной интервал между закрытием/открытием противоположных ключей в одном полумосте.

Получается, что есть несколько вариантов управления. Не буду их расписывать, они достаточно подробно разобраны, а информации будет на большую статью, расскажу лишь наблюдения и мое решение.

Начал эксперименты с метода управления «Sign/Magnitude». В результате экспериментов выяснил, что с моим мотором транзистор (в котором в режиме холостого хода ШИМа используется диод) греется очень быстро. Невозможно использовать данный метод без дополнительного охлаждения.

Во всех случаях, когда у нас ток начинает течь через ограничительные диоды, транзисторы начинают сильно греться. Очень. Для управления коллекторным мотором я остановился на методе управления «фиксированная противофаза» (Lock anti-phase drive).

Суть заключается в том, что оба полумоста включены в одном из направлений 50% времени, а результирующее напряжение на промежутке времени большем, чем длительность периода ШИМ, будет равно 0.

Смещая скважность, мы получаем плавное управление результирующим напряжением со смещением направления.

В старой деке не предусмотрел отверстия под мои варианты аккумуляторов, пришлось перепечатать деку. Заодно скорректировал некоторые модели под особенности моих принтеров для компенсации критичных зазоров.

Первый выезд в комнате с беспроводным управлением.

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

Далее настала пора пульта. По-быстрому накидал временное решение. На фоне лежит клавиатура из моей другой статьи, каждый день ей пользуюсь.

Первый выезд в мороз на улицу показал, что ни в коем случае нельзя использовать переменные резисторы для таких ответственных узлов, как управление газом.

На морозе переменные резисторы ведут себя непредсказуемо, начинают дрожать, терять контакт. Срочно пришлось менять пульт.

В основе конструкции курков теперь неодимовые магниты и аналоговые датчики холла.

Опираясь на предыдущий опыт, ввел ограничение на максимальное и минимальное значение газа. Аналоговый датчик холла 49e НЕ выдает значение близкое к VCC или GND, можем считать выход за границы рабочего диапазона – обрывом и останавливать модель.

Дополнительно запустил датчик акселерометра/гироскопа и передаю эти данные с телеметрией.

Для приема и передачи реализовал две структуры

typedef struct{
	uint16_t service;
	int16_t servo; //-1000 : 0 : 100	0
	int16_t engine; //-1000 : 0 : 1000
}RADIO_RX_Packet_t;

и

typedef struct{
	uint16_t service;
	int8_t Temperature_Bridge1; // 1 step
	int8_t Temperature_Bridge2; // 1 step
	int8_t Temperature_Bridge3; // 1 step
	int8_t Temperature_Bridge4; // 1 step
	int8_t Temperature_DC_DC;   // 1 step
	int8_t Temperature_Linear;  // 1 step
	int8_t Temperature_STM32;   // 1 step
	int8_t Temperature_MPU;     // 1 step
	
	uint16_t Voltage_Battery;    // mV
	uint16_t Voltage_Boost;      // mV
	uint16_t Voltage_STM32;      // mV
	uint16_t Current;            // mA
	uint16_t Speed_RPM;          // 10 step
	
	float AngleX;
	float AngleY;
}RADIO_TX_Packet_t;

Первый успешный выезд на улице. Конец февраля 2024 года.

Все работало исправно, не перегревалось, но нужно больше скорости. Коллекторный двигатель, который был использован, в моделях применяют с 3S аккумуляторами - 10.2-12.6 (В).

Деки под мои аккумуляторы, по длине, не хватает. Решаю выходить из ситуации креативно.

Модель стала шустрее и теплее. Терморезисторы размещены на нижнем слое соответствующих блоков. И пошли помехи и наводки, акселерометр и гироскоп врут. Но пока не до них.

Ездить модель стала интересней

Напечатал защитный быстросъемный кожух

И там, где скорость, там и поломки

На этом моменте заканчиваются игры с коллекторным мотором, он заменяется на бесколлекторный. Допаиваю третий полумост, начинаю пробовать работать с BLDC, а заодно усилил и перепечатал разбитые колесные диски

Для работы с бесколлекторным мотором тоже использовал метод управления «Sign/Magnitude». В один момент времени включены только две фазы, во время холостого хода включен только один транзистор верхнего или нижнего плеча.

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

Объединить в единое целое систему связи, опрос телеметрии и управление бесколлекторным мотором, оказалось интересной задачей.

Я сделал несколько прерываний и разделил их по приоритетам:

  1. Наивысший приоритет получил обработчик прерывания срабатывания изменения состояния датчиков холла. В обработчике, в зависимости отсчитанного значения датчика холла, производилась манипуляция по переключению активных обмоток. Кстати, состояния датчиков холла переключаются по классическому коду Грея.

  2. Следующий по приоритету – «таймер обрыва связи». Обработчик вызывается 100 раз в секунду. Если за время предыдущего счета был принят пакет, то счетчик сбрасывается, если нет – добавляет единичку. Если досчитали до 20, то отключаем мотор и останавливаем модель – связь прервалась.

  3. Следующий – «таймер оборотов». Обработчик вызывается 50 тысяч раз в секунду и считает число оборотов (да, не к тому выводу я подключил датчик, можно было бы аппаратно тикать таймер). Сейчас читаю код и не понимаю, почему просто не сделал прерывание по датчику.

  4. Следующий – прерывание по событию «пришли данные». Вывод IRQ микросхемы NRF24L01 подключен к данному входу. Срабатывание настроено на получение валидной посылки. В обработчике происходит чтение данных

  5. Последний (если не считать SysTick) - «таймер телеметрии». 50 раз в секунду обновляет данные с датчиков.

С бесколлекторным двигателем работа шла интересней, повысилась динамика и подвеска стала расходником. Рычаги не доживали до конца тестов. Смоделировал и напечатал новые «мягкие» рычаги из FLEX A75, дополнительно перенес крепления амортизаторов.

Немного примеров тестов

Фото сверху

Теперь ломаться стали другие элементы конструкции, но сильно реже.

А еще в печатной версии шасси использовались все три дифференциала из мостов. В этих узлах момент передается через гипоидную передачу. Центральный дифференциал для стыковки с двигателем, подвергался модификации, и металлическая шестерня заменялась на печатную с прямыми зубьями. С увеличением мощности и скорости, напечатанная шестерня стала расходником. Хватит это терпеть, находим альтернативу.

В таком виде съездили на встречу любителей RC моделей. На фотографии верхние рычаги перепечатаны из FLEX A95

Пульт показал себя не плохо, никаких изменений не вносил.

Несмотря на защитный кожух, к августу 2024 года, со всеми мелкими доработками, плата выглядела следующим ужасным образом

На данной плате было много недочетов:

  • система волтодобавки, нужно сделать ее как нормальных контроллерах – на каждой фазе.

  • ограничение по напряжению. Сейчас это 3S, а хочется больше.

  • радиосвязь лучше сделать на модулях с усилителями. Сейчас дальность в пределах 100 метров.

  • конструкция шасси достаточно хрупкая, металлические привода выходят из строя чаще, чем ломаются пластиковые детали.

Выбрал компоненты от более крупных машинок и начал проектировать механику. Новые, более крупные, дифференциалы, толстые приводы. «Вес – это надежно».

К таким приводам и размерам шасси – новые колеса

И новый мотор. Теперь шестерня будет с модулем М1

Разработал вторую версию печатной платы.

Из важных изменений:

Теперь схема полумоста выглядит следующим образом. В качестве вольтодобавки выступает конденсатор C200. Когда отрыт нижний ключ VT207, конденсатор заряжается до напряжения V_IH. Когда открывается верхний ключ VT206, на его затвор приходит напряжение V_BAT+V_HI.

Напряжение питания я предусмотрел до 24В, но на затворы нельзя подавать такое напряжение. Напряжения V_HI и V_LO реализовал настраиваемыми с помощью DC-DC понижающих преобразователей, а к входу FB подмешиваю напряжения с ЦАП микросхемы STM32. На второй версии платы использовал STM32G431CBU6.

Напряжение на выходе DC-DC теперь рассчитывается по формуле

                             ______
                  _---------<_VOUT_|
                 |R|
                 |1|
 _____     ____   |    ___________
|_DAC_>---|_R3_|--o---<_FB__DC-DC_|
                  |
                 |R|
                 |2|         _____
                   ---------<_GND_|

Vref = 0.6v
Vout = Vref * (1 + (R1/R2)) + (Vref - Vdac) * (R1/R3)

На каждую фазу поставил по датчику тока, также датчик тока поставил на общую шину GND для контроля превышения максимального тока. В качестве шунтов использовал манганиновые резисторы сопротивлением 0.5 Ом.

Измерение этих токов настроил автоматически через DMA по таймеру. Теперь микроконтроллер не отвлекается на это. Дополнительно хранятся измерения нескольких последних значений для программной фильтрации.

В микроконтроллере STM32G431 внедрили много интересных решений.

Сигнал аварийной остановки работы таймера можно подключить как снаружи, так и с внутренних источников. В качестве внутреннего источника я установил выход встроенного компаратора.

К положительному входу компаратора я подключил сигнал с датчика тока, а к отрицательному входу – встроенный ЦАП. Причем это подключение осуществляется внутренней конфигурацией. Теперь у меня на плате есть программная настройка порога защиты через ЦАП. До сих пор вдохновлен такими приятными решениями от STM.

Перенес топологию приемопередатчика с усилителем непосредственно на плату и накрыл защитным экраном.

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

Фото готовой платы без радиатора. Ручная пайка, трафарет не заказывал.

Пока печатал и разрабатывал вторую шассь, временно поставил новую плату на старую шассь для проверок

Разработал систему поворотных кулаков

Напечатал из FLEX A75 пыльники на приводы.

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

Первая тестовая поездка в квартире

Прикрутил GPS модуль

Первый выезд на улице. Питание 4S (~16 В)

N+1 й выезд на улицу

Выше скорость, больше поломок

Пластиковая основа не выдерживает, заказал из карбона

И перешел на 6S (~24 В). Скорость по GPS была около 45 км/ч. И в первом же тесте разбил переднюю часть рамы о бордюр, но все остальное выдержало, модель стала крепче.

Возникла проблема с торможением. Если после разгона вперед, на скорости нажать назад, то получим рекуперацию. Таким образом я сжег несколько понижающих преобразователей (у них был порог до 40В), теперь поставил 60В версии.

Резина «шоссейная» оказалась слишком жесткой, моделирую и печатаю новую

Увеличился дорожный просвет

Подвеска заработала лучше

Стал лезть в разные неожиданные места и возвращаться с добычей

Но черный PETG кончился, перепечатал всю резину в синий цвет, добавил спойлер, чтобы понимать где перед/зад автомобиля на расстоянии

Удалось достичь скорости в 59 км/ч по GPS. Есть запас выше, но на такой скорости слетают покрышки. На больших оборотах растягиваются.

Резина мягкая

Рычаги перепроектировал и напечатал из FLEX A95

Выбрав хорошие антенны из пары десятков разных комплектных антенн на 2.4 ГГц с помощью NanoVNA, удалось достичь полудуплексной связи без потери пакетов на расстояние около 200 метров.

Подведу итог:

За время работы над этим проектом я получил очень большой и приятный опыт разработки.

Масса моей модели с аккумулятором – 6 кг.

Я реализовал самый простой метод управления – 6 шаговый. При разгоне в мотор вкачивается почти 1 кВт - 24В 40А (ток общий, не фазный).

Есть задел на реализацию векторного управления на второй версии платы.

На данный момент из-за отсутствия времени, проект лежит на полочке.

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

Еще медиафайлы:

У меня остались еще некоторые записи тестов, выбрал самые наглядные, приложу их тут:

Комментарии (4)


  1. buldo
    22.04.2026 13:37

    Первая версия шасси дичайше похожа на Tarmo4. По поводу поворотных кулаков, которые первыми сломались. Если взять пластик titi flex hard и напечатать со 100% заполнением, то получится жёсткая деталь, которую не сломать. У меня из этого пластика даже была пара шестерней двигатель-кардан - petg и abs плавились и стирались под нагрузкой, а этот TPU прекрасно жил. Ну и моё почтение с электроникой. Я пошёл по пути “купить несколько готовых компонентов и кататься”.


    1. LitLageR Автор
      22.04.2026 13:37

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

      Я вдохновлялся проектом CRAMER Truggy RC, на сколько помню, там тоже рычаги "мягкие" и расположение амортизаторов подсмотрел у них.

      Изначально хотел сделать только электронику и взять готовую шассь, но решил прокрастинировать и печатать шассь вместо разработки электроники на первых этапах.)