Изучаем Arduino: инструметы и методы технического волшебства - страница 27
• Vcc2 (контакт 8)-напряжение питания двигателя (подсоедините к 9 В);
• Vccl (контакт 16)-напряжение питания микросхемы (подсоедините к 5 В);
- 93 -
• 1У и 2У (контакты 3 и 6) - выходы для подключения первого двигателя;
• IA и 2А (контакты 2 и 7)- коммугация первого двигателя, эти выводы соединены с управляющими контактами Arduino;
1,2 EN (контакт 1)- включение и отключение левого драйвера. Данный вывод соединен с ШИМ-контактами на плате Arduino, что позволяет динамически регулировать скорость двигателей;
• ЗУ и 4У (контакты 11 и 14)- выходы для подключения второго двигателя;
• Батарея
• Н-мост
• Двигатель постоянного тока
Рис. 4.7. Схема подключения Н-моста
- 94 -
ЗА и 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.