树莓派开发相关知识三PWM控制转速
基于树莓派PWM控制 控制L298N马达驱动转速 马达驱动转速
1、L298N电路图:
2、需要留意的有几点
INA~IND四个引脚分别控制OUTA-OUTD,即,INA高电平则OUTA有电。
ENA,ENB分别使能控制OUTA~OUTB以及OUTC~OUTD。
OUT口有VCC电压驱动,而IN口相当于拨动L298N的四个开关,即所谓电机驱动,不需要树莓派驱动,而是通过L298N配外接电源的方式驱动马 达。
一侧电机分别接OUTA,OUTB,可以通过两个输出高低电平来给电机上电,正电压则正转,负电压则倒转,两侧转的方向一致,因此共用。通过 控制ENA来调节电机电压,实现控制转速。另一侧同理。
通过模块中的4个LED灯可以看出来OUTA~OUTD的输出情况。
VCC连接驱动电压,案例采用7.2v,+5口会自动上电,可以给树莓派供电。
PWM连接使能口,通过调整脉冲宽度,使得两侧使能开关“时而开时而关”来实现调速
3、实物图
4、驱动单元实现
import RPi.GPIO as GPIO
class L298N:IN = []EN = []P_ENA = 0P_ENB = 0speed = 0# IN 长度必须为4 EN 长度必须为2def __init__(self, IN, EN):self.IN = INself.EN = ENGPIO.setup(self.IN, GPIO.OUT, initial = GPIO.LOW)GPIO.setup(self.EN, GPIO.OUT, initial = GPIO.LOW)self.P_ENA = GPIO.PWM(self.EN[0], 50)self.P_ENB = GPIO.PWM(self.EN[1], 50)self.P_ENA.start(self.speed)self.P_ENB.start(self.speed)def __del__(self):self.P_ENA.stop()self.P_ENA.stop()GPIO.cleanup(self.IN)GPIO.cleanup(self.EN)# 前进def forward(self):GPIO.output(self.IN, [1,0,1,0])# 后退def backward(self):GPIO.output(self.IN, [0,1,0,1])# 左转def leftward(self):GPIO.output(self.IN, [1,0,0,1])# 右转def rightward(self):GPIO.output(self.IN, [0,1,1,0])# 停止def stop(self):GPIO.output(self.IN, [0,0,0,0])# 加速def speedup(self, speedup = 20):self.setspeed(self.speed + speedup)# 减速def speeddown(self, speeddown = 20):self.setspeed(self.speed - speeddown)# 速度设置def setspeed(self, speed):self.speed = speedif self.speed > 100:self.speed = 100elif self.speed < 0:self.speed = 0self.P_ENA.ChangeDutyCycle(self.speed)self.P_ENB.ChangeDutyCycle(self.speed
5、调用
import CarMove
import RPi.GPIO as GPIO
import time#4个电机驱动输出通道
CarIN=[6,13,19,26]
#生成小车对象
car=CarMove.L298N(CarIN)#小车速度
speed=10
car.speed=speed#小车前进
car.forward()
time.sleep(2)#小车后退
car.backward()
time.sleep(2)#小车加速后前进
car.speedup()
car.forward()
time.sleep(2)#小车减速后前进
car.speeddown()
car.forward()
time.sleep(2)#小车停止
car.stopall()