Проект 23: Драйвер мотора L293D
Введение в проект
Цель этого проекта — добиться полностью автоматического управления двигателем постоянного тока с помощью платы Arduino в сочетании с драйвером мотора L293D (или совместимым SN754410). После запуска программы мотор будет работать без ручного вмешательства (не нужно отправлять команды через последовательный монитор), автоматически и циклично выполняя последовательность: «вращение вперед -> остановка -> вращение назад -> остановка». Этот проект является отличной базовой практикой для изучения управления моторами, регулировки скорости с помощью ШИМ и логики управления мостом H.
Аппаратная часть проекта
Для выполнения этого проекта требуются следующие базовые аппаратные компоненты:
Плата Arduino (например, Arduino UNO) × 1
Драйвер мотора L293D или SN754410 × 1
Стандартный двигатель постоянного тока × 1
Макетная плата (breadboard) × 1
Провода Dupont (мужчина-мужчина) × несколько
Внешний независимый источник питания (рекомендуется, например, держатель для 4 батареек AA или 9В батарея, используется для отдельного питания мотора)
Принцип работы проекта
Рабочее состояние двигателя постоянного тока (направление и скорость) контролируется драйвером L293D, основные принципы следующие:
Управление направлением (принцип моста H): Внутри микросхемы интегрирована схема моста H. Для одного канала мотора микросхема предоставляет два входных пина направления (Input 1 и Input 2). Когда эти два пина получают противоположные логические уровни (один HIGH, другой LOW), мотор вращается; при смене HIGH и LOW направление вращения меняется на обратное; если оба пина HIGH или оба LOW, мотор останавливается (тормозит).
Управление скоростью (ШИМ): Пин включения (Enable) микросхемы получает ШИМ-сигнал (аналоговый выход) от Arduino. Регулируя коэффициент заполнения ШИМ (значение от 0 до 255), контролируется среднее напряжение на моторе, что позволяет плавно регулировать скорость.
Схема подключения
Пожалуйста, подключите компоненты на макетной плате строго согласно следующим соответствиям пинов:
1. Пины управления (со стороны Arduino)
Arduino D10➔ подключен к пину микросхемы 1 (Enable 1,2) —— управление скоростью через ШИМArduino D11➔ подключен к пину микросхемы 2 (Input 1) —— управление направлением 1Arduino 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.
Пример кода
Скопируйте и загрузите следующий код в вашу 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);
}
Объяснение кода
Эта программа состоит из трех основных частей:
Определение и инициализация пинов (
setup): В начале кода реальные аппаратные пины D10, D11 и D9 назначаются соответствующим переменным, и все они настраиваются в режимеOUTPUTв функцииsetup(), чтобы отправлять управляющие сигналы на микросхему.Пользовательская функция управления (
setMotor): Это суть кода. Мы инкапсулируем скорость (speed) и направление (reverse) как параметры. СтрокаdigitalWrite(in1Pin, !reverse);умело использует логику отрицания (!). При передачеfalsein1Pinвыдает HIGH, аin2Pin— LOW; при передачеtrueвыходы меняются местами. Это полностью исключает риск одновременного HIGH на обоих пинах из-за ошибок в коде, делая вызовы основной программы очень простыми.Основной цикл управления (
loop): Вызывает функциюsetMotor()как строительные блоки. Последовательно отправляет команды на вращение вперед (скорость 255), остановку (скорость 0), вращение назад (скорость 255) и остановку (скорость 0), используяdelay()между каждым шагом для поддержания соответствующей длительности состояния, тем самым достигая полностью автоматической работы.
Экспериментальный результат
После загрузки кода и подачи питания на схему вы увидите следующее:
Мотор начинает вращаться на полной скорости в одном направлении (например, по часовой стрелке) в течение 2 секунд.
Мотор отключается и полностью останавливается, оставаясь неподвижным в течение 1 секунды.
Мотор снова запускается и вращается на полной скорости в противоположном направлении (например, против часовой стрелки) в течение 2 секунд.
Мотор снова отключается и останавливается, оставаясь неподвижным в течение 1 секунды.
Система автоматически возвращается к шагу 1, повторяя этот цикл бесконечно до отключения питания.
