-
SVPWM
算法设计
进入中断
ISR
关中断
IntDisable
PID
调节
Vd
,
Vq
逆
< br>PARK
变换
InversePark
< br>V
α
,
V
β
计算扇区
SectorCalc
ulator
SVPWM
程序
Svpw
m
计算作用时间
TimeCalculator
更新比较值
CompUpdate
开中断
IntEnable
退出中断
图
1 SVPWM
在中断服务程序中的位置
一
算法原理:
1
,逆
PARK
变换(
Inverse
Park()
)
,旋转坐标系到静止坐标系的变换
由于矢量控制算法是在旋转坐标系
d-q
坐标系中完成的,当给定量(
Vd, <
/p>
Vq
)
计算出来后
,
需要转换成静止坐标系,最终转化成对定子交流量的控制。逆
PARK
变换公式如下:
?
V
?
?
?
cos
?
?
V
?
?
?
?
?
?
?
sin
?
?
sin
?
?
?
V
d
?
?
V
?
(
θ
cos
?
?
?
?
q
?
为电角度,
d
轴与
α
轴的夹角
)
2
,
SVPWM
算法(
p>
Svpwm()
)
1)
计算扇区
N
从电压空间矢量图可以看
出,当
Vref
在
0 - 60
度时,位于
IV
扇区;在
60
–
120
度时,位于
VI
扇区;在
12
0
–
180
度时,位于
II
扇区;在
180
–
240
度
时,
位于
III
扇区;
在
240-300
度时,
位于
I
扇区;
在
3
00
–
360
1
度时,位于
V
扇区。
V
a
?
V
?
令:
V
b
?
1
/
2
(
3
V
?
?
p>
V
?
)
(
逆
CLARK
变换
2/
3)
V
c
?
1
/
2
(
?<
/p>
3
V
?
?
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)
<
/p>
计算矢量作用时间
t
start
,
t
end
与
t
Z
图
2
电压空间矢量图
对一个给定的矢量<
/p>
V
ref,
可以用相邻的两个非零矢量与
两个零矢量
(
V
0,
< br>V
7)
根据平均值等效的原则得到。
当
V
ref
在
IV
扇区时,
计算公式如
下:
p>
V
ref
?
p>
T
?
V
4
?
t
4
?
V
6
?
t
< br>6
?
V
Z
?
t
Z
T
?
t
4
?
t
p>
6
?
t
Z
从而得到,
t
6
?
(
3
T
p>
/
V
DC
)
?
V
?
t
Z
?
T
?
t
4
?
t
6
类似的,当
V
ref
在
VI
区时,
t
4
?
p>
(
3
T
/
V
DC
)
?
1
/
2
(
3
V
a
?
V
?
)
t
6
?
(
3<
/p>
T
/
V
DC
p>
)
?
1
/
2
(
3
V
?
?
V
?
< br>)
t
2
?
(
3
T
/
V
DC
)<
/p>
?
1
/
2
(
?
3
V
?
?
V
?
)
t
Z
?
T
?
t
2
?
t
6
当<
/p>
V
ref
在
II
区时,
t
2
?
(
3
T
p>
/
V
DC
)
?
V
?
t
3
?
(
p>
3
T
/
V
DC
)
?
1
/
2
(
?
3
V
?
?
V
?
)
t
Z
?
T
?<
/p>
t
2
?
t
3
总结规律如下表
(
令
K
?
3
T<
/p>
/
V
DC
)
扇区
IV
VI
II
III
I
V
t
statrt
/K
Vb
t
end
/K
Va
-Vc
-Vb
Va
Vc
-Vb
-Va
Vc
Vb
-Va
-Vc
<
/p>
以上是在电压矢量逆时针旋转时的规律,
t
start
、
t
end
是顺着电压矢量
旋转方向前后两相邻矢量的作用时间。顺时针旋转时只需要把
t
start
2
与
t<
/p>
end
调换即可。
根据尽可能少的切换功率开关的原则,
各个扇区的
ePWM
波形如图
2
规划,这样每次只须切换一
个桥臂的功率开关。例如在
IV
区时,矢量
切换顺序是:
V0(t
z
/4)
-> V4(t
start
/2) ->
V6(t
end
/2)
->V7(t
z
/2) ->
V6(t
end
/2)->
V4(t
start
/2)-> V0(t
z
/4)
。
3)
计算并更新比较值
EPWM
软件模块初始化(设置成同步、互补、
Up-Down
< br>模式)完成后需要实
时更新比较值
, . ,
和
。在第四区时,比较值的计算方法:
1
2
3
Udc
A
B
C
图
3
EPWM
硬件原理示意
Epwm
1
Re
?
TBPRD
?
Epwm
2
Re
?
TBPRD
?
p>
t
z
2
T
t
z
?
2
t
start
2
T
t
z
?
2
t
start
?
2
t
end
Epwm
3
Re
?
TBPRD
?
2<
/p>
T
3
二
函数描述
1.
主程序初始化中
EPWM
模块初始化()
//EPWM Module 1 Initial
=EPWMPRD>>1;
//
周期设定,
< br>EPWM
周期
=
2*TBPRD
=0;
//
相位寄存器值
=0
E=TB_COUNT_UPDOWN;
//
对称模式
=TB_DISABLE;
//
主模块设定
=TB_SHADOW;
//
周期寄存器使能映像载入
EL=TB_CTR_ZERO;
//
TB
CTR=0
时输出同步信号
ODE=CC_SHADOW;
//A
比较器设置为映像模式
ODE =CC_SHADOW;
//B
比较器设置为映像模式
ODE = CC_CTR_ZERO;
// A
在
CTR=0
时载入映像值
ODE = CC_CTR_ZERO;
// B
在
CTR=0
时加载映像值
=
AQ_SET;
//
EPWM1A
动作设置
=
AQ_CLEAR;
_MODE = DB_FULL_ENABLE;
//
使能死区模块
= DB_ACTV_HIC;
//
设置高电平有效(
A
)互补模式
//B
为低电平有效
= DBPRD;
//
下降沿死区时间计数器设置
= DBPRD;
//
上升沿死区时间计数器设置
//
……
2.
逆
PA
RK
变换(
InversePark(V
d
, V
q
,
Theta)
)
功能:
将指令电压矢量指令从旋转坐标系
(
d-q
)
转换到固定坐标系
(
α
-
β
)
。<
/p>
输入量:
V
d
, V
q
, Theta(d,
q
轴电压分量,扫描到的电角度
)
输出量:
Val, V
be
(
α
,
β
轴电压分量
)
算法描述
: define
V
d
,
V
q
, Theta;
Val=cos(Theta)*Vd-sin(Theta)*Vq;
Vbe=sin(Theta)*Vd+cos(Theta)*Vq;
return(Val,Vbe);
3.
< br>SVPWM
程序(
Svpwm(Val
< br>,
Vbe)
)
功能:使
EPWM
模块发出
P
WM
波,进而控制功率开关产生
SVPWM
波形。
输入量:
V
al
,V
be
(
α
,
β
轴电压分量
)
输出量:
(EP
WM
比较寄存器的值
)
算法描述:
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); //
< br>逆
CLARK
变换
2/3
p>
SectorCalculator()
;
//
计算扇区
TimeCalculator()
;
//
计算矢量所需的作用时间
CompUpdate()
;
//
更新比较寄存器中比较值
end;
4
< br>1)
计算扇区
(SectorCalculator()
)
功能:计算
Vref
所在的扇区<
/p>
n
。
输入量:
V
al
,V
b
e
(
α
,
β<
/p>
轴电压分量
)
输出量:
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;
p>
2)
计算作用时间
(TimeCalcul
ator())
功能:计算与
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
输出量:
< br>Tact1
,
Tact2
,
p>
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
-
-
-
-
-
-
-
-
-
上一篇:资料:向量自回归模型__详解
下一篇:转笔 PSH新手入门 全讲解招式难度系数表