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

В данной статье рассматривается наиболее простой способ подключения мотора постоянного тока к Arduino.

Введение

Моторы постоянного тока нельзя подключать напрямую к Arduino. Это обусловлено тем, что пины не способны выдавать ток более 40 мА. Мотору же необходимы несколько сотен миллиампер, в зависимости от нагрузки, поэтому возникает потребность увеличения мощности. Делается это, как-правило, с помощью транзисторов.

В статье «Транзисторы: ​принцип работы, схема включения, чем отличаются ​биполярные и полевые» можно ознакомиться с основными типами транзисторов и их принципами работы.

Также рекомендуется посмотреть: Видеоуроки по Arduino, 5-я серия — Моторы и транзисторы. В данном уроке Джереми Блюм рассказывает о подключении мотора постоянного тока к Arduino через биполярный транзистор.

Необходимые компоненты

Мы рассмотрим вариант взаимодействия с полевым транзистором. Принципы подключения мотора будут разобраны на конкретном железе: DC-мотор, плата Arduino Uno, N-канальный полевой транзистор, резистор на 10 кОм (R1), резистор на 220 Ом (R2).

Вы же в своих экспериментах вольны использовать то, что есть в наличии. Важны лишь условия:

  • Максимальный ток потребления мотора (ток при блокировке) не должен превышать максимальный ток стока полевого транзистора.
  • Затвор транзистора должен отпираться при напряжении 5 В.
  • Транзистор должен обладать встроенным диодом обратной цепи (flyback-диод).

Схема подключения

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

Транзистор IRF530N достаточно мощный и поставляется в корпусе TO-220. Ниже приведена его распиновка.

В данной схеме транзистор будет работать в ключевом режиме: по одной команде от Arduino (установка уровня HIGH на затворе) транзистор будет подключать мотор к источнику питания (отпираться), по другой команде (установка уровня LOW на затворе) — отключать мотор от источника питания.

Резистор R1 подтягивает к земле затвор транзистора. Номинал не принципиален — можно использовать любые резисторы в диапазоне от 1 до 10 кОм. Резистор R2 служит для защиты пина микроконтроллера. Диапазон примерно от 10 до 500 Ом.

Чтобы запитать данную схему, нужно подключить к Arduino внешний источник питания на 6–9 В, либо подать питание непосредственно на макетную плату (синяя шина — минус, красная шина — плюс).

Программинг

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

Blink.ino
int led = 13;
 
 
void setup() 
{                
  // Инициализация цифрового пина 13 на вывод
  pinMode(led, OUTPUT);     
}
 
 
void loop()
{
  digitalWrite(led, HIGH);   // Включение светодиода и мотора
  delay(1000);               // Задержка на 1 секунду
  digitalWrite(led, LOW);    // Выключение светодиода и мотора
  delay(1000);               // Задержка на 1 секунду
}

Посмотрим, что получилось.

Цифровой пин 13 раз в секунду меняет своё состояние. Когда на выходе устанавливается значение HIGH — загорается светодиод и начинает вращаться мотор. Когда устанавливается LOW — светодиод гаснет, а мотор останавливается.

Результаты

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

Использование ШИМ для регулировки скорости мотора

Если мотором управлять ничуть не сложнее, чем светодиодом, то, наверное, можно изменять яркость скорость вращения мотора точно так же, как при работе со светодиодами? Именно так! Со стороны Arduino абсолютно неважно, с чем мы имеем дело.

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

Fade.ino
int led = 9;           // Пин, к которому подключён затвор транзистора
int brightness = 0;    // Теперь эта переменная отвечает за скорость вращения
int fadeAmount = 5;    // Шаг изменения скорости
 
void setup()
{ 
  // Настраиваем цифровой пин 9 на вывод
  pinMode(led, OUTPUT);
} 
 
void loop()
{ 
  // Устанавливаем скорость вращения мотора
  analogWrite(led, brightness);    
 
  // Увеличиваем текущее значение скорости вращения
  brightness = brightness + fadeAmount;
 
  // Когда скорость становится максимальной/минимальной — начинаем её снижать/повышать 
  if (brightness == 0 || brightness == 255)
  {
    fadeAmount = -fadeAmount ; 
  }     
  // Пауза 30 миллисекунд    
  delay(30);                            
}

Схема подключения

Чтобы использовать возможности функции analogWrite(..), нам придётся перейти на один из пинов (3/5/6/9/10/11), поддерживающих аппаратный ШИМ. Поскольку по умолчанию в скетче Fade задействован 9-й пин, остановим свой выбор на нём.

Результат

Вы получили возможность плавно изменять скорость вращения мотора, используя аппаратный ШИМ-сигнал с платы Arduino.

На этом наша статья подходит к завершению. Теперь вы смело можете использовать моторы постоянного тока в своих проектах!