一、SVPWM的生成html
在FOC矢量控制中,Id、Iq 通过PID输出Vd、Vq。Vd、Vq通过反park变换成Vα、Vβ。再通过Vα、Vβ合成空间参考矢量Uref。那么怎么根据Vα、Vβ肯定Uref所在扇区,而后肯定所在扇区两个基础非零矢量的做用时间呢。web
1.一、传统的计算方法算法
把Uref转换为虚数形式Uref=Va+jVβ。那么其所在扇区 sector=floor(angle(Uref)/(pi/3))。那么其所在扇区的两个基础非零矢量的做用时间呢?推导下,假设已肯定在第一扇区。
在两相静止参考坐标系(α,β)中,令 Uref 和 U4 间的夹角是 θ,由正弦定理可得:
由于 U4 = 2*Udc / 3,因此能够获得各矢量的状态保持时间为
式中 m 为 SVPWM 调制系数(调制比)注意超过1就失真,m=sqrt(3)|Uref|/Udc。能够看出计算两个相邻基础向量的时间须要解三角函数,对单片机来讲计算有点费时间。原本一个核心的FOC算法要求在十几二十个微秒内执行完。那么下面介绍一种不须要解三角函数的方法。app
1.二、第二种方法ide
1.2.一、扇区的判断
由Vα、Vβ决定的空间电压矢量所处的扇区。假定合成的电压矢量落在第 I 扇区,可知其等价条件以下:
0° < arctan( Vβ/Vα ) < 60° 以上等价条件再结合矢量图几何关系分析,能够判断出合成电压矢量 Uref
落在第 I 扇区的充分必要条件为:Vα>0、Vβ>0且Vβ/Vα<sqrt(3)。同理可得:svg
若进一步分析以上的条件,有可看出参考电压矢量 Uref 所在的扇区彻底由
、
、
三式决定,所以令:
再定义,若U1 > 0 ,则 A=1,不然 A=0;若U 2 > 0 ,则 B=1,不然 B=0;若U3 > 0,则 C=1,不然 C=0。
能够看出 A,B,C 之间共有八种组合,但由判断扇区的公式可知 A,B,C不会同时为 1 或同时为 0,因此实际的组合是六种,A,B,C 组合取不一样的值对应着不一样的扇区,而且是一一对应的,所以彻底能够由 A,B,C 的组合判断所在的扇区。为区别六种状态,令 N=4C+2B+A,则能够经过下表计算参考电压矢量 Uref 所在的扇区。函数
N | 3 | 1 | 5 | 4 | 6 | 2 |
---|---|---|---|---|---|---|
扇区号 | Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ |
因此只要简单的逻辑运算就能够肯定所在扇区,对于提升系统的响应速度和进行仿真都是颇有意义的。spa
1.2.二、占空比的计算3d
以 Uref 处在第Ⅰ扇区时进行分析,根据图 2-10 有:
上面的等式是Uref在Uα、Uβ坐标系上的投影,而后是U四、U6上的投影再投影到Uα、Uβ坐标系上。
通过整理后得出:
表中两个非零矢量做用时间的比例系数为 K =
,注意Uref的幅值不能大于
防止Uref在正六边形内切圆外面失真。
同理可求得Uref在其它扇区中各矢量的做用时间,结果如表2-4所示。code
扇区 | 时间 |
---|---|
Ⅰ | |
Ⅱ | |
Ⅲ | |
Ⅳ | |
Ⅴ | |
Ⅵ |
所在扇区的非零基础矢量做用时间已肯定了,那么怎么计算各相占空比呢。
上图为在第一扇区时各相占空比。
上图为在第二扇区时各相占空比。
上式中
表示A、B,C三相的占空比,和PWM周期。若是把上式写成一个通用的式子。
其中下标x大于y。ta、tb 和 tc分别是相应的比较器的值,而不一样扇区比较器的值分配如表下所示:
扇区 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
二、SVPWM的simulink仿真
下面根据第二种方法来仿真:
2.一、simulink仿真波形图
2.二、simulink仿真程序
程序中去掉了Udc,而后也限制了过调制失真。
function [Ta,Tb,Tc] = fcn(ua,ub,Ts,Udc) %#codegen Ta=500; Tb=500; Tc=500; u1=ub; u2=sqrt(3)/2*ua-1/2*ub; u3=-sqrt(3)/2*ua-1/2*ub; % 判断所在扇区 if(u1>0) a=1; else a=0; end if(u2>0) b=1; else b=0; end if(u3>0) c=1; else c=0; end Sector = 4*c + 2*b + a; % k=sqrt(3)*Ts/Udc; %Uref的输入幅值要小于或等于Udc/sqrt(3),不然过调制合成空间矢量失真,若是要让Uref的输入的最大幅值能够和Udc相等,则用拼凑法,Uref放大了sqrt(3) %倍,因此t1t2的值就也放大了sqrt(3)倍,则k要缩小sqrt(3)倍。而为了要去掉Udc,能够把Udc改为Ua的最大幅值。例如:32767 % k=sqrt(3)/sqrt(3)*Ts/Udc; k=Ts/32767; switch Sector case 1 % 第二扇区 t1=-k*u2; t2=-k*u3; Tb = ((Ts)- t1 - t2)/4; Ta = Tb + t1/2; Tc = Ta + t2/2; case 2 % 第六扇区 t1=-k*u3; t2=-k*u1; Ta = ((Ts)- t1 - t2)/4; Tc = Ta + t1/2; Tb = Tc + t2/2; case 3 % 第一扇区 t1=k*u2; t2=k*u1; Ta = ((Ts)- t1 - t2)/4; Tb = Ta + t1/2; Tc = Tb + t2/2; case 4 % 第四扇区 t1=-k*u1; t2=-k*u2; Tc = ((Ts)- t1 - t2)/4; Tb = Tc + t1/2; Ta = Tb + t2/2; case 5 % 第三扇区 t1=k*u1; t2=k*u3; Tb = ((Ts)- t1 - t2)/4; Tc = Tb + t1/2; Ta = Tc + t2/2; case 6 % 第五扇区 t1=k*u3; t2=k*u2; Tc = ((Ts)- t1 - t2)/4; Ta = Tc + t1/2; Tb = Ta + t2/2; end Ta=2*Ta; Tb=2*Tb; Tc=2*Tc; end