Драйвер двигателя позволяет пользователю управлять мотором с помощью микроконтроллера. Напрямую соединять вывод микроконтроллера и мотор запрещается, поскольку большое потребление двигателем тока приведет к поломке управляющей платы. Модуль используется при сборке робототехнических устройств, электромагнитов и в других случаях, когда требуется управлять мощной нагрузкой.
Суть использования драйвера заключается в согласовании уровней напряжения, поскольку имеется логическая низковольтная цепь, она же командная, напряжение в которой не превышает 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); }
Теперь моторы сначала вращаются с небольшой скоростью, затем переходят на увеличенные обороты, и повторяют все в обратном направлении.