Цена:
L298N - это один из наиболее популярных драйверов двигателей. Он содержит в себе два H-моста, и позволяет управлять направлением и скоростью вращения двух двигателей постоянного тока (или одним шаговым двигателем, хотя для них существуют более специализированные микросхемы). Модули, построенные на базе этой микросхемы, содержат все необходимые компоненты обвязки, выводы и клеммы, что облегчает их применение.
Двигатели постоянного тока являются одними из основных компонентов в робототехнике. Но зачастую им требуется напряжение, превышающее напряжение питания микроконтроллера. И даже если двигатель рассчитан на 3-5 вольт, он может потреблять значительный ток - сотни миллиампер и более. Это означает, что его нельзя подключать напрямую к выводам Ардуино, т.к. это приведёт к повреждению микроконтроллера. Как же быть?
Простейшее решение - это использовать некий ключ, например, транзистор, который будет управляться цифровым выводом Ардуино и запускать двигатель:
Это вполне рабочее решение, с его помощью можно даже управлять скоростью вращения двигателя, если подключить транзистор к выводу Ардуино с поддержкой ШИМ. Однако оно не позволит менять полярность напряжения на двигателе, а значит мы не сможем менять направление вращения. Чтобы решить эту проблему нам придётся усложнить схему, добавив в неё еще несколько деталей:
Приведённая схема получила название H-моста благодаря её графическому изображению, напоминающему букву H. При таком соединении транзисторы при подаче на них управляющих сигналов будут открываться попарно: либо Q1 и Q4, либо Q2 и Q3. Таким образом обеспечивается изменение полярности напряжения, прикладываемого к нагрузке (мотору). К счастью, нам не придётся собирать подобную схему самостоятельно, поскольку она уже доступна в виде готовых микросхем. Такие микросхемы называют драйверами двигателей. И одной из них является микросхема L298N.
Драйвер L298N довольно мощный. Он способен питать двигатели напряжением до 46 вольт. Максимальный допустимый ток составляет 2 ампера на канал. При этом для работы самого драйвера требуется напряжение 4.5-7 вольт, а потребляемый им ток не превышает 70 миллиампер. Подробные технические характеристики драйвера L298N можно найти в даташите.
На плате модуля имеются 6 управляющих выводов: ENA - позволяет управлять скоростью первого двигателя при помощи ШИМ сигнала, IN1 и IN2 - направлением его вращения. ENB, IN3, IN4, соответственно, отвечают за второй двигатель. Если вы не планируете управлять скоростью вращения, то можете подтянуть выводы ENA и ENB к линии питания, установив соответствующие перемычки.
Также на плате присутствует перемычка выбора источника питания для работы драйвера. При установленной перемычке драйвер будет работать от источника питания двигателей через стабилизатор 78M05; при снятой - от линии +5V
Если вы питаете двигатели напряжением 4-5.5 В, то есть нет необходимости понижать его для драйвера, то перемычку выбора питания следует снять, а напряжение подвести к выводам +12V и +5V. Если напряжение источника превышает указанный диапазон, то подводим его только к +12V и устанавливаем перемычку.
Логика управления двигателем с использованием драйвера L298N отражена в следующей таблице:
Состояние входов | Назначение | |
ENA = HIGH | IN1 = HIGH, IN2 = LOW | Движение вперёд |
IN1 = LOW, IN2 = HIGH | Движение назад | |
IN1 = IN2 | Тормоз (выводы двигателя закорачиваются) | |
ENA = LOW | IN1 = X, IN2 = X | Двигатель обесточен |
Данные в таблице приведены для первого двигателя. Для второго принцип тот же, но используются ENB, IN3 и IN4.
Данная схема предполагает использование общего источника питания для Ардуино, драйвера двигателей и самих двигателей. Перемычка выбора питания для L298N установлена. Теперь остаётся загрузить в Ардуино скетч, который будет управлять работой двигателей. Пример такого скетча приведён ниже.
// Мотор A
const byte pin_M1_speed = 9;
const byte pin_M1_dir1 = 2;
const byte pin_M1_dir2 = 3;
// Мотор B
const byte pin_M2_speed = 10;
const byte pin_M2_dir1 = 4;
const byte pin_M2_dir2 = 5;
void setup() {
pinMode(pin_M1_speed, OUTPUT);
pinMode(pin_M1_dir1, OUTPUT);
pinMode(pin_M1_dir2, OUTPUT);
pinMode(pin_M2_speed, OUTPUT);
pinMode(pin_M2_dir1, OUTPUT);
pinMode(pin_M2_dir2, OUTPUT);
}
void loop() {
// Выставляем направление вращения
digitalWrite(pin_M1_dir1, HIGH);
digitalWrite(pin_M1_dir2, LOW);
digitalWrite(pin_M2_dir1, HIGH);
digitalWrite(pin_M2_dir2, LOW);
// В цикле наращиваем скорость
for (byte i = 100; i < 250; i += 10) {
analogWrite(pin_M1_speed, i);
analogWrite(pin_M2_speed, i);
delay(500);
}
// Меняем направление вращения
digitalWrite(pin_M1_dir1, LOW);
digitalWrite(pin_M1_dir2, HIGH);
digitalWrite(pin_M2_dir1, LOW);
digitalWrite(pin_M2_dir2, HIGH);
// Уменьшаем скорость в цикле
for (byte i = 250; i > 100; i -= 10) {
analogWrite(pin_M1_speed, i);
analogWrite(pin_M2_speed, i);
delay(500);
}
// Тормоз
digitalWrite(pin_M1_dir2, LOW); // pin_M1_dir1 и pin_M2_dir1 уже установлены в LOW
digitalWrite(pin_M2_dir2, LOW);
delay(3000);
}
Для удобства код установки скорости и направления вращения можно вынести в отдельные процедуры и вызывать их по мере необходимости.
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru