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


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

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

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

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

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

Схема управления скоростью вращения двигателя постоянного тока с помощью ArduinoОбъяснение работы программы

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

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

В следующих строчках кода мы устанавливаем контакт A0 на ввод данных, а контакт 12 (который является контактом ШИМ) на вывод данных.

Теперь, в функции loop (), мы считываем аналоговое значение с контакта A0, используя функцию analogRead(pot), и сохраняем его в переменной c2. Затем мы вычитаем значение c2 из 1024 и сохраняем получившийся результат в c1. Затем подаем на контакт 12 ШИМ высокий уровень (HIGH) и после задержки, определяемой переменной c1, подаем на этот контакт низкий уровень (LOW). После этого выполняем задержку, определяемую переменной LOW, и продолжаем цикл сначала.

Причина, по которой мы вычитаем аналоговое значение из 1024, состоит в следующем. Дело в том, что аналого-цифровой преобразователь (АЦП) Arduino Uno имеет разрешение 10 бит, то есть может принимать целые значения в интервале 0 - 2^10 = 1024. Это означает что он преобразует входное значение напряжения в интервале от 0 до 5 В в целое значение в интервале от 0 до 1024. Таким образом, если мы умножим входное значение напряжения на 5/1024, то мы получим цифровое значение входного напряжения.

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

Работа схемы в действии

В представленной схеме мы управляем скоростью вращения двигателя постоянного тока с помощью потенциометра на 100 кОм, вращая ручку которого мы изменяем коэффициент заполнения ШИМ сигнала. Потенциометр 100 кОм подсоединен к аналоговому входному контакту A0 Arduino UNO, а двигатель постоянного тока соединен с контактом 12 Arduino (который является контактом ШИМ). Принцип работы программы основан на том, что она считывает значение напряжения с аналогового контакта A0. Значение напряжения на этом аналоговом контакте изменяется с помощью потенциометра. Потом после необходимых вычислений коэффициент заполнения ШИМ регулируется в соответствии с этим значением.

К примеру, если мы получаем значение 256 (то есть это уже преобразованное цифровое значение) с аналогового входа, то в этом случае высокий уровень на контакте ШИМ будет в течение 768 мс (1024-256), а низкий уровень будет в течение 256 мс. Следовательно, коэффициент заполнения ШИМ будет равен 75%. Человеческий глаз не может различить колебания такой высокой частоты поэтому ему кажется что двигатель постоянно вращается со скоростью 75% от максимальной.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
16 461 просмотров

Комментарии

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

  1. Я бы хотел узнать, на одном из форумов было описано действие шим контроля мотора, но я увидел такую закономерность, человек пишет: управлять двигателями постоянного тока при помощи изменения напряжения и частоты шим сигнала запрещено, мотор выйдет из строя, но частотой синусоидального сигнала можно. В чем закономерность?

    • Честно говоря я не знаю что изменится в управлении двигателем постоянного тока если просто изменить частоту синусоидального сигнала, не меняя его другие параметры. Там было какое-нибудь объяснение физики этого процесса?

  2. Исправьте, пожалуйста, у ардуино уно 12 пин не работает в ШИМ-режиме, только 3, 5, 6, 9, 10, 11

    • Добрый вечер. Ошибки нет. Дело в том, что мы используем в данном проекте не встроенную в Ардуино функцию для формирования ШИМ сигнала (analogWrite), а мы здесь используем "самодельную" ШИМ - мы самостоятельно чередуем на контакте 12 напряжения низкого и высокого уровня

  3. Спасибо за схему все подробно обьяснили,но,роль конденсатора можете обьяснить,почему там стоит не диод?

    • Конденсатор нужен для фильтрации различных нежелательных шумов. Честно говоря, не очень силен в схемотехнике (больше в программировании), но пока нигде не видел в этой роли диода. Посмотрите, к примеру, аналогичную схему, но с микроконтроллером AVR, там тоже включены конденсаторы для фильтрации по цепям питания

      • диод для защиты транзистора иначе индуктивный выброс с мотора очень быстро убьёт транзистор. Диод ставится параллельно нагрузке катодом к плюсу питания анодом к коллектору транзистора.

        • Спасибо за пояснение - оно поможет другим посетителям нашего сайта. Я все таки пока немного слабоват в схемотехнике, достаточно давно ее изучал, а практики было маловато

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *