SVPWM的实现过程(附C代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SVPWM 算法的实现过程
1、算法的输入与输出
输入u s α、u s β 输出:三个比较寄存器的值CompA 、CompB 、CompC
根据给定的二相静止坐标系中两个电压分量u s α、u s β,根据电压矢量所在的扇区选择相邻的两个的电压矢量,并计算相邻两个电压矢量的作用时间,按照7段式SVPWM 对CompA 、CompB 、CompC 进行赋值,算法的流程如下:
2、扇区计算
空间矢量调制的第一步是判断由u s α、u s β所决定的空间电压矢(U ref )量所处的扇区。

假定合成的电压矢量落在第 I 扇区,可知其等价条件如下:0<arctan(u s β/u s α)<60 º 以上等价条件再结合矢量图几何关系分析,可以判断出合成电压矢量。

落在第N 扇区的充分必要条件,得出下表1-1:
ref s β 3u s α-u s β 、− 3u s α-u s β 三式决定,因此令:
1232222
U U U U U U ββαβα⎧
=⎪⎪

=-⎨⎪
⎪=-
-⎪⎩
再定义,若U 1>0 ,则 A=1,否则 A=0; 若U 2>0 ,则 B=1,否则 B=0;若U 3>0 ,则 C=1,
否则 C=0。

可以看出 A ,B ,C 之间共有八种组合,但由判断扇区的公式可知 A ,B ,C 不会同时为 1 或同时为 0,所以实际的组合是六种,A ,B ,C 组合取不同的值对 应着不同的扇区,并且是一一对应的,因此完全可以由 A ,B ,C 的组合判断所在的扇区。

为区别六种状态,令 X=4*C+2*B+A ,则可以通过下表计算参考电压 矢量 U ref 所在的扇区。

表 1-2 X 值与扇区对应关系
采用上述方法,只需经过简单的加减及逻辑运算即可确定所在的扇区,对于提高系统的响应速度和进行仿真都是很有意义的。

3、扇区相邻电压矢量的作用时间计算
当电压矢量位于第一扇区时,欲用 U 4、U 6、U 0 及 U 7 合成,用平均值等效可得:
4466
ref S U T U T U T *=*+*
因为 |U 4|=|U 6|=2U dc /3 ,所以可以得到各矢量的状态保持时间为: T 6=
3T s U dc u s β
T 4=T
s U dc
(3
2u s α−
3
2u s β
)
当电压矢量位于其他扇区时同理可算出相邻电压的作用时间: 第二扇区:T 6=T s U dc
(3
2u s α+
3
2u s β
) T 2=T s U dc
(−3
2u s α+
3
2u s β) 第三扇区:T 2= 3T s
U
dc
u s β
T 3=−T s U dc
(3
2u s α+
3
2u s β) 第四扇区:T 1=−
3T s U dc
u s β T 3=T s U dc
(−3
2u s α+
3
2u s β
)
第五扇区:T1=−T s
U dc (3
2
u sα+3
2
u sβ)T5=T s
U dc
(3
2
u sα−3
2
u sβ)
第六扇区:T5=−3T s
U dc u sβT4=T s
U dc
(3
2
u sα+3
2
u sβ)
令x=3T s
U dc u sβ,y=T s
U dc
(3
2
u sα+3
2
u sβ),z=T s
U dc
(3
2
u sα−3
2
u sβ),则在每个扇区相邻的两电
压矢量的作用时间如下表所示:
4、计算比较寄存器的值
通过上面的计算,已经的到了电压矢量所在的扇区以及相邻电压矢量的作用时间,接下来的问题是如何根据上面的结果来计算寄存器的值,使得DSP的ePWM模块发出正确的脉冲信号控制三相电桥。

空间矢量的序列组织方式有多种,按照空间矢量的对称性分类,可分为两相开关换流与三相开关换流。

下面采用7段式SVPWM计算寄存器的值。

当参考电压矢量U ref位于第一扇区时,U ref由U4、U6、U0及U7合成,这四个基本矢量的作用时间与开关状态关系如下图:
其中T0=T7=(Ts-T4-T6)/2,如果(T4+T6)>Ts(Ts 为载波周期),则需等比例调整T4与T6,
'
44666460740s s T T T T T T T T T T T T ⎧=⎪+⎪
⎪'
=
⎨+⎪
⎪==⎪⎩
根据上图可得到三个比较寄存器的值 CompA=T
02f ,CompB= T
02+
T 4
2 f ,CompC= T
2
+T 42
+
T 62
f ,其中f 为比较器脉冲时钟频率,
同理可得到在其它几个扇区时,每个比较寄存器的值: 第二扇区:CompA=(T
02+T 2
2
)f ,CompB= T 02 f ,CompC= T
02+T 22+
T 62
f 第三扇区:CompA=
T 02+
T 2
2
+T 3
2 f ,CompB= T
02 f ,CompC= T
02
+T 22+
T 32
f
第四扇区:CompA= T
02+T 12+
T 3
2 f ,CompB= T
2
+T 1
2 f ,CompC= T
2 f 第五扇区:CompA= T
02+
T 1
2 f ,CompB= T
2
+T 12+
T 5
2 f ,CompC= T
02
f 第六扇区:CompA= T 02 f ,CompB= T
02+
T 42
+
T 5
2
f ,CompC= T
02+T 42
f
根据表1-3,用Tx,Ty 表示相邻两个矢量的作用时间,则三个比较寄存器的值可以写成统一的
形式,如下表所示:
表1-4
5、C语言编程实现
程序代码如下:
void svpwm(float *ptr)
{
int A,B,C,N;
double X,Y,Z,Tx,Ty,T0,Tl,Tm,Th;
if (usbeta>0) A = 1;
else A=0;
if ((1.732051*usalfa-usbeta)>0) B = 1;
else B=0;
if ((-1.732051*usalfa-usbeta)>0) C = 1;
else C=0;
N=A+2*B+4*C;//计算扇区
X=1.732051*usbeta*Ts/udc;
Y=(0.8660*usbeta+1.5*usalfa)*Ts/udc;
Z=(-0.8660*usbeta+1.5*usalfa)*Ts/udc;
switch (N)//各个扇区的作用时间
{
case 1: Tx= Y;Ty=-Z;break;
case 2: Tx=-X;Ty= Y;break;
case 3: Tx= Z;Ty= X;break;
case 4: Tx=-Z;Ty=-X;break;
case 5: Tx= X;Ty=-Y;break;
default: Tx=-Y;Ty= Z;
}
if ((Tx+Ty)>Ts)
{
Tx=Tx*Ts/(Tx+Ty);
Ty=Ty*Ts/(Tx+Ty);
}
T0=(Ts-(Tx+Ty))/4;
Tl=(Ts+Tx-Ty)/4;/*Tl=T0/4+Tx/2*/
Tm=(Ts-Tx+Ty)/4;/*Tm=T0/4+Ty/2*/
Th=(Ts+Tx+Ty)/4;/*Th=T0/4+Ty/2+Ty/2*/
switch (N)//比较寄存器赋值
{
case 1 :*ptr=Tm;*(ptr+1)=T0;*(ptr+2)=Th;break;
case 2 :*ptr=T0;*(ptr+1)=Th;*(ptr+2)=Tm;break;
case 3 :*ptr=T0;*(ptr+1)=Tl;*(ptr+2)=Th;break;
case 4 :*ptr=Th;*(ptr+1)=Tm;*(ptr+2)=T0;break;
case 5 :*ptr=Th;*(ptr+1)=T0;*(ptr+2)=Tl;break;
default :*ptr=Tl;*(ptr+1)=Th;*(ptr+2)=T0;
}
}
程序流程图:。

相关文档
最新文档