Подключение драйверов двигателя

Подключение драйвера двигателя к Arduino

Все модули подключаются одинаково. В качестве примера мы возьмем самый популярный драйвер двигателя на L293D микросхеме.
Кроме драйвера нам понадобится контроллер DaVinci, два мотора постоянного тока, соединительные провода и дополнительный источник питания, так как контроллер выдает маленькие токи и на двигатели необходимо подавать питание отдельным источником питания к контакту MOTOR 5-36V (у драйвера на 9110S микросхемах используется один контакт для подключения питания модуля и двигателей, источник питания может быть от 5В до 12В).
Управление двигателями производится с помощью ШИМ сигналов через контакты IN1..IN4.
Двигатели подключаются к клеммам М1 и М2. При этом полярность не имеет значения, ее можно поменять программно.

Собираем схему согласно рисунку.

Программа

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

#define M1 3
#define DIRECTION1 9

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
}

void loop() {
  digitalWrite(M1, LOW);
  digitalWrite(DIRECTION1, HIGH);
  delay(1000);
  
  digitalWrite(M1, HIGH);
  digitalWrite(DIRECTION1, LOW);
  delay(1000);
}

Теперь усложним программу. Будем кроме направления менять еще и мощность.

#define M1 3
#define DIRECTION1 9

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
}

void loop() {
  analogWrite(M1, 255);
  digitalWrite(DIRECTION1, LOW);
  delay(2000);
  
  analogWrite(M1, 130);
  digitalWrite(DIRECTION1, LOW);
  delay(2000);

  
  analogWrite(M1, 125);
  digitalWrite(DIRECTION1, HIGH);
  delay(2000);
  
  analogWrite(M1, 0);
  digitalWrite(DIRECTION1, HIGH);
  delay(2000);
}

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

А теперь задействуем второй двигатель.

#define M1 3
#define M2 6
#define DIRECTION1 9
#define DIRECTION2 12

void setup() {
   pinMode(M1, OUTPUT);
   pinMode(M2, OUTPUT);
   pinMode(DIRECTION1, OUTPUT);
   pinMode(DIRECTION2, OUTPUT);
}

void loop() {
  analogWrite(M1, 100);
  digitalWrite(DIRECTION1, LOW);
  analogWrite(M2, 100);
  digitalWrite(DIRECTION2, LOW);
  delay(1000);
  
  analogWrite(M1, 200);
  digitalWrite(DIRECTION1, LOW);
  analogWrite(M2, 200);
  digitalWrite(DIRECTION2, LOW);
  delay(2000);
  
  analogWrite(M1, 155);
  digitalWrite(DIRECTION1, HIGH);
  analogWrite(M2, 155);
  digitalWrite(DIRECTION2, HIGH);
  delay(2000);
  
  analogWrite(M1, 55);
  digitalWrite(DIRECTION1, HIGH);
  analogWrite(M2, 55);
  digitalWrite(DIRECTION2, HIGH);
  delay(1000);
}

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

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