树莓派的硬件PWM模块
硬件PWM
本文针对的是Raspberry Pi 2 Model B硬件。从理论上讲,对于任意GPIO口,可以通过设定延时来输出PWM信号,这被称作软件PWM。由于Linux不是实时操作系统,对于一些要求硬实时的应用,例如通过PWM信号控制舵机,最好使用硬件PWM。
树莓派的BCM2386芯片有两个PWM通道——PWM0和PWM1。PWM0可以设置在GPIO12和GPIO18上,PWM1可以设置在GPIO13上。本文使用pigpio库来实现GPIO12输出PWM信号。
pigpio
首先下载并安装pigpio库。安装成功后,输入命令sudo pigpiod
运行pigpio
守护进程,Python接口通过和pigpio守护进程通信来控制GPIO口。函数set_PWM_dutycycle
,
set_PWM_frequency
,set_PWM_range
分别控制PWM的占空比、频率和控制精度。
set_PWM_dutycycle(user_gpio, dutycycle)
函数控制PWM的占空比,user_gpio
指定GPIO口,dutycycle
的范围是0--range
,range
默认为255,可以通过set_PWM_range
函数来更改range
的值,下面是一段示例代码:
1 | import pigpio |
set_PWM_frequency(user_gpio, frequency)
控制PWM信号的频率,示例代码如下:
1 | 4, 0) pi.set_PWM_frequency( |
set_PWM_range(user_gpio, range_)
通过设定range_
值来控制PWM信号的精度。range_
值越大,控制精度越高,range_
值的范围是25--40000
,示例代码如下:
1 | pi.set_PWM_range(12, 100) # now 25 1/4, 50 1/2, 75 3/4 on |
应用实例
这里是控制一个舵机来回转动的代码:
1 | import pigpio |
while循环中的延时是为了使舵机有充足时间转动到对应的角度。