用STC15W4KxxS4输出两路互补SPWM
日 期:2015-8-25
版 本:V1.0
SPWM是使用PWM来获得正弦波输出效果的一种技术,在交流驱动或变频领域应用广泛。
SPWM知识是一个专门的学科,不了解的用户可以自己上网搜索相关的知识,本文档不做说明(要说明得比较大篇幅,各种图文说明等等),默认用户已掌握。
STC公司的STC15W4KxxS4系列MCU内带6通道15位PWM,各路PWM周期(频率)相同,输出的占空比独立可调,并且输出始终保持同步,输出相位可设置。这些特性使得设计SPWM成为可能,并且可方便设置死区时间,对于驱动桥式电路,死区时间至关重要。不过本MCU没有专门的死区控制寄存器,通过设置PWM占空比参数来达到。
本程序只演示两路互补SPWM的例子(单相),如需要三相SPWM,则相同方法设置另外4路PWM,相位差为120度即可。
SPWM产生原理如图1:
1
STC应用文档 用STC15W4KxxS4输出两路互补SPWM 2014-8-25 V1.0
内部15位的PWM计数器一旦运行,就会从0开始在每个PWM时钟到来时加1,其值线性上升,当计数到与15位的周期设置寄存器[PWMCH,PWMCL]相等时(图中斜线A到B),内部PWM计数器归0,并产生中断,称为“归0中断”。 本例周期设置为2400,内部计数器计到2400就归0,即2399,下一个时钟就归0。
6路PWM(PWM2~PWM7)每路的结构一样,都包含两个15位的对输出IO翻转的时刻设置寄存器PWMnT1和PWMnT2,本例使用PWM3和PWM4,对应PWM3T1、PWM3T2和PWM4T1、PWM4T2。当内部计数器的值与某个翻转寄存器的值相等时,就对对应的输出IO取反,本例中,PWM3从P2.1输出,PWM4从P2.2输出。假设PWM3T1=65,PWM3T2=800,PWM4T1=53,PWM4T2=812,并且PWM3输出的P2.1初始电平为0,PWM4输出的P2.2初始电平为1,则,当内部PWM计数器计到等于PWM4T1=53时,P2.2由高输出低,计到等于PWM3T1=65时,P2.1由低输出高,计到等于PWM3T2=800时,P2.1由高输出低,计到等于PWM4T2=812时,P2.2由低输出高。
2
STC应用文档 用STC15W4KxxS4输出两路互补SPWM 2014-8-25 V1.0
从图中看到,两路输出是互补的,用于驱动一些MOSFET的半桥式驱动IC。细心的用户可以看到,这两路PWM的翻转时刻有一点差别,相差12个时钟,为什么要这样设计呢?这就是传说中的死区。为了方便说明,把这两路PWM放大如图2:
P2.2输出低电平后,再过12个时钟(在24MHZ时,对应0.5us),P2.1输出高电平。
P2.1输出低电平后,再过12个时钟(在24MHZ时,对应0.5us),P2.2输出高电平。
这个12个时钟就是死区时间,本例PWM时钟为1T模式,对应0.5us。假设P2.1驱动的是半桥的下臂,P2.2驱动的是上臂,则P2.2输出低电平后,上臂开始关闭,经过0.5us,上臂关闭完毕,P2.1输出高电平,下臂打开。P2.1输出低电平后,下臂开始关闭,经过0.5us,下臂关闭完毕,P2.2输出高电平,上臂打开。这样,死区时间的设置,可以避免上下臂同时打开造成烧毁MOSFET。
有人会说,一路输出关闭的同时,另一路大开,不会烧管子啊?
错啦,MOSFET打开快,关闭慢(相关知识请翻翻书),所以需要一段时间关闭。
P2.1或P2.2如果直接用示波器观察,会看到比我们的思绪还凌乱的波形,因为PWM一直在变化,但是通过RC(1K+1uF)低通滤波再观察的话,就会看到两个反相的正弦波,神奇吧,呵呵!
3
STC应用文档 用STC15W4KxxS4输出两路互补SPWM 2014-8-25 V1.0
本例使用24MHZ时钟,PWM时钟为1T模式,PWM周期2400,正弦表幅度为2300,往上偏移60个时钟(方便过0中断重装数据)。正弦采样为200点,则输出正弦波频率 = 24000000/2400/200=50HZ。
下面为实际测量的波形。
4
STC应用文档 用STC15W4KxxS4输出两路互补SPWM 2014-8-25 V1.0
程序请参考例程。
文档完毕。
5
因篇幅问题不能全部显示,请点此查看更多更全内容