Двигатель постоянного тока с драйвером L289N не может установить обороты ниже 130
В моей установке используется Uno r3, а драйвер двигателя — L289N.
Я собираюсь настроить его на работу на более низких оборотах, но при настройке enA
или enB
на значение ниже 130 он не будет вращаться.
// подключите выводы контроллера двигателя к цифровым выводам Arduino
// двигатель один
int enA = 2;
int enB = 7;
int in3 = 5;
int in4 = 6;
int in1 = 3;
int in2 = 4;
void setup()
{
// устанавливаем все выводы управления двигателем на выходы
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoOne()
{
analogWrite(enB, 130);
// включаем мотор B
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
delay(500);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(5000);
// эта функция запустит двигатели в обоих направлениях с фиксированной скоростью
// включаем мотор А
// установить скорость 200 из возможного диапазона 0~255
analogWrite(enA, 130);
// включаем мотор B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// установить скорость 200 из возможного диапазона 0~255
delay(100); //эта функция устанавливает время для вращения
// теперь изменим направление мотора
// теперь выключите мотор
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(5000);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(200);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(5000);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(200);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(5000);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(100);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(5000);
analogWrite(enB, 130);
// включаем мотор B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(400);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
delay(5000);
}
void loop()
{
demoOne();
delay(3000);
}
@Hamman, 👍1
Обсуждение2 ответа
Похоже, вы управляете двумя выходами двигателя через H-мост, где логические входы — in1,in2
и in3,in4
. Прежде всего, вам нужно
pinMode(in1,OUTPUT);
pinmode(in2,OUTPUT);
Одной из причин, по которой двигатели могут не вращаться при значении analogWrite меньше 130, является то, что, по совпадению, выходное напряжение слишком низкое и двигатель останавливается. Проверьте это двумя способами: (1) изменение напряжения питания двигателя или (2) изменение аргумента analogWrite
на самом деле изменяет скорость?
Если нет, возможно, pinMode(enA,OUTPUT);
устанавливает выход как цифровой и его следует удалить. В этом случае число меньше 128 интерпретируется как логический 0, и двигатель не будет вращаться.
P.S. ваш код можно сделать более аккуратным, используя синтаксис порта и побитовые операторы.
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
можно записать в одну строку с
PORTD |= _BV(in1);
Также
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
становится
PORTD &= ~(_BV(in1) | _BV(in2));
В Uno D2
и D7
(enA
и enB
) не имеют настоящих возможностей ШИМ (analogWrite) — они будут на 100% включены при значениях 128 или выше и выключены при 127 и ниже.
Вам нужно будет использовать 3, 5, 6, 9, 10 или 11 для ШИМ (т. е. ваши enA
и enB
) на Uno.
Дополнительную информацию о доступности выводов ШИМ на платах Arduino см. в Справочнике Arduino - analogWrite().
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- Запустить два степпера одновременно
- Как соединить L293D и MPU6050 для совместной работы?
- Как правильно использовать микрошаговый драйвер с шаговым двигателем более низкого напряжения
- Arduino H-bridge для радиоуправляемого автомобиля
- Шаговые двигатели Adafruit Motor Shield не вращаются.
- Как изменить направление шагового двигателя с помощью библиотеки AccelStepper?
И моя проблема решена с помощью 10 и 9 Спасибо!, @Usman