Гайд · Моторы · Драйверы
Пять моторов, пять задач — выбираем правильно
Каждый движущийся проект начинается с одного вопроса: какой мотор? Честный ответ: реально вы встретите всего пять — серво, шаговый, коллекторный DC, мотор-редуктор TT и бесколлекторный (BLDC), и каждый выигрывает свою задачу. Разбираем, что чем движет, какой драйвер нужен каждому, рабочий код для всех пяти и правила подключения, сохраняющие плату живой.
| Мотор | Управление | Драйвер | Силён в | Типовая деталь |
|---|---|---|---|---|
| Серво | угол 0–180° | не нужен (встроен) | точные углы, 1 провод | SG90 · MG90S · MG996R |
| Шаговый | точные шаги | A4988 / DRV8825 / TMC2208 | позиционирование без энкодера | NEMA 17 |
| Коллекторный DC | скорость + направление | L298N / TB6612FNG | быстрое вращение, дёшево | RS-380/540 |
| Редуктор TT | скорость + направление | L298N / TB6612FNG | момент на низких оборотах — колёса | жёлтый TT-мотор |
| BLDC | газ через ESC | ESC (обязателен) | мощность + КПД 90–95 % | outrunner + ESC 30 А |
1. Серво — угол по одному проводу
Серво содержит мотор, редуктор и замкнутое управление в одном корпусе: послали угол — он доехал и держит. Манипуляторы, поворот камер, защёлки замков, тяги RC-моделей. SG90 питается от 5 В — но больше одного (или что-то крупнее) питайте от отдельного 5 В источника, не от пина платы, с общей землёй:
#include <ESP32Servo.h> // Arduino UNO: #include <Servo.h>
Servo arm;
arm.attach(5); // one PWM pin is the whole interface
arm.write(90); // go to 90 degrees — that's it 2. Шаговый — точная позиция без энкодера
Шаговик движется фиксированными шагами (1.8° у NEMA 17), поэтому знает, где находится, без обратной связи — потому на них ездят 3D-принтеры, ЧПУ и камера-слайдеры. Ему всегда нужен драйвер (A4988/DRV8825; TMC2208 — тихий), отдельное питание мотора 8–35 В и общая земля с платой. Микрошаг (MS1–MS3) сглаживает ход:
#include <AccelStepper.h> // smooth accel/decel — the go-to library
AccelStepper motor(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
motor.setMaxSpeed(800); // steps/s
motor.setAcceleration(400);
motor.moveTo(2000); // absolute position in steps
// loop(): motor.run(); // call every loop — non-blocking 3 и 4. Коллекторный DC и редуктор TT — один драйвер, разная передача
Голый коллекторный мотор крутится быстро при малом моменте; жёлтая версия с редуктором TT меняет скорость на момент (30–300 об/мин) — ровно то, что нужно колёсам, поэтому все бюджетные робо-машинки ездят на TT. Управляются оба одинаково через H-мост: два пина задают направление, PWM на ENA — скорость. L298N — классика; TB6612FNG делает то же холоднее:
// Brushed DC / TT gear motor via L298N: direction on IN1/IN2, speed on ENA (PWM).
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW); // swap the two to reverse
analogWrite(ENA, 180); // 0..255 — more duty, more speed 5. BLDC — уровень мощности
У бесколлекторников нет щёток — нечему искрить и изнашиваться, КПД 90–95 %, мощность серьёзная — дроны, электросамокаты, RC-самолёты. Плата за это: они трёхфазные и обязаны работать через ESC. Приятный сюрприз — код: ESC слушает те же импульсы 1000–2000 мкс, что и серво, и всегда армируйте на минимальном газе:
// A BLDC talks to its ESC with the same 1000-2000 us pulse a servo uses.
#include <ESP32Servo.h>
Servo esc;
esc.attach(9, 1000, 2000); // min/max pulse in microseconds
esc.writeMicroseconds(1000); // ARM at minimum first — always!
delay(3000);
esc.writeMicroseconds(1300); // ~30 % throttle ⚠ Подбирайте ток ESC и KV мотора под нагрузку и сверяйте совместимость с батареей — 3S LiPo — обычная стартовая точка.
Управляйте ими с дашборда
Все пять сводятся к «задать число из UI»: слайдер — угол серво или скорость DC, number — позиция шаговика, джойстик / d-pad — двухмоторный робот — всё это готовые виджеты RisalDash, управление с телефона через собственный Wi-Fi платы, и каждый — ещё и MCP-tool для ИИ-агента. Шаблоны GarageDoor, CNCMachine и Printer3D показывают моторные UI целиком.
Правила, спасающие платы
Никогда не питайте мотор от пина 3.3/5 В — у мотора своё питание, у платы своё, общая только земля. Голым DC-моторам — flyback-защита (на платах драйверов она есть). А если плата перезагружается при старте мотора — это brownout; вот лечение.
Набросайте подключение мотора до пайки — и рулите им с телефона.