Проект 23: Драйвер мотора L293D

Введение в проект

Цель этого проекта — добиться полностью автоматического управления двигателем постоянного тока с помощью платы Arduino в сочетании с драйвером мотора L293D (или совместимым SN754410). После запуска программы мотор будет работать без ручного вмешательства (не нужно отправлять команды через последовательный монитор), автоматически и циклично выполняя последовательность: «вращение вперед -> остановка -> вращение назад -> остановка». Этот проект является отличной базовой практикой для изучения управления моторами, регулировки скорости с помощью ШИМ и логики управления мостом H.

Аппаратная часть проекта

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

  • Плата Arduino (например, Arduino UNO) × 1

  • Драйвер мотора L293D или SN754410 × 1

  • Стандартный двигатель постоянного тока × 1

  • Макетная плата (breadboard) × 1

  • Провода Dupont (мужчина-мужчина) × несколько

  • Внешний независимый источник питания (рекомендуется, например, держатель для 4 батареек AA или 9В батарея, используется для отдельного питания мотора)

Принцип работы проекта

Рабочее состояние двигателя постоянного тока (направление и скорость) контролируется драйвером L293D, основные принципы следующие:

  1. Управление направлением (принцип моста H): Внутри микросхемы интегрирована схема моста H. Для одного канала мотора микросхема предоставляет два входных пина направления (Input 1 и Input 2). Когда эти два пина получают противоположные логические уровни (один HIGH, другой LOW), мотор вращается; при смене HIGH и LOW направление вращения меняется на обратное; если оба пина HIGH или оба LOW, мотор останавливается (тормозит).

  2. Управление скоростью (ШИМ): Пин включения (Enable) микросхемы получает ШИМ-сигнал (аналоговый выход) от Arduino. Регулируя коэффициент заполнения ШИМ (значение от 0 до 255), контролируется среднее напряжение на моторе, что позволяет плавно регулировать скорость.

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

Пожалуйста, подключите компоненты на макетной плате строго согласно следующим соответствиям пинов:

1. Пины управления (со стороны Arduino)

  • Arduino D10 ➔ подключен к пину микросхемы 1 (Enable 1,2) —— управление скоростью через ШИМ

  • Arduino D11 ➔ подключен к пину микросхемы 2 (Input 1) —— управление направлением 1

  • Arduino D9 ➔ подключен к пину микросхемы 7 (Input 2) —— управление направлением 2

2. Пины мотора

  • Один вывод двигателя постоянного тока ➔ подключен к пину микросхемы 3 (Output 1)

  • Другой вывод двигателя постоянного тока ➔ подключен к пину микросхемы 6 (Output 2) (Примечание: проводка двигателя постоянного тока не полярна; смена проводов влияет только на начальное направление вращения.)

3. Питание и земля

  • Arduino 5V ➔ подключен к пину микросхемы 16 (VCC1 — питание логики)

  • Положительный вывод внешней батареи ➔ подключен к пину микросхемы 8 (VCC2 — питание мотора) ⚠️ Предупреждение по безопасности: не рекомендуется подключать этот пин к 5V Arduino. Пусковой ток мотора может вызвать сброс платы или повредить стабилизатор напряжения.

  • GND Arduino и отрицательный вывод батареи ➔ соединены вместе с общей землей на макетной плате (GND), которая также подключена к пинам микросхемы 4, 5, 12, 13. Img

Пример кода

Скопируйте и загрузите следующий код в вашу Arduino:

/*

Electronics Learning Starter Kit for Arduino

Project 23

L293D Motor Driver

Edit By Keyes

*/

// Define pins
const int enablePin = 10; // D10: controls motor speed (PWM)
const int in1Pin = 11;    // D11: controls motor direction 1
const int in2Pin = 9;     // D9:  controls motor direction 2

void setup() {
  // Set control pins as output
  pinMode(enablePin, OUTPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
}

void loop() {
  // 1. Full speed forward for 2 seconds
  setMotor(255, false); 
  delay(2000);

  // 2. Stop for 1 second
  setMotor(0, false);   
  delay(1000);

  // 3. Full speed reverse for 2 seconds
  setMotor(255, true);  
  delay(2000);

  // 4. Stop for 1 second
  setMotor(0, false);   
  delay(1000);
}

// Custom motor control function
// Parameter speed: speed (0~255)
// Parameter reverse: direction (false = forward, true = reverse)
void setMotor(int speed, boolean reverse) {
  // Send PWM signal to set speed
  analogWrite(enablePin, speed);
  
  // Use negation logic to control direction, ensuring the two pins always have opposite levels
  digitalWrite(in1Pin, !reverse); 
  digitalWrite(in2Pin, reverse);  
}

Объяснение кода

Эта программа состоит из трех основных частей:

  1. Определение и инициализация пинов (setup): В начале кода реальные аппаратные пины D10, D11 и D9 назначаются соответствующим переменным, и все они настраиваются в режиме OUTPUT в функции setup(), чтобы отправлять управляющие сигналы на микросхему.

  2. Пользовательская функция управления (setMotor): Это суть кода. Мы инкапсулируем скорость (speed) и направление (reverse) как параметры. Строка digitalWrite(in1Pin, !reverse); умело использует логику отрицания (!). При передаче false in1Pin выдает HIGH, а in2Pin — LOW; при передаче true выходы меняются местами. Это полностью исключает риск одновременного HIGH на обоих пинах из-за ошибок в коде, делая вызовы основной программы очень простыми.

  3. Основной цикл управления (loop): Вызывает функцию setMotor() как строительные блоки. Последовательно отправляет команды на вращение вперед (скорость 255), остановку (скорость 0), вращение назад (скорость 255) и остановку (скорость 0), используя delay() между каждым шагом для поддержания соответствующей длительности состояния, тем самым достигая полностью автоматической работы.

Экспериментальный результат

После загрузки кода и подачи питания на схему вы увидите следующее:

  1. Мотор начинает вращаться на полной скорости в одном направлении (например, по часовой стрелке) в течение 2 секунд.

  2. Мотор отключается и полностью останавливается, оставаясь неподвижным в течение 1 секунды.

  3. Мотор снова запускается и вращается на полной скорости в противоположном направлении (например, против часовой стрелки) в течение 2 секунд.

  4. Мотор снова отключается и останавливается, оставаясь неподвижным в течение 1 секунды.

  5. Система автоматически возвращается к шагу 1, повторяя этот цикл бесконечно до отключения питания.

P23