Arduino实现L298N控制直流电机正反转和调速的方法
Arduino驱动L298N控制直流电机的正反转和调速
一、前言
本模块使用ST公司的L298N作为主驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点。LN298N可以用来驱动直流电机和步进电机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电平在低电压下工作。模块使用大容量滤波电容,续流保护二极管,可以提高可靠性。
二、产品参数
1.驱动芯片:L298N 双 H 桥直流电机驱动芯片
2.驱动部分端子供电范围 Vs:+5V~+35V ; 如需要板内取电,则供电范围 Vs:+7V~+35V
3.驱动电流 :2A
4.逻辑部分端子供电范围 Vss:+5V~+7V(可板内取电+5V)
5.逻辑部分工作电流范围:0~36mA
6.控制信号输入电压范围:
低电平:-0.3V≤Vin≤1.5V
高电平:2.3V≤Vin≤Vss
7.使能信号输入电压范围:
低电平:-0.3≤Vin≤1.5V(控制信号无效)
高电平:2.3V≤Vin≤Vss(控制信号有效)
8.最大功耗:25W(温度 T=75℃时)
9.存储温度:-20℃~+135℃
三、驱动直流电机
1.控制直流电机正反转的状态图如下:
2.对直流电机进行 PWM 调速,设置 IN1 和 IN2信号分别为0,1,电机的转动方向为反转,然后对使能端输出 PWM 脉冲,即实现直流电机的速度从小到大调速。
3.利用电位器读取值实现脉宽调制调速。
三、接线图
Arduino | L298N | 直流电机 | 电位器模块 | 电源 |
---|---|---|---|---|
9 | ENA | – | – | – |
8 | IN1 | – | – | – |
5V | – | – | V | – |
GND | GND | – | GND | GND |
A0 | – | – | S | – |
– | Out1 | 任意引脚 | – | – |
– | Out2 | 任意引脚 | – | – |
– | +12V | – | – | 9V |
四、程序
#define ENA 9
#define IN1 8
#define IN2 7
void setup()
{
pinMode(ENA,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
//Pos_NegRotation();//控制电机正反转
//PWMcontrol();//脉宽调制速度从小到大
Potentiometer();//利用电位器读取实现脉宽调制调速
}
void Pos_NegRotation()//控制电机正反转
{
analogWrite(ENA,60);
digitalWrite(IN1,HIGH);//反转2秒
digitalWrite(IN2,LOW);
delay(2000);
digitalWrite(IN1,HIGH);//刹车停2秒
digitalWrite(IN2,HIGH);
delay(2000);
digitalWrite(IN1,LOW);//正转2秒
digitalWrite(IN2,HIGH);
delay(2000);
digitalWrite(IN1,LOW);//刹车2秒
digitalWrite(IN2,LOW);
delay(2000);
}
void PWMcontrol()//脉宽调制速度从小到大
{
int i;
digitalWrite(IN1,LOW);//反转
digitalWrite(IN2,HIGH);
for(i=0;i<=255;i++)
{
Serial.print("Value_i=");
Serial.println(i);
analogWrite(ENA,i);
delay(20);
}
digitalWrite(IN1,HIGH);//刹车停2秒
digitalWrite(IN2,HIGH);
delay(2000);
}
void Potentiometer()//利用电位器读取值实现脉宽调制调速
{
int pValue=analogRead(A0);
//读取电位器的数值:0-1023
int PWMout=map(pValue,0,1023,0,255);
//把0-1023的数值映射 到0-255
Serial.print("PWMot=");//串口打印数值
Serial.println(PWMout);
analogWrite(ENA,PWMout);
//把获得的0-255数值写入使能口=D9
digitalWrite(IN1,HIGH);//反转1秒
digitalWrite(IN2,LOW);
delay(1000);
}
五、实验结果
电机正反转:
脉宽调速串口显示:
电位器调速:
总结
注意:Arduino 、L298N、电位器和电源要共地。