SVPWM算法设计_ 下载本文

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