Урок ESP8266. Управление двигателем постоянного тока. NodeMCU + MX1508

Цель этого урока - объяснить, как управлять двигателем постоянного тока и изменять скорость вращения, с помощью ESP8266 и драйвера MX1508. Подробное описание драйвера можно посчитать в моем уроке по подключению MX1508 к Arduino.

управлять двигателем постоянного тока и изменять скорость вращения, с помощью ESP8266 и драйвера MX1508.

Поскольку цифровые выводы микроконтроллера могут подавать только ограниченный ток (в случае ESP8266, максимум 12 мА), мы не можем напрямую использовать их для управления двигателем постоянного тока. Поэтому будем использовать драйвер MX1508, чтобы обеспечить ток, необходимый для вращения двигателя.

Схема подключения NodeMCU, MX1508 и двигатель постоянного тока.

Схема подключения для данного примера очень проста и ее можно увидеть на рисунке ниже. Мы просто используем цифровой вывод ESP8266 для управления MX1508 и, следовательно,двигателем.

Схема подключения NodeMCU, MX1508 и двигатель постоянного тока.

Наверное, понятно, что MX1508 будет действовать как переключатель, включающий или выключающий соединение двигателя с GND, когда соответствующий вывод находится в состоянии HIGH или LOW. Естественно, это ВЫСОКОЕ или НИЗКОЕ напряжение контролируется ESP8266.

Таким образом, ток необходимый для работы двигателя, обеспечивается источником питания 5 В и управление двигателем производит драйвер MX1508, что помогает не вывести ESP8266 из строя. Поскольку MX1508 может управляться сигналами 3,3 В, он будет нормально работать с ESP8266.

Простой пример кода управления двигателем постоянного тока и NodeMCU + MX1508.

Простой пример кода управления двигателем постоянного тока и NodeMCU + MX1508.

Чтобы управлять двигателем постоянного тока, нам нужно будет использовать только цифровой вывод микроконтроллера, следовательно, не нужно подключать библиотеку. Итак, мы инициализируем вывод, как выход.

int motorPin = D3; //Pin, который будет управлять двигателем
void setup() {
  pinMode(motorPin, OUTPUT);  //Инициализируйте pin как выходной
}

Основной цикл loop().

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

Чтобы контролировать, включен или выключен двигатель, нам просто нужно изменить значения цифрового вывода с HIGH на LOW. Таким образом, он будет либо работать на полной скорости, либо останавливаться.

  digitalWrite(motorPin, HIGH); //Включите двигатель на полную скорость
  delay(5000);
  digitalWrite(motorPin, LOW); //Выключить двигатель
  delay(5000);

Теперь, если хотим контролировать скорость двигателя, мы можем использовать ШИМ, вызвав функцию analogWrite. Эта функция принимает в качестве входных данных вывод, на котором генерируется сигнал ШИМ, и значение скважности. Нам просто нужно помнить из предыдущего урока, что диапазон значений рабочего цикла по умолчанию для реализации ESP8266 составляет от 0 до 1023.

При значении 0 на выводе ESP8266, который управляет MX1508, всегда будет 0 В (GND), и поэтому на двигатель не будет подаваться напряжение. Для значения 1023, напряжение на выводе ESP8266 всегда будет 3,3 В, таким образом, MX1508 будет выдавать 5 В.

 ESP8266 всегда будет 3,3 В, таким образом, MX1508 будет выдавать 5 В.

Для любого промежуточного значения между 0 и 1023 скважность прямоугольной волны, создаваемой ESP8266, будет воспроизведен MX1508, таким образом, двигатель будет иметь смоделированное аналоговое напряжение между 0 и 5 В, что будет соответственно изменять его скорость.

Итак, мы должны вызвать функцию analogWrite, как показано ниже, для промежуточного значения.

analogWrite(motorPin, 950);

Нужно иметь в виду, что существует минимальное значение напряжения, при котором двигатель начинает вращаться. Таким образом, это нормально, что при низких значениях ШИМ он не вращается, и только после порогового значения (который будет зависеть от используемого двигателя) он начнет вращаться.

Окончательный код можно увидеть ниже. В этом случае мы сначала выключаем двигатель на полной скорости, а затем выключаем его с помощью функции digitalWrite. Затем начинаем с 0 В и постепенно увеличиваем подаваемое напряжение до 5 В с помощью функции analogWrite.

  digitalWrite(motorPin, HIGH); //Включите двигатель на полную скорость
  delay(5000);
  digitalWrite(motorPin, LOW); //Выключить двигатель
  delay(5000);
  int i;
  for ( i = 0; i < 1023; i = i + 5) {
    analogWrite(motorPin, i); //Постепенно увеличивайте скорость
    delay(100);
  }
  for (; i > 0; i = i - 5) {
    analogWrite(motorPin, i); //Постепенно уменьшайте скорость
    delay(100);
  }
  analogWrite(motorPin, 0); //Отключить ШИМ

После достижения 5 В начинаем постепенно уменьшать напряжение до 0 В. Кроме того, в конце цикла выполняется вызов функции analogWrite со значением 0.

После достижения 5 В начинаем постепенно уменьшать напряжение до 0 В.

Тестирование кода.

Результат показан на видео ниже. Как указывалось ранее, сразу после определенного рабочего цикла, смоделированное аналоговое напряжение становится достаточно высоким, чтобы двигатель начал движение. А шум, который слышен перед запуском двигателя, является результатом приложения напряжения к его клеммам, которого недостаточно для его движения.

Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508.

Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508.

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

Схема подключения NodeMCU, MX1508 и два двигателя постоянного тока.

Схема подключения NodeMCU, MX1508 и два двигателя постоянного тока.

Пример возьмём из урока для Arduino. И подправим для использования с ESP8266.

const int PinA1 = D4;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = D3;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = D5; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = D6;  //(ШИМ) вывод 11 соединен с выводом (pin)B2
int speed = 1023;  // измените это значение (0-1023), 
                  //чтобы управлять скоростью вращения двигателей
void setup() {
  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  Serial.println("Avanti");
  forward();
  delay(2000);
  STOP();
  Serial.println("Indietro");
  backward();
  delay(2000);
  STOP();
  Serial.println("Sinistra");
  left();
  delay(2000);
  STOP();
  Serial.println("Destra");
  right();
  delay(2000);
  STOP();
}
void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Основное отличие данного примера это изменение скорости вращения. Как мы уже знаем из предыдущего урока ШИМ на ESP8266 можно менять от 0 до 1023, а для Arduino всего от 0 до 255.

int speed = 1023;  // измените это значение (0-1023),
...
analogWrite(PinA2, speed);

Как видим, двигателя вращаются по загнанному алгоритму и с указанной скоростью вращения. На данном примере можно реализовать Wi-Fi машинку или другое умное устройство.

На данном примере можно реализовать Wi-Fi машинку или другое умное устройство.

Смотрите примеры проектов с использованием двигателей постоянного тока:

Понравился Урок ESP8266. Управление двигателем постоянного тока. NodeMCU + MX1508? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Пример кода управления двигателем постоянного тока и NodeMCU + MX1508 Пример кода управления двигателем постоянного тока и NodeMCU + MX1508.ino1 Kb 654 Скачать
Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508 Пример вращения двумя двигателями постоянного тока с помощью NodeMCU + MX1508.ino2 Kb 647 Скачать

Комментарии

Ваше Имя*

Саша

Гость: Саша (24 сентября, 2021 в 03:29)

Спасибо за полезный урок. Последнее время интересуюсь ЕСП.


Разработка проектов