Arduino:Примеры/Управление DC-мотором при помощи Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление DC-мотором при помощи Arduino

Данный пример демонстрирует как управлять двигателем постоянного тока с помощью Arduino. Код примера демонстрирует постепенный "разгон" и замедление двигателя постоянного тока.

Необходимое оборудование

Цепь

При сборке схемы обратите внимание на распиновку транзистора - эмиттер соединяется с минусом, база через резистор на 1кОм соединяется с 9 выходом Arduino, а коллектор с одним из выводов двигателя, другой вывод двигателя соединяется с плюсом источника питания на 9В. Параллельно двигателю подключается керамический конденсатор(для фильтрации помех от работы двигателя) и диод(для защиты блока питания от обратного напряжения при выключении двигателя). Не забудьте объединить минус источника питания и GND Arduino.

Arduino uno and dc motor.png

Двигатели постоянного тока, потребляют ток больше чем может выдать Arduino. Также они создают опасные выбросы напряжения. Для этого необходимо изолировать двигатель постоянного тока от платы Arduino и запитывать его через отдельный источник питания. Использование транзистора позволит безопасно управлять двигателем используя ШИМ. Транзистор работает как простой электрически управляемый переключатель. Каждый биполярный транзистор имеет три контакта: эмиттер, база, коллектор. Между коллектором и эмиттером течет большой ток, при малом токе базы. Изменяя ток базы, мы будем регулировать ток через коллектор-эмиттер и менять скорость вращения двигателя. Т.к. двигатель обладает инерцией, быстрое переключения транзистора с помощью ШИМ приведет к регулировке скорости вращения.

Рис.2. Распиновка транзистора PN2222
Рис.2. Распиновка транзистора PN2222

Код

#define MOTOR 9                         //используем 9 вывод для управления DC-мотором 

void setup()
{
    pinMode (MOTOR, OUTPUT);            //конфигурируем 9-вывод как выход
}

void loop()
{
    for (int i = 0; i < 256; i++)      
    {
        analogWrite(MOTOR, i);         //в цикле, выдаем постепенно увеличивающуюся величину напряжения на 9 выход, тем самым "разгоняя" мотор 
        delay(10);                     //ожидание 10 мкс
    }
    delay(2000);                       //ожидание 2000 мкс 
    for (int i = 255; i > =0; i--)
    {
        analogWrite(MOTOR, i);        //в цикле, выдаем постепенно уменьшающуюся величину напряжения на 9 выход, тем самым "тормозя" мотор 
        delay(10);                    //ожидание 10 мкс
    }
    delay(2000);                      //ожидание 2000 мкс
}

См.также

Внешние ссылки