Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO

Введение

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

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

Как можно изменять скорость вращения при помощи ШИМ?

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

Величина среднего напряжения, подаваемого на двигатель, напрямую зависит от формы сигнала ШИМ . Форма сигнала, в свою очередь, определяется рабочим циклом, который можно представить в виде отношения времени подачи сигнала к общему периоду (сумме времени подачи напряжения и его отключения). В результате получается безразмерная величина, которую выражают в процентном отношении – сколько времени от общего периода напряжение подавалось на двигатель. В слаботочных системах на 5, 12, 24 или 36 В применяется цикл на 25%, 50%, 75% и 100%.


Широтно-импульсная модуляци

Управление двигателем при помощи Arduino и сгенерированным сигналом ШИМ

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

На рисунке ниже вы можете увидеть пример схемы, на которой питание двигателя контролируется Arduino через транзистор. Как видите, здесь от ШИМ выхода подается сигнал на базу транзистора, а через его коллектор и эмиттер будет подаваться напряжение на обмотку.


Принципиальная схема управления dc мотором

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

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

Полный скетч проекта:

Управление DC мотором с помощью Arduino Uno

Используемые команды:

  • void setup – поле для установки рабочего выхода с ШИМ порта;
  • void loop – поле для формирования рабочего процесса;
  • motorSpeed – задает скорость вращения двигателя;
  • analogWrite – задает работу конкретного вывода платы;
  • delay – устанавливает величину временного промежутка.

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

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

Экономичное подключение одного мотора без регулировки скорости вращения

Для этого замыкаем джампер как показано на рисунке, тем самым соединяя вывод EN с +5V

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

Заставим моторчик вращаться «вправо» 4 секунды, остановиться на 0.5 секунды, вращаться «влево» 4 секунды, остановка 5 секунд и снова цикл повторяется.

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

// Тестировалось на Arduino IDE 1.0.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); }

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

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

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

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

// Тестировалось на Arduino IDE 1.0.5 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); }

Финальный пример. Подключение двух моторов с регулировкой скорости вращения

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

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

// Тестировалось на Arduino IDE 1.0.5 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 <= 180; ++i) { analogWrite(EN1, i); analogWrite(EN2, i); delay(30); } analogWrite (EN1, 0); analogWrite (EN2, 0); delay(500); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); for (i = 50; i <= 180; ++i) { analogWrite(EN1, i); analogWrite(EN2, i); delay(30); } analogWrite (EN1, 0); analogWrite (EN2, 0); delay(8000); }

Управление двигателем постоянного тока с использованием Н-моста

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

Свое название данное устройство получило за счет внешнего сходства с буквой «Н», где каждая пара транзисторов находится в вертикальных элементах буквы, а непосредственно сам управляемый мотор в горизонтальном. Пример элементарного Н-моста из четырех транзисторов приведен на рисунке ниже. Попарно открывая и закрывая нужные элементы схемы, вы сможете пропускать ток через обмотки в противоположных направлениях.


Схема H-моста

Посмотрите на рисунок, в этой схеме управление питанием двигателя происходит от выводов А и В, на которые подается управляющий потенциал.

Принцип определения направления вращения в Н-мосте происходит следующим образом:

  • при подаче на базы транзисторов Q1 и Q4 импульса для открытия перехода происходит протекание тока по обмоткам двигателя в одном направлении;
  • при подаче на базы транзисторов Q2 и Q3 импульса для открытия перехода ток будет протекать в противоположном направлении, в сравнении с предыдущим и произойдет реверсивное движение;
  • попарное открытие транзисторов Q1 и Q3, Q2 и Q4 приводит к торможению ротора;
  • открытие транзисторов в последовательности Q1 и Q2 или Q3 и Q4 совершенно недопустимо, поскольку оно приведет к возникновению короткого замыкания в цепи.

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

Сравнивая оба драйвера, следует отметить, что L298N превосходит L293D как по параметрам работы, так и по доступным опциям. Несмотря на то, что L293D более дешевая модель, L298N, ввиду значительных преимуществ, стал использоваться куда чаще. Поэтому в данном примере мы рассмотрим принцип управления двигателем при помощи драйвера L298N и платы Arduino.

Что представляет собой драйвер L298N?

Данная плата содержит микросхему и 15 выходов для генерации управляющих сигналов. Предназначено для передачи сигналов к рабочим элементам индуктивного типа – обмоткам двигателя, катушкам реле и т.д. Конструктивно L298N позволяет подключать в работу до двух таких элементов, к примеру, через нее можно одновременно управлять двумя шаговыми двигателями.

На схеме ниже приведен пример распределения выводов L298N от рабочей микросхемы.


L298N. Выводы

  • Vss – вывод питания для логических цепей в 5В;
  • GND – нулевой вывод (он же корпус);
  • INPUT1, INPUT 2, INPUT 3, INPUT 4 – позволяют плавно наращивать и уменьшать скорость вращения двигателя;
  • OUTPUT1, OUTPUT2 – выводы для питания первой индуктивной нагрузки;
  • OUTPUT3, OUTPUT4 – выводы для питания второй индуктивной нагрузки;
  • Vs – вывод для переключения питания;
  • ENABLE A, B – выводы, при помощи которых осуществляется раздельное управление каналами, могут устанавливать активный и пассивный режим (с регулируемой скоростью вращения и с установленной);
  • CURRENT SENSING A, B – выводы для установки текущего режима.

Драйвер моторов RKP-01A-V2 двухканальный L298N

Двухканальном драйвере моторов RKP-MDL298-01A-V2 на микросхеме L298N.

С его помощью можно контролировать вращение двух независимых коллекторных моторов постоянного тока (DC-моторов) или одного двухобмоточного четырехпроводного шагового двигателя.

Здесь можно посмотреть подробную статью о подключении драйвера моторов на микросхеме L298N к Arduino =>>

Драйвер двигателей RKP-01A-V2 благодаря микросхеме драйвера моторов L298N позволяет легко управлять двумя электромоторами использующими питание от 5В до 35В. Установленный на основную микросхему L298N радиатор охлаждения позволяет выдерживать ток нагрузки до 2A на канал. Для защиты драйвера моторов от перегрузки используются специальные Диоды Shotki. Модуль контроллера двигателей позволяет использовать его в различных робототехнических проектах, размещая его по своему усмотрению.

Посмотреть DataSheet микросхемы драйвера моторов L298N (формат PDF размер 611 КБ)

Ключевыми особенностями драйвера моторов RKP-01A-V2 являются наличие радиатора охлаждения L298N, малые габариты и вес (35 грамм), а также светодиодная индикация наличия питания и указания направления вращения двигателей.

Характеристики драйвера моторов RKP-01A-V2 на микросхеме L298N: — Микросхема драйвера: L298N (с радиатором охлаждения) — Возможность питания внешней логики (Vss): +5V ~ +7V (внутренний стабилизатор +5В) — Входное напряжение логической части (Vd): от 6V до 12V — Входное напряжение управляемой части (Vs): от +5V до +35V — Рабочий ток внешней логической части (Iss): 0 ~ 36mA — Ток нагрузки каждой управляемой части (Io): 2A — Пиковый ток нагрузки каждой управляемой части (Io): 3А — Максимальная потребляемая мощность: 20Вт (при температуре = 75°C) — Высокий уровень входного управляющего сигнала (High): 2.3В = Vin = Vss — Низкий уровень входного управляющего сигнала (Low): -0.3В = Vin = 1.5В — Рабочая температура окружающей среды: от -25 до +130°C — Размеры модуля со стойками крепления и радиатором L298: 53 x 47 x 27 мм — Вес драйвера моторов RKP-01A: 35 грамм

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

Плата расширения RKP-01A может используется вместе с Arduino и устанавливается отдельно от процессорного модуля Arduino. Применяется, например, для построения движущихся роботов на колесном или гусеничном приводе.

Для подключения моторов постоянного тока (DC-моторов) служат порты: OUT1 и OUT2 — мотор A OUT3 и OUT4 – мотор B (управление электромоторами полностью независимо друг от друга)

Для работы подключите источник питания к контакту тройного клемника «VСС». При подаче питания от +6V до +12V и одетом джампере JP1, питание подается и на стабилизатор, который выдает +5V для питания логики драйвера. Подавать отдельно питание +5V для логики не нужно. При подаче питания выше +12V, джампер JP1 должен быть снят. Питание на логику подается отдельно через клемму «+5V».

Управление DC-моторами осуществляется через специальные входы: ENA (ENB) – надетая перемычка активирует включение канала управления двигателем. ENA (ENB) — соединить с ШИМ-выходом MCU, для контроля скорости вращения I1 (I3) и I2 (I4) – логические входы (имеют отключаемые подтягивающие резисторы) задания направления вращения (см. таблицу ниже)

ENA I1 I2 Состояние мотора А PWM>0 0 0 Стоп PWM>0 0 1 Вращение по часовой PWM>0 1 0 Вращение против часовой PWM>0 1 1 Стоп ENB I3 I4 Состояние мотора B PWM>0 0 0 Стоп PWM>0 0 1 Вращение по часовой PWM>0 1 0 Вращение против часовой PWM>0 1 1 Стоп

Логика управления шаговым двигателем выглядит следующим образом: A, B, C, D, это четыре обмотки шагового двигателя. Диаграмма ниже (четыре фазы шагового двигателя).

Управление шаговым двигателем осуществляется аналогично управлению двумя DC-моторами.

Принцип управления двигателем при помощи Arduino и драйвера L298N

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

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


Пример драйвера L298N

Теперь разберем, как осуществляется управление двигателем с помощью драйвера L298N. Подключение двигателя производится к винтовым клеммным зажимам – по паре для питания каждого моторчика. Остальные клеммные зажимы предназначены для подачи питания плюс и минус, а также получения пониженного напряжения (на них подается определенный уровень питающего напряжения, от которого работают двигатели, а внутренний преобразователь понижает его до 5В для собственных логических цепей). Штекерные выводы платы осуществляют широтно-импульсную модуляцию при формировании рабочих сигналов.


Зажимы, куда подключать моторы

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

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

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

GND — земля. Зажимы, куда подключать моторы Следует отметить, что клеммный зажим с тремя выводами не только подводит к плате питающее напряжение, но и позволяет получить его уже преобразованное для собственных нужд драйвера величиной в 5В, как показано на рисунке выше.


Остановить их вращение можно подачей сигнала LOW на те же указанные выше пины. На схеме ниже приведен пример распределения выводов LN от рабочей микросхемы.


HIGH time. Мы использовали танковую платформу, учитывая что мотор крутит редуктор и гусеницы, то для его запуска требуется приличный ток.


В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости. Схема соединения Напряжение питания двигателей ниже 12 вольт, значит джампер 3 установлен, джамперы 1 и 2 на контактах ENA и ENB сняты.


Нет так давно мы рассматривали алгоритм сборки ЧПУ своими руками , где затрагивалась тема управления шаговыми двигателями, ведь именно они позволяют просто и точно спозиционировать фрезу в заданной точке. В виду сложности подбора транзисторов и подключения их в схему Н-моста, гораздо проще использовать уже существующие драйвера, имеющие такую функцию. Всё это приведёт к вращению мотора в определённом направлении. Блок клемм 3 отвечает за подключение питания двигателей.

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

Причем некоторые пины должны поддерживать ШИМ-модуляцию. При этом есть возможность изменять скорость и направление вращения моторов. В данном примере рассматривается мост собранный на полупроводниках.

Иначе, при задании движения, например, по часовой стрелке, один из них будет вращаться в противоположном направлении. Подключение биполярного шагового двигателя к модулю L для управления через Raspberry Pi.

HIGH ждем 5 секунд. Типы шаговых двигателей: биполярный, униполярный, с четырьмя обмотками. ШАГОВЫЙ ДВИГАТЕЛЬ ПРОСТОЙ ДРАЙВЕР ДЛЯ НЕГО

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]