树莓派直流电机控制程序源码

很久没有写关于开发板的内容了,所以本篇笔记就分享下关于树莓派如何控制直流电机正反转。在此之前波波曾经写过一篇《Arduino通过L298N模块控制电机正反转》,其实两者之间的原理是相通的,故而想了解原理的朋友可以通过链接阅读上篇文章,本篇着重分享树莓派上直流电机控制的程序源码。

树莓派直流电机控制程序

程序源码:(python语言)

  1. import RPi.GPIO as GPIO         # 引入GPIO模块
  2. import time                     # 引入time模块
  3. ENA = 13
  4. IN1 = 19
  5. IN2 = 26
  6. if __name__ == '__main__':
  7.     try:
  8.         # 初始化
  9.         GPIO.setmode(GPIO.BCM)          # 使用BCM编号方式
  10.         GPIO.setup(ENA, GPIO.OUT)       # 将连接ENA的GPIO引脚设置为输出模式
  11.         GPIO.setup(IN1, GPIO.OUT)       # 将连接IN1的GPIO引脚设置为输出模式
  12.         GPIO.setup(IN2, GPIO.OUT)       # 将连接IN2的GPIO引脚设置为输出模式
  13.         while True:
  14.             # 驱动电机正向旋转5秒
  15.             GPIO.output(IN1, False)     # 将IN1设置为0
  16.             GPIO.output(IN2, True)      # 将IN2设置为1
  17.             GPIO.output(ENA, True)      # 将ENA设置为1,启动A通道电机
  18.             time.sleep(5)               # 等待电机转动5秒
  19.             # 电机停止2秒
  20.             GPIO.output(ENA, False)     # 将ENA设置为0
  21.             time.sleep(2)               # 等待电机停止2秒
  22.             # 驱动电机反向旋转5秒
  23.             GPIO.output(IN1, True)      # 将IN1设置为1
  24.             GPIO.output(IN2, False)     # 将IN2设置为0
  25.             GPIO.output(ENA, True)      # 将ENA设置为1,启动A通道电机
  26.             time.sleep(5)               # 等待电机转动5秒
  27.             # 电机停止2秒
  28.             GPIO.output(ENA, False)     # 将ENA设置为0
  29.             time.sleep(2)               # 等待电机停止2秒
  30.     finally:
  31.            pwm.stop()                      # 停止PWM
  32.         GPIO.cleanup()                  # 清理释放GPIO资源,将GPIO复位
  33. 运行这个程序后,您将看到直流电机反复的正向转动5秒后,停止两秒,再反向转动5秒后,停止2秒。
  34. l  控制电机转速程序
  35. import RPi.GPIO as GPIO         # 引入GPIO模块
  36. import time                     # 引入time模块
  37. ENA = 13
  38. IN1 = 19
  39. IN2 = 26
  40. if __name__ == '__main__':
  41.     try:
  42.         # 初始化
  43.         GPIO.setmode(GPIO.BCM)              # 使用BCM编号方式
  44.         GPIO.setup(ENA, GPIO.OUT)           # 将ENA对应的GPIO引脚设置为输出模式
  45.         GPIO.setup(IN1, GPIO.OUT)           # 将IN1对应的GPIO引脚设置为输出模式
  46.         GPIO.setup(IN2, GPIO.OUT)           # 将IN2对应的GPIO引脚设置为输出模式
  47.         freq = 500
  48.         speed = 0
  49.         pwm = GPIO.PWM(ENA, freq)           # 设置向ENA输入PWM脉冲信号,频率为freq并创建PWM对象
  50.         pwm.start(speed)                    # 以speed的初始占空比开始向ENA输入PWM脉冲信号
  51.         while True:
  52.             # 将电机设置为正向转动
  53.             GPIO.output(IN1, False)         # 将IN1设置为0
  54.             GPIO.output(IN2, True)          # 将IN2设置为1
  55.             # 通过改变PWM占空比,让电机转速不断加快
  56.             for speed in range(0, 100, 5):
  57.                 pwm.ChangeDutyCycle(speed)  # 改变PWM占空比
  58.                 time.sleep(1)
  59.             # 将电机设置为反向转动
  60.             GPIO.output(IN1, True)          # 将IN1设置为1
  61.             GPIO.output(IN2, False)         # 将IN2设置为0
  62.             # 通过改变PWM占空比,让电机转速不断加快
  63.             for speed in range(0, 100, 5):
  64.                 pwm.ChangeDutyCycle(speed)  # 改变PWM占空比
  65.                 time.sleep(1)
  66.     finally:
  67.         pwm.stop()                          # 停止PWM
  68.         GPIO.cleanup()                      # 清理释放GPIO资源,将GPIO复位

电机的转向控制和转速控制的程序思路的最大区别在于ENA输入信号的不同。控制电机转向的程序思路只是简单的通过将ENA设置为1或0来启动和停止电机。对于电机转速控制,ENA输入的PWM脉冲信号,通过改变PWM脉冲信号的占空比来改变电机转速,占空比越大速度就越快,占空比为100%时相当于输入1(高电平),占空比为0%时相当于输入0(低电平)。

运行这个程序后,您将看到直流电机首先正向转动,转动速度不断增加,在达到最大转速后,直流电机短暂停止转动,然后反向转动,转动速度不断增加,如此反复运动。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!