最近有小伙伴问我,在输入给定速度为0的时候,为什么SVPWM总会报如下的错误?
翻译过来的意思就是控制输入的端口值7不在1和6之间, 为了抑制这个错误,你可以将设置窗口中的报错选项改成None。但是虽然是可以改设置窗口让他不报错,但是改了之后系统波形会出现跑飞的现象,这是指标不治本的,还是要从源头上对问题进行解决。电压空间矢量分布图如下图所示,在整个360°周期内存在6个扇区。
空间电压矢量的扇区仅有6个,那么出现端口值为7的现象,可推测是N的计算过程出现问题,书中对于扇区号N的计算如下图所示:
通过Ualpha和Ubeta计算出三个变量A、B、C的值,并通过 N = 4C + 2B + A 计算扇区号。当输入Ualpha和Ubeta全为0的时候,A = 0 、B = 1 、C = 1 ,因此 N = 4+2+1 = 7,从而超过扇区号的范围1-6,进而报错。仿真模型的搭建框图如下图所示,对其进行仿真后发现,确实会出现Ualpha = 0,Ubeta = 0时 N = 7的情况,由于Ualpha = 0,Ubeta = 0是变频器无任何输出的情况,从上图中空间电压矢量的分布图可看出,其实此时的电压空间矢量不属于任何扇区,他属于坐标系的原点(0,0)。因此这种特殊情况特殊处理即可,即加一个判断条件,当扇区号N = 7时,将其分配到N=1即可,因为没有电压矢量没有任何幅值,也不会对输出造成任何的影响。
加入判断条件最简单的方式就是写一个function函数,函数代码如下:
function y = fcn(u)
%#codegen
temp = u;
if temp == 7 y = 1;
elsey = temp;
end
加入后的框图如下:
然后系统就可以正常运行了。