Двигатели постоянного тока не работают с ШИМ и драйвером двигателя L298N
Я только начинаю понимать Arduino. Пожалуйста, потерпите меня. У меня есть автомобиль для предотвращения столкновений, работающий на Arduino Uno, драйвере двигателя WB291111 L298N, сервоприводе SG90, Arduino Shield v5 и ультразвуковом датчике HC-SR04. Кроме того, у меня вся установка работает от батареек 8,4 В. Если я просто использую HIGH/LOW на двигателях, она будет работать без проблем. Но если я использую ШИМ для запуска двигателей на разных скоростях, она вообще НЕ будет работать. Датчик и сервопривод работают, но не двигатели. Смотрите мои коды ниже. Дайте мне знать, если вам нужны дополнительные подробности. Любая помощь будет высоко оценена.
#include <Servo.h>
#include <NewPing.h>
//our L298N control pins
const int enA = 10;
const int in1 = 6;
const int in2 = 7;
const int enB = 9;
const int in3 = 4;
const int in4 = 5;
//sensor pins
#define trig_pin A2
#define echo_pin A1
#define maximum_distance 500
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance);
unsigned int uS;
#define SERVO_PIN 11
Servo servo_motor;
void setup(){
Serial.begin(115200);
pinMode(enA, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
servo_motor.attach(SERVO_PIN);
servo_motor.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop(){
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
if (distance <= 20){
moveStop();
delay(300);
moveBackward();
delay(200);
moveStop();
delay(300);
distanceRight = lookRight();
delay(200);
distanceLeft = lookLeft();
delay(200);
if (distance >= distanceLeft){
turnRight();
moveStop();
}
else{
turnLeft();
moveStop();
}
}
else{
moveForward();
}
distance = readPing();
}
int lookRight(){
Serial.print("Look Right");
servo_motor.write(50);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(115);
return distance;
}
int lookLeft(){
Serial.print("Look Left");
servo_motor.write(170);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(115);
return distance;
delay(100);
}
int readPing(){
delay(70);
int cm = sonar.ping_cm();
if (cm==0){
cm=500;
}
return cm;
}
void moveStop(){
Serial.print("Stop");
digitalWrite(in3, LOW);
digitalWrite(in1, LOW);
digitalWrite(in4, LOW);
digitalWrite(in2, LOW);
}
void moveForward(){
//if(!goesForward){
//goesForward=true;
Serial.print("Forward");
digitalWrite(in1, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in4, LOW);
analogWrite(enA, 250);
analogWrite(enB, 250);
//}
}
void moveBackward(){
//goesForward=false;
Serial.print("Backward");
digitalWrite(in2, HIGH);
digitalWrite(in4, HIGH);
digitalWrite(in1, LOW);
digitalWrite(in3, LOW);
}
void turnRight(){
Serial.print("Right");
digitalWrite(in1, HIGH);
digitalWrite(in4, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
delay(200);
digitalWrite(in1, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in4, LOW);
}
void turnLeft(){
Serial.print("Left");
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in1, LOW);
digitalWrite(in4, LOW);
delay(200);
digitalWrite(in1, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in4, LOW);
}
@Jay Zapanta, 👍1
1 ответ
Согласно странице справки по сервоприводам, невозможно использовать библиотеку сервоприводов и выходы ШИМ на контактах 9 и 10.
На платах, отличных от Mega, использование библиотеки отключает функцию analogWrite() (ШИМ) на контактах 9 и 10, независимо от того, подключен ли к этим контактам сервопривод.
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- L298N, HC-05 Простой автомобиль с дистанционным управлением через Bluetooth, не работающий в Arduino
- L298N издает звуковые сигналы и дает сбой при получении определенных значений AnalogWrite
- Как использовать отдельный источник питания для Arduino и двигателей
- Как управлять скоростью двигателя с помощью L298N и Node MCU?
- Помощь Поиск и устранение неисправностей L298n подключен к двигателю постоянного тока
- Двигатель постоянного тока, не работающий с картой L298N (зеленая)
- Могу ли я проверить, почему мой двигатель не работает?
Большое спасибо за ваш вклад. Я попробую использовать другие выводы PWM на плате arduino uno. Я обновлю, если это сработает., @Jay Zapanta
@JayZapanta Остается только надеяться, что библиотека NewPing не повлияет на Timer2, так как библиотека Servo влияет на Timer1., @KIIV