Драйвер моторов на базе микросхемы L298N позволяет управлять двумя моторами и светодиодными лентами постоянного тока, либо шаговым двигателем с потребляемым током до 2 Ампер. Далее попробуем подключить и мотор и светодиод.
Чередование разноименных сигналов (высокий логический уровень или низкий) на парах выводов IN1, IN2 и IN3, IN4 задают направление вращения моторов.
Выводы ENABLE A, B (ENA привязан к IN1, IN2. ENB к IN3, IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:
- Условно "активном" режиме, когда ими будет управлять контроллер - высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов "IN". Для регулировки скорости моторов, на "EN" выводы подается ШИМ (PWM) сигнал. (рис.а1)
- Условно "пассивном" режиме, просто притянув выводы "EN" к высокому уровню (+5V). Для этого на плате, рядом с выводами ENA и ENB находятся штырьки соединенные с +5V. Замыкаем выводы с помощью джамперов (рис.а2). В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться в полную скорость (за то для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль.Для остановки нужно будет подавать одноименные сигналы на выоды "IN".
Подключение мотора и светодиода к модулю L298N
Вместо одного мотора будем подключать светодиод на 12В (см. видео ниже). Можете также использовать светодиодную ленту, только учтите что модуль при токе более более 2 ампер будет сильно греться.
Скетч
int IN1 = 7; int IN2 = 6; int IN3 = 5; int IN4 = 4; int ENA = 9; //ШИМ выход 1 int ENB = 3; //ШИМ выход 2 int i; int spd = 10; //задержка при изменении скорости, чем меньше тем быстрее void setup() { pinMode (ENA, OUTPUT); //ШИМ выход 1 pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (ENB, OUTPUT); //ШИМ выход 2 pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); digitalWrite (IN3, LOW); //полярность для светодиода "-" digitalWrite (IN4, HIGH); //полярность для светодиода "+" } void loop() { digitalWrite (IN2, HIGH); //полярность для мотора "-" digitalWrite (IN1, LOW); //полярность для мотора "+" for (i = 0; i < 250; i++) { //цикл разгона analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); } delay(2000); //ждем 2 сек for (i = 250; i > 0; i--) { //цикл торможения analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); } analogWrite (ENA, 0); analogWrite (ENB, 0); delay(500); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); for (i = 0; i < 250; i++) { analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); } delay(2000); for (i = 250; i > 0; i--) { analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); } analogWrite (ENA, 0); analogWrite (ENB, 0); delay(3000); }