本帖最后由 LearningH 于 2021-7-20 17:10 编辑
在我们AC7801x的pwm官方例程里,发现没有pwm同步方式输出的例程,这里提供一个同步输出的demo。这个demo是在之前完成的单通道捕获工程上加的。所以这个例程可以实现pwm同步输出和单通道捕获功能。
硬件:AC7801开发板
IDE:keil 5.23
pwm同步输出功能,在参考手册是这样的:
以MCVR寄存器为例。这里有两种方式实现同步,一种是软件同步,一种是硬件同步(demo里是用的软件方式同步)。
里面又分为通过加载点同步(左边的路线),立即同步(右边的路线)。
通过加载点同步的话,改变频率或者占空比,pwm计数器不会马上被清零,在加载点再一起同步。波形是平顺过度的,波形不会突变;
立即同步的方式的话,改变频率或者占空比,pwm计数器马上会被清零,马上开始新的周期计数,从波形上看,是有“突变”的。
下图是cnt同步的流程图:
下面分别附上各种情况下的测试波形(1通道是PWM1_CH0、2通道是PWM1_CH1、3通道是给的同步信号测试IO):
1. PWM组合模式输出、加载点同步方式
同步之前是4k。
同步之后是5k(程序里增加1k的频率)。
可见,波形是平滑过渡的。
2. PWM组合模式输出、立即同步方式
同步之前是7k。
同步之后是8k(程序里增加1k的频率)。
在3通道翻转信号里立刻开始新的波形。
3. PWM独立模式输出、加载点同步方式
同步之前是6k。
同步之后是7k(程序里增加1k的频率)。
可见,波形是平滑过渡的。
4. PWM独立模式输出、立即同步方式
同步之前是3k。
同步之后是4k(程序里增加1k的频率)。
在3通道翻转信号里立刻开始新的波形。
以上就是4种情况下的测试结果。
在用立即同步方式时,有一点是需要注意的:在立即同步之后,通道输出的电平取决于“先前的”电平,如果“先前的”电平为高,则通道输出电平为高;如果“先前的”电平为低,则通道输出电平为低。
举个例子,PWM独立模式输出、立即同步方式下,
同步之前是4k。
同步之后(3通道翻转信号),开始了一个新的周期,频率是5k,但是通道是输出低,直到下一个周期才输出高,相当于延迟了一个周期。这是因为在立即同步之前,通道的“先前的”电平是低,所以才输出低。如果“先前的”电平是高,这里就会输出高电平(就是上面的第4种测试的波形)。
可见,在一个周期之后,波形输出高。
不知道大家有没有注意到,在组合模式立即同步下,上面测试的第二种情况,立即同步之前,“先前的”电平是低电平,那为什么立即同步之后是高电平呢,不矛盾吗?其实不矛盾,因为在demo里,我把CH0通道设置为0了,立即同步后,CH0电平马上匹配了,所以才输出高。
总结:
如果用加载点同步方式更新,波形都是平缓度过的,没有突变。
如果用立即同步方式更新,波形会有“突变”。
最后用串口调试助手,打印PWM0_CH0捕获到的频率和占空比:
在pwm1输出的各种模式下,PWM0捕获到的频率和占空比都是对的(占空比0% ~ 100%占空比对应 0 ~ 255)。
|