L293D Драйвер для 2-х двигателей постоянного тока

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

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

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

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

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

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

Подключение

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

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

MOTOR 2.5 - 36V - питание двигателей

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

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

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

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

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

Для контроля скорости вращения с помощью широтно-импульсной модуляции (ШИМ) имеются отдельные входы. Для генерации ШИМ-сигнала можно использовать специальные микросхемы либо платформу Arduino.

Кроме драйвера понадобится контроллер DaVinci, два мотора постоянного тока, соединительные провода и дополнительный источник питания, так как контроллер выдает маленькие токи и на двигатели необходимо подавать питание отдельным источником питания к контакту MOTOR 5-36V.

Управление двигателями производится с помощью ШИМ сигналов через контакты 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);
}

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