Не удается контролировать скорость двигателя постоянного тока с помощью контактов l298N и pwm

Я использую arduino uno для управления скоростью двигателя постоянного тока с помощью L298N. Но проблема в том, что двигатель работает только на максимальной скорости. ШИМ-вывод по какой-то причине не работает. Я слышал, что у многих людей были какие-то проблемы, но они еще не нашли решения.

код:-

#include <L298N.h>

#define ENA 9
#define IN1 8
#define IN2 7

L298N motor(ENA, IN1, IN2);

void setup() {
// Setup pin mode

//used for display information
  Serial.begin(9600);

}

void loop() {
//Drive Motor Forward
  motor.setSpeed(10);
  motor.forward();
  delay(500);
  motor.setSpeed(100);
  motor.forward();
  delay(500);
  motor.setSpeed(255);
  motor.forward();
  delay(500);

}

Я только каждый раз вижу, как двигатель движется на полной скорости. Я подключил 5 В Arduino к штифту +12 В драйвера двигателя, и Arduino питается от моего ноутбука USB.

Я использую игрушечный двигатель постоянного тока 4,5 В для тестирования - двигатель постоянного тока

Что здесь может быть не так?

, 👍1

Обсуждение

Выход l298n на двигатель имеет большое падение напряжения, и из-за этого он не будет работать с напряжением 5 В. Вывод 5 В arduino не может обеспечить достаточный ток для двигателя. Что это за двигатель? Можете ли вы дать ссылку на двигатель?, @Jot

добавлена ссылка на двигатель постоянного тока, я использую этот игрушечный двигатель постоянного тока для теста. Ему не нужно много напряжения, так что я думаю, что все будет в порядке., @suu

Это маленький мотор. С драйвером mosfet (без падения напряжения) он может работать с выводом 5 В., @Jot

этот двигатель предназначен только для тестирования. Позже я хочу управлять двигателем с высоким крутящим моментом 12 В, поэтому для этого я использую этот модуль., @suu

Использование вывода 5 В (!) Arduino с питанием от USB (!!) в качестве источника питания двигателя (!!!) может легко убить ваш Arduino., @AnT

**Аналогичная проблема решена:** У меня была аналогичная проблема с двигателями, работающими на полной скорости с аналоговыми значениями записи выше 127 и не работающими на 127 или ниже. После некоторых исследований я обнаружил, что **только некоторые контакты работают для pwm** [ссылка для analogWrite()](https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/), но ваша ENA находится на выводе 9, и это должно сработать., @E Stenqvist


2 ответа


Лучший ответ:

1

Изменение файла кода библиотеки L298N.cpp. Вставьте 2 строки в setSpeed():

void L298N::setSpeed(unsigned short pwmVal)
{ _pwmVal = pwmVal;
  if (_ismoving == true)                   // +++
    analogWrite(_pinEnable, _pwmVal);      // +++
}

Проблема решена!

,

1

Попробуйте использовать этот код без библиотеки и убедитесь, что каждый вывод подключен к правильному выходу Arduino. Если все в порядке, это должно сработать. Ознакомьтесь с учебником здесь

int IN3 = 5;    
int IN4 = 4;     
int ENB = 3;    
void setup()
{
 pinMode (ENB, OUTPUT); 
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
}
void loop()
{
  
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);   
  analogWrite(ENB,55);
  delay(2000);
  analogWrite(ENB,105);
  delay(2000);
  analogWrite(ENB,255);
  delay(2000);
  analogWrite(ENB,0);
  delay(5000);
}
,

Я тоже попробовал этот код, но он не сработал. Я думаю, что есть проблема в контакте включения самого двигателя., @suu