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

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

Разные виды DC-моторов
Разные виды DC-моторов

Общая информация о двигателях постоянного тока

Двигатели постоянного тока являются универсальными устройствами, используемыми в самых разных механизмах — от игрушек и бытовых приборов до автоматических ворот и промышленных механизмов. Основные компоненты DC-мотора включают:

Управление двигателями с помощью Arduino и не только
  • Статор — неподвижная часть, включающая постоянные магниты.
  • Ротор (якорь) — вращающаяся часть с электромагнитами, создающими магнитное поле при подаче тока.

Эти компоненты взаимодействуют, создавая вращающий момент. Чем мощнее двигатель, тем больше крутящий момент и скорость он может обеспечить. Для бытового и хобби-применения часто выбирают моторы с напряжением 6–12 В.

Изменение полярности: как и почему мотор меняет направление вращения

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

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

Если вам интересно глубже изучить основы работы с электроникой, рекомендую бесплатный курс по электронике, где эти темы рассмотрены подробно.

Схемы переключения направления вращения без использования Arduino

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

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

Для переключения полярности можно использовать:

Двухпозиционный переключатель: при переключении изменяется подключение к "плюсу" и "минусу", что позволяет изменять направление тока.

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

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

Объединяет эти устройства одно - наличие двух независимых наборов контактов:
— Общий
— Нормально-замкнутый
— Нормально-разомкнутый.
Объединяет эти устройства одно - наличие двух независимых наборов контактов: — Общий — Нормально-замкнутый — Нормально-разомкнутый.
Внутреннее устройство микропереключателя
Внутреннее устройство микропереключателя

Эти переключатели можно легко смоделировать и проверить в TinkerCad.

Узнать больше о таких схемах и способах их реализации вы можете в нашем курсе по электронике.
Также в курсе содержится важная информация о способе входа в TinkerCad без использования vpn:
https://stepik.org/lesson/647657/step/6?unit=644282

H-мост: что это такое и как его использовать для управления двигателем

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

Простейшая схема H-моста выглядит так:

Управление двигателями с помощью Arduino и не только
  • Четыре ключа (транзисторы или реле) соединены в форме буквы "H".
  • Поочередное включение противоположных ключей позволяет изменить направление тока через двигатель, меняя его направление вращения.

Готовые схемы H-моста можно собрать и протестировать на платформе TinkerCad, что идеально подходит для экспериментов.
Также готовый проект для вас (из-за особенностей симулятора диоды из схемы пришлось убрать):

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

Драйверы для моторов: обзор и схемы подключения

Для облегчения управления и увеличения мощности, подаваемой на двигатель, используются драйверы. Они выполняют функции H-моста и часто включают в себя дополнительные схемы защиты и контроля тока. Наиболее распространенные драйверы — это:

L298N — старый, но надежный драйвер, работающий с напряжением до 46 В и током до 2 А.

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

L293D — легкий и удобный для небольших двигателей.

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

Подключение драйверов, таких как L298N, L293D или других, имеет сходную схему: входные пины подключаются к управляющим пинам микроконтроллера (например, Arduino), а выходные пины соединяются с выводами двигателя, как это работает в H-мосту. Драйверы также требуют отдельного питания для двигателей и общего заземления с микроконтроллером. Такой подход позволяет надежно управлять как направлением, так и скоростью вращения двигателя через ШИМ.

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

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

Что такое ШИМ и как он работает

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

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

Вот тут проект, где можно увидеть реализацию ШИМ с подключенным осциллографом: проект в TinkerCad

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

#define MOTOR1_DIR_PIN 2 #define MOTOR1_PWM_PIN 3 #define MOTOR2_DIR_PIN 4 #define MOTOR2_PWM_PIN 5 void setup() { pinMode(MOTOR1_DIR_PIN, OUTPUT); pinMode(MOTOR1_PWM_PIN, OUTPUT); pinMode(MOTOR2_DIR_PIN, OUTPUT); pinMode(MOTOR2_PWM_PIN, OUTPUT); } void loop() { //Двигатель 1 - вращение "по часовой" на полной скорости digitalWrite(MOTOR1_DIR_PIN, 0); analogWrite(MOTOR1_PWM_PIN, 255);//Значения от 0 до 255 //PIN1 установлен в 0, значит чем больше значение на PIN2, тем выше скорость вращения delay(2000); //Двигатель 1 - вращение "по часовой" на половине скорости digitalWrite(MOTOR1_DIR_PIN, 0); analogWrite(MOTOR1_PWM_PIN, 127);//Значения от 0 до 255 delay(2000); //Двигатель 1 - остановлен digitalWrite(MOTOR1_DIR_PIN, 0); analogWrite(MOTOR1_PWM_PIN, 0);//Значения от 0 до 255 delay(2000); //Двигатель 1 - вращение "против часовой" на полной скорости digitalWrite(MOTOR1_DIR_PIN, 1); analogWrite(MOTOR1_PWM_PIN, 0);//Значения от 0 до 255 //PIN1 установлен в 1, значит чем МЕНЬШЕ значение на PIN2, тем выше скорость вращения delay(2000); //Двигатель 1 - вращение "против часовой" на половине скорости digitalWrite(MOTOR1_DIR_PIN, 1); analogWrite(MOTOR1_PWM_PIN, 127);//Значения от 0 до 255 delay(2000); //Двигатель 1 - остановлен digitalWrite(MOTOR1_DIR_PIN, 0); analogWrite(MOTOR1_PWM_PIN, 0);//Значения от 0 до 255 delay(2000); // Двигатель 2 - вращение "по часовой" на полной скорости digitalWrite(MOTOR2_DIR_PIN, 0); analogWrite(MOTOR2_PWM_PIN, 255); delay(2000); // Двигатель 2 - вращение "по часовой" на половине скорости digitalWrite(MOTOR2_DIR_PIN, 0); analogWrite(MOTOR2_PWM_PIN, 127); delay(2000); // Двигатель 2 - остановлен digitalWrite(MOTOR2_DIR_PIN, 0); analogWrite(MOTOR2_PWM_PIN, 0); delay(2000); // Двигатель 2 - вращение "против часовой" на полной скорости digitalWrite(MOTOR2_DIR_PIN, 1); analogWrite(MOTOR2_PWM_PIN, 0); delay(2000); // Двигатель 2 - вращение "против часовой" на половине скорости digitalWrite(MOTOR2_DIR_PIN, 1); analogWrite(MOTOR2_PWM_PIN, 127); delay(2000); // Двигатель 2 - остановлен digitalWrite(MOTOR2_DIR_PIN, 0); analogWrite(MOTOR2_PWM_PIN, 0); delay(2000); }

Конечно, это код - только пример, заготовка с которой можно начать ваш большой проект!

Начать дискуссию