Подключение драйверов двигателя

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

Использование драйверов двигателей в проектах

Как известно, контроллер Arduino имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода — и того меньше, 40mA. Мы не можем подключить напрямую к контроллеру даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.
Как же тогда подключить двигатель к Arduino, да так чтобы можно было управлять направлением и скоростью вращения двигателя?
В этом нам поможет специальная схема подключения, называемая H-мостом, с помощью которой мы можем изменять направление и скорость вращения двигателя. Но собирать ее не нужно, так как уже существуют модули с использованием Н-моста, которые могут управлять сразу двумя двигателями постоянного тока.

Принцип действия H-моста

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

В зависимости от текущего состояние переключателей возможно разное состояние мотора.

Какие бывают драйверы двигателя?

На данный момент распространены три разновидности драйверов:

1. На микросхемах 9110S.
Двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может. Питание для двигателей от 2,5В до 12В.

2. На микросхеме L293D.
Этот модуль на микросхеме L293D является самым популярным драйвером для работы с двигателями. L293D более мощный, чем его предшественник, и может не только изменять направление вращения, но скорость. Рабочее напряжение двигателей от 5В до 36 В, рабочий ток достигает 600 мА. На двигатель L293D может подавать максимальный ток в 1,2А.

3. На микросхеме L298D.
Это самый мощный модуль для управления направления и скорости вращения двигателей. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4А. Рабочее напряжение двигателей от 5В до 36В.

Подключение драйвера двигателя к Arduino

Все модули подключаются одинаково. В качестве примера мы возьмем самый популярный драйвер двигателя на L293D микросхеме.
Кроме драйвера нам понадобится контроллер DaVinci пару моторов постоянного тока, соединительные провода и дополнительный источник питания, так как контроллер выдает маленькие токи и двигатели необходимо запитать отдельным источником питания к контакту MOTOR 5-36V (у драйвера на 9110S микросхемах используется один контакт для подключения питания модуля и двигателей, сточник питания может быть от 5В до 12В).
Управление двигателей производится с помощью ШИМ сигналов через контакты IN1..IN4.
Двигатели подключаются к клеммам М1 и М2. При этом не имеет значения соблюдать полярность, ее можно поменять программно.

Собираем схему согласно рисунку.

Программа

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

#define M1 3
#define DIRECTION1 9

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
}

void loop() {
  digitalWrite(M1, LOW);
  digitalWrite(DIRECTION1, HIGH);
  delay(1000);
  
  digitalWrite(M1, HIGH);
  digitalWrite(DIRECTION1, LOW);
  delay(1000);
}

Теперь усложним программу. Будем кроме направления менять еще и мощность.

#define M1 3
#define DIRECTION1 9

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
}

void loop() {
  analogWrite(M1, 255);
  digitalWrite(DIRECTION1, LOW);
  delay(2000);
  
  analogWrite(M1, 130);
  digitalWrite(DIRECTION1, LOW);
  delay(2000);

  
  analogWrite(M1, 125);
  digitalWrite(DIRECTION1, HIGH);
  delay(2000);
  
  analogWrite(M1, 0);
  digitalWrite(DIRECTION1, HIGH);
  delay(2000);
}

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

А теперь задействуем второй двигатель.

#define M1 3
#define M2 6
#define DIRECTION1 9
#define DIRECTION2 12

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(M2, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
   pinMode(DIRECTION2, OUTPUT);
}

void loop() {
  analogWrite(M1, 100);
  digitalWrite(DIRECTION1, LOW);
  analogWrite(M2, 100);
  digitalWrite(DIRECTION2, LOW);
  delay(1000);
  
  analogWrite(M1, 200);
  digitalWrite(DIRECTION1, LOW);
  analogWrite(M2, 200);
  digitalWrite(DIRECTION2, LOW);
  delay(2000);
  
  analogWrite(M1, 155);
  digitalWrite(DIRECTION1, HIGH);
  analogWrite(M2, 155);
  digitalWrite(DIRECTION2, HIGH);
  delay(2000);
  
  analogWrite(M1, 55);
  digitalWrite(DIRECTION1, HIGH);
  analogWrite(M2, 55);
  digitalWrite(DIRECTION2, HIGH);
  delay(1000);
}

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

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