3.9.md
УПРАВЛЕНИЕ ДВИГАТЕЛЕМ ПОСТОЯННОГО ТОКА
ДВИГАТЕЛЬ — это вид привода, который непрерывно вращает вал с определенной скоростью.
Двигатели используются для перемещения:
- Автономных устройств на колесном и гусеничном ходу
- Вращения винтов
- Непрерывного поворота объектов и их элементов
НАПОМИНАНИЕ При использовании внешнего питания сначала подключаем внешнее питание, а потом USB-кабель для связи или программирования. При выключении все делаем наоборот: сначала вытаскиваем USB-кабель, а затем внешнее питание. Несоблюдение данного правила может привести к выходу из строя платы Рудирон.
Контроллер напрямую работать с двигателем, как правило, не может, так как ток потребления значителен. Для управления двигателями используют специализированные микросхемы или внешние модули, построенные на них. Такие модули и микросхемы называют драйверами двигателей.
РАБОТА С ДРАЙВЕРОМ ДВИГАТЕЛЯ L9110
Модуль позволяет управлять скоростью и направлением вращения коллекторных моторов с потреблением тока до 300 мА. Модуль собран на базе чипа L9110, в отличии от подобных модулей на данном чипе в нём реализована активная развязка управляющего сигнал.
№ | Наименование | Значение | Назначение |
---|---|---|---|
1 | Напряжение питания модуля | 5 В | Напряжение подается на микросхему модуля от контроллера Рудирон |
2 | Напряжение питания мотора (Vin на зажимном разъеме зеленого цвета) | 2,5 - 12 В | Напряжение напрямую подается на мотор – Соблюдайте полярность указанную на плате |
3 | Ток потребляемый модулем без нагрузки | < 50 мкА | ——- |
4 | Номинальный ток нагрузки | 300 мА | ——- |
5 | Рабочая температура | от 0 до +80 °С | ——- |
6 | Габариты | 30 х 30 мм | ——- |
Подключение к драйверу двигателя:
| Вход модуля | Назначение | Значения | | G | Общая шина земли | Подсоединяем к контактам контроллера с обозначением земли | | V | Шина питания от контроллера | Подсоединяем к контактам контроллера с обозначением +5 В | | S | Сигнальный провод – подаем постоянное или импульсной напряжение PWM | 0-3.3 В | | D | Управление направлением вращения двигателя при логическом 0 ( напряжение ноль вольт на входе ) мотор вращается в одну сторону при 1 (напряжение 3.3 вольта на входе ) в другую | 0-3.3 В |
Подача питания на мотор:
1 Питание от контроллера. Не рекомендуется такое подключение, так как может выйти из строя стабилизатор питания контроллера! Хотя это маловероятно, так как на плате установлен самовосстанавливающийся предохранитель, но все же не стоит рисковать.
2 Питание мотора от внешнего источника. Рекомендуемый вариант подключения.
Для управления двигателем необходимо задать направление вращения двигателя и скорость вращения.
Направление задается подачей напряжения 0 вольт (логический 0) или 3.3 вольта (логическая 1) на вход D. Вспоминаем наш урок по ШИМ и понимаем, что на вход S необходимо сгенерировать сигнал ШИМ. А для этого необходимо выбрать выход контроллера поддерживающего такую функцию.
Собираем схему для управления двигателем:
Фото стенда для работы с двигателем:
Блок питания подключаем к плате драйвера (красный к + на драйвере и черный к – на драйвере). Двигатель подключаем к плате драйвера (полярности у двигателя нет). Вывод G драйвера соединяем с разъемом земли контроллера. Вывод V соединяем с разъемом +5 контроллера. Вывод S (SPEED управление скоростью вращения двигателя) соединяем с выводом 8 контроллера и мы будем использовать ШИМ модуляцию. Вывод D (DIR направление вращения двигателя) соединяем с выводом 17 контроллера.
Обратите внимание, что двигатель получает питание от батарейного отсека, а плата контроллера пока от USB разъема. Так удобно на этапе отладки программы. Для использования на движущимся объекте необходимо запитать контроллер так же через батарейный отсек и переставить перемычку по питанию.
Программа управления двигателем:
#include «Arduino.h»
// задаем имена портам, которые будут управлять двигателями
// у нас на двигатель 2 сигнала направления
//вращения двигателя DIR
// Скорость вращения SPEED #define DIR 17
#define SPEED 8
void setup()
{
// устанавливаем режим работы портов все как выходные
pinMode(DIR, OUTPUT); pinMode(SPEED, OUTPUT);
}
void loop()
{
digitalWrite(DIR, 1); // задаем направление вращения двигателя
analogWrite(SPEED, 10); // задаем маленькую скорость вращения
// в виде сигнала шим
delay(5000); // пауза 5 секунд для вращения двигателя на малой скорости
analogWrite(SPEED, 0); // останавливаем двигатель
delay(1000); // пауза в 1 секунду, чтобы двигатель успел остановиться
// задаем обратное направление вращения двигателя
digitalWrite(DIR, 0);
// задаем маленькую скорость вращения в виде сигнала шим
analogWrite(SPEED, 10);
delay(5000); // analogWrite(SPEED, 0);
delay(1000);
}
Как работает наша программа. Назначаем один вывод контроллера на управление направлением DIR и второй вывод на генерацию ШИМ сигнала для управления скоростью вращения двигателя SPEED. Мы уже знаем из таблицы GPIO что вывод 8 контроллера может генерировать ШИМ сигнал поэтому SPEED определяем на этот вывод. Вход DIR можно подключить к любому выводу контроллера в данном случае 17.
Задаем одно направление вращения и скорость:
digitalWrite(DIR, 1); // задаем направление вращения двигателя
analogWrite(SPEED, 10);
При этом на драйвере светится зеленый светодиод, указывающий, что поступает ШИМ сигнал, задающий скорость вращения двигателя и красный светодиод, отражающий направление вращения:
После паузы в 5 секунд останавливаем двигатель:
analogWrite(SPEED, 10); // останавливаем двигатель
Затем меняем направление вращения и заставляем двигатель вращаться с другой скоростью:
digitalWrite(DIR, 0);
// задаем маленькую скорость вращения в виде сигнала шим
analogWrite(SPEED, 10);
На драйвере снова светится зеленый светодиод, указывающий, что поступает ШИМ сигнал, задающий скорость вращения двигателя и другой светодиод отражающий смену направления вращения двигателя:
Таким образом происходит управление направлением вращения двигателем и скоростью. Теперь вы можете подключить второй драйвер с двигателем и получить машинку с возможностью управления каждым двигателем по отдельности либо вместе.
ПРИМЕЧАНИЕ Если Вы хотите выполнять программу при последующих включениях «Рудирона», то не забудьте переставить перемычку из положения «Режим программирования» обратно в «Режим выполнения». Если этого не сделать, то программа при включении «Рудирона» выполняться не будет.
ВЫВОДЫ
Мы научились работать с двигателем постоянного тока в наших программах, поняли принципы управления двигателем, научились задавать направление вращения двигателя и скорость.
СПИСОК КОНТРОЛЬНЫХ ВОПРОСОВ
- Что такое двигатель постоянного тока и чем он отличается от сервопривода?
- Как управляется двигатель?
- Какой алгоритм работы применяется при работе с двигателем?
- Нужна ли дополнительная библиотека для работы с двигателем?
- Какое устройство применяется для управления двигателем?
- Почему нельзя подключить двигатель напрямую к контроллеру?
- Какую технологию мы использовали для управления вращением двигателя? Подсказка: вспомните урок по управлению яркостью светодиода.
- Что может произойти, если запитать двигатель от контроллера?
- Какие порты нам необходимо задать для управления двигателем?
- Что будет результатом выполнения программы?
СПИСОК ДОПОЛНИТЕЛЬНЫХ ЗАДАЧ
- Использовать для написания программы среду Arduino IDE.
- Написать программу управления двигателем с началом движения в противоположную сторону.
- Написать программу управления двигателем с началом движения в противоположную сторону и последовательным увеличением скорости.
ЭЛЕМЕНТЫ КОНТРОЛЯ И ПРОВЕДЕНИЯ СОРЕВНОВАНИЙ
- Проведение тестирования по контрольным вопросам. Критерии: кто быстрее и допустил меньшее количество ошибок.
- Написание одного из трех вариантов (исходный и два варианта из списка дополнительных задач) программы и загрузка этого варианта в контроллер. Критерии: Правильно написанная программа согласно выданного задания, работающий контроллер и наименьшее количество времени затраченного на эти работы.