Общие сведения
Мотор-редуктор RS550-15000, 12 В — силовой привод из тех, что стоят в детских электромобилях: коллекторный мотор RS550 и понижающий редуктор в одном пластиковом корпусе. Мотор сам крутится быстро и слабо, редуктор делает из этого медленное и сильное вращение.
Берут его туда, где нужна тяга, а не точность: тележки и большие колёсные роботы, лебёдки, ворота и шлагбаумы, мешалки, кормушки, форточки теплиц. Питание — 12 В постоянного тока: блок питания, автомобильный или гелевый аккумулятор. Своей электроники внутри нет: ни энкодера, ни концевиков, ни защиты от перегрузки, ни тормоза.
К выводам Arduino такой мотор не подключают никогда, а маленькие драйверы не годятся: Motor Shield рассчитан на 2 А, L293D Motor Shield — и того меньше, а этот мотор возьмёт больше в первый же миг и спалит их. Нужен силовой драйвер мотора BTS7960 на 43 А — с ним и собираем схему.
Характеристики
- Мотор: коллекторный RS550, питание 12 В постоянного тока
- Обороты мотора: 15 000 об/мин на холостом ходу — до редуктора
- Редуктор: понижающий, пластиковый; на выходном валу сотни оборотов в минуту, а не тысячи
- Выход редуктора: шлицевая втулка под ось детского электромобиля
- Крепление: два уха с отверстиями на корпусе редуктора
- Выводы мотора: два плоских лепестка, провода не припаяны
- Вес: 490 г
Передаточное число производитель не сообщает. Скорость на валу измерьте сами: метка на втулке, небольшой ШИМ, обороты за 10 секунд умножить на шесть. Нужно быстрее — в списке «Модификация» есть мотор на 23 000 об/мин с тем же редуктором.
Подключение
Ток у этого мотора не миллиамперы: на холостом ходу единицы ампер, под нагрузкой больше, а на пуске и в упоре — десятки, стоящий ротор для источника почти короткое замыкание. Поэтому драйвер выбирают по пусковому току, силовая часть идёт мимо Arduino, провода и клеммы — толстые. BTS7960 это тянет: 43 А кратковременно, до 10 А в долгую, питание мотора 5,5–27,5 В, входы понимают 3,3 и 5 В; остальное — в карточке драйвера.
Что понадобится
- драйвер мотора BTS7960 на 43 А;
- питание 12 В: блок питания 12 В / 200 Вт или 12 В / 300 Вт, либо аккумулятор;
- силовой провод — чёрный и красный силиконовый 16AWG (1,27 мм²);
- винтовой клеммник для силовых соединений;
- предохранитель 20–30 А в плюс питания — автомобильный ножевой с колодкой;
- по желанию датчик тока 20 А — посмотреть реальный ток.
Собираем
- Логика. 5V Arduino → Vcc драйвера, GND → GND. Без общего минуса сигналы не пройдут.
- Скорость. Вывод 9 → R_EN и L_EN, соединённые вместе. Обязательно вывод с ШИМ.
- Направление. Вывод 8 → R_PWM, вывод 7 → L_PWM. Любые цифровые выводы.
- Мотор. Клеммы M+ и M− → лепестки мотора. Поменяете местами — закрутится в другую сторону.
- Питание мотора. Клеммы S+ и S− → блок питания, в плюс — предохранитель. Отдельный минус от Arduino к S− не нужен: минусы на драйвере общие.
Мотор — только от своего источника. Запитаете мотор от USB, от вывода 5V или от блока питания самой Arduino — спалите плату и получите перезагрузки на каждом пуске.
Направление задаёт пара L_PWM/R_PWM: вперёд — 0 и 1, назад — 1 и 0; скорость — ШИМ на EN. EN = 0 — свободный выбег; одинаковые L_PWM и R_PWM при ШИМ на EN — торможение.
Частые ошибки
- Тонкие провода, слабые клеммы. Силовая часть — 16AWG и толще, коротким путём; к лепесткам мотора провода припаивают или надевают клеммы-«мама»; ни проводов, ни клемм в комплекте нет. Винты клеммника затягивайте: слабый контакт при 10 А плавит колодку.
- Нет предохранителя. 20–30 А в плюс от источника бережёт проводку и блок питания. Полярность не перепутайте — защиты от переполюсовки у драйвера нет.
- Блок питания впритык. Считайте по пусковому току: 200 Вт — это 16 А, 300 Вт — 25 А, слабый блок на пуске уходит в защиту. Помогают плавный пуск (в примере есть) и электролит 470–1000 мкФ на 25 В и выше на клеммах S+ и S−, например пара конденсаторов 220 мкФ × 35 В параллельно. Аккумулятор к броскам спокойнее.
- Упор и реверс на ходу. Редуктор пластиковый: вал под напряжением не стопорить — зубья срезает; если привод может упереться, ставьте концевик или ограничивайте время в программе. Реверс только через остановку, иначе двойной ток и удар по зубьям. Корпус крепите жёстко: момент большой.
- Мотор гудит на ШИМ. Стандартные 490 Гц Arduino слышно гулом. В примере частота на выводах 9 и 10 поднята до 3,9 кГц строкой TCCR1B = (TCCR1B & 0b11111000) | 0b00000010; Выше 25 кГц драйверу нельзя; выводы 5 и 6 не трогайте — на их таймере millis() и delay().
Пример
Мотор плавно разгоняется вперёд, работает, тормозит, ждёт остановки и едет назад.
const uint8_t PIN_EN = 9; // К L_EN и R_EN драйвера (вместе). Обязательно с ШИМ
const uint8_t PIN_LPWM = 7; // К входу L_PWM. Любой цифровой
const uint8_t PIN_RPWM = 8; // К входу R_PWM. Любой цифровой
const uint8_t SPEED = 200; // Скорость 0...255. Начните с небольшой
const uint16_t RAMP_MS = 1500; // Время разгона и торможения, мс
const uint16_t WORK_MS = 3000; // Сколько крутим на рабочей скорости
const uint16_t PAUSE_MS = 1000; // Пауза перед реверсом: вал должен остановиться
void setup(){
pinMode(PIN_EN, OUTPUT);
pinMode(PIN_LPWM, OUTPUT);
pinMode(PIN_RPWM, OUTPUT);
analogWrite(PIN_EN, 0); // Пока нет ШИМ на EN, мотор свободен
TCCR1B = (TCCR1B & 0b11111000) | 0b00000010; // ШИМ на выводах 9 и 10 -> около 3,9 кГц: мотор не гудит
} // Таймер 0 (выводы 5 и 6) не трогаем: там millis() и delay()
void motorDirection(bool forward){ // Направление задаём ДО подачи скорости
digitalWrite(PIN_LPWM, forward ? LOW : HIGH);
digitalWrite(PIN_RPWM, forward ? HIGH : LOW );
}
void motorRamp(uint8_t from, uint8_t to, uint16_t ms){ // Плавно меняем скорость: без броска тока
int16_t steps = (from < to) ? (to - from) : (from - to);
if(steps == 0){ analogWrite(PIN_EN, to); return; }
uint16_t pause = ms / steps;
for(int16_t i = 0; i <= steps; i++){
analogWrite(PIN_EN, (from < to) ? (from + i) : (from - i));
delay(pause);
}
}
void loop(){
motorDirection(true); // Вперёд
motorRamp(0, SPEED, RAMP_MS); // Плавно разгоняемся
delay(WORK_MS); // Крутим
motorRamp(SPEED, 0, RAMP_MS); // Плавно тормозим
delay(PAUSE_MS); // Ждём остановки: реверс на ходу ломает редуктор
motorDirection(false); // Назад
motorRamp(0, SPEED, RAMP_MS);
delay(WORK_MS);
motorRamp(SPEED, 0, RAMP_MS);
delay(PAUSE_MS);
}
Комплектация
- 1 × мотор-редуктор RS550-15000, 12 В.
















