直接调用的PWM_WriteCompare()对比较值进行修改,这不是一个规范的操作,会导致glitch的产生。PWM 运行状态下,修改PWM比较值的正确方法是使能PWM的Switch 功能和Compare的SWAP功能,然后把PWM的OV输出与Switch输入短接在一起,然后每次都把要修改的Compare值写到Compare buffer中(writeCompareBuffer)去,这样在当前周期结束后,OV信号会触发之前写入的compare 值复制到compare register 并且马上起效。
comparebuf的数据是switch事件发生的时候才会被交换到compare寄存器,也就是我们控制的API:PWM_WriteCompare(CompareVal); 所以设计代码的时候考虑在CC事件发生的时候SWAP这个数,也就是把buffer里面的数据copy出来,然后下一个周期生效。如果需要写入新的数,
那就是TC事件发生的时候写入,CC事件发生之后交换。这样时序上面比较清晰(这个功能的示例代码看Archive02)。
PWM Buffer.cyprj.Archive02.zip
(442.56 KB)
|