Цифровая электроника для начинающих (Елисеев) - страница 29


Как уже говорилось в предыдущей главе, любой микроконтроллер не может управлять мотором напрямую, у вывода не хватит мощности. Существуют специальные микросхемы, называемые “драйверами”, которые и выполняют эту работу. Разумеется, мотор можно подключить и через транзистор, но полноценный драйвер имеет больше возможностей, например возможность смены направления вращения мотора.


Для примера рассмотрим драйвер на микросхеме L298N, его можно купить в виде готовой платы ценой 2-5$.

Плата имеет вполне неплохие для своей цены возможности. Левые и правые разъемы используются для подключения моторов. Плата также имеет стабилизатор напряжения, что позволяет использовать для питания моторов 12В, а выход 5В использовать для питания Arduino.

Описание комбинаций управляющих импульсов приведено в документации на микросхему (С и D - входы каждого канала).

Соответственно, линейка из 6 выводов имеет 2 переключателя ENA ENB (Enable A, B) для активации левого и правого моторов, 4 вывода IN1, IN2, IN3, IN4 используются для подачи управляющих импульсов.


Пример кода управления моторами показан ниже. Здесь входы EN1, EN2 используются для управления скоростью моторов уже рассмотренным ранее методом широтно-импульсной модуляции.


// Моторы M1, М2


int enA = 10, in1 = 9, in2 = 8;


int enB = 5, in3 = 7, in4 = 6;


void setup() {


pinMode(enA, OUTPUT);


pinMode(enB, OUTPUT);


pinMode(in1, OUTPUT);


pinMode(in2, OUTPUT);


pinMode(in3, OUTPUT);


pinMode(in4, OUTPUT);


}


void runMotors() {


// Запустить мотор А


digitalWrite(in1, HIGH);


digitalWrite(in2, LOW);


// Установить скорость 200 (диапазон 0~255)


analogWrite(enA, 200);


// Запустить мотор B


digitalWrite(in3, HIGH);


digitalWrite(in4, LOW);


// Установить скорость 200 (диапазон 0~255)


analogWrite(enB, 200);


delay(2000);


// Изменить направление


digitalWrite(in1, LOW);


digitalWrite(in2, HIGH);


digitalWrite(in3, LOW);


digitalWrite(in4, HIGH);


delay(2000);


// Остановить моторы


digitalWrite(in1, LOW);


digitalWrite(in2, LOW);


digitalWrite(in3, LOW);


digitalWrite(in4, LOW);


}


void loop() {


runMotors();


delay(5000);


}

Другой вариант схемы подключения показан на картинке ниже, здесь входы EN1/EN2 программно не управляются, они просто замкнуты переключателями, идущими в комплекте с платой. Это не позволяет управлять скоростью моторов, зато делает подключение более простым.



Таким образом, с помощью одного или двух драйверов можно управлять двумя или четырьмя моторами.


Желающие заняться робототехникой более серьезно, могут также приобрести специальную платформу с колесами и моторами. Оснастить ее электроникой и датчиками можно по своему вкусу.