PWM,是 Pulse Width Modulation(脉冲宽度调制)的缩写,它是一种常见的硬件接口,用以通过数字输出控制模拟电路设备。
如果想更多的了解 PWM,可以到这里。
前提条件
使用 PWM
请根据外设的数据手册,确定外设的接口类型为 PWM。
配置 driver.json
确定自己的硬件接口是 PWM 后,需要声明硬件接口类型为 PWM。在 driver.json 文件里的 inputs,指定接口类型(type)为 PWM。{
...
"inputs": {
"pwm": {
"type": "pwm",
"args": {
"frequency": 200
}
},
}
}
接口属性
PWM 接口可以配置如下属性:
frequency
设置输出方波频率。
编写驱动
PWM 主要有两个接口:
setDuty
,设置 PWM 接口的占空比,其参数的取值范围是0至1之间的一个浮点数,它会改变 PWM 接口负载两端的平均电压。
pwm.setDuty(0.5); |
setFrequency
,设置 PWM 接口的输出方波频率,单位是 Hz。
pwm.setFrequency(300); |
如果想了解更多细节,请参考其 API 文档。
应用
LED 模块(ky-016)
LED 模块拥有三个输出方波频率为 800Hz 的 PWM 端口R、G、B,在 driver.json 文件中声明三个类型为 PWM 的接口,设定输出方波频率为 800Hz。"models": [
"KY-016"
],
"inputs": {
"pwm-r": {
"type": "pwm",
"args": {
"frequency": 800
}
},
"pwm-g": {
"type": "pwm",
"args": {
"frequency": 800
}
},
"pwm-b": {
"type": "pwm",
"args": {
"frequency": 800
}
}
}
我们为 LED 模块提供四个接口,分别是设置灯颜色(setRGB)、读取当前 RGB 值(getRGB)、亮灯(turnOn)以及灭灯(turnOff),其具体实现方式如下:
- setRGB ,设置R、G、B 引脚的占空比,通过控制RGB负载上的平均电压,调节三种基色的强度,让灯显示各种颜色
- getRGB ,返回当前 RGB 值
- turnOn ,调用 setRGB 函数,设置 R、G、B 三引脚占空比为1,让灯亮白光
- turnOff ,调用 setRGB 函数,设置 R、G、B 三引脚占空比为0,让灯灭
; |