PWM:脉冲宽度调制
就是周期性的控制IO拉高拉低的时间(占空比),来控制开关管的通断,实现功率的控制,比如LED调光,直流电机速度控制等等。
我这里主要是用来控制LED调光,我们知道人眼看灯不闪的频率是50hz以上,所以要想眼睛看灯不闪,PWM的高低各10ms,关断时间不能大于10ms,大于这个值我们就会看到闪频,如果我想不要那么亮开关导通时间小于10ms,那我们只能提高频率,通过提高频率控制开关管导通的时间长短,来达到功率控制,控制LED灯亮度还不闪的目的。
W800的PWM使用:
初始化:由于官方已经封装好了,初始化非常简单,只需调用一个初始化就能打开PWM功能,通过下面的枚举值我们知道最多可以打开6路PWM通道。
启动:启动也只有一个函数,但是我们要注意入口参数,第一个是配置PWM通道,第二个是周期,也就是占空比,第三个是频率,更改后面两个参数就能实现我们想要的PWM参数。
测试:测试可能很多同学也会跟我一样,没有示波器,我们怎么看波形呢?作为硬件开发者,一些小工具可以自己备着,下图这个是我在网上买的一个简易逻辑分析仪,可以用来抓PWM波形,以及抓串行通信协议(如:UART I2C SPI等)波形分析,都挺有用。
为了观看波形方便,我写了一个操作:协议接口收到数据,PWM值就增加10,这样循环,下图可以看出我的频率设置1000也就是1K,周期是255,为什么是255,接口上没有写注释,也没有翻到手册来说明这个周期怎么设置的,通过测试我发现这个周期只是一个8位的寄存器,溢出就从头开始,所以给了255。
下面几张图是用逻辑分析仪软件抓出来的波形:通过发指令操作,只更改通道0的波形,通道1一直不变,图1是开机PWM两路都设置为0波形,频率也正好1K.
设置接近50%的波形:
设置接近100%的波形:
这节就简单讲讲PWM,知道PWM的作用,下一节要做的双色LED灯,调亮度调色温都是基于PWM来做的。