树莓派4B控制直流电机的使用

发布时间 2023-07-07 11:43:44作者: 椹涧

直流电机驱动

1、硬件介绍

树莓派4B、杜邦线、L298N驱动模块、直流电机、外接电源

2、硬件连接

注意:ENA和ENB的跳冒必须安上去,如果没有拿杜邦线连通,就是用一根母母线把尖头盖住

这里我只连接了一个直流电机,所以INT3和INT4的连线不用管,

3、代码编写

import RPi.GPIO as GPIO
import time
#控制电机使用
# GPIO.setmode(GPIO.BOARD) #编号方式,基于插座引脚编号 GPIO引脚编号的两种方式之一
#
# #接口定义
#INT1 = 11 #将L298 INT1口连接到树莓派Pin11
#INT2 = 12 #将L298 INT2口连接到树莓派Pin12
# #输出模式
# GPIO.setup(INT1,GPIO.OUT)
# GPIO.setup(INT2,GPIO.OUT)
#
# GPIO.output(INT1,GPIO.HIGH) #INT1为高电平
# GPIO.output(INT2,GPIO.LOW) #NT2为低电平
#
# time.sleeo(3) #休息3秒
# GPIO.cleanup() #释放GPIO

4、连接图

5、拓展:控制电机转速

# 控制电机转速
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD) # 编号方式,基于插座引脚编号 GPIO引脚编号的两种方式之一
# 接口定义
INT1 = 11
INT2 = 12
ENA = 16 # 将L298的ENA接到树莓派的Pin16。ENA为左电机的使能接口,通过树莓派PWM输出,可以用来控制电机转速(注:连接时需要将ENA、跳帽拔掉)
hz = 500 # 定义频率变量(等一下用)
speed = 0 # 定义占空比变量(等下用)
GPIO.setup(ENA, GPIO.OUT) # 将ENA对应的GPIO引脚设置为输出模式
GPIO.setup(INT1, GPIO.OUT) # 将IN1对应的GPIO引脚设置为输出模式
GPIO.setup(INT2, GPIO.OUT) # 将IN2对应的GPIO引脚设置为输出模式

pwma = GPIO.PWM(ENA, hz) # 设置向ENA输入PWM脉冲信号,频率为hz并创建PWM对象
pwma.start(speed) # 以speed的初始占空比开始向ENA输入PWM脉冲信号

time.sleep(1) # 休息一秒
c = input("if you want continue please use 'y' otherwise use 'e'")
while c == 'y':
speed = int(input("Please input motor speed (1-100): ")) # 因为输入为字符串,需要用int函数
# 程序运行时通过键盘输入占空比改变电机转速
pwma.ChangeDutyCycle(speed)
# 改变PWM占空比
GPIO.output(INT1, GPIO.LOW)
# 将IN1设置为低电平
GPIO.output(INT2, GPIO.HIGH)
# 将IN2设置为高电平
input() #再次输入不同的转速
c = input("'y' or 'e'") #询问是否继续
GPIO.cleanup() #释放接口
exit() #退出,关闭

6、控制电机正转,反转

#控制电机正转反转
import RPi.GPIO as GPIO
import time

INT1 = 11
INT2 = 12
ENA = 16 #定义对应的引脚变量(等一下用)
GPIO.setmode(GPIO.BOARD) # 使用BCM编号方式
GPIO.setup(ENA, GPIO.OUT) # 将连接ENA的GPIO引脚设置为输出模式
GPIO.setup(INT1, GPIO.OUT) # 将连接IN1的GPIO引脚设置为输出模式
GPIO.setup(INT2, GPIO.OUT) # 将连接IN2的GPIO引脚设置为输出模式
pwma = GPIO.PWM(16,80)
pwma.start(90)
c = input("If you want to continue, type 'y' please. Type 'e' to end.")
a = int(input('请输入数字:'))
while c == 'y':
if a == 0 :
GPIO.output(INT1, GPIO.LOW)
GPIO.output(INT2, GPIO.HIGH)
GPIO.output(ENA, GPIO.HIGH)
elif a == 1:
GPIO.output(INT1, GPIO.HIGH)
GPIO.output(INT2, GPIO.LOW)
GPIO.output(ENA, GPIO.HIGH)
elif a ==2:
break
time.sleep(2) #休息2秒,转换
c = input("'y' or 'e'?")
if c == 'y':
a = int(input('zhengzhuan:0,fanzhuan:1,pause:2'))
else:
break
GPIO.cleanup() #释放接口
exit() #退出