Почему четыре мотор-редуктора вращаются с разной скоростью при подключении к двум драйверам двигателей L293D, управляемым Arduino.

Игнорировать направление двигателей (пока).

Это моя схема подключения. Любые улучшения приветствуются.

Внизу левый двигатель вращается со скоростью 210–224 об/мин
Правый нижний мотор работает со скоростью 160-180 об/мин
Верхний правый двигатель работает со скоростью 210-224 об/мин
Верхний левый мотор работает со скоростью 160-180 об/мин.

Код для запуска приведенной ниже настройки:

 
// Подключения двигателя А

int enA = 7;

int in1 = 4;

int in2 = 5;

// Подключения двигателя B

int enB = 6;

int in3 = 3;

int in4 = 2;

//Мотор c

int enC = 9;

int in5 = 12;

int in6 = 13;

// Подключение двигателя d

int enD = 8;

int in7 = 10;

int in8 = 11;

void setup() {

// Устанавливаем все контакты управления двигателем на выходы
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enC, OUTPUT);
pinMode(enD, OUTPUT);
pinMode(in5, OUTPUT);
pinMode(in6, OUTPUT);
pinMode(in7, OUTPUT);
pinMode(in8, OUTPUT);

  // Выключаем двигатели - Исходное состояние
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(in5, LOW);
digitalWrite(in6, LOW);
digitalWrite(in7, LOW);
digitalWrite(in8, LOW);
}

void loop() {
  moveForward();
  delay(3000);
  motorOff();
  delay(1000);
}

void moveForward(){
  
  analogWrite(enA, 200);
  analogWrite(enB, 200);
  analogWrite(enC, 200);
  analogWrite(enD, 200);
  
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  digitalWrite(in5, HIGH);
  digitalWrite(in6, LOW);
  digitalWrite(in7, HIGH);
  digitalWrite(in8, LOW);
}

void motorOff(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  digitalWrite(in5, LOW);
  digitalWrite(in6, LOW);
  digitalWrite(in7, LOW);
  digitalWrite(in8, LOW);
}

Любые изменения в коде также приветствуются.

, 👍2


1 ответ


2

Пинья 7 и 8 не являются контактами ШИМ на UNO. Поэтому, когда вы вызываете для них аналоговую запись со значением больше 127, по умолчанию используется цифровая запись и просто записывает на эти контакты ВЫСОКИЙ уровень. Контакты 6 и 9 являются контактами ШИМ, поэтому они реагируют, как и ожидалось, на аналоговую запись. Поскольку они выдают ШИМ, а сигнал на другие двигатели постоянно высокий, они работают медленнее.

Вам следует изменить проводку так, чтобы все контакты включения были подключены к контактам с поддержкой ШИМ. На Arduino UNO это контакты 3, 5, 6, 9, 10 и 11.

,