前述文章中,我们讨论了数字控制芯片dsPIC33C的PWM模块的内部运行模式,本文我们接着讨论这个芯片PWM的I/O输出模式,它是控制PWMxH和PWMxL的pin上信号电平的行为。一般来说,每一个PWM的输出模式,可以设置为三种输出模式中的一种,如下图1所示,
图1 PWM模块I/O输出模式
值得注意的是,PWM模块的输出模式和PWM模块的内部运行模式,二者是相互独立的关系。
三种输出模式,分别为互补模式输出,它也是默认的输出模式,以及独立的输出模式,推挽的输出模式等。
图2 PWM控制寄存器PGxCONL
图3 PWM运行模式配置寄存器位
一般来说,通过上述PGxCONL控制寄存器设定相应PWM模块的内部运行模式。
图4 PWM控制寄存器PGxIOCONH
图5 PWM产生器输出模式选择位
这里,通过图4中的控制寄存器PGxIOCONH的相应位PMOD来设定其输出I/O的模式
一.互补模式的行为描述
图6 互补模式的波形示例
互补模式是比较常见的波形输出形式,比如同步整流buck电路或者同步整流boost电路等。由于在互补模式中,可以通过PGxDT设定死区,所以两个pin上的PWM信号是不会同时有效的,这样就避免了输入或者输出电压对GND直通等问题。
PWMxH和PWMxL的输出也是可以被外部硬件信号或者软件改写的,但是这个改写如果和互补关系相冲突的话,是不允许发生的。另外,在死区时间内也是无法插入其它事件的。具体来说,硬件的事件也可以让PWM输出pin立即变为无效,但是这时候,如果死区还没有结束,那么这个pin的输出不会变为有效。以下有一些硬件或者软件的改写状态设置。
图7 PWMxH和PWMxL的硬件或者软件改写
从上图可以看出,PWM pin的输出改写包括三种PCI事件,及debugger停止状态的设置,及软件改写,或者PWMxH和PWMxL的交换。
图8 PWM 互补模式下的PWM PIN改写行为的信号链
从图上看,首先是pin SWAP操作起作用,然后是pin的驱动有效行为,接着是死区控制。这种方式的安排,可以让无效状态的优先级高于SWAP和有效需求,最后再把极性控制施加在输出端。这里需要注意,极性控制是最后加在PWM输出端控制的。
图9 互补模式的改写行为
可以通过以上表格来确定不同改写行为对应的PWMxH和PWMxL的输出。注意,在这个表格中,有效状态是1,无效状态是0,x代表不在乎这个pin的状态,~PWM表示PWM的互补状态。
二.独立输出模式的行为描述
接下来,我们讨论一下独立模式输出。这种模式下在芯片内部,PWM产生器的输出是同时连接在PWMxH和PWMxL的pin上的,二者输出信号是一样的,所以一般情况下只需要PWMxH就可以了,将PWMxL的输出disable后,PWMxL可以作为GPIO pin或者其它外设的输出来使用。
根据前述文章,PWM的运行模式和PWM的I/O输出模式是相互配合使用的,当PWM运行模式设置为PWM边沿独立双输出模式时,而I/O输出模式为独立输出模式时,则PWMxH和PWMxL的输出是完全独立的两个PWM信号。由于PWMxH和PWMxL完全独立,所以此时没有死区的概念,对PWMxH和PWMxL的输出状态没有什么限制,二者都可以被硬件或者软件改写。
图10 独立边沿双输出加独立输出模式
独立双输出模式的输出波形寄存器设置,请参考前述文章,数字控制芯片dsPIC33C的PWM运行模式简析,这里不再多说。
三.推挽模式输出
推挽模式实际上类似于独立边沿模式,但是推挽模式会将所定义的周期和占空比对应的波形重复两次分别输出在PWMxH和PWMxL上,重复的起点是SOC触发(Start of Cycle)信号发出的时刻。EOC中断事件和数据寄存器更新事件是在第二次的PWM结束后才进行。
图11 推挽模式PWM输出
由于PWM timer需要分别匹配PWMxH和PWMxL的信号,所以PWM timer也是重复两次计时,从中可以看出,PWM的数据Buffer更新,也是在两次PWM信号结束后才进行,EOC中断也是如此。
基于推挽模式的特点,它一般用于有变压器的拓扑应用,通过推挽信号输入可以确保在变压器两个方向上,施加对称的占空比,因此可以确保没有直接磁偏。值得注意的是,推挽模式电路中,可以通过STEER bit来确定是处在哪一个PWM timer的计时范围内。具体来说STEER为0时处在第一个PWM时间内,STEER为1时,处在第二个PWM时间内。
在推挽模式中,不像互补模式可以设置死区,但是在推挽模式中,可以通过对PGxphase的设置,或者对最大Duty的限制可以避免PWMxH和PWMxL的直通短路。
图12 中心对称模式和推挽输出模式的结合
当采用中心对称模式作为PWM运行模式时,输出为推挽模式输出时,那么PWM timer会重复四次得到一个完整的PWM波形驱动,此时对应的EOC事件中断,和Buffer寄存器更新也是4次PWM Timer才进行一次,因此,这种情况下,可以在改变脉冲之前在PWMxH和PWMxL上得到相同的脉冲。
对双边沿中心对齐模式的单更新模式(MODSEL=0b110),也是相同的情况。双边沿中心对齐模式可以参考前述文章,数字控制芯片dsPIC33C的PWM运行模式简析 ,这里不多说了。
图13 中心对齐模式加推挽输出模式
注意在这种模式配合下,本身中心对齐模式中有一个标志位CHALF表示中心对齐模式的上升PWM timer还是下降部分的PWM timer,而在推挽模式下有STEER标志位,表示PWM输出pin处在PWMxH还是PWMxL输出部分,这两个标志需要区分开来。总的来说,四次PWM timer会发生一次EOC中断和Buffer寄存器更新。
图14 双边沿双更新或者双更新中心对齐加推挽输出
在中心对齐模式双更新,或者双边沿中心对齐模式双更新模式时,将PWM I/O设为推挽模式时,每一次PWM timer都可以产生一次PWM的EOC中断及buffer更新,这样可能导致中心对齐模式的上升部分和下降周期部分的不对称性,但是可以及时更新脉冲宽度,减小控制延时。如图14所示。
在推挽模式下或者独立输出模式下,PWMxH和PWMxL的状态没有什么实际上的限制,可以通过软件或者硬件改写的方式,将输出设为都有效,这是取决于外部电路需要的。但是在进行推挽输出的更新时需要注意,由于外部电路的需要,PWMxH和PWMxL往往需要对称的脉冲避免磁偏,那么尽可能在推挽模式PWMxH和PWMxL的脉冲都输出后,再进行改写。
当采用硬件PCI更新时,可以考虑将STEER信号作为事件输出,然后输入给PCI逻辑,此时就可以决定什么时候才更新。
图15 推挽模式下的SWAP和改写信号流
同样的,可以根据图15来了解推挽模式下的信号输出流程,可以看到输出极性还是放在最后,而SWAP还是放在最前面。
图16 推挽和独立输出模式下改写和SWAP行为
类似于互补模式,在推挽模式下,可以通过上述表格来决定PWMxH和PWMxL的输出信号状态。
这里给大家一个示例,当采用推挽模式输出时,由于PGxPER的限制,PWMxH和PWMxL的输出占空比是50%,当希望实现某一个PWM产生器的PWMxH和PWMxL的脉冲既满足错相180C,且占空比又能够大于50%,则可以考虑用PWM1触发PWM4,同时将PWM4H通过PPS映射到PWM1L上,那么此时表现出来的PWM1H和PWM1L即可以满足大于50%的占空比,又满足错相180C的要求。
图17 PWM4H的PPS映射
图18 PWM1和PWM4组成的错相且占空比大于50%的驱动波形
图19 PWM1和PWM4组成的错相且占空比大于50%的驱动波形(放大)
上述波形中CH1-PWM1H,CH2-PWM4H(PWM1L),CH3-PWM4H,CH4-PWM4L,其中CH2是PWM4H映射到PWM1L上的波形,PWM1和PWM4均为独立边沿模式运行,且I/O独立模式输出,PWM1H在1/2周期触发PWM4H。
总结,虽然在MPLAB XIDE的MCC配置中,PWM运行模式和PWM输出模式就只是简单的两个选项,但是深刻理解二者的运行原理,对解决一些问题很有帮助。
今早看到北大满哥的视频,此处以宋代陆游的一首诗---游山西村作为结尾。
莫笑农家腊酒浑,
丰年留客足鸡豚。
山重水复疑无路,
柳暗花明又一村。
萧鼓追随春社近,
衣冠简朴古风存。
从今若许闲乘月,
柱杖无时夜叩门。
参考文献:dsPIC33CK FRM.
相关文章: