Почему четыре мотор-редуктора вращаются с разной скоростью при подключении к двум драйверам двигателей 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);
}
Любые изменения в коде также приветствуются.
1 ответ
Пинья 7 и 8 не являются контактами ШИМ на UNO. Поэтому, когда вы вызываете для них аналоговую запись со значением больше 127, по умолчанию используется цифровая запись и просто записывает на эти контакты ВЫСОКИЙ уровень. Контакты 6 и 9 являются контактами ШИМ, поэтому они реагируют, как и ожидалось, на аналоговую запись. Поскольку они выдают ШИМ, а сигнал на другие двигатели постоянно высокий, они работают медленнее.
Вам следует изменить проводку так, чтобы все контакты включения были подключены к контактам с поддержкой ШИМ. На Arduino UNO это контакты 3, 5, 6, 9, 10 и 11.
- Как правильно запустить 4 двигателя постоянного тока с помощью Arduino?
- 2 Моторное управление роботом с радиоуправляемым радио
- Моторный щит L293D
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как заставить сервопривод вращаться на угол больше 180°
- Почему Adafruit motor shield не крутит моторы?