Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

  • Драйвер двигателей L298N.
  • Подключение к Arduino.
  • Управление двигателем постоянного тока с применением драйвера l298n и arduino unoУправление двигателем постоянного тока с применением драйвера l298n и arduino uno

     Motor Shield разработан на базе микросхемы L298N. Позволяет управлять двумя моторами постоянного тока, либо одним шаговым двигателем. Максимальный потребляемый ток не должен превышать 2 Ампера. 

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

     В отличие от известной микросхемы L293D, в более мощный драйвер L298N не встроены защитные диоды. Их необходимо устанавливать в обвязку микросхемы дополнительно. На обозреваемом модуле мы можем увидеть эти диоды (4 штуки слева и 4 справа от микросхемы).

     По выполняемым функциям  L298N и L293D схожи чуть более чем полностью. Имеются те же управляющие выводы – IN1 и IN2, IN3 и IN4, ENA и ENB. Чередование сигналов разного уровня (высокий и низкий логический уровень) на парах выводов задаёт направление вращения моторов.

     Выводы ENA (привязан к IN1 и IN2) и ENB (привязан к IN3 и IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:

1.       Активный режим. Управление возлагается на контроллер (рис.а1). Высокий логический уровень разрешает вращение моторов, низкий запрещает, при этом уровни сигнала на выводах “IN” не имеет значения. Подавая на выводы “EN” ШИМ (PWM) сигнал, можно управлять скоростью вращения моторов.

2.       Пассивный режим. Подключение выводов “EN” к высокому уровню (+5 Вольт). Для этого на плате с помощью джамперов замыкаем штырьки +5V и EN, как показано на рис.а2.

В таком режиме мы уже не сможем регулировать скорость двигателей, они всегда будут работать на полной скорости. Зато мы экономим два вывода микроконтроллера. Направление вращение по-прежнему задаётся состоянием выводов “IN”.

А вот чтобы остановить двигатель, на парные выводы “IN” подаём сигнал одного уровня. В примерах программного кода в конце статьи все эти моменты подробно пояснены в комментариях.

  1. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno
  2.      Разъём для подачи питания и работа стабилизатора.
  3.   Подключение моторов к модулю L298N
  4. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno
  5.    В первом примере рассмотрим подключение одного мотора без регулировки скорости. 
  6. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno
  7.      Программный код:

int IN3 = 5; // Input3 подключен к выводу 5
int IN4 = 4;

void setup()
{
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
}
void loop()
{
// На пару выводов «IN» поданы разноименные сигналы, мотор вращается
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
delay(4000);
// На пару выводов «IN» поданы одноименные сигналы, мотор не вращается
digitalWrite (IN4, LOW);
delay(500);
// На пару выводов «IN» поданы разноименные (и уже противоположные относительно первого случая) сигналы, мотор вращается
// относительно первого случая) сигналы, мотор вращается в другую сторону
digitalWrite (IN3, HIGH);
delay(4000);
// Снова на выводах «IN» появились одноименные сигналы, мотор не вращается
digitalWrite (IN3, LOW);
delay(5000);
}

——————————————————————————————————————————————————————————————————————————-

Во втором примере подсоединим ENB к выводу ШИМ (D3). Таким образом мы задействуем возможность драйвера управлять скоростью, меняя скважность ШИМ сигнала.

Значение скважности устанавливается функцией analogWrite(pin, ЗНАЧ), где ЗНАЧ изменяется от 0 до 255, прямо пропорционально скважности сигнала.

В скетче подобраны четыре значения, при которых двигатель стартует с низких оборотов, набирает средние, затем высокие и останавливается.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

   Программный код:

int IN3 = 5; // Input3 подключен к выводу 5
int IN4 = 4;
int ENB = 3;
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
// На пару выводов «IN» поданы разноименные сигналы, мотор готов к вращению
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// подаем на вывод ENB управляющий ШИМ сигнал
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
// Останавливаем мотор, подав на вывод ENB сигнал низкого уровня.
// Состояние выводов «IN» роли не играет.
analogWrite(ENB,0);
delay(5000);
}

  • ——————————————————————————————————————————————————————————————————————————-
  • Третий пример предлагает подключить два двигателя с регулировкой скорости. В приведённом ниже скетче два мотора будут вращаться с плавным набором скорости
  • Управление двигателем постоянного тока с применением драйвера l298n и arduino uno
  •    Программный код:

int IN1 = 5; // Input1 подключен к выводу 5
int IN2 = 4;
int IN3 = 3;
int IN4 = 2;
int ENA = 9;
int ENB = 3;
int i;
void setup()
{
pinMode (EN1, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (EN2, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
}
void loop()
{
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW);
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
for (i = 50; i

Источник: http://robstore.ru/l298n_manual.html

Драйверы двигателя L298N, L293D и Arduino Motor Shield

Драйвер двигателя выполняет крайне важную роль в проектах ардуино, использующих двигатели постоянного тока или шаговые двигатели.

C помощью микросхемы драйвера или готового шилда motor shield можно создавать мобильных роботов, автономные автомобили на ардуино и другие устройства с механическими модулями.

В этой статье мы рассмотрим подключение к ардуино популярных драйверов двигателей на базе микросхем L298N и L293D.

Драйвер двигателя в проектах ардуино

Для чего нужен драйвер двигателя?

Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA.

Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока.

Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока,  превышающие этот предел.

Как же тогда подключить двигатель к ардуино? Есть несколько вариантов действий:

Использовать реле. Мы включаем двигатель в отдельную электрическую сеть, никак не связанную с платой Arduino. Реле по команде ардуино замыкает или размыкает контакты, тем самым включает или выключает ток.

Соответственно, двигатель включается или выключается.

Главным преимуществом этой схемы является ее простота и возможность использовать  Главным недостатком данной схемы является то, что мы не можем управлять скоростью и направлением вращения.

Использовать силовой транзистор. В данном случае мы можем управлять током, проходящим через двигатель, а значит, можем управлять скоростью вращения шпинделя. Но для смены направления вращения этот способ не подойдет.

Использовать специальную схему подключения, называемую H-мостом, с помощью которой мы можем изменять направление движения шпинделя двигателя. Сегодня можно без проблем найти как микросхемы, содержащие два или больше H-моста, так и отдельные модули и платы расширения, построенные на этих микросхемах.

В этой статье мы рассмотрим последний, третий вариант, как наиболее гибкий и удобный для создания первых роботов на ардуино.

Микросхема или плата расширения Motor Shield

Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе чипов L298N и L293D, которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения.

Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство. Все это делает использование драйвера очень простым и надежным – не нужно самим изобретать велосипеды и решать уже кем-то решенные проблемы.

В этой статье мы будем говорить именно о шилдах.

Принцип действия H-моста

Управление двигателем постоянного тока с применением драйвера l298n и arduino unoПринцип работы драйвера двигателя основан на принципе работы H-моста. H-мост является электронной схемой, которая состоит из четырех ключей с нагрузкой. Название моста появилось из напоминающей букву H конфигурации схемы.

Схема моста изображена на рисунке. Q1…Q4 0 полевые, биполярные или  IGBT транзисторы. Последние используются в высоковольтных сетях. Биполярные транзисторы практически не используются, они могут присутствовать в маломощных схемах.

Для больших токов берут полевые транзисторы с изолированным затвором. Ключи не должны быть замкнуты вместе одновременно, чтобы не произошло короткого замыкания источника. Диоды D1…D4 ограничительные, обычно используются диоды Шоттки.

С помощью изменения состояния ключей на H-мосте можно регулировать направление движения и тормозить моторы. В таблице приведены основные состояния и соответствующие им комбинации на пинах.

Q1 Q2 Q3 Q4 Состояние
1 1 Поворот мотора вправо
1 1 Поворот мотора влево
Свободное вращение
1 1 Торможение
1 1 Торможение
1 1 Короткое замыкание
1 1 Короткое замыкание

Драйвер двигателя L298N

Модуль используется для управления шаговыми двигателями с напряжением от 5 до 35 В.  При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2 А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4 А.

Плата выглядит следующим образом:

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Распиновка микросхемы L298N:

  • Vcc – используется для подключения внешнего питания;
  • 5В;
  • Земля GND;
  • IN1, IN2, IN3, IN4 – используется для плавного управления скоростью вращения мотора;
  • OUT1, OUT2 – используется для выхода с первого двигателя;
  • OUT3, OUT4 – используется для выхода со второго двигателя;
  • S1 – переключает питание схемы: от внешнего источника или от внутреннего преобразователя;
  • ENABLE A, B – требуются для раздельного управления каналами. Используются в двух режимах – активный, при котором каналами управляет микроконтроллер и имеется возможность изменения скорости вращения, и пассивный, в котором невозможно управлять скоростью двигателей (установлено максимальное значение).

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

При подключении двух двигателей, нужно проверить, чтобы у них была одинаковая полярность. Если полярность разная, то при задании направления движения они будут вращаться в противоположные стороны.

Драйвер двигателя L293D

L293D – является самой простой микросхемой для работы с двигателями. L293D обладает двумя H-моста, которые позволяют управлять двумя двигателями. Рабочее напряжение микросхемы – 36 В, рабочий ток достигает 600 мА. На двигатель L293D может подавать максимальный ток в 1,2 А.

В схеме имеется 16 выходов. Распиновка:

  • +V – питание на 5 В;
  • +Vmotor – напряжение питания для мотором до 36 В;
  • 0V – земля;
  • En1, En2 –включают и выключают H-мосты;
  • In1, In2 – управляют первым H-мостом;
  • Out1, Out2 – подключение первого H-моста;
  • In3, In4 – управляют вторым H-мостом;
  • Out3, Out4 – подключение второго H-моста.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Для подключения к микроконтроллеру Arduino Uno нужно соединить выходы In1 на L293D и 7 пин на Ардуино, In2 – 8, In3 – 2, In4 – 3, En1 – 6, En2 – 5, V – 5V, Vmotor – 5 V, 0V – GND. Пример подключения одного двигателя к Ардуино показан на рисунке.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Драйвер двигателя на микросхеме HG7881

HG7881 – двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Плата содержит 2 схемы L9110S, работающие как H-мост.

Характеристики драйвера HG7881:

  • 4-контактное подключение;
  • Питание для двигателей от 2,5 В до 12 В;
  • Потребляемый ток менее 800 мА;
  • Малые габариты, небольшой вес.

Распиновка:

  • GND – земля;
  • Vcc – напряжение питания 2,5В – 12В;
  • A-IA – вход A(IA) для двигателя A;
  • A-IB – вход B (IB) для двигателя A;
  • B-IA – вход A(IA) для двигателя B;
  • B-IB – вход B (IB) для двигателя B.

В зависимости от поданного сигнала на выходах IA и IB будет разное состояние для двигателей. Возможные варианты для одного из моторов приведены в таблице.

IA IB Состояние мотора
Остановка
1 Двигается вперед
1 Двигается назад
1 1 Отключение

Подключение одного двигателя к Ардуино изображено на рисунке.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Сравнение модулей

Модуль L293D подает максимальный ток в 1,2А, в то время как на L298N можно добиться максимального тока в 4 А. Также L293D обладает меньшим КПД и быстро греется во время работы.

При этом L293D является самой распространенной платой и стоит недорого.  Плата HG7881 отличается от L293D и L298N тем, что с ее помощью можно управлять только направлением вращения, скорость менять она не может.

HG7881 – самый дешевый и самый малогабаритный модуль.

Подключение L298N к Arduino

Как уже упоминалось, в первую очередь нужно проверить полярность подключенных двигателей. Двигатели, вращающиеся в различных направлениях, неудобно программировать.

Нужно присоединить источник питания. + подключается к пину 4 на плате L298N, минус (GND) – к 5 пину.

Затем нужно соединить выходы с L298N и пины на Ардуино, причем некоторые из них должны поддерживать ШИМ-модуляцию. На плате Ардуино они обозначены ~.

Выходы с L298N IN1, IN2, IN3 и IN4 подключить к D7, D6, D5 и D4 на Ардуино соответственно. Подключение всех остальных контактов представлено на схеме.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Направление вращения задается с помощью сигналов HIGH и LOW на каждый канал. Двигатели начнут вращаться, только когда на 7 пине для первого мотора и на 12 пине для второго на L298N будет сигнал HIGH. Подача LOW останавливает вращение. Чтобы управлять скоростью, используются ШИМ-сигналы.

Для управления шаговым двигателем в Arduino IDE существует стандартная библиотека Stepper library. Чтобы проверить работоспособность собранной схемы, можно загрузить тестовый пример stepper_oneRevolution. При правильной сборке вал двигателя начнет вращаться.

При работе с моторами Ардуино может периодически перезагружаться. Это возникает из-за того, что двигателям требуются большие токи при старте и в момент торможения. Для решения этой проблемы в плату встроены конденсаторы, диоды и другие схемы. Также для этих целей на шидле имеется раздельное питание.

Источник: https://ArduinoMaster.ru/datchiki-arduino/drajver-dvigatelya-i-motor-shield-arduino/

Драйвер моторов на L298N подключение к Arduino — «Robot-Kit.ru» интернет-магазин Arduino

Драйвер моторов на базе микросхемы L298N (RKP-MDL298-01A-V2 подробнее =>>) позволяет управлять двумя моторами постоянного тока либо шаговым двигателем с потребляемым током до 2 Ампер.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno В данной же статье мы рассмотрим драйвер двигателей базе микросхемы L298N собранный на платке в виде модуля. В отличии от микросхемы L293D, в микросхеме L298N не встроены защитные диоды, их необходимо устанавливать в обвязку микросхемы дополнительно (8 штук по бокам). По функционалу микросхема L298N полностью идентична микросхеме L293D. Мы видим те же управляющие выводы. Чередование разноименных сигналов (высокий логический уровень или низкий) на парах выводов IN1, IN2 и IN3, IN4 задают направление вращения моторов. Выводы ENABLE A, B (ENA привязан к IN1, IN2. ENB к IN3, IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:

Условно «активном» режиме, когда ими будет управлять контроллер (рис. 1) — высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов «IN». Для регулировки скорости моторов, на «EN» выводы подается ШИМ (PWM) сигнал.

Условно «пассивном» режиме, просто притянув выводы «EN» к высокому уровню (+5V). Для этого на плате, рядом с выводами ENA и ENB находятся штырьки, соединенные с +5V. Замыкаем выводы с помощью джамперов (рис. 2).

В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться в полную скорость (за то для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль.

Для остановки нужно будет подавать одноименные сигналы на выводы «IN».

В программных кодах в продолжении статьи все будет прокомментировано. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Клеммник подачи питания и работа стабилизатора.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno Разъем “+12V” предназначен для подачи питания на моторы и одновременно, при одетом джампере, подает питание на стабилизатор, который выдает +5V для питания логики драйвера. Выходит, при таком варианте, не нужно тянуть лишний провод на разъем +5V. Маркировка именно “+12V” связана с тем, что напряжение питания моторов может лежать в диапазоне от 5V до 35V, в то время как максимальное входное напряжение стабилизатора 12V. То есть, при одетом джампере, подача свыше 12V может спалить стабилизатор. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno Как мы уже поняли, маркировка “+12V” носит предупредительно-информативный характер. При напряжении питания свыше 12V, без опаски подвеем нужное напряжение на данный вывод, но не забываем снять джампер.

Теперь напряжение не поступает на стабилизатор и не сможет повредить его, но теперь необходимо подать внешнее +5V.

Подключение моторов к модулю L298N Начнем с подключения одного мотора, с притянутым к +5V выводом ENB. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno Заставим моторчик вращаться «вправо» 4 секунды, остановиться на 0.5 секунды, вращаться «влево» 4 секунды, остановка 5 секунд и снова цикл повторяется.

Пример программного кода

int IN3 = 5; // Input3 подключен к выводу 5
int IN4 = 4;

void setup()
{
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
}
void loop()
{
// На пару выводов «IN» поданы разноименные сигналы, мотор вращается
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
delay(4000);
// На пару выводов «IN» поданы одноименные сигналы, мотор не вращается
digitalWrite (IN4, LOW);
delay(500);
// На пару выводов «IN» поданы разноименные
// (и уже противоположные относительно первого случая) сигналы, мотор вращается
// относительно первого случая) сигналы, мотор вращается в другую сторону
digitalWrite (IN3, HIGH);
delay(4000);
// Снова на выводах «IN» появились одноименные сигналы, мотор не вращается
digitalWrite (IN3, LOW);
delay(5000);
}
Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

В данном примере мы подсоединили ENB к выводу ШИМ (D3), и задействуем возможность драйвера управлять скоростью, меняя скважность посылаемого ШИМ сигнала.

Значения скважности задаются функцией analogWrite (pin, число) , где число изменяется от 0 до 255, прямо пропорционально скважности сигнала.

Для наглядности, подобраны четыре значения, при которых двигатель стартует с низких оборотов, набирает средние, выходит на максимальные и не вращается.

Пример программного кода

int IN3 = 5; // Input3 подключен к выводу 5
int IN4 = 4;
int ENB = 3;
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
// На пару выводов «IN» поданы разноименные сигналы, мотор готов к вращению
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
// подаем на вывод ENB управляюший ШИМ сигнал
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
// Останавливаем мотор подаем на вывод ENB сигнал низкого уровня.
// Состояние выводов «IN» роли не играет.
analogWrite(ENB,0);
delay(5000);
}
Ну и напоследок подключим два двигателя с регулировкой скорости. Управление двигателем постоянного тока с применением драйвера l298n и arduino uno В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости.

Пример программного кода

int IN1 = 5; // Input1 подключен к выводу 5 int IN2 = 4; int IN3 = 3; int IN4 = 2; int ENA = 9; int ENB = 3; int i; void setup() { pinMode (EN1, OUTPUT); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (EN2, OUTPUT); pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); } void loop() { digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); for (i = 50; i

Дата: Вторник, 07 Октября 2014

Источник: http://robot-kit.ru/article_info.php?articles_id=22

Arduino UNO урок 13 — драйвер двигателя L298N

Микросхема L298N представляет собой сдвоенный мостовой драйвер двигателей и предназначена для управления DC и шаговыми двигателями. Данная микросхема находит очень широкое применение в роботостроительстве.

Одна микросхема L298N способна управлять двумя двигателями и обеспечивает максимальную нагрузку до 2А на каждый двигатель, а если задействовать параллельное включение для одного двигателя, то можно поднять максимальный ток до 4А.

В данной статье я хочу рассмотреть подключение к Arduino готового модуля L298N, которые очень широко представлены на популярном аукционе ebay, AliExpress и в др. местах.

Можно конечно купить данную микросхему и в России и сделать самому шилд и всю обвязку, но сегодняшняя реальность такова, что при средней стоимости модуля на ebay в 5 долларов, все комплектующие при покупке у нас выйдут примерно также, а то и дороже.

Не говоря уже про трудозатраты на изготовление печатной платы, пайку и т.д.

Сами модули на микросхемах L298N выглядят так:

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Принципиальная схема такого модуля выглядит следующим образом:

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Шилд имеет следующие пины подключения:Vcc — подключение внешнего питания двигателей+5 — питание логикиGND — общийIN1, IN2, IN3, IN4 (разъем P4 на схеме) — входы управления двигателямиOUT1, OUT2 (разъем P2 на схеме) — выход первого двигателяOUT3, OUT4 (разъем P3 на схеме) — выход второго двигателяВыключатель S1 служит для переключения питания логической части микросхемы. Т.е. при включенном S1 питание логической части берется от внутреннего преобразователя модуля. При выключенном S1 питание берется от внешнего источника.
На модулях также присутствуют перемычки ENA и ENB для разрешения включения двигателей. Если необходимо, их можно также подключить к Arduino и задействовать, но это лишние 2 провода и в этих входах нет особого смысла.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

ШИМ управление позволяет плавно изменять скорость вращение двигателя. Если нам не нужно ШИМ управление, то на соответствующий вход нужно просто подать логическую 1. На какой именно вход IN1 или IN2 вы подадите сигнал ШИМ, либо направление вращения — разницы не имеет. Тоже самое справедливо и для входов IN3, IN4.

Схема подключения шилда L298N к контроллеру Arduino:

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Для питания логической части схемы необходимо нажать кнопку или вставить перемычку (зависит от типа модуля). Если же на вашем модуле не предусмотрен преобразователь 5В, то дополнительно, необходимо соединить вывод 5V от Arduino к входу +5 шилда.
Как видно из схемы выше, 2 и 4 вывод используются для установки направления движения, а 3 и 5 для ШИМ управления выводами.

Напишем тестовую программу, в которой мы будем в цикле изменять скорость вращения, а также направление вращения двигателей:

#define D1 2 // Направление вращение двигателя 1
#define M1 3 // ШИМ вывод для управления двигателем 1
#define D2 4 // Направление вращение двигателя 2
#define M2 5 // ШИМ вывод для управления двигателем 2

bool direction = 0; // Текущее направление вращения
int value; // Текущее значение ШИМ

void setup()
{
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
}

void loop()
{
for(value = 0; value

Источник: https://cxem.net/arduino/arduino70.php

Ардуино: драйвер L298N для мотора постоянного тока

Чтобы управлять вращением мотора, любому контроллеру необходимо специальное устройство, которое часто называют драйвером (от англ. driver — водитель). В уроке «управление двигателем постоянного тока» мы уже пробовали запускать и вращать в разные стороны мотор двумя способами: с помощью одного транзистора и с помощью микросхемы драйвера L293D.

На этот раз, попробуем использовать более мощный двухканальный драйвер L298N, который часто можно встретить в виде модуля красного цвета (хотя встречаются зеленые и синие модели).

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Как и в случае L293N, драйвер представляет собой полный H-мост, главная функция которого — менять полярность на нагрузке. А если в качестве нагрузки будет мотор постоянного тока, то смена полярности приведет к смене направления его вращения. Это то, что нам нужно.

Спецификация модуля L298N:

  • напряжение питания двигателей: до 35 В;
  • рабочий ток (на каждый канал): 2 А;
  • периодический ток (80% — вкл, 20% — выкл): 2,5 А;
  • кратковременный ток: 3 А;
  • вес: 33 г.

Драйвер L298N работает с более высоким током, чем L293D. С помощью L298N мы можем управлять и слабыми моторчиками типа n20 и мощными моторами, такими как JGA25 или даже JGA37 с крутящим моментом до 20-25 кг/см. Хватит для большинства DIY проектов!

Назначение элементов и контактов на плате драйвера L298N

Посмотрим внимательнее на модуль и разберемся с его контактами.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Логика микросхемы L298N питается напряжением 5 Вольт. Для этого на модуле предусмотрен стабилизатор напряжения 78M05. На вход этого стабилизатора можно подавать напряжение до 35 В, а на выходе всегда получается 5 В. Рабочий ток у 78M05 небольшой — до 500 мА. Однако, при желании, от него можно питать и саму плату Ардуино Уно, к которой мы будем подключать драйвер.

Тройная клемма снизу отвечает за питание модуля. Самый левый контакт — питание моторов. Сюда можно подавать до 35 В. Средний контакт — земля, которая должна быть общей для модуля и контроллера. Правый контакт имеет двоякую функцию.

Если на модуле стоит перемычка питания стабилизатора, то на этом контакте будет +5В и к нему можно ничего не подключать, либо питать от него контроллер. Но если перемычку убрать, то к этому контакту нужно будет непременно подключить +5В от контроллера, чтобы питать драйвер.

В нашем примере мы будем ориентироваться именно на вариант без перемычки.

Две другие винтовые клеммы (OUT1/2 и OUT 3/4) служат для подключения моторов. Надо отметить, что моторы постоянного тока неполярные, но от того на какой контакт мотора подается плюс, а на какой минус, зависит направление их вращения.

Наконец, осталось разобраться с контактами управления. Их по три штуки на каждый мотор. Контакты ENA и ENB позволяют управлять моторами с помощью ШИМ сигнала. Если ENA и ENB подключить строго к +5 В, то моторы будут всегда вращаться с максимальной возможной скоростью. Именно для этого режима на модуле предусмотрены две перемычки рядом с ENA и ENB.

С помощью контактов IN1,IN2,IN3,IN4 задаётся режим работы моторов. Таблица режимов для двигателя A имеет вид:

Режим IN1 IN2
Вращение в одну сторону 1
Вращение в обратную сторону 1
Блокировка мотора 1 1
Отключение мотора

Тут следует пояснить последние два режима. Если нам необходимо резко остановить мотор, то выбираем режим блокировки. Для плавной остановки — выбираем «отключение мотора»

Подключение драйвера L298N к Ардуино Уно

Чтобы попробовать драйвер в деле, подключим его к контроллеру Ардуино Уно и к любому, попавшему под руку, небольшому мотору постоянного тока.

В данном уроке мы используем самый простой мотор с напряжением питания 1,5-3 Вольта. Для питания этого мотора нам будет достаточно двух пальчиковых батареек.

В такой схеме просто невозможно запитать микросхему драйвера от встроенного стабилизатора, поэтому питание +5В будем брать от Ардуино.

  • Также отметим, что при данной схеме подключения с внешним питанием +5 В, нам нужно убрать соответствующую перемычку, о которой мы говорили выше (перемычка питания от стабилизатора)!
  • Ну и раз уж мы планируем управлять скоростью вращения, уберем перемычку с контакта ENA.
  • Принципиальная схема

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Внешний вид макета

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Программа для драйвера мотора L298N

Напишем простую программу, которая будет вращать мотор в одну сторону 3 секунды с максимальной скоростью, и затем 3 секунды в обратную сторону с более медленной скоростью.

byte ena = 3;
byte in1 = 4;
byte in2 = 5;
void setup() {
pinMode( ena, OUTPUT );
pinMode( in1, OUTPUT );
pinMode( in2, OUTPUT );
}
void loop() {
// выставляем 100% мощность на моторе А — 255 из 255
analogWrite( ena, 255 );
// выставляем режим мотора — вращение по часовой
digitalWrite( in1, HIGH );
digitalWrite( in2, LOW );
delay(3000); // пауза 3сек

// выставляем мощность на мотора А — 150 из 255
analogWrite( ena, 150 );
// режим мотора — вращение против часовой
digitalWrite( in1, LOW );
digitalWrite( in2, HIGH );
delay(3000); // пауза 3сек
}

Загружаем программу на Ардуино, затем подключаем к драйверу элементы питания и смотрим как ведёт себя моторчик.

Следует отметить, что данная программа не гарантирует вращение мотора с какой-то конкретной скоростью. Мы лишь можем менять мощность, передаваемую на мотор, с помощью изменения коэффициента заполнения ШИМ сигнала (duty cycle). Подробнее о ШИМ сигнале можно узнать в одном из наших уроков.

Заключение

Итак, модуль драйвера L298N оказался не таким сложным, как могло показаться. Все драйверы имеют практически схожие контакты управления: EN,IN1,IN2. Бывает, что отдельный вход EN отсутствует, и тогда ШИМ сигнал подается на IN1,IN2. Разобравшись с одним драйвером, мы можем с легкостью применять в своих проектах и другие модели.

Как уже было написано, L298N является достаточно мощным чтобы потянуть большинство моторов, применяемых в DIY проектах. Это и популярные пластиковые желтые моторы с редуктором и более мощные металлические JGA25 и JGA37.

Отдельно следует отметить и ещё одно распространенное применение L298N. С помощью этого драйвера можно управлять биполярными шаговыми двигателями, хотя и не настолько эффективно, как это делают специализированные драйвера типа A4988.

Источник: https://robotclass.ru/tutorials/arduino-l298-dc-motor-driver/

Драйвер шагового двигателя и двигателя постоянного тока L298N и Arduino

Модуль L298N H-bridge можно использовать для двигателей, напряжение питания которых находится в диапазоне от 5 до 35 вольт.

Кроме того, на многих подобных платах есть встроенный 5В регулятор, который дает возможность запитывать ваши устройства.

Подключение модуля L298N

Прежде чем перейти к управлению двигателем постоянного тока и шаговым двигателем, разберемся с подключением модуля L298N (даташит, техническая информация от производителя).

Ссылки для заказа необходимого оборудования из Китая

  • КУПИТЬ цифровой датчик температуры DS18B20;
  • КУПИТЬ Arduino Uno R3;

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Ниже приведены разъяснения к рисунку.

  1. Для двигателя постоянного тока 1 “+” или для шагового двигателя A+
  2. Для двигателя постоянного тока 1 “-” или для шагового двигателя A-
  3. Коннектор на 12 вольт. Снимите его, если используете напряжение питания больше 12 вольт.
  4. Питания вашего двигателя обеспечивается с этого выхода. Максимальное напряжение питания постоянным током 35 вольт. Если напряжение больше 12 вольт, разомкните контакты на 3 коннекторе.
  5. GND — земля.
  6. Питание 5 вольт, если коннектор на 12 вольт замкнут. Идеально для питания Arduino и т.п.
  7. Коннектор для двигателя постоянного тока 1. Можно подключить к ШИМ-выходу для управления скоростью двигателя постоянного тока.
  8. IN1.
  9. IN2.
  10. IN3.
  11. IN4.
  12. Коннектор для двигателя постоянного тока 2. В случае использования шагового двигателя, подключать сюда ничего не надо. Можно подключить к ШИМ-выходу для управления скоростью двигателя постоянного тока.
  13. Двигатель постоянного тока 2 “+” или шаговый двигатель B+.
  14. Двигатель постоянного тока 2 “-” или шаговый двигатель B-.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

L298N, Arduino и двигатель постоянного тока

Данный модуль дает возможность управлять одним или двумя двигателями постоянного тока. Для начала, подключите двигатели к пинам A и B на контроллере L298N.

Если вы используете в проекте несколько двигателей, убедитесь, что у них выдержана одинаковая полярность при подключении. Иначе, при задании движения, например, по часовой стрелке, один из них будет вращаться в противоположном направлении. Поверьте, с точки зрения программирования Arduino это неудобно.

После этого подключите источник питания. Плюс — к четвертому пину на L298N, минус (GND) — к 5 пину. Если ваш источник питания до 12 вольт, коннектор, отмеченный 3 на рисунке выше, можно оставить. При этом будет возможность использовать 5 вольтовый пин 6 с модуля.

Данный пин можно использовать для питания Arduino. При этом не забудьте подключить пин GND с микроконтроллера к 5 пину на L298N для замыкания цепи. Теперь вам понадобится 6 цифровых пинов на Arduino. Причем некоторые пины должны поддерживать ШИМ-модуляцию.

ШИМ-пины обозначены знаком “~” рядом с порядковым номером.

Теперь подключите цифровые пины Arduino к драйверу. В нашем примере два двигателя постоянного тока, так что цифровые пины D9, D8, D7 и D6 будут подключены к пинам IN1, IN2, IN3 и IN4 соответственно. После этого подключите пин D10 к пину 7 на L298N (предварительно убрав коннектор) и D5 к пину 12 (опять таки, убрав коннектор).

Направление вращения ротора двигателя управляется сигналами HIGH или LOW на каждый привод (или канал). Например, для первого мотора, HIGH на IN1 и LOW на IN2 обеспечит вращение в одном направлении, а LOW и HIGH заставит вращаться в противоположную сторону.

При этом двигатели не будут вращаться, пока не будет сигнала HIGH на пине 7 для первого двигателя или на 12 пине для второго. Остановить их вращение можно подачей сигнала LOW на те же указанные выше пины. Для управления скоростью вращения используется ШИМ-сигнал.

Скетч приведенный ниже, отрабатывает в соответствии со схемой подключения, которую мы рассматривали выше. Двигатели постоянного тока и Arduino питаются от внешнего источника питания.

  • // подключите пины контроллера к цифровым пинам Arduino
  • // первый двигатель
  • int enA = 10;
  • int in1 = 9;
  • int in2 = 8;
  • // второй двигатель
  • int enB = 5;
  • int in3 = 7;
  • int in4 = 6;
  • void setup()
  • {
  • // инициализируем все пины для управления двигателями как outputs
  • pinMode(enA, OUTPUT);
  • pinMode(enB, OUTPUT);
  • pinMode(in1, OUTPUT);
  • pinMode(in2, OUTPUT);
  • pinMode(in3, OUTPUT);
  • pinMode(in4, OUTPUT);
  • }
  • void demoOne()
  • {
  • // эта функция обеспечит вращение двигателей в двух направлениях на установленной скорости
  • // запуск двигателя A
  • digitalWrite(in1, HIGH);
  • digitalWrite(in2, LOW);
  • // устанавливаем скорость 200 из доступного диапазона 0~255
  • analogWrite(enA, 200);
  • // запуск двигателя B
  • digitalWrite(in3, HIGH);
  • digitalWrite(in4, LOW);
  • // устанавливаем скорость 200 из доступного диапазона 0~255
  • analogWrite(enB, 200);
  • delay(2000);
  • // меняем направление вращения двигателей
  • digitalWrite(in1, LOW);
  • digitalWrite(in2, HIGH);
  • digitalWrite(in3, LOW);
  • digitalWrite(in4, HIGH);
  • delay(2000);
  • // выключаем двигатели
  • digitalWrite(in1, LOW);
  • digitalWrite(in2, LOW);
  • digitalWrite(in3, LOW);
  • digitalWrite(in4, LOW);
  • }
  • void demoTwo()
  • {
  • // эта функция обеспечивает работу двигателей во всем диапазоне возможных скоростей
  • // обратите внимание, что максимальная скорость определяется самим двигателем и напряжением питания
  • // ШИМ-значения генерируются функцией analogWrite()
  • // и зависят от вашей платы управления
  • // запускают двигатели
  • digitalWrite(in1, LOW);
  • digitalWrite(in2, HIGH);
  • digitalWrite(in3, LOW);
  • digitalWrite(in4, HIGH);
  • // ускорение от нуля до максимального значения
  • for (int i = 0; i < 256; i++)
  • {
  • analogWrite(enA, i);
  • analogWrite(enB, i);
  • delay(20);
  • }
  • // торможение от максимального значения к минимальному
  • for (int i = 255; i >= 0; —i)
  • {
  • analogWrite(enA, i);
  • analogWrite(enB, i);
  • delay(20);
  • }
  • // теперь отключаем моторы
  • digitalWrite(in1, LOW);
  • digitalWrite(in2, LOW);
  • digitalWrite(in3, LOW);
  • digitalWrite(in4, LOW);
  • }
  • void loop()
  • {
  • demoOne();
  • delay(1000);
  • demoTwo();
  • delay(1000);
  • }

Пояснения к скетчу для управления двигателями постоянного тока

Итак, что у нас происходит в программе? В теле функции demoOne() мы включаем двигатели и начинаем с ними работать при ШИМ- значении 200.

Через некоторое время двигатели начинают вращаться в противоположном направлении (благодаря смене HIGH и LOW в теле функции digitalWrite()). Для демонстрации возможностей изменения скорости вращения, используем доступный ШИМ-диапазон в теле функции demoTwo(). Сигнал на пине меняется от нуля до 255 и вновь до нуля.

В результате все это может крутиться примерно так:

L298N, Arduino и шаговый двигатель

Для нашего примера мы используем шаговый двигатель Nema 17, у которого четыре кабеля для подключения.

Этот двигатель имеет 200 шагов на оборот и может работать с частотой вращения 60 об/мин. Если вы используете другой шаговый двигатель, уточните шаг его шаг и максимальную частоту вращения. Эти параметры понадобятся вам при программировании Arduino.

Еще один важный момент — определить какие именно кабели соответствуют A+, A-, B+ и B-. В нашем примере соответствующие цвета кабелей: красный, зеленый, желтый и голубой. Переходим к подключению.

Кабели A+, A-, B+ и B- от шагового двигателя подключаем к пинам 1, 2, 13 и 14 соответственно. Контакты на коннекторах 7 и 12 на контроллере L298N оставьте замкнутыми. После этого подключите источник питания к пину 4 (плюс) и 5 (минус) на контроллере.

Опять таки, если источник питания меньше 12 вольт, контакт, отмеченный 3 на рисунке модуля, можно оставить замкнутым. После этого, подключите пины модуля L298N IN1, IN2, IN3 и IN4 к соответствующим цифровым пинам D8, D9, D10 и D11 на Arduino.

Теперь подключаем GND пин с Arduino к пину 5 на контроллере, а 5V к 6 пину на модуле. С управлением шагового двигателя проблем быть не должно благодаря встроенной в Arduino IDE библиотеке Stepper Library.

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Для проверки работоспособности просто загрузите скетч stepper_oneRevolution, который входит в состав библиотеки. Данный пример находится в меню

File -> Examples -> Stepper

в Arduino IDE.

Пояснения к скетчу для управления шаговым двигателем

Уточните значение

const int stepsPerRevolution = 200;

в скетче и измените значение 200 на ваше количество шагов за один поворот двигателя вала и скорость вращения в строке

Теперь можете сохранить и загрузить скетч, который реализует вращение один оборот вала, а затем в противоположную сторону. Это реализуется с помощью функции

myStepper.step(stepsPerRevolution); // вращение по часовой стрелке

myStepper.step(-stepsPerRevolution); // вращение против часовой стрелки

Долгожданный результат:

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Источник: http://arduino-diy.com/arduino-drayver-shagovogo-dvigatelya-i-dvigatelya-postoyannogo-toka-L298N

Драйвер L298N и Arduino – схема подключения

Микроконтроллер, установленный на плате Arduino, не способен отдавать большой ток через свои пины. Что же делать, если необходимо управлять относительно мощными двигателями, например, для перемещения робота?

В таких случаях вместе с Arduino используют драйвер – силовую часть, управляемую платой и способную коммутировать большой ток. Самый известный такой драйвер для коллекторных двигателей – L298N!

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

L298N – драйвер коллекторных двигателей на 2 канала, который может также применяться для управления одним шаговым мотором. Драйвер мостовой, что позволяет использовать его без дополнительных транзисторов отсутствующих плеч. Максимальное напряжение питания моторов – 46 В, ток на канал – 2 А.

Драйвер позволяет просто и понятно управлять скоростью вращения моторов в обоих направлениях с помощью ШИМ (раздельно для каждого мотора).

Модуль на основе L298N не требует внешних компонентов для начала работы. Всё, что нужно – десяток проводов для подключения питания и управляющих сигналов.

Для управления направлением движения используется 4 провода + 2 провода для регулировки скорости.

Для управления направлениями двигателей используется 4 входа – IN1-IN4, кроме них – ещё 2 провода (по 1 на канал) для ШИМ-регулировки скорости. Их можно сразу замкнуть джамперами на +5В для максимальной скорости вращения, сэкономив этим 2 пина контроллера.

Пины IN подключаются к любым пинам Arduino, ENABLE – только к помеченным на плате знаком ~ (ШИМ).

Управление двигателем постоянного тока с применением драйвера l298n и arduino uno

Существует 4 возможных комбинации на пинах модуля:

  • IN1 = 1, IN2 = 1 – двигатель стоит на месте;
  • IN1 = 0, IN2 = 0 – двигатель стоит на месте;
  • IN1 = 1, IN2 = 0 – двигатель крутится в одну сторону;
  • IN1 = 0, IN2 = 1 – двигатель крутится в другую сторону.

Скорость вращения регулируется подачей ШИМ на пин Enable.

Обратите внимание – транзисторы имеют относительно быструю скорость переключения, но всё же закрытие затвора выполняется не мгновенно. В некоторых случаях может получиться так, что при реверсе транзистор успеет открыться, но ему комплементарный ещё не закроется и возникнет короткое замыкание.

Чтобы этого избежать, можно прижимать пины к одному напряжению на несколько миллисекунд и только потом выполнять реверс. Если в конкретно Вашем случае хватает этого времени, то лишние задержки можно исключить. Но учтите, что могут появиться сбросы микроконтроллера!

Для примера напишем небольшой скетч, в котором будем разгонять мотор при помощи ШИМ-управления:

Код для разгона мотора через ШИМ #define IN1 5
#define IN2 4
#define ENA 3
void setup()
{
pinMode (ENA, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
}
void loop()
{
// Задаём направление
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
// Регулируем разгон ШИМом, обеспечиваем задержками плавный разгон
analogWrite(ENA,55);
delay(500);
analogWrite(ENA,105);
delay(1000);
analogWrite(ENA,255);
delay(1500);
// Остановка ШИМом
// Состояние выводов «IN» роли не играет.
analogWrite(ENA,0);
delay(4500);
}

  digitalWrite (IN1, HIGH);  // Регулируем разгон ШИМом, обеспечиваем задержками плавный разгон  // Состояние выводов «IN» роли не играет.

Также остановить мотор можно, подав одноимённые сигналы, например так:

Команды для остановки мотора digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);

Или применить торможение реверсом, поменяв сигналы местами. Оно будет крайне эффективным, но может привести к просадке напряжения из-за большого тока.

Желательно использовать источник питания с большим выходным током и повесить параллельно несколько конденсаторов большой ёмкости, если стабильность работы действительно важна.

Теперь вы сможете построить своего робота или что-нибудь ещё моторизированное, используя Arduino! Дерзайте, а Вольтик поможет вам выбрать лучшее для своих проектов!

Источник: https://Voltiq.ru/l298n-and-arduino/

Ссылка на основную публикацию