Робомото — драйвер моторов для робота на Arduino

Робомото — это модуль расширения для плат Arduino, который позволяет управлять моторами постоянного тока и сервомоторами.

Версия A2M5-12 предназначена для управления двумя моторами с рабочим током до 5 А и напряжением от 6 до 12 В.

Особенности

  • встроенный стабилизатор напряжения для питания микроконтроллера;

  • два драйвера моторов постоянного тока, которые подойдут для всех популярных в DIY моторов: JGA25, JGB37, 20GP-180 и пр;

  • кнопка выключения питания;

  • встроенный делитель напряжения для оценки напряжения на входе;

  • массив тройных штырьков для подключения прочей периферии к Arduino.

Робомото

Моторы управляются по схеме IN1/IN2/EN. Подробная инструкция по управлению моторами.

Совет

См. также материал «Управление мотором постоянного тока» в разделе уроков AlashEd Wiki.

Подключение

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

Источник питания подключается к контактам VIN и GND.

Робомото питание

Кнопка питания

На модуле Робомото имеется силовой ключ на базе МОП-транзистора. Выключатель PSW управляет током через этот транзистор и позволяет выключать и включать внешнее питание модуля.

Если доступ к встроенному выключателю затруднён, то с помощью соответствующих контактов можно подключить внешний выключатель.

Робомото вылючатель

Стабилизатор напряжения

Для удобного питания отладочной платы Arduino, на Робомото предусмотрен стабилизатор напряжения. Стабилизатор обеспечивает выходной ток до 3А, чего хватит и на питание микроконтроллера и на различную периферию, включая несколько сервомоторов типа SG90 или один мотор MG995.

Робомото стабилизатор напряжения

Моторы

Моторы подключаются к винтовым клеммам M1 и M2.

Робомото подключение моторов

Контакты GPIO

Все неиспользованные GPIO контакты Arduino выведены на массив трёхконтактных разъёмов. К таким разъёмам удобно подключать датчики и сервомоторы.

Робомото GPIO

Индикация

Слева расположены индикаторы направления вращения мотора: IN1/IN2 и IN3/IN4. С помощью этих индикаторов можно оценивать направление вращения, даже если при этом сам мотор не подключен.

Индикатор 13 — это штатный светодиод платы Arduino, выведенный на контакт D13.

Наконец, PWR — это индикатор выходного питания на стабилизаторе.

Робомото индикация

Дополнительно

Перемычка VSENSE подключает делитель напряжения к контакту Arduino — A0. Вход делителя подключен к входному напряжению VIN. Отношение делителя : 5/1, то есть при напряжении 12В на VIN делитель даст 2,4 В.

С помощью делителя можно оценивать входное напряжение.

Робомото датчик напряжения

Перемычки MCU позволяют выбрать подходящий источник питания для Arduino:

  • если перемычка MCU стоит на VIN, то VIN модуля подключается к контакту Vin на Arduino;

  • если перемычка MCU стоит на 5V, то выход стабилизатора 5В подключается к контакту +5V на Arduino.

Робомото питание Arduino

Программа

Драйвер управляется сигналами вида IN1/IN2/EN. Уровни IN1 и IN2 определяют направление вращения мотора. На EN передаётся ШИМ.

Напишем тестовую программу, которая будет вращать моторами в разные стороны. Установим на EN1 и EN2 сигнал ШИМ с коэффициентом заполнения 0,5.

const byte in1Pin = 4;
const byte in2Pin = 7;
const byte en1Pin = 5;

const byte in3Pin = 8;
const byte in4Pin = 12;
const byte en2Pin = 6;

void setup() {
    pinMode(in1Pin, OUTPUT);
    pinMode(in2Pin, OUTPUT);
    pinMode(en1Pin, OUTPUT);

    pinMode(in3Pin, OUTPUT);
    pinMode(in4Pin, OUTPUT);
    pinMode(en2Pin, OUTPUT);

    // коэффициент заполнения ШИМ - 0,5
    analogWrite(en1Pin, 128);
    analogWrite(en2Pin, 128);
}

void loop() {
    // моторы вперёд
    digitalWrite(in1Pin, HIGH);
    digitalWrite(in2Pin, LOW);

    digitalWrite(in3Pin, HIGH);
    digitalWrite(in4Pin, LOW);
    delay(1000);

    // стоп моторы
    digitalWrite(in1Pin, LOW);
    digitalWrite(in2Pin, LOW);
    digitalWrite(in3Pin, LOW);
    digitalWrite(in4Pin, LOW);
    delay(1000);

    // моторы назад
    digitalWrite(in1Pin, LOW);
    digitalWrite(in2Pin, HIGH);

    digitalWrite(in3Pin, LOW);
    digitalWrite(in4Pin, LOW);
    delay(1000);

    // stop
    digitalWrite(in1Pin, LOW);
    digitalWrite(in2Pin, LOW);
    digitalWrite(in3Pin, LOW);
    digitalWrite(in4Pin, LOW);
    delay(1000);
}