Ардуино управление скоростью двигателем постоянного тока

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

Программинг

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

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

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

Результаты

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

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

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

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

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

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

Результат

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

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

Источник

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

В этой статье мы будем подключать двигатель постоянного тока к Arduino Uno и управлять скоростью его вращения. Делать мы это будем с помощью ШИМ (широтно-импульсной модуляции, в англ. языке PWM — Pulse Width Modulation) – эта функция реализована в Arduino чтобы на основе постоянного напряжения иметь возможность получения изменяющегося напряжения.

Общие принципы ШИМ

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

Если на представленном рисунке кнопка нажата, то двигатель начнет вращение и он будет вращаться до тех пор пока кнопка не будет отжата. Эта ситуация происходит если кнопка будет нажата постоянно – верхний график на представленном рисунке. Если же мы будем нажимать кнопку только в течение 8 мс из всего цикла в 10 мс, то в этом случае двигатель уже не будет в полной мере получать все напряжение батареи 9 В – в этом случае среднеквадратичная величина напряжения, получаемого двигателем, будет около 7 В. Соответственно, двигатель по сравнению с первым случаем (когда кнопка нажата постоянно) будет вращаться с меньшей скоростью. Поэтому цикл занятости (который еще называют коэффициентом заполнения ШИМ) в этом случае составит время включенного состояния/(время включенного состояния + время выключенного состояния) = 8/(8+2)=80%.

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

Принцип работы H-моста

Перед тем, как переходить непосредственно к управлению двигателем, обсудим что такое H-BRIDGE (H-мост). Собранная нами далее схема будет осуществлять две функции: управлять двигателем постоянного тока с помощью управляющих сигналов малой мощности и изменять направление вращения двигателя.

Нам известно, что для изменения направления вращения двигателя постоянного тока необходимо изменить полярность приложенного к нему питающего напряжения. И как раз для смены полярности напряжения хорошо подходит устройство, называемое H-мостом. На представленном выше рисунке мы имеем 4 выключателя. Как показано на рисунке 2 если выключатели A1 и A2 замкнуты, то ток через двигатель течет справа налево как показано на второй части рисунка 2 – то есть в этом случае двигатель будет вращаться по часовой стрелке. А если выключатели A1 и A2 разомкнуты, а B1 и B2 – замкнуты, то ток через двигатель в этом случае будет протекать слева направо как показано на второй части рисунка, то есть двигатель будет вращаться против часовой стрелки. В этом и заключается принцип работы H-моста.

Рисунок 2 (часть 1)

Рисунок 2 (часть 2)

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

В следующей таблице указаны необходимые значения напряжений на выводах INPUT1 и INPUT2 микросхемы L293D для смены направления вращения двигателя.

Enable Pin Input Pin 1 Input Pin 2 Motor Direction
High Low High вправо
High High Low влево
High Low Low стоп
High High High стоп

То есть, чтобы двигатель вращался по часовой стрелке необходимо чтобы на 2A было напряжение высокого уровня (high), а на контакте 1A – напряжение низкого уровня (low). Аналогично для вращения двигателя против часовой стрелки необходимо обеспечить на 1A напряжение высокого уровня, а на 2A – низкого.

Как показано на следующем рисунке Arduino UNO имеет 6 ШИМ каналов (обозначенных на плате специальным знаком – тильдой), любой из которых мы можем использовать для получения изменяющего напряжения (на основе ШИМ). В данном проекте мы будем использовать в качестве ШИМ выхода контакт PIN3 Arduino UNO.

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

  1. Плата Arduino UNO (купить на AliExpress).
  2. Драйвер двигателей L293D (купить на AliExpress).
  3. Электродвигатель постоянного тока.
  4. Светодиод (купить на AliExpress).
  5. Резистор 10 кОм (2 шт.) (купить на AliExpress).
  6. Кнопка (2 шт.).
  7. Конденсатор 100 пФ (купить на AliExpress).
  8. Переключатель.
  9. Источник питания с напряжением 5 В.

Работа схемы

Схема устройства (на макетной плате) представлена на следующем рисунке.

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

На нашем сайте мы уже рассматривали управление ШИМ с помощью микроконтроллера AVR ATmega и это управление было не самым простым делом – необходимо было сконфигурировать различные регистры. В отличие от этого управление ШИМ в Arduino UNO является крайне простым занятием, не требующем всего этого.

Исходный код программы

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

То есть для использования ШИМ на нужном контакте нам необходимо сделать следующие вещи:

pinMode(ledPin, OUTPUT)
analogWrite(pin, value)
analogWriteResolution(neededresolutionnumber)

Сначала мы должны выбрать один из доступных 6 выходов (контактов) ШИМ. Потом необходимо установить этот контакт в режим на вывод данных.

После этого мы должны задействовать функции ШИМ на этом выходе используя функцию “ analogWrite(pin, value) ”. Здесь ‘pin’ обозначает номер контакта, на котором мы будем использовать ШИМ, в нашем случае это будет 3-й контакт.

Value в этой функции представляет собой цикл занятости (коэффициент заполнения) ШИМ, оно может принимать значения от 0 (всегда выключено) до 255 (всегда включено). Мы будем увеличивать и уменьшать это значение с помощью кнопок, присутствующих на схеме.

Плата Arduino UNO имеет максимальное разрешение (разрешающую способность) ШИМ, равную 8, что означает что value в функции analogWrite(pin, value) может принимать значения от 0 до 255. Но если в этом есть необходимость, мы можем уменьшать разрешение ШИМ используя функцию “ analogWriteResolution() ”, в скобках которой мы можем записать число в диапазоне 4-8, которое и будет определять разрешающую способность ШИМ платы Arduino UNO.

Переключатель на схеме служит для изменения направления вращения двигателя.

А теперь непосредственно сам код программы с комментариями.

Источник

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

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

Общий принцип использования ШИМ

Управляя скоростью модуляции ШИМ (Pulse Width Modulation, PWM) можно регулировать, к примеру, силу свечения светодиода – данный принцип пояснен на следующем рисунке. Аналогичный механизм используется и для управления скоростью вращения двигателя.

Если на представленном рисунке выключатель будет замкнут на протяжении некоторого времени, то на протяжении этого же времени лампочка будет гореть. Если переключатель будет замкнут в течение 8ms и будет разомкнут 2ms в течение интервала 10ms, тогда лампочка будет гореть только в течение интервала 8ms. В рассмотренном примере можно сказать, что среднее выходное напряжение (на лампочке) будет составлять 80% от напряжения батареи.

В другом случае выключатель замыкается на 5ms и размыкается на эти же самые 5ms в течение интервала 10ms, таким образом среднее напряжение на лампочке будет составлять 50% от напряжения батареи. Принято говорить, что если напряжение батареи 5В и цикл занятости составляет 50%, то среднее напряжение на оконечном устройстве (лампочке) будет составлять 2.5В.

В третьем рассмотренном на рисунке случае цикл занятости составляет 20% и поэтому среднее напряжение на оконечном устройстве (лампочке) будет составлять 20% от напряжения батареи.

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

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

  1. Плата Arduino UNO (купить на AliExpress).
  2. Двигатель постоянного тока.
  3. Транзистор 2N2222 (купить на AliExpress).
  4. Потенциометр 100 кОм (купить на AliExpress).
  5. Конденсатор 0.1 нФ (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

Схема устройства

Представлена на следующем рисунке.

Объяснение работы программы

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

В ниже представленных строчках кода мы инициализируем переменные c1 и c2 и назначаем аналоговый контакт A0 выходу потенциометра, а 12-й контакт будем использовать для ШИМ.

Источник

Adblock
detector