Двигатель постоянного тока с драйвером 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);

}

, 👍1

Обсуждение

И моя проблема решена с помощью 10 и 9 Спасибо!, @Usman


2 ответа


1

Похоже, вы управляете двумя выходами двигателя через 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));
,

0

В Uno D2 и D7 (enA и enB) не имеют настоящих возможностей ШИМ (analogWrite) — они будут на 100% включены при значениях 128 или выше и выключены при 127 и ниже.

Вам нужно будет использовать 3, 5, 6, 9, 10 или 11 для ШИМ (т. е. ваши enA и enB) на Uno.

Дополнительную информацию о доступности выводов ШИМ на платах Arduino см. в Справочнике Arduino - analogWrite().

,