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

Введение

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

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

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

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

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

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

Микросхема L298N

Motor Shield разработан на базе микросхемы LN. Их необходимо устанавливать в обвязку микросхемы дополнительно.Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
Разъём для подачи питания и работа стабилизатора.Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
LOW Включаем вращение двигателя 1 в одну сторону.Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль. Однако, связка «Ардуино — шаговый двигатель» требует дополнительный элемент — драйвер.
Для изменения скорости вращения щёточных моторов на эти контакты подаётся ШИМ-сигнал.Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
Для изменения скорости вращения щёточных моторов на эти контакты подаётся ШИМ-сигнал.Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
Аналогично первому скрипту, программу можно сохранить в тот же файл или в новый отдельно созданный.
Шаговый двигатель БЕЗ ДРАЙВЕРА!

Полезная информация

Вернемся к разгону двигателей при помощи выводов ENABLE. В статье о подключении L293D я уже упоминал о том, что при старте двигатель в среднем потребляет ток в 2-4 раза больше номинального, а при резком реверсе еще больше. Данный скачок можно снизить или вообще убрать, если разгонять двигатель плавно и дать на разгон какой-то промежуток времени.

Мы специально взяли слабый по току блок питания (9V, 600 мА), чтобы наглядно показать просадку напряжения. Наблюдайте за светодиодом и вы все увидите сами.

P.S. Мы использовали танковую платформу, учитывая что мотор крутит редуктор и гусеницы, то для его запуска требуется приличный ток. При замерах оказалось, что при резком запуске одного мотора, кратковременный скачок тока составил порядка 0.7- 0.9A (при номинальном 0.2A), а при включении сразу двух моторов до 1.8A. При плавном разгоне мы фиксировали редкие скачки тока до 0.3А. Об эффективности плавного разгона судите сами.

Stepper.h library example code for L298N driver with stepper motor and Arduino

You can upload the following example code to your Arduino using the Arduino IDE.

This example uses the Stepper.h library, which should come pre-installed with the Arduino IDE. You can find it by going to Sketch > Include Library > Stepper.

This sketch turns the stepper motor 1 revolution in one direction, pauses, and then turns 1 revolution in the other direction.

/* Example sketch to control a stepper motor with L298N motor driver, Arduino UNO and Stepper.h library. More info: https://www.makerguides.com */

// Include the Stepper library:
#include <Stepper.h>

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

// Initialize the stepper library on pins 8 through 11:
Stepper myStepper = Stepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // Set the motor speed (RPMs):
  myStepper.setSpeed(100);
}

void loop() {
  // Step one revolution in one direction:
  myStepper.step(200);

  delay(2000);

  // Step on revolution in the other direction:
  myStepper.step(-200);

  delay(2000);
}

How the code works:

The sketch starts by including the Stepper.h Arduino library. More information about this library can be found on the Arduino website.

// Include the Stepper library:
#include <Stepper.h>

Next we need to define how many steps it takes for the motor to rotate 1 revolution. n this example we will be using the motor in full-step mode. This means it takes 200 steps to rotate 360 degrees. You can change this value if you want if you are using a different type of stepper motor or setup.

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

After this, you need to create a new instance of the Stepper class, which represents a particular stepper motor connected to the Arduino. For this we use the function  where steps is the number of steps per revolution and pin1 through pin4 are the pins used to drive the stepper motor. In our case these are pins 8, 9, 10 and 11.

// Initialize the stepper library on pins 8 through 11:
Stepper myStepper = Stepper(stepsPerRevolution, 8, 9, 10, 11);

In this case I called the stepper motor ‘myStepper’ but you can use other names as well, like ‘z_motor’ or ‘liftmotor’ etc. . The name ‘myStepper’ will be used to set the speed and number of steps for this particular motor. Note that you can create multiple stepper objects with different names if you want to control more than one motor.

In the  we define the speed of the motor. You can set the speed of the motor in RPM with the function . I set it to 100, so we should see around 1.6 revolutions per second.

  // Set the motor speed (RPMs):
  myStepper.setSpeed(100);

In the loop section of code, we simply call the  function which turns the motor a specific number of steps at a speed determined by the  function. Passing a negative number to this function reverses the spinning direction of the motor.

void loop() {
  // Step one revolution in one direction:
  myStepper.step(200);

  delay(2000);

  // Step on revolution in the other direction:
  myStepper.step(-200);

  delay(2000);
}

Note that the step(steps) function is blocking, this means it will wait until the motor has finished moving to pass control to the next line in your sketch.

Arduino Code – Controlling a DC Motor

The following sketch will give you complete understanding on how to control speed and spinning direction of a DC motor with L298N motor driver and can serve as the basis for more practical experiments and projects.

Code Explanation:

The arduino code is pretty straightforward. It doesn’t require any libraries to get it working. The sketch starts with declaring Arduino pins to which L298N’s control pins are connected.

In setup section of code, all the motor control pins are declared as digital OUTPUT and pulled LOW to turn both the motors OFF.

Популярные статьи  Как применять прокалывающие зажимы для СИП?

In loop section of the code we call two user defined functions at an interval of a second.

These functions are:

  • directionControl() – This function spins both motors forward at maximum speed for two seconds. It then reverses the motor’s spinning direction and spins for another two seconds. Finally it turns the motors off.

  • speedControl() – This function accelerates both the motors from zero to maximum speed by producing PWM signals using analogWrite() function, then it decelerates them back to zero. Finally it turns the motors off.

L298N Driver

The L298N is a dual H-Bridge motor driver which allows speed and direction control of two DC motors at the same time. The module can drive DC motors that have voltages between 5 and 35V, with a peak current up to 2A.

Let’s take a closer look at the pinout of L298N module and explain how it works. The module has two screw terminal blocks for the motor A and B, and another screw terminal block for the Ground pin, the VCC for motor and a 5V pin which can either be an input or output.

This depends on the voltage used at the motors VCC. The module have an onboard 5V regulator which is either enabled or disabled using a jumper. If the motor supply voltage is up to 12V we can enable the 5V regulator and the 5V pin can be used as output, for example for powering our Arduino board. But if the motor voltage is greater than 12V we must disconnect the jumper because those voltages will cause damage to the onboard 5V regulator. In this case the 5V pin will be used as input as we need connect it to a 5V power supply in order the IC to work properly.

We can note here that this IC makes a voltage drop of about 2V. So for example, if we use a 12V power supply, the voltage at motors terminals will be about 10V, which means that we won’t be able to get the maximum speed out of our 12V DC motor.

Next are the logic control inputs. The Enable A and Enable B pins are used for enabling and controlling the speed of the motor. If a jumper is present on this pin, the motor will be enabled and work at maximum speed, and if we remove the jumper we can connect a PWM input to this pin and in that way control the speed of the motor. If we connect this pin to a Ground the motor will be disabled.

Next, the Input 1 and Input 2 pins are used for controlling the rotation direction of the motor A, and the inputs 3 and 4 for the motor B. Using these pins we actually control the switches of the H-Bridge inside the L298N IC. If input 1 is LOW and input 2 is HIGH the motor will move forward, and vice versa, if input 1 is HIGH and input 2 is LOW the motor will move backward. In case both inputs are same, either LOW or HIGH the motor will stop. The same applies for the inputs 3 and 4 and the motor B.

See AlsoArduino Brushless Motor Control Tutorial | ESC | BLDC

Control Pins

For each of the L298N’s channels, there are two types of control pins which allow us to control speed and spinning direction of the DC motors at the same time viz. Direction control pins & Speed control pins.

Direction Control Pins

Using the direction control pins, we can control whether the motor spins forward or backward. These pins actually control the switches of the H-Bridge circuit inside L298N IC.

The module has two direction control pins for each channel. The IN1 and IN2 pins control the spinning direction of the motor A while IN3 and IN4 control motor B.

The spinning direction of a motor can be controlled by applying either a logic HIGH(5 Volts) or logic LOW(Ground) to these inputs. The below chart illustrates how this is done.

Input1 Input2 Spinning Direction
Low(0) Low(0) Motor OFF
High(1) Low(0) Forward
Low(0) High(1) Backward
High(1) High(1) Motor OFF

Speed Control Pins

The speed control pins viz. ENA and ENB are used to turn the motors ON, OFF and control its speed.

Pulling these pins HIGH will make the motors spin, pulling it LOW will make them stop. But, with Pulse Width Modulation (PWM), we can actually control the speed of the motors.

The module usually comes with a jumper on these pins. When this jumper is in place, the motor is enabled and spins at maximum speed. If you want to control the speed of motors programmatically, you need to remove the jumpers and connect them to PWM-enabled pins on Arduino.

Подключение 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. При правильной сборке вал двигателя начнет вращаться.

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

H-Bridge DC Motor Control

On the other hand, for controlling the rotation direction, we just need to inverse the direction of the current flow through the motor, and the most common method of doing that is by using an H-Bridge. An H-Bridge circuit contains four switching elements, transistors or MOSFETs, with the motor at the center forming an H-like configuration. By activating two particular switches at the same time we can change the direction of the current flow, thus change the rotation direction of the motor.

So if we combine these two methods, the PWM and the H-Bridge, we can have a complete control over the DC motor. There are many DC motor drivers that have these features and the L298N is one of them.

Installing the AccelStepper library

In the following three examples I will show you how you can control both the speed, the direction and the number of steps the stepper motor should take. In this example I will be using the AccelStepper library.

Популярные статьи  Качество электрической энергии

The AccelStepper library written by Mike McCauley is an awesome library to use for your project. One of the advantages is that it supports acceleration and deceleration, but it has a lot of other nice functions too.

You can download the latest version of this library here or click the button below.

AccelStepper-1.59.zip

You can install the library by going to Sketch > Include Library > Add .ZIP Library… in the Arduino IDE.

Another option is to navigate to Tools > Manage Libraries… or type Ctrl + Shift + I on Windows. The Library Manager will open and update the list of installed libraries.

You can search for ‘accelstepper‘ and look for the library by Mike McCauley. Select the latest version and then click Install.

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

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

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

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

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

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

Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
Зажимы, куда подключать моторы

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

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

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

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

const int stepsPerRevolution = 200;

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

myStepper.setSpeed(60);

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

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

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

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

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

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

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

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

Sketch code

// вращаться "вправо" 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);
  }

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

подсоединяем ENB к выводу ШИМ (D3)

Теперь становится возможно управлять скоростью мотора, изменяя скважность посылаемого ШИМ сигнала

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

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

Sketch code

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

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

Click here

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

}

Реверс двигателя постоянного тока схемы.

В статье «Регуляторы оборотов электродвигателей » речь шла о регулировке оборотов коллекторных двигателей электроинструментов. Нередко возникает и другая задача: реверс двигателя постоянного тока, т.е. требуется обеспечить его вращение в одну и другую стороны. Это может понадобиться, например, для привода ворот в гараже или коттедже, в различных моделях и пр. Проще всего такая задача с реверсом решается с помощью мостовой схемы, которая в общем виде представлена на рис.1 . Схема реверса состоит из четырех ключей, двигателя и источника питания. Когда все ключи разомкнуты ( рис.1а ), ток через двигатель не течет. При коммутации первого и четвертого ключа ток через двигатель Iд течет слева направо ( рис.1б ), и двигатель вращается в одном направлении. А при коммутации второго и третьего ключей — течет справа налево ( рис.1в ), и двигатель вращается в обратном направлении. Понятно, что руками коммутировать для реверса четыре переключателя неудобно, поэтому вместо ключей используем транзисторы ( рис.2 ). Транзисторы могут быть разной проводимости, полевыми или биполярными. Работают они в ключевом режиме. Обратно включенные диоды VD1. VD4 защищают транзисторы от выхода из строя, так как в момент выключения электродвигателя возникает достаточно большая ЭДС самоиндукции. Силовая часть устройства реверса на биполярных транзисторах приведена на рис.3 . Она состоит из четырех силовых и двух управляющих транзисторов; резисторов, ограничивающих базовые токи; шунтирующих диодов и гальванической развязки в виде двух оптопар. Питание моста происходит от блока питания, подающего постоянное напряжение +50 В относительно земли. В cостоянии покоя на оба канала (А и Б) подается 0 В. Все транзисторы закрыты, на концах обмоток потенциал 0 В. Вал двигателя не вращается. Для вращения двигателя в одну сторону на канал А подается постоянное напряжение +5 В или ШИМ-сигнал, на канал Б — 0 В. Открывается оптрон VU1, следом управляющий VТ5; при этом VТ6 закрыт. Через резистор R2 протекает ток, открывающий силовые VТ1 и VТ4, а VТ2 и VТЗ закрыты. Таким образом, на конце обмотки Я1 потенциал составляет +50 В, на конце обмотки Я2 — 0 В. Вал двигателя вращается (например, по часовой стрелке). Чтобы включить реверс двигателя, на канал Б подается напряжение +5 В (ШИМ-сигнал), на канал А — 0 В. Управляющий VТ6 открыт, VТ5 — закрыт. Через резистор R4 в цепи коллектора VТ6 протекает ток, открывающий VТ2 и VТ3, а VТ1 и VТ4 закрыты. На конце обмотки Я1 потенциал составляет 0 В, на конце обмотки Я2 — +50 В. Вал двигателя вращается против часовой стрелки. В случае подачи полoжительного напряжения на оба канала (А и Б) произойдет короткое замыкание, поэтому такой режим предотвращается управляющей частью устройства. Реверс двигателя постоянного тока можно выполнить и на МОП-транзисторах ( рис.4 ). На входе схемы реверса последовательно установлены два инвертора так, что выход одного одновременно является входом другого. При этом сигнал управления (высокий или низкий логический уровень) на входе DD1.1 инвертируется и подается на вход DD1.2. Выходы инверторов управляют полевыми транзисторами. При высоком уровне на входе, на выходе DD1.1 — низкий уровень, а на выходе DD1.2. — высокий. Благодаря этому VТ2 и VТЗ открыты и пропускают ток от отрицательного к положительному полюсу источника питания. Двигатель М1 вращается против часовой стрелки. Если на вход схемы реверса подать низкий уровень, на выходе DD1.1 появится высокий уровень и откроются VT1 и VТ4, замыкая другую диагональ моста. Теперь ток потечет в другую сторону, и двигатель изменит направление вращения. Для управления устройством для реверса необходим логический сигнал МОП-уровня (0/+12 В).

Устройство для реверса испытывалось с электродвигателем автомобильного вентилятора. Мощные МОП-транзисторы (для КП74ЗБ напряжение сток-затвор составляет 80 В. максимальный ток стока — 4,9 А) обеспечивают запас по мощности и по напряжению. Сопротивление открытого канала составляет 0,3.. .0,5 Ом. Для повышения эффективности VT1. . .VТ4 устанавливаются на теплоотводы. Напряжение питания зависит от типа применяемого электродвигателя М1. Если его напряжение питания превышает 15 В, следует предусмотреть в схеме дополнительный стабилизатор для питания микросхемы DD1. Вместо К561ЛА7 можно применить другую микросхему серии 561, если ее элементы обеспечивают инвертирование сигнала (К561ЛЕ5, К561ЛН2). Другая схема управления реверсом, построенная на мощных комплементарных полевых транзисторах, показана на рис.5 .

Сборка

  1. Подключите выводы 5V и корпус микросхемы L298 к выводам 5V и корпус платы Arduino;
  2. Подключите двигатель к выводам 2 и 3 микросхемы L298;
  3. Подключите вывод IN1 микросхемы L298 к выводу 8 платы Arduino;
  4. Подключите вывод IN2 микросхемы L298 к выводу 9 платы Arduino;
  5. Подключите вывод EN A микросхемы L298 к выводу 2 платы Arduino;
  6. Подключите вывод SENS A микросхемы L298 к корпусу;
  7. Подключите Arduino к компьютеру, используя USB кабель, и загрузите программу на плату, используя Arduino IDE;
  8. Обеспечьте питание платы Arduino с помощью источника питания, аккумулятора или USB кабеля.

Теперь двигатель должен сначала вращаться по часовой стрелке в течение 3 секунд, а затем против часовой стрелки так же в течение 3 секунд.

Оцените статью
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: