#小车记4--树莓派 GPIO PWM 实现初步控制
程序员文章站
2022-06-08 20:39:20
...
树莓派 GPIO PWM 实现初步控制
写在前面的废话
有兴趣的读者,可以去看看本人主页里的小车记系列博客,或许能够解答你的疑惑,引领你做出一个属于自己的树莓派小车
1、L298N与树莓派的连线
将L298N上的各个线接到如图所示的树莓派接口
接完后的实物图如下:
L298N与马达、电源的连接网上资料很多,这里不在赘述。
注意:L298N的ENA、ENB只需要连外侧的接口,内侧接口不用管。
2、Python 编程控制
(1)、GPIO
树莓派系统会自带有GPIO库。
让我们先熟悉一下GPIO的基本用法
导库
import RPi.GPIO as gpio
import time
定义引脚常量
# 定义输出引脚
IN1 = 35
IN2 = 36
IN3 = 37
IN4 = 38
# 定义使能引脚
ENA = 31
ENB = 32
仔细看本文第一张引脚图,上面有各种编码名称,在这里我们用BOARD编码
# 设置编码规范
gpio.setmode(gpio.BOARD)
这里我们必须设置忽略GPIO警告,不然无法进行下面操作
(读者们可以自行尝试不输入这句代码,看看会怎么样)
# 无视警告,开启引脚
gpio.setwarnings(False)
引脚有两种模式:
1、输出模式:向引脚发送高低电平信号
2、输入模式:读取引脚状态(高低电平)
因为要控制小车,所以在这里我们把所有引脚设置为输出
# 设置引脚为输出
gpio.setup([IN1, IN2, IN3, IN4, ENA, ENB], gpio.OUT)
(2)、PWM
我们为了能够控制小车的速度,所以要采用PWM控制方法
PWM可以简单理解为,通过快速的高低电平的切换,达到控制电机的有效电压的效果,进而控制小车的速度
# 对使能引脚开启pwm控制,频率为50Hz
pwm1 = gpio.PWM(ENA, 50)
pwm2 = gpio.PWM(ENB, 50)
启动PWM
# 启动pwm
pwm1.start(0)
pwm2.start(0)
根据上图,我们将IN2和IN4置高电平,IN1和IN3置低电平,让电机逆转,小车前进
# 让小车前进
gpio.output([IN1, IN3], gpio.LOW)
gpio.output([IN2, IN4], gpio.HIGH)
使用PWM控制,让小车速度在10S内逐渐加快
print("GO!")
# 让小车每秒钟逐渐增加速度
for i in range(11):
pwm1.ChangeDutyCycle(10 * i)
pwm2.ChangeDutyCycle(10 * i)
time.sleep(1)
print(i,"'s speed up!")
print("Over")
结束的工作
# 让小车停止
gpio.output([IN1, IN2, IN3, IN4], gpio.LOW)
# 释放资源
gpio.cleanup()
pwm1.stop()
pwm2.stop()
祝各位读者都能顺利完成小车的控制,如有其他疑惑,可以看看鄙人的小车记系列的其他文章,或许有所帮助。
最后附上完整源码:
import RPi.GPIO as gpio
import time
# 定义输出引脚
IN1 = 35
IN2 = 36
IN3 = 37
IN4 = 38
# 定义使能引脚
ENA = 31
ENB = 32
# 设置编码规范
gpio.setmode(gpio.BOARD)
# 无视警告,开启引脚
gpio.setwarnings(False)
# 设置引脚为输出
gpio.setup([IN1,IN2,IN3,IN4, ENA, ENB], gpio.OUT)
# 对使能引脚开启pwm控制
pwm1 = gpio.PWM(ENA, 50)
pwm2 = gpio.PWM(ENB, 50)
# 启动pwm
pwm1.start(0)
pwm2.start(0)
# 让小车前进
gpio.output([IN1, IN3], gpio.LOW)
gpio.output([IN2, IN4], gpio.HIGH)
print("GO!")
# 让小车每秒钟逐渐增加速度
for i in range(11):
pwm1.ChangeDutyCycle(10 * i)
pwm2.ChangeDutyCycle(10 * i)
time.sleep(1)
print(i,"'s speed up!")
print("Over")
# 让小车停止
gpio.output([IN1, IN2, IN3, IN4], gpio.LOW)
# 释放资源
gpio.cleanup()
pwm1.stop()
pwm2.stop()
上一篇: 第5章 ARM PWM
下一篇: Python猜数小游戏