Микросхема L298. Motor Shield

Всем хороша L293D кроме тока — только 600мА на канал (у L293N — 1.2А, правда с внешними диодами и только кратковременно). У нее есть более продвинутый аналог — L298.
L298  — представляет из себя те же четыре полумоста объединённые по два сигналами разрешения работы (ENABLE), но ток нагрузки драйвера значительно выше — до 4А. Корпус тоже покрупнее — при необходимости его удобно прикрепить к радиатору. Здесь также без внешних диодов не обойтись, причём желательно ставить диоды Шоттки и, желательно, на ток не меньше, чем ток нагрузки.


На основе микросхем драйверов двигателей выпускаются готовые модули (в терминах Arduino — Shield (шилды)) управления электродвигателями. Рассмотрим наиболее популярный, на базе L298.На плате модуля, кроме драйвера, имеется стабилизатор напряжения на 5 вольт, защитные диоды Шоттки и клеммы для подключения двигателей.Выводы ENABLE 1, 2 (ENA привязан к IN1, IN2, ENB к IN3, IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:

  1. Условно «активном» режиме, когда ими будет управлять контроллер — высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов «IN». Для регулировки скорости моторов, на «EN» выводы подается ШИМ (PWM) сигнал.
  2. Условно «пассивном» режиме, просто притянув выводы «EN» к высокому уровню (+5V). Для этого на шилдах, рядом с выводами ENA и ENB находятся штырьки соединенные с +5V. Замыкаем выводы с помощью джамперов (см рисунок a2 ниже). В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться на полную скорость (для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль. Для остановки нужно будет подавать одноименные сигналы на выводы «IN».Клемма «+12» — предназначена для подключения внешнего источника питания для двигателей. Это же напряжение можно подать на внутренний стабилизатор модуля для получения +5В для питания «логики» микросхемы драйвера — см описание под картинками ниже.

    Подключение одного мотора, с притянутым к +5V выводом ENB.Схема проста — пины 4 и 5 управляют ключами Н-моста, выполненного на каналах 3 и 4 драйвера L298. При подаче одинаковых сигналов — мотор стоит, при разных уровнях — вращается в ту или иную сторону.

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

void setup() {
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
}
void loop()  {
  digitalWrite (IN4, HIGH);  //в одну сторону вращение
  digitalWrite (IN3, LOW); 
  delay(2000);
  digitalWrite (IN4, LOW);   //выключить вращение
  delay(500);
  digitalWrite (IN3, HIGH);  //в другую сторону
  delay(3000);
  digitalWrite (IN3, LOW);   //выключить
  delay(4000);
}

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


Управление скоростью вращения двигателя. В данном примере мы подсоединили 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);
}

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

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

По материалам курса робототехники

В подготовке использованы материалы сайта http://zelectro.com.ua/

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".