一般PPI实现PWM方法
1.使能time1,分配2个比较事件。注意只有周期时间是清除定时器,产生中断。
2.使能一个IO的GPIOTE任务。
3.分配2个PPI通道
4.绑定PPI通道1,定时比较事件1,IO翻转任务;
绑定PPI通道2,定时比较事件2,IO翻转任务;
5.中断里改变CC[0]和CC[1]的值。
达到的效果是,可改变周期,和占空比。
实现注意事项
1.跑裸机不带协议栈,PWM可以完美实现。SDK包里的示例就可以实现。使用我上面的方式则能达到周期可变的目的。
2.使用带协议栈,需要与手机保持连接。不能产生绝对准确的PWM。下面解释原因。
(1)因为我使用的是中断周期溢出中断,原本是想可以准确控制脉冲数。但是因为有协议栈,所以中断会被打断,PPI没有停止,所以脉冲数会变多。
(2)直接改变CC[0]和CC[1]的值导致可能反相。出现这个的原因如下:
因为中断周期性改变比较值,可能造成需要翻转那一次被跳过。
举例:占空比较值是100,当前跑到95,然后需要比较值减10变90,则这一次占空翻转跳过
周期比较值是200&