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

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

Для нашего примера мы используем шаговый двигатель 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

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

File > Examples > Stepper в Arduino IDE.

PWM DC Motor Control

PWM, or pulse width modulation is a technique which allows us to adjust the average value of the voltage that’s going to the electronic device by turning on and off the power at a fast rate. The average voltage depends on the duty cycle, or the amount of time the signal is ON versus the amount of time the signal is OFF in a single period of time.

So depending on the size of the motor, we can simply connect an Arduino PWM output to the base of transistor or the gate of a MOSFET and control the speed of the motor by controlling the PWM output. The low power Arduino PWM signal switches on and off the gate at the MOSFET through which the high power motor is driven.

Note: Arduino GND and the motor power supply GND should be connected together.

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

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

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

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

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

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

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

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

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

Introduction: L298N MOTOR DRIVER MODULE

By HarshS91Follow

More by the author:

About: LANKESH

More About HarshS91 »

This is an instructable on how to control a DC motor and run a bipolar stepper motor by using the L298N motor driver module.Whenever we use the DC motors for any project the main points are,

  1. speed of DC motor,
  2. The direction of the DC motor.

This could be achieved by using the motor diver module so, I use the L298N motor driver module because it is cheap and easy to use.

Supplies:

why we will use a motor driver/motor driver module?

because the microcontroller was not delivering a specific amount of current and voltage which will reruired for motors etc.

Готовые модули на L298

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

Рис. 6. Готовые модули на L298.

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

Для подключения данной платки важно четко уяснить одну особенность:

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

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

Для того чтобы сэкономить два входа при подключении такого блока к Arduino или Raspberry Pi можно добавить часть схемы на CD4001, как на рисунке 5.

Sketch code

// два мотора будут вращаться в обе стороны с плавным нарастанием скорости
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);
}

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);

}

Step 3: Arduino Sketch Considerations:

The Arduino code sketch is pretty straight forward. Since there isn’t a library for the L298N Dual H-Bridge Motor Controller you just have to declare which pins the controller is hooked to.

The “int dir(number)Pin(letter)”‘ pins can be connected to any available digital pin you have available, as long as you declare the correct pin in your sketch. This makes the L298N Dual H-Bridge Motor Controller very versatile if your project is using a lot of Arduino pins.

The int“speedPin(letter)” pins need to be connected to a PWM pin on the Arduino if you want to enable speed control through PWM.

As a quick cheat I have included a list of PWM pins for the main two types of Arduino’s I use:

  • AT MEGA – PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.
  • UNO – PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.

Схема драйвера с L298 – полная версия

Драйвер L298 может работать с напряжением до 46 В и токами до 2 А на канал (всего 4А) в непрерывном режиме, хотя лучше не превышать общую мощность. С двигателями мощностью более 10 Вт лучше всего установить радиатор, как показано на фотографии.

Давайте проанализируем работу электронных схем драйверов в двух версиях. Помимо микросхемы L298 в схемах использованы несколько дополнительных компонентов. Логической части L298 требуется источник питания на 5В, и поэтому использован стабилизатор напряжения 78L05, который является маломощным вариантом классического 7805. Стабилизатор 78L05 обеспечивает максимальный выходной ток до 100 мА, что более чем достаточно для наших целей.

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

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

Список необходимых компонентов (упрощенная версия):

  • 4 резистора по 100 Ом;
  • 2 резистора по 1,8 кОм;
  • 1 конденсатор емкостью 100 нФ;
  • 2 электролитических конденсатора на 22 мкФ;
  • 8 диодов 1N4007;
  • 2 желтых светодиода;
  • 2 красных светодиода;
  • 1 стабилизатор 78L05;
  • 1 драйвер L298.

Управляющие входы обеих версий работают с логикой 5В (TTL), хотя мы можем без проблем управлять сигналами управления на 3,3В. Резисторы, с сопротивлением 100 Ом на входах, служат только для защиты и могут быть заменены перемычками из проволоки.

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

С нашем случае на данные входы не нужно дополнительно подавать сигнал, поскольку к ним уже подключены подтягивающие резисторы по 4,7кОм. Для того чтобы отключить мост, нам просто необходимо снизить напряжение до 0 В.

Список необходимых компонентов (полная версия):

  • 6 резисторов по 100 Ом;
  • 2 резистора по 4,7 кОм;
  • 2 резистора по 1,8 кОм;
  • 1 конденсатор на 100 нФ;
  • 2 электролитических конденсатора 22 мкФ;
  • 8 диодов 1N4007;
  • 2 желтых светодиода;
  • 2 красных светодиода;
  • 1 стабилизатор 78L05;
  • 1 драйвер L298.

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

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

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

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

www.inventable.eu

Wiring L298N motor driver module with Arduino UNO

Now that we know everything about the module, we can begin hooking it up to our Arduino!

Start by connecting power supply to the motors. In our experiment we are using DC Gearbox Motors(also known as ‘TT’ motors) that are usually found in two-wheel-drive robots. They are rated for 3 to 12V. So, we will connect external 12V power supply to the VCC terminal. Considering internal voltage drop of L298N IC, the motors will receive 10V and will spin at slightly lower RPM. But, that’s OK.

Next, we need to supply 5 Volts for the L298N’s logic circuitry. We will make use of the on-board 5V regulator and derive the 5 volts from the motor power supply so, keep the 5V-EN jumper in place.

Now, the input and enable pins(ENA, IN1, IN2, IN3, IN4 and ENB) of the L298N module are connected to six Arduino digital output pins(9, 8, 7, 5, 4 and 3). Note that the Arduino output pins 9 and 3 are both PWM-enabled.

Finally, connect one motor to terminal A(OUT1 & OUT2) and the other motor to terminal B(OUT3 & OUT4). You can interchange your motor’s connections, technically, there is no right or wrong way.

When you’re done you should have something that looks similar to the illustration shown below.


Wiring DC motors to L298N motor driver & Arduino

Controlling a DC Motor

In order to have a complete control over DC motor, we have to control its speed and rotation direction. This can be achieved by combining these two techniques.

  • PWM – For controlling speed
  • H-Bridge – For controlling rotation direction

PWM – For controlling speed

The speed of a DC motor can be controlled by varying its input voltage. A common technique for doing this is to use PWM (Pulse Width Modulation)

PWM is a technique where average value of the input voltage is adjusted by sending a series of ON-OFF pulses.

The average voltage is proportional to the width of the pulses known as Duty Cycle.

The higher the duty cycle, the greater the average voltage being applied to the dc motor(High Speed) and the lower the duty cycle, the less the average voltage being applied to the dc motor(Low Speed).

Below image illustrates PWM technique with various duty cycles andaverage voltages.


Pulse Width Modulation(PWM) Technique

H-Bridge – For controlling rotation direction

The DC motor’s spinning direction can be controlled by changing polarity of its input voltage. A common technique for doing this is to use an H-Bridge.

An H-Bridge circuit contains four switches with the motor at the center forming an H-like arrangement.

Closing two particular switches at the same time reverses the polarity of the voltage applied to the motor. This causes change in spinning direction of the motor.

Below animation illustrates H-Bridge circuit working.


Working of H-Bridge

Что представляет собой драйвер 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 – выводы для установки текущего режима.
Оцените статью:
Оставить комментарий