ЗА и 4A (контакты 10 и 15)- коммутация второго двигателя, эти выводы соединены с управляющими контактами Arduino;
• 3,4 EN (контакт 9) - вывод включения или отключения правого драйвера. Он соединен с ШИМ-контактами на Arduino, что позволяет динамически регулировать скорость двигателей.
Проверьте монтаж по рис. 4.7. Потенциометр подключим позже.
Прежде чем приступать к программированию, проверим работоспособность схемы.
Подключите один из входных контакто? (2 или 7) микросхемы H-моста к шине 5 В, другой к земле. Двигатель начнет вращаться. Поменяйте подключение контактов 2 и 7, двигатель будет вращаться в другую сторону.
ВНИМАНИЕ!
Во время переключения контактов отключите батарею, чтобы случайно не вызвать короткое замыкание моста.
4.10. Управление работой Н-моста
Напишем программу для управления скоростью и направлением вращения двигателя с помощью потенциометра и драйвера H-моста. Установка движка потенциометра в среднее положение приводит к остановке двигателя, при перемещении движка вправо скорость вращения вала двигателя увеличивается, перемещение движка влево от среднего положения приводит к увеличению скорости вращения вала двигателя в обратном направлении. В программе будут три вспомогательные функции: первая - для остановки двигателя, вторая - для вращения двигателя с заданной скоростью и третья - для вращения двигателя с заданной скоростью в обратном направлении.
Анализируя рис. 4.5, делаем следующие выводы:
1. Для вращения двигателя один из выключателей должен быть замкнут, другой разомкнут.
2. Чтобы двигатель вращался в обратном направлении, замкнутый в n. 1 выключатель должен быть разомкнут, а разомкнутый - замкнут.
3. Для остановки двигателя оба выключателя должны быть разомкнуты.
ПРИМЕЧАНИЕ
Перед изменением состояния выключателей всегда отключайте ток, чтобы не вызвать короткого замыкания Н-моста.
Сначала напишем код функций для выполнения описанных действий (листинг 4.3).
Листинг 4.3. Вспомогательные функции для управления двигателем
// Вращение двигателя вперед с заданной скоростью (диапазон 0-255)
void forward (int rate)
{
digitalWrite(EN, LOW);
- 95 -
digitalWrite(MC1, HIGH);
digitalWrite(MC2, LOW);
analogWrite(EN, rate);
}
// Вращение двигателя в обратном направлении с заданной скоростью
//(диапазон 0-255)
void reverse (int rate)
{
digitalWrite(EN, LOW);
digitalWrite(MC1, LOW);
digitalWrite(MC2, HIGH);
analogWrite(EN, rate);
}
// Остановка двигателя
void brake()
{
digitalWrite(EN, LOW);
digitalWrite(MC1, LOW);
digitalWrite(MC2, LOW);
digitalWrite(EN, HIGH)
}
Обратите внимание, что в начале каждой функции на контакте EN всегда устанавливается низкий уровень, и затем задаются значения на входах блока управления MC1 и MC2. После установки значений на входах MC1 и MC2 можно снова включить ток. Подавая сигнал ШИМ на вход EN, можно управлять скоростью двигателя.
Значение переменной rate должно быть в диапазоне от 0 до 255. Основной цикл программы (листинг 4.4) считывает данные с потенциометра и в зависимости от результата вызывает требуемую функцию.
Листинг 4.4. Программа вызова вспомгательных функций
void loop()
{
val = analogRead(POT);
// Движение вперед
if (val > 562)
{
velocity = map(val, 563, 1023, 0, 255);
forward(velocity);
}
// Движение назад
else if (val < 462)
{
velocity = map(val, 461, 0, 0, 255);
- 96 -
reverse(velocity);
}
// Остановка
else
{
brake();
}
}
Сигнал с аналогового входа преобразуется в цифровое значение в диапазоне от 0 до 1023. Чтобы лучше понять принцип управления, обратимся к рис. 4.8.
Рис. 4.8. Принцип управления двигателем
При значениях сигнала от потенциометра в диапазоне от 462 до 562 ( 100 отсчетов в районе средней точки) вызывается функция break() для остановки двигателя, при значениях от 562 до 1023 - функция запуска двигателя в прямом направлении forward(), при значениях от 0 до 462 - функция запуска двигателя в обратном направлении reverse(). Функция map() знакома вам из предыдущей главы. При определении обратной скорости значение потенциометра 461 соответствует значение скорости 0, а значение потенциометра 0 соответствует значение скорости 255.
Функция map() инвертирует значения так, что на вход они подаются в обратном порядке. Объединив цикл loop() со вспомогательными функциями и начальной установкой setup(), получим полный код программы управления скоростью и направлением движения двигателя с помощью потенциометра (листинг 4.5).
Листинг 4.5. Программа управления двигателем с помощью потенциометра
!! Управление двигателем с помощью Н-моста
const int EN=9;// Вход включения двигателя EN
const int MC1=3;// Вход 1 управления двигателем
const int MC2=2;// Вход 2 управления двигателем
const int POT=0;// Аналоговый вход 0 для подключения потенциометра
int val = 0;// Переменная для хранения значения потенциометра
int velocity = 0;// Переменная для хранения скорости двигателя (0-255)
void setup()
{
pinMode(EN, OUTPUT);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии