基于微处理器的spwm的算法分析与实现.docx
《基于微处理器的spwm的算法分析与实现.docx》由会员分享,可在线阅读,更多相关《基于微处理器的spwm的算法分析与实现.docx(15页珍藏版)》请在冰豆网上搜索。
![基于微处理器的spwm的算法分析与实现.docx](https://file1.bdocx.com/fileroot1/2023-8/7/00a6d695-4c64-4ae7-a631-315004b4bdf2/00a6d695-4c64-4ae7-a631-315004b4bdf21.gif)
基于微处理器的spwm的算法分析与实现
基于微处理器的SPWM的算法分析与实现
一、理论基础
采样控制理论中有一个重要的结论:
冲量相等而形状不同的窄脉冲加在具有惯性的环节
上,其效果基本相同(冲量即指窄脉冲的面积,这里所说的效果基本相同,指环节的输出响应
波形基本相同)。
二、SPWM
所谓的SPWM波形就是与正弦波形等效的一系列等幅不等宽的矩形脉冲波形如图1所示,等效的原则是每一区间的面积相等。
如图把一个正弦波分作几等分(如图1a中,n=12)然后把每一等分的正弦曲线与横轴所包围的面积都用一个与此面积相等的矩形脉冲来代替,矩形脉冲的幅值不变,各脉冲的中点与正弦波每一等分的中点相重合(如图1b),这样由几个等幅不等宽的矩形脉冲所组成的波形就与正弦波等效,称作SPWM波形。
同样,正弦波的负半周也用同样的方法与一系列负脉冲波等效。
设正弦调制波Ur=asinwrt,正弦半波每个等分的宽度为Tc=2π/n,n为正弦波一个周期内的脉冲数且n较大,第i个等分正弦波的中点值或平均高为yi(
),则该等分正弦波所围的面积为yi*Tc(即认为此时正弦波所围的面积为矩形面积);第i个矩形脉冲宽度为δi,矩形波的高为H,则矩形波的面积为Hδi。
根据面积相等原则有
yi*Tc=Hδi
δi/yi=2π/n*H=const(常数)
令A=2π/n*H*a,wr=(2i-1)*π/n
δi=Asinwrt1)
上式表明,等分数N较大时,SPWM将正弦波的函数值变换成了恒幅脉冲的宽度值。
显然,当改变正弦函数值时,各个脉冲的宽度必然也发生相应的变换。
结论1:
幅值与相位不同的正弦波,产生的SPWM波也是不同的;相反,SPWM波不同,对应的正弦波也不同。
三、SPWM的谐波分析
PWM电路可以使输出电压、电流接近正弦波,但由于使用载波对正弦信号波调
制,也产生了和载波有关的谐波分量。
这些谐波分量的频率和幅值是PWM电路性能的重要指标之一。
A)、SPWM波形中的基波分量
设正弦调制波Ur=asin(wrt+φ)式中,0≤a≤1;
设三角波载波Uc的表达式为
图2载波、调制波和PWM输出波的关系
下面的方法是先以三角波载波角频率Wr为基准进行分析,然后再求出所得波形和Wr
的关系。
图3是载波、调制波和PWM输出波的关系图。
图中取三角波两个负峰值之间为一个载
波周期2π,取该周期中点,即三角波正峰值时刻为Wt轴的零点。
则设在该周期内Ur和
Uc的交点时刻分别为θ1和θ2,则PWM输出波可表示为
Uo=Ud(Wct≤θ1或Wct≥θ2)或Uo=-Ud(θ1≤Wct≤θ2)
把Uo/Ud展开为傅氏级数得:
2)
式中,第一项即为PWM输出波形中基波分量,这个基波分量正是调制时所需要的
正弦波。
(详细计算参照《电力电子变流技术》-机械工业出版社)
B)、SPWM波形中的谐波分量
式2)中所包含的谐波成分是相当复杂的,谐波频率即和载波角频率Wc有关,也和调
制信号角频率Wr有关。
以载波周期为基础,再利用贝塞尔函数推导出PWM波的傅里叶
级数表达式。
尽管分析过程复杂,但结论简单而直观。
用贝塞尔函数可以从式2)中求
出各次谐波的频率及幅值,见图3。
谐波角频率为:
;
式中,n=1,3,5,…时,k=0,2,4,…;n=2,4,6,…时,k=1,3,5,…
PWM波中不含低次谐波,只含wc及其附近的谐波以及2wc、3wc等及其附近的谐波。
其中幅值最高影响也最大的是角频率为Wc的谐波的谐波分量。
这种载波频率附近的高
次谐波很容易滤除的,若除去谐波就可以得到PWM输出波形中的基波分量,即正弦波。
图3PWM波频谱图
结论2:
载波三角波、调制正弦波,产生PWM波,滤掉PWM波的谐波,得到PWM波的基波,就是调制波-正弦波;
四、算法的分析
在微处理器中,占空比要求大于0%小于100%,则要求矩形脉冲宽度大于Tc>δi>0;而1)式中由于正弦值有正有负,因此1)式不能满足微处理器需要。
规则采样法:
在规则采样中,采样点与三角波的中点(负峰值点)重合,这样可用简单的比例关系计算出脉冲宽度,如图2就是这种方法的示意图。
图2规则采样法原理
如图所示,在三角波的负峰时刻tD时对正弦调制波采样而得到D点,过D点作一水平
直线和三角波分别交与A点和B点,在A点的时刻tA和B点的时刻tB控制功率开关器件的通断。
这里设三角波的幅值为1,其峰-峰值为2。
从图2,根据相似三角形定理,可得如下关系式:
则
3)
其中B=Tc*a/2;
此时根据面积相等原理,此时对应的正弦波为:
Ur*Tc=H*
Ur=H*(1+a
)/24)
结论3:
式3)可以满足的Tc>δi>0要求,因此只要使脉冲宽度
符合式3)的要求,就可以输出式4)的正弦波。
对式3)而言,有变量Tc,a,A,
,
其中Tc为载波三角波的频率,
a为幅值调制比,
B为a的倍数关系,
wr为正弦波的角频率,
tD为采样时刻,
为第i个等分正弦波的中点值。
五、SPWM的实现
1、根据以上分析,要输出spwm波,需要如下步骤:
①首先,确定的是载波,如15.6KHz;
②其次,确定调制波,如50Hz正弦波;
③计算等分正弦波的中点值,如波表,目的是计算脉冲宽度;
④要输出完整的正弦波,需要按照PWM波周期输出不同的PWM脉冲宽度,如定时调用波表,目的是使脉冲宽度按照正弦规律变化;
⑤调整正弦的幅度,如级数,目的改变级数大小,则改变输出正弦值的大小;
2、ADUC7027芯片SPWM的实现
①载波,PWM的开关周期=2×PWMDAT0×tCORE,其中PWMDAT0=0x571,tCORE=1/41.78M;因此PWM的开关周期=66.7us,在载波频率=1/66.7us=15KHz;注:
9632x是15.6k,据张庆详工程师说好像是计算错误,应该是15.6k。
②调制波,50Hz、60Hz、300Hz;
③波表的生成,首先等分正弦波的中点值,如50Hz正弦波用15.6KHz载波切割,共分成15.6K/50=312;即相当于把一个标准50Hz正弦波2π,分成312份,求相邻切割点中间点的值;则:
,
注意:
乘以6553是为了提高计算精度,在程序中最后需要除以6553;应该是乘以2的16次方=65536,但为了提高级数,就将波表缩小10倍。
附正弦函数计算C程序
#include"stdio.h"
#include"math.h"
main()
{
inti;
intj;
FILE*bb;
bb=fopen("barm50.asm","wt");
for(i=0;i<312;i++)
{
j=sin((i*2.+1)*M_PI/312.)*32768;
if(j>=0)fprintf(bb,".word0%xH\n",j);
elsefprintf(bb,".word0%xH\n",j);
}
fclose(bb);
}
④定时输出PWM波,要求定时周期等于PWM周期(64us),因此定时器周期=TxLD×预分频数/源时钟频率=0xA71×1/41.78M=64us;这样就输出不同的PWM占空比,使之按照正弦波变化。
⑤级数的意义
对于ARM芯片而言,我们可以调节占空比寄存器(PWMCH0)。
因此根据公式3),
改变PWMCH0,使输出的PWM宽度等于δ。
为了简化,死区时间先不考虑:
PWM宽度=PWMDAT0*tCORE+2×PWMCH0*tCORE
=Tc/2+Tc*PWMCH0/PWMDAT05)
式子5)要和3)相同,则
TCPWMCH0/PWMDAT0=Tc/2*asinwrtD
PWMCH0=a/2*PWMDAT0*sinwrtD
=CsinwrtD
因此,只需要按时把CsinwrtD值送入PWMCH0,就可以使输出的PWM宽度等于δ。
C值就是我们常说的级数。
另外:
从3)式可以得出,
PWMCH0/PWMDAT0<1/2;否则,如大于的话,占空比大于100%。
即PWMCH0<1/2*PWMDAT0=696
即CsinwrtD<696,其中0⑥实例分析:
选择一台AN9632X仪表,验证实际级数与理论级数是否一致?
实测:
AN9632X,设置2500V空载输出,升压器的初级输入是62V,PWM显示级数2025,功放电压为308V。
SPWM波:
A)
对应的正弦波:
Ur*Tc=H*
Ur=H*(1+a
)/2B)
根据试验实际的升压器输入为Ui=62×1.414
=87.7
对于B)式而言,硬件滤波电路滤掉直流分量,则
87.7
=H/2*a
,由于功放电压为308V,此时H=308×2=616V,即功
率板理论最大可以输出308V;
则:
a=0.2844,
因为:
PWMCH0=a/2*PWMDAT0*sinwrtD=CsinwrtD(详见⑤级数的意义),C值就
是我们常说的级数,则C=0.2844/2*1339=199,由于级数此时放大10倍,即理论计算
级数为1990,接近于PWM级数2025。
关于死区的说明:
个人认为,死区是个固定值,应该是个直流分量,最后会被硬件电路滤掉,因此在级数计算中不应该存在加或减死区的问题。
3、TMS320F2812芯片SPWM的实现
A)、PWM设置相关
在9651TH中,TICON设置为0x0842H,根据定义可知计数器工作在“连续增/减计数模式”,这样根据T1PR的设定值,DSP输出对称的PWM波。
T1PR的设定值与下列参数有关;根据对称波形产生机理可知,DSP递增至T1PR后开始递减至0,至此完成一个三角波(载波)的输出,因此T1PR为载波周期的1/2;由于载波为15kHz,转化为系统时钟为10000个时钟周期,因此T1PR的设定值为5000(#1388H).
B)、PWM输出程序在定时中断中完成。
定时器为CPU定时器2,TIMER2PRD=0x30D4H,由于系统时钟频率为150MHz,则一个定时中断的时间为12500/(150*1000000)=83.3us,每个中断输出一个波表数据,因此定时频率为1000000/83.3=12kHz。
对于50Hz的正弦波,波表包含有12k/50=240个点,即载波比为240。
这里要注意此时PWM周期与定时周期并不一致,是因为定时周期按照15k算的话,时间太短,中断处理不过来,因此张工把定时周期改长,同时,我认为按12k采样、12k送数,PWM波与12k载波周期及15k周期相比有一定线性关系,因此可以输出正常正弦波,但是由于15k开关频率比12k快,相当于每一个等分的正弦面积小了一点,这样就有可能出现较多的高频杂波。
C)、对于DSP芯片而言,我们可以调节占空比寄存器就是COMPR1,
PWM脉宽=2*COMPR1*Tc/2*T1PR;6)
要求式子6)要和3)相同,则
COMPR1*Tc/T1PR=Tc/2+Tc/2*asinwrtD
COMPR1=(1/2+1/2*asinwrtD)*T1PR
即COMPR1=(T1PR+DsinwrtD)/27)
其中D=T1PR*a,D值就是我们常说的级数。
注:
9651TH程序如下:
MOVT,@PWMCFF;T=PWMCFF
MOVWDP,#PWMCMPCAL
MPYP,T,@PWMCMPCAL;P=(PWM_TAB[i]*PWMCFF)
SPM+1
MOVLACC,P<ADDAH,#5000;#6250;AddPWM_OFFSETtoAH,把
;当于5000×2的16次方
SFRACC,#1;ACC=ACC/2
MOVLXAR0,#PWMCMPCAL;PWMCMPCAL=AH=ACC/32767
MOV*XAR0,AH
根据程序:
PWMCMPCAL=(PWM_TAB[i]*PWMCFF*2+5000*216)/(2*216)8)
将式7)与式8)对比:
其中:
T1PR=5000
PWMCFF为级数D值;
PWM_TAB[i]*2为sinwrtD的值;
根据记录
,然后PWM_TAB[i]*2,最后除以2的16次方,这样是很好理解。
但实际根据波表计算,
,相当于波表右移了
/240,然后又PWM_TAB[i]*2,因此对应的正弦波也相移了
/240。
据杨之峰工程师回忆是为了“过零启动”,根据个人试验,发现此种方式在耐压高端(5000V)有较小的纹波含量。
D)、实例分析:
选择一台AN9652H仪表,验证实际级数与理论级数是否一致?
实测:
AN9652H,设置2500V输出,升压器的初级输入是64.5V,PWM显示级数1430,功放电压为330V。
根据式3):
SPWM波:
9)
对应的正弦波:
Ur*Tc=H*
Ur=H*(1+a
)/210)
根据试验实际的升压器输入为Ui=64.5×1.414
=91.2
对于式10)而言,硬件滤波电路滤掉直流分量,则
91.2
=H/2*a
,由于功放电压为330V,此时H=330×2=660V,即功率板理论最大可以输出330V
则:
a=0.2763,
由于:
COMPR1=(T1PR+DsinwrtD)/2(详见7)式的分析)
其中D=T1PR*a,D值就是我们常说的级数。
则:
D=5000*0.2763=1381。
即理论计算级数为1381,接近于实际PWM级数1430。
5、硬件电路的实现
A)、双极性脉宽调制
为了得到SPWM波形,利用正弦波(或称调制波)与一个较高频率的等腰三角形(或称载波)相比较以产生开关的通断控制型号。
规则是当正弦信号幅值大于三角波幅值时,比较器输出+Ud/2,反之输出-Ud/2。
于是得到的只有正、负两种电平的PWM信号,这称为双极性脉宽调制。
注意这种方式是硬件方式产生SPWM波,当载波频率较大时,硬件产生的脉宽(即正弦波与三角波交点)与上面通过微处理器产生的脉宽大小是一样的(软件取的是中间点与三角波的交点,第一交点比硬件早,而第二个交点比硬件晚)。
硬件电路原理:
在PWM1在正弦波的正半周时(即PWM1脉宽比PWM2大时),给MOS管V1和V4以导通信号,给V2和V3以关断信号,输出电压Uo=Ud。
在PWM1在正弦波的负半周时(即PWM1脉宽比PWM2小时),给MOS管V1和V4以关断信号,给V2和V3以导通信号,输出电压Uo=-Ud。
V1和V4,V2和V3不能同时导通,因此SPWM波必须是一对互补信号。
实际负载的简单理解,纯阻负载R,波形与PWM波形一致,再经电感滤波,生成正弦波。
复杂解释:
在感性负载(R+L)的情况下,若V1和V4处于导通状态时,给V1和V4以关断信号,而给V2和V3以导通信号后,则V1和V4立即关断,因感性负载电流不能突变,V2和V3并不能立即导通,二极管VD2和VD3导通续流(张建国认为两者导通,而且电流是经过V2和V3续流;而续流二极管的作用是死区起续流作用)。
当感性负载电流较大时,直到下一次V1和V4重新导通前,负载电流方向时钟未变,VD2和VD3持续导通,而V2和V3始终未导通。
当负载电流较小时,在负载电流下降到0,VD2和VD3续流,之后,负载电流反向。
不论VD2和VD3导通,还是V2和V3导通,负载电压都是-Ud。
从V2和V3导通向V1和V4导通切换时,VD1和VD4的续流情况与以上情况类似。
B)、功率的说明:
300V50mA的级数与500V30mA的级数相同。