树莓派的硬件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 | pi.set_PWM_frequency(4, 0) |
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循环中的延时是为了使舵机有充足时间转动到对应的角度。