Управление DC-мотором при помощи Arduino и драйвера моторов
Данный пример демонстрирует управление DC-мотором с помощью Arduino и драйвера моторов L293D(SN754410 или любого совместимого).
Код примера демонстрирует управление направлением вращения и скоростью мотора с помощью драйвера моторов L293D(SN754410 или любого совместимого). Скорость и направление вращения двигателя зависит от положения движка потенциометра. При считываемых значениях с потенциометра в диапазоне 462-562 вызывается функция break() для остановки двигателя, в диапазоне 562-1023 вызывается функция forward() для движения вперед, в диапазоне 0-462 вызывается функция reverse() для движения в обратном направлении. С помощью подачи ШИМ сигнала на вход 1,2EN(1) микросхемы драйвера моторов мы можем регулировать скорость вращения двигателя.
Драйвер двигателя L293D или SN754410 или любой совместимый
Дополнительный источник питания(например крона 9В)
Цепь
Соберите схему согласно изображению.
Схематичное изображение принципа работы драйвера моторов:
Таблица состояний входов и выходов драйвера моторов L293D(SN754410)
Вход
Выход
A
EN
Y
H
H
H
L
H
L
X
L
Z
Назначение контактов драйвера моторов L293D(SN754410):
GND(4, 5, 12, 13) - выводы для подключения к земле;
Vcc2(8) - вывод для подключения напряжения питания нагрузки;
Vcc1(16) - вывод для подключения питания микросхемы драйвера моторов;
1Y и 2Y(3, 6) - вывод для подключения первого двигателя;
1A и 2A(2, 7) - выводы для управления первым двигателем;
1,2EN(1) - вывод для включения и отключения первого двигателя;
3Y и 4Y(11, 14) - вывод для подключения второго двигателя;
3A и 4A(10, 15) - выводы для управления первым двигателем;
3,4EN(9) - вывод для включения и отключения второго двигателя;
Код
#define EN 9 //9-ый цифровой вход Arduino подключен к входу включения двигателя EN драйвера моторов#define MC1 3 //управляющий вход 1 драйвера моторов подключен к 3-му контакту Arduino#define MC2 2 //управляющий вход 2 драйвера моторов подключен к 2-му контакту Arduino#define POT 0 //подключение потенциометра к 0-му аналоговому входуintval=0;//хранение данных, считываемых с потенциометраintvelocity=0;//хранение данных скорости мотораvoidsetup(){pinMode(EN,OUTPUT);//вход 9 устанавливаем как выходpinMode(MC1,OUTPUT);//вход 3 устанавливаем как выходpinMode(MC2,OUTPUT);//вход 2 устанавливаем как выходbrake();//останавливаем двигатель}voidloop(){val=analogRead(POT);//считываем значение с потенциометраif(val>562)//если значение больше 562 двигаемся вперед{velocity=map(val,563,1023,0,255);//преобразуем интервал значенийforward(velocity);//движемся со скоростью пропорциональной переданному значению функции}elseif(val<462)//если значение меньше 462 двигаемся назад{velocity=map(val,461,0,0,255);//преобразуем интервал значений и инвестируем егоreverse(velocity);//движемся со скоростью пропорциональной переданному значению функции}else//если значение в диапазоне между 462 и 562{brake();//останавливаем двигатель}}/**Движение двигателя вперед с заданной скоростью*Диапазон значений:0-255*/voidforward(intrate){digitalWrite(EN,LOW);//на вход EN драйвера моторов подаем низкий уровень сигналаdigitalWrite(MC1,HIGH);//на управляющий вход 1 драйвера моторов подаем высокий уровень сигналаdigitalWrite(MC2,LOW);//на управляющий вход 2 драйвера моторов подаем низкий уровень сигналаanalogWrite(EN,rate);//на вход EN драйвера моторов подаем ШИМ сигнал}/**Движение двигателя назад с заданной скоростью*Диапазон значений:0-255*/voidreverse(intrate){digitalWrite(EN,LOW);//на вход EN драйвера моторов подаем низкий уровень сигналаdigitalWrite(MC1,LOW);//на управляющий вход 1 драйвера моторов подаем низкий уровень сигналаdigitalWrite(MC2,HIGH);//на управляющий вход 2 драйвера моторов подаем высокий уровень сигналаanalogWrite(EN,rate);//на вход EN драйвера моторов подаем ШИМ сигнал}/**Остановка двигателя*/voidbrake(){digitalWrite(EN,LOW);//на вход EN драйвера моторов подаем низкий уровень сигналаdigitalWrite(MC1,LOW);//на управляющий вход 1 драйвера моторов подаем низкий уровень сигналаdigitalWrite(MC2,LOW);//на управляющий вход 2 драйвера моторов подаем низкий уровень сигналаdigitalWrite(EN,HIGH);//на вход EN драйвера моторов подаем высокий уровень сигнала}