文章目录
L298N基础数据电压类引脚控制类引脚输出类引脚
控制程序控制电机转向控制电机转速
参考链接
L298N基础数据
![请添加图片描述](https://img-blog.csdnimg.cn/835909e89c654a4a99d319caf112a52c.webp?x-oss-process=image,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGF2IFB1bg==,size_20,color_FFFFFF,t_70,g_se,x_16)
采用L298N双桥直流电机驱动芯片工作电压范围5V35V,如果需要从模块内取电,则供电范围为7V35V峰值输出电流2A每个通道有一个使能输入端可以驱动两个直流电机或者一个四线步进电机
L298N双H桥直流电机驱动模块的引脚可以归纳成电源、控制和输出等三大类,下面是各类引脚的功能说明。
电压类引脚
+12V输入:L298N芯片的电源正极,模块上标称+12V,但实际范围可以是5V35V,如果需从模块内取电,则其范围为7V35V。 GND:L298N芯片的电源地,使用的时候应该把树莓派的GND接到这里,即两者需要共地。 +5V输出:L298N芯片输出的5V电源,可以给外部设备供电,使用的时候需要用跳线把5V输出使能端短接起来。
控制类引脚
ENA、ENB:A、B通道的使能端,高电平有效,可以用PWM来实现调速。使用时,可以接到树莓派的GPIO上,实现用程序进行控制。 IN1、IN2、IN3、IN4:IN1、IN2为A通道的控制输入,IN3、IN4为B通道的控制输入。
输出类引脚
OUT1、OUT2、OUT3、OUT4:OUT1、OUT2由A通道输出,OUT3、OUT4由B通道输出,可以用于连接直流电机等设备。
控制直流电机的转向和转速实际是通过给控制类引脚设置不同的值来实现的,表7.1是使用通道A的控制直流电机的真值表,通道B与此类似。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b2bab8002058448a9ea57f9380b84463.png)
控制程序
![在这里插入图片描述](https://img-blog.csdnimg.cn/2ee1c2ea51334b72ae1f27f8e24e86ab.png?x-oss-process=image,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGF2IFB1bg==,size_20,color_FFFFFF,t_70,g_se,x_16)
控制电机转向
BEGIN
引入GPIO库
将连接ENA的GPIO引脚设置为输出模式
将连接IN1的GPIO引脚设置为输出模式
将连接IN2的GPIO引脚设置为输出模式
DO FOREVER
将IN1设置为0,IN2设置为1,将电机设置为正向转动
将ENA设置为1,驱动A通道电机转动
等待5秒
将ENA设置为0,停止电机转动
等待2秒
将IN1设置为1,IN2设置为0,将电机设置为反向转动
将ENA设置为1,驱动A通道电机转动
等待5秒
将ENA设置为0,停止电机转动
等待2秒
ENDO
停止PWM
清理释放GPIO资源
END
import RPi.GPIO as GPIO # 引入GPIO模块
import time # 引入time模块
ENA = 13 # 设置GPIO13连接ENA
IN1 = 19 # 设置GPIO19连接IN1
IN2 = 26 # 设置GPIO26连接IN2
if __name__ == '__main__':
try:
# 初始化
GPIO.setmode(GPIO.BCM) # 使用BCM编号方式
GPIO.setup(ENA, GPIO.OUT) # 将连接ENA的GPIO引脚设置为输出模式
GPIO.setup(IN1, GPIO.OUT) # 将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(IN2, GPIO.OUT) # 将连接IN2的GPIO引脚设置为输出模式
while True:
# 驱动电机正向旋转5秒
GPIO.output(IN1, False) # 将IN1设置为0
GPIO.output(IN2, True) # 将IN2设置为1
GPIO.output(ENA, True) # 将ENA设置为1,启动A通道电机
time.sleep(5) # 等待电机转动5秒
# 电机停止2秒
GPIO.output(ENA, False) # 将ENA设置为0
time.sleep(2) # 等待电机停止2秒
# 驱动电机反向旋转5秒
GPIO.output(IN1, True) # 将IN1设置为1
GPIO.output(IN2, False) # 将IN2设置为0
GPIO.output(ENA, True) # 将ENA设置为1,启动A通道电机
time.sleep(5) # 等待电机转动5秒
# 电机停止2秒
GPIO.output(ENA, False) # 将ENA设置为0
time.sleep(2) # 等待电机停止2秒
finally:
pwm.stop() # 停止PWM
GPIO.cleanup() # 清理释放GPIO资源,将GPIO复位
控制电机转速
BEGIN
引入GPIO库
将连接ENA的GPIO引脚设置为输出模式
将连接IN1的GPIO引脚设置为输出模式
将连接IN2的GPIO引脚设置为输出模式
设置ENA输入一定频率的PWM脉冲信号,创建PWM对象
开始向ENA输入占空比为0的PWM脉冲信号
DO FOREVER
将IN1设置为0,IN2设置为1,将电机设置为正向转动
将ENA设置为1,驱动A通道电机转动
speed = 0
DOWHILE speed < 100
将输入ENA的PWM脉冲信号的占空比修改为speed
speed += 5
等待1秒
ENDDO
将IN1设置为1,IN2设置为0,将电机设置为反向转动
将ENA设置为1,驱动A通道电机转动
speed = 0
DOWHILE speed < 100
将输入ENA的PWM脉冲信号的占空比修改为speed
speed += 5
等待1秒
ENDDO
ENDO
停止PWM
清理释放GPIO资源
END
import RPi.GPIO as GPIO # 引入GPIO模块
import time # 引入time模块
ENA = 13 # 设置GPIO13连接ENA
IN1 = 19 # 设置GPIO19连接IN1
IN2 = 26 # 设置GPIO26连接IN2
if __name__ == '__main__':
try:
# 初始化
GPIO.setmode(GPIO.BCM) # 使用BCM编号方式
GPIO.setup(ENA, GPIO.OUT) # 将ENA对应的GPIO引脚设置为输出模式
GPIO.setup(IN1, GPIO.OUT) # 将IN1对应的GPIO引脚设置为输出模式
GPIO.setup(IN2, GPIO.OUT) # 将IN2对应的GPIO引脚设置为输出模式
freq = 500
speed = 0
pwm = GPIO.PWM(ENA, freq) # 设置向ENA输入PWM脉冲信号,频率为freq并创建PWM对象
pwm.start(speed) # 以speed的初始占空比开始向ENA输入PWM脉冲信号
while True:
# 将电机设置为正向转动
GPIO.output(IN1, False) # 将IN1设置为0
GPIO.output(IN2, True) # 将IN2设置为1
# 通过改变PWM占空比,让电机转速不断加快
for speed in range(0, 100, 5):
pwm.ChangeDutyCycle(speed) # 改变PWM占空比
time.sleep(1)
# 将电机设置为反向转动
GPIO.output(IN1, True) # 将IN1设置为1
GPIO.output(IN2, False) # 将IN2设置为0
# 通过改变PWM占空比,让电机转速不断加快
for speed in range(0, 100, 5):
pwm.ChangeDutyCycle(speed) # 改变PWM占空比
time.sleep(1)
finally:
pwm.stop() # 停止PWM
GPIO.cleanup() # 清理释放GPIO资源,将GPIO复位
参考链接
第7章 用树莓派控制直流电机(L298N)
|