SVPWM算法设计
进入中断ISR关中断IntDisablePID调节Vd,Vq 逆PARK变换InverseParkVα,Vβ 计算扇区SectorCalculatorSVPWM程序Svpwm计算作用时间TimeCalculator更新比较值CompUpdate开中断IntEnable退出中断图1 SVPWM在中断服务程序中的位置
一 算法原理:
1,逆PARK变换(InversePark()),旋转坐标系到静止坐标系的变换
由于矢量控制算法是在旋转坐标系d-q坐标系中完成的,当给定量(Vd, Vq)计算出来后,需要转换成静止坐标系,最终转化成对定子交流量的控制。逆PARK变换公式如下:
?V???cos? ?V???????sin??sin???Vd??V?(θ
cos????q?为电角度,d轴与α轴的夹角)
2,SVPWM算法(Svpwm())
1) 计算扇区N
从电压空间矢量图可以看出,当Vref在0 - 60度时,位于IV扇区;在60 – 120度时,位于VI扇区;在120 – 180度时,位于II扇区;在180 – 240度时,位于III扇区;在240-300度时,位于I扇区;在300 – 360
1
度时,位于V扇区。
Va?V?令:Vb?1/2(3V??V?)(逆CLARK变换2/3)
Vc?1/2(?3V??V?)这三个电压值的正负决定了电压矢量所属的扇
011 区。总结规律,扇区的计算可表示为:
if(Va>0) a=0; else a=1; if(Vb>0) b=0; else b=1; if(Vc>0) c=0; else c=1; N=a+2*b+4*c;
2) 计算矢量作用时间tstart,tend与tZ
图2 电压空间矢量图
对一个给定的矢量Vref,可以用相邻的两个非零矢量与两个零矢量(V0,V7)根据平均值等效的原则得到。当Vref在IV扇区时,计算公式如下:
Vref?T?V4?t4?V6?t6?VZ?tZT?t4?t6?tZ从而得到, t6?(3T/VDC)?V?tZ?T?t4?t6类似的,当Vref在VI区时,
t4?(3T/VDC)?1/2(3Va?V?)
t6?(3T/VDC)?1/2(3V??V?) t2?(3T/VDC)?1/2(?3V??V?)
tZ?T?t2?t6当Vref在II区时,
t2?(3T/VDC)?V? t3?(3T/VDC)?1/2(?3V??V?)
tZ?T?t2?t3总结规律如下表(令K?3T/VDC)
扇区 IV VI II III I V tstatrt/K Vb tend/K Va -Vc -Vb Va Vc -Vb -Va Vc Vb -Va -Vc 以上是在电压矢量逆时针旋转时的规律,tstart、tend是顺着电压矢量
旋转方向前后两相邻矢量的作用时间。顺时针旋转时只需要把tstart
2
与tend调换即可。
根据尽可能少的切换功率开关的原则,各个扇区的ePWM波形如图2规划,这样每次只须切换一个桥臂的功率开关。例如在IV区时,矢量切换顺序是:V0(tz/4) -> V4(tstart/2) -> V6(tend/2) ->V7(tz/2) -> V6(tend/2)-> V4(tstart/2)-> V0(tz/4)。
3) 计算并更新比较值
EPWM软件模块初始化(设置成同步、互补、Up-Down模式)完成后需要实时更新比较值Epwm1Regs.CMPA.half.CMPA, Epwm2Regs.CMPA. half.CMPA, 和Epwm3Regs.CMPA.half.CMPA。在第四区时,比较值的计算方法:
1 2 3
Udc
A
B
C
图3 EPWM硬件原理示意
Epwm1Regs.CMPA.half.CMPA?TBPRD?Epwm2Regs.CMPA.half.CMPA?TBPRD?tz2Ttz?2tstart2T tz?2tstart?2tendEpwm3Regs.CMPA.half.CMPA?TBPRD?2T
3
二 函数描述
1. 主程序初始化中EPWM模块初始化()
//EPWM Module 1 Initial
EPwm1Regs.TBPRD =EPWMPRD>>1; // 周期设定,EPWM周期 = 2*TBPRD EPwm1Regs.TBPHS.half.TBPHS=0; // 相位寄存器值=0 EPwm1Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN; // 对称模式 EPwm1Regs.TBCTL.bit.PHSEN=TB_DISABLE; // 主模块设定
EPwm1Regs.TBCTL.bit.PRDLD=TB_SHADOW; //周期寄存器使能映像载入 EPwm1Regs.TBCTL.bit.SYNCOSEL=TB_CTR_ZERO; //TBCTR=0时输出同步信号 EPwm1Regs.CMPCTL.bit.SHDWAMODE=CC_SHADOW; //A比较器设置为映像模式 EPwm1Regs.CMPCTL.bit.SHDWBMODE =CC_SHADOW; //B比较器设置为映像模式 EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // A在CTR=0时载入映像值EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B在CTR=0时加载映像值 EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // EPWM1A动作设置 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //使能死区模块
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //设置高电平有效(A)互补模式
//B为低电平有效
EPwm1Regs.DBFED = DBPRD; // 下降沿死区时间计数器设置EPwm1Regs.DBRED = DBPRD; // 上升沿死区时间计数器设置 //……
2. 逆PARK变换(InversePark(Vd, Vq, Theta))
功能:将指令电压矢量指令从旋转坐标系(d-q)转换到固定坐标系(α-β)。 输入量:Vd, Vq, Theta(d, q轴电压分量,扫描到的电角度) 输出量:Val, Vbe(α,β轴电压分量) 算法描述: define Vd, Vq, Theta;
Val=cos(Theta)*Vd-sin(Theta)*Vq; Vbe=sin(Theta)*Vd+cos(Theta)*Vq; return(Val,Vbe); 3. SVPWM程序(Svpwm(Val,Vbe))
功能:使EPWM模块发出PWM波,进而控制功率开关产生SVPWM波形。 输入量:Val,Vbe(α,β轴电压分量)
输出量:EpwmXRegs.CMPA.half.CMPA(EPWM比较寄存器的值) 算法描述:
define Val,Vbe,Va,Vb,Vc,n; // Va,Vb,Vc可设为全局变量 Va=Vbe;
Vb=0.5*(1.732*Val-Vbe);
Vc=0.5*((-1.732)*Val-Vbe); //逆CLARK变换2/3 SectorCalculator(); //计算扇区
TimeCalculator(); //计算矢量所需的作用时间
CompUpdate(); //更新比较寄存器中比较值 end;
4
1)计算扇区(SectorCalculator()) 功能:计算Vref所在的扇区n。
输入量:Val,Vbe(α,β轴电压分量) 输出量:n(所在扇区序数) 算法描述:
if(Va>0) a=0; else a=1; if(Vb>0) b=0; else b=1; if(Vc>0) c=0; else c=1; n=a+2*b+4*c; return n;
2)计算作用时间(TimeCalculator())
功能:计算与Vref相邻两矢量各自所需要的作用时间。
输入量:Va, Vb, Vc, Vdc, n, TBPRD; (TBPRD为TB同步时钟周期) 输出量:Tstart, Tend, Tz; (相邻两矢量作用时间,零矢量作用时间) 算法描述:
define K=1.732*TBPRD/Vdc; switch (n)
{ n=4: Tstart=K*Vb; Tend=K*Va;
n=6: Tstart= (-1)*K*Vc; Tend= (-1)*K*Vb; n=2: Tstart=K*Va; Tend=K*Vc;
n=3: Tstart= (-1)*K*Vb; Tend= (-1)*K*Va; n=1: Tstart=K*Vc; Tend=K*Vb;
n=5: Tstart= (-1)*K*Va; Tend= (-1)*K*Vc; }
Tz=TBPRD-Tstart-Tend; 3)更新比较值(CompUpdate())
功能:更新比较寄存器中的比较值。 输入量:Tstart, Tend, Tz,n
输出量:Tact1,Tact2,Tact3(3个动作时间点,分别对应3个EPWM比较
寄存器的值)
算法描述: switch (n) {
n=4: Tact1=Tz/4;
Tact2=Tz/4+Tstart/2;
Tact3=Tz/4+Tstart/2+Tend/2; n=6: Tact1= Tz/4+Tend/2; Tact2= Tz/4;
Tact3= Tz/4+Tstart/2+Tend/2; n=2: Tact1= Tz/4+Tstart/2+Tend/2; Tact2= Tz/4;
Tact3= Tz/4+Tstart/2;
n=3: Tact1= Tz/4+Tstart/2+Tend/2; Tact2= Tz/4+Tend/2;
5
Tact3= Tz/4;
n=1: Tact1= Tz/4+Tstart/2;
Tact2= Tz/4+Tstart/2+Tend/2; Tact3= Tz/4; n=5: Tact1= Tz/4;
Tact2= Tz/4+Tstart/2+Tend/2; Tact3= Tz/4+Tend/2; }
三 变量表:
上级给定量:Vref->d, Vref->q, Vref->theta;//Vd, Vq 定,theta变,
构造恒幅空间矢量;
输出变量:Comp1A,Comp2A,Comp3A;
所用到的变量: Vref->d, Vref->q, Vref->theta; g_Vd, g_Vq, g_Theta; Valfabeta->alfa, Valfabeta->beta; Sector, Vdc, Tact1, Tact2, Tact3.
四 工程文件清单:
svpwm.h:svpwm所需要的变量,结构体定义和函数声明
svpwm.c:全局变量定义及初始化,系统初始化(包括EPWM初始化),逆
PARK变换函数,计算svpwm作用时间函数,EPWM中断服务程序,虚拟给定接口函数,死循环处理。
五 附图:
1,基于以上配置产生的波形图; 2,实际观测波形图。
6
110矢量作用时间100T6/2000T4/2Tz/4111Tz/2110100100110111110100000TZ_INT 配置000(TBCTR=0)加载PRD,CMP阴影值EPWMX INTTBCTR=PRD(更新比较值)CADCAUTBCLK1REDEPWM1FEDCAUCADTBCLK2EPWM2CADCAUTBCLK3EPWM3同步信号矢量位于第四扇区时的波形图
7
II扇区
II —>III
III扇区
8
9
10