Не удается контролировать скорость двигателя постоянного тока с помощью контактов 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 В для тестирования - двигатель постоянного тока
Что здесь может быть не так?
@suu, 👍1
Обсуждение2 ответа
Лучший ответ:
Изменение файла кода библиотеки L298N.cpp. Вставьте 2 строки в setSpeed():
void L298N::setSpeed(unsigned short pwmVal)
{ _pwmVal = pwmVal;
if (_ismoving == true) // +++
analogWrite(_pinEnable, _pwmVal); // +++
}
Проблема решена!
Попробуйте использовать этот код без библиотеки и убедитесь, что каждый вывод подключен к правильному выходу 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
- L298N издает звуковые сигналы и дает сбой при получении определенных значений AnalogWrite
- Использование контактов IN1/IN2 для ШИМ вместо ENA в L298N
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- ПИД-регулятор для управления скоростью двигателя
Выход 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