L9110 2X Motor Driver - драйвер для двигателей постоянного тока

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

Принцип работы

Суть использования драйвера заключается в согласовании уровней напряжения, поскольку имеется логическая низковольтная цепь, она же командная, напряжение в которой не превышает 5 вольт, также имеется цепь питания электродвигателя, потребление которого зависит от типа подключаемого двигателя и может составлять, например, 12 вольт. Также важно знать, что максимальный ток, который способен выдать порт микроконтроллера - 20 мА, тогда как потребляемый ток мотора может составлять, например, 2А, то есть в 100 раз больше. Если попытаться подключить двигатель к контроллеру напрямую - контроллер неизбежно выйдет из строя.

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

Модуль на базе микросхемы L9110 содержит сразу два драйвера для управления электродвигателями небольшой мощности (четыре независимых канала, объединенных в две пары). Имеет две пары входов для управляющих сигналов и две пары выходов для подключения электромоторов. Кроме того, у модуля есть два входа для включения каждого из драйверов. Эти входы используются для управления скоростью вращения электромоторов с помощью широтно-импульсной модуляции сигнала (ШИМ).

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

Подключение

Подключение осуществляется с помощью макетных проводов. Выводы модуля имеют следующие назначения:

MOTOR 5 - 12V - питание платы (питание двигателей и питание микросхемы драйвера двигателей)

IN3, IN4 - управление направлением вращения и скоростью двигателя М2

GND - земля (общий)

IN1, IN2 - управление направлением вращения и скоростью двигателя М1

GND - земля (общий)

M1, M2 - подключение двигателей постоянного тока

Кроме драйвера нам понадобится контроллер 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);
}

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