Драйвер для двух моторов с напряжением питания до 46В, постоянным током до 2А с пиками до 3А. Чип L298N содержит в себе мощный мостовой драйвер из двух H-мостов. Позволяет регулировать направление и скорость вращения независимо для каждого мотора.
Переключатели на плате:
VLO (Voltage Logic Onboard):
Чип L298N работает с двумя напряжениями: логическое напряжение (5В) т напряжение питания моторов (например 7.2В, 9В, 12В в зависимости от типа двигателя). Для конвертирования напряжения питания мотора от клемы VEX к логическому 5В напряжению служит соответствующая схема преобразования напряжения.
Посколько напряжение в этой цепи ограничено 20В моторы, которые питаются большим напряжением не могут использовать эту схему. Переключатель VLO на плате служит для включения схемы логического преобразования напряжения (положение "ON") или выключения (положение "OFF").
(VLC) (Voltage Logic Connected):
Кроме того что шилд может питаться от схемы преобразования напряжения, он так же может питаться напрямую от 5В поданных от платы Arduino. Для этого надо подать на клему 5V напряжение 5В от платы Arduino. Переключатель VLC позволяет выбрать откуда питаться шилду - от клемы 5V (положение "ON") или нет (положение "OFF").
VM (Voltage Motor):
Переключатель VM служит для выбора напряжения моторов. Когда шилд подключен к Arduino есть два пути питания моторов:
-
От Vin пина платы Arduino (переключатель на VIN)
-
От клемы VEX (переключатель на VEX)
По сравнению с Arduino, шилд с L298N может нести более высокое напряжение и ток, поэтому надо быть очень внимательными и осторожными при подключении.
Типичные схемы подключения:
1. Напряжение моторов от 6 до 12В
Плата Arduino может питаться внешним напряженим от 6 до 12В (пин Vin платы Arduino), если напряжение моторов в этом диапазоне, можно просто использовать внешнее питание одновременно для Arduino и моторов. В этом случае переключатели должны быть выставлены так:
* VLO : OFF
* VLC : ON
* VM : VIN
2. Напряжение моторов менее 6В
Питать моторы в этом случае можно только через клемы VEX и GND на шилде, так как 5В сехма преобразования напряжения на шилде не сможет работать (напряжение VEX слишком низкое), таким образом мы можем только подключить 5В клему Arduino для питания 5В логического напряжения нашего шилда. В этом случае переключатели должны быть выставлены так:
* VLO : OFF
* VLC : ON
* VM : VEX
3. Напряжение моторов от 12 до 20В
Запитать моторы в этом случае получится только от клемы VEX и GND, но 5В схема преобразования напряжения может работать. Таким образом переключатели следует выставить так:
* VLO : ON
* VLC : OFF
* VM : VEX
4. Напряжение моторов от 20 до 46В
Запитать моторы в этом случае получится только от клемы VEX и GND, поскольку 5В схема преобразования напряжения работать не будет (напряжение на VEX слишком высокое), поэтому можно только подключить 5В клему Arduino для питания логического напряжения нашего шилда. Переключатели выставляются так:
* VLO : OFF
* VLC : ON
* VM : VEX
Для управлением направления движения мотора А используются выводы платы Arduino 13 и 12, скорость контролируется выводом 10. Для мотора В направление управляется через выводы 11 и 8, скорость через 9й. На плате имеется 4 светодиода, чтобы показать направление вращения двигателей, а их яркость соответствует скорость.
Пример скетча:
// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;
// motor B
// motor A
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;
unsigned long time;
int speed;
int dir;
void setup() {
pinMode(dir1PinA, OUTPUT);
pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT);
pinMode(dir1PinB, OUTPUT);
pinMode(dir2PinB, OUTPUT);
pinMode(speedPinB, OUTPUT);
time = millis();
speed = 0;
dir = 1;
}
void loop() {
analogWrite(speedPinA, speed);
analogWrite(speedPinB, 255 - speed);
// set direction
if (1 == dir) {
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
} else {
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
if (millis() - time > 5000) {
time = millis();
speed += 20;
if (speed > 255) {
speed = 0;
}
if (1 == dir) {
dir = 0;
} else {
dir =1;
}
}
}
Ссылки: