很久没有写关于开发板的内容了,所以本篇笔记就分享下关于树莓派如何控制直流电机正反转。在此之前波波曾经写过一篇《Arduino通过L298N模块控制电机正反转》,其实两者之间的原理是相通的,故而想了解原理的朋友可以通过链接阅读上篇文章,本篇着重分享树莓派上直流电机控制的程序源码。
程序源码:(python语言)
- import RPi.GPIO as GPIO # 引入GPIO模块
- import time # 引入time模块
- ENA = 13
- IN1 = 19
- IN2 = 26
- 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复位
- 运行这个程序后,您将看到直流电机反复的正向转动5秒后,停止两秒,再反向转动5秒后,停止2秒。
- l 控制电机转速程序
- import RPi.GPIO as GPIO # 引入GPIO模块
- import time # 引入time模块
- ENA = 13
- IN1 = 19
- IN2 = 26
- 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复位
电机的转向控制和转速控制的程序思路的最大区别在于ENA输入信号的不同。控制电机转向的程序思路只是简单的通过将ENA设置为1或0来启动和停止电机。对于电机转速控制,ENA输入的PWM脉冲信号,通过改变PWM脉冲信号的占空比来改变电机转速,占空比越大速度就越快,占空比为100%时相当于输入1(高电平),占空比为0%时相当于输入0(低电平)。
运行这个程序后,您将看到直流电机首先正向转动,转动速度不断增加,在达到最大转速后,直流电机短暂停止转动,然后反向转动,转动速度不断增加,如此反复运动。