Драйвер двигателя позволяет пользователю управлять мотором с помощью микроконтроллера. Напрямую соединять вывод микроконтроллера и мотор запрещается, поскольку большое потребление двигателем тока приведет к поломке управляющей платы. Модуль используется при сборке робототехнических устройств, электромагнитов и в других случаях, когда требуется управлять мощной нагрузкой.
Суть использования драйвера заключается в согласовании уровней напряжения, поскольку имеется логическая низковольтная цепь, она же командная, напряжение в которой не превышает 5 вольт, также имеется цепь питания электродвигателя, потребление которого зависит от типа подключаемого двигателя и может составлять, например, 12 вольт. Также важно знать, что максимальный ток, который способен выдать порт микроконтроллера - 20 мА, тогда как потребляемый ток мотора может составлять, например, 2А, то есть в 100 раз больше. Если попытаться подключить двигатель к контроллеру напрямую - контроллер неизбежно выйдет из строя.
Управление двигателями происходит через некий "переходник" между контроллером и мотором, им слушит драйвер, который обычно выполнен в виде микросхемы. В итоге команда, принятая микросхемой от контроллера, замыкает цепь питания двигателя и он начинает работать.
Модуль на базе микросхемы L298N - самый мощный модуль для управления направления и скорости вращения двигателей. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4А. Рабочее напряжение двигателей от 5В до 36В.
Модель содержит сразу два драйвера для управления электродвигателями (четыре независимых канала, объединенных в две пары). Имеет две пары входов для управляющих сигналов и две пары выходов для подключения электромоторов. Кроме того, у L298N есть два входа для включения каждого из драйверов. Эти входы используются для управления скоростью вращения электромоторов с помощью широтно-импульсной модуляции сигнала (ШИМ).
Подключение осуществляется с помощью макетных проводов. Выводы модуля имеют следующие назначения:
VCC 5V - питание микросхемы драйвера двигателей
MOTOR 2.5 - 36V - питание двигателей
IN3, IN4 - управление направлением вращения и скоростью двигателя М2
GND - земля (общий)
IN1, IN2 - управление направлением вращения и скоростью двигателя М1
GND - земля (общий)
M1, M2 - подключение двигателей постоянного тока
Кроме драйвера понадобится контроллер 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); }
Теперь моторы сначала вращаются с небольшой скоростью, затем переходят на увеличенные обороты, и повторяют все в обратном направлении.