【FOC篇】Clark变化、Park变化、SVPWM

引言:本文章介绍了FOC流程图上模块的公式、作用、种类,及最后如何实现

1.FOC总的流程图

        接下来我们从读取到三相电流逐步理清上面这个FOC框图,以及讲解软件和硬件是如何配合的。开始之前,先简单说一下FOC的输入数据是怎么获得的。

        三相电流,通过采样三相桥下桥臂的采样电阻的电压,再用欧姆定律计算电流获得。

        转子位置,编码器读取后,再转换为电角度。

2.Clark变化

        首先是Clark变化,将三相电流,转变为两相,也就是FOC的\ae\alpha轴和\beta轴,减少后续计算量。

        ialpha = ia*2/3-(ib+ic)/3;

        ibeta = (ib-ic)*sqrt(3)/3;

3. Park变化+电流PID+Park反变化

3.1 Park变化

(1)公式

        id = ialpha*cos(theta)+ibeta*sin(theta);

        iq = -ialpha*sin(theta)+ibeta*cos(theta);

 (2)为什么要Park变化呢?

        首先Park变化能将两个非线性值变化成线性值。        

        因为PID规划器对线性的值控制效果好,而对非线性的值控制差,所以不能让PID控制Clark变化后的两个正弦波吧

(3)效果

        

3.2电流PID

        因为d轴并不产生力矩,只是让电机发热,所以他的期望值是0

3.3Park反变化

(1)公式

        Valpha = ud*cos(theta) - uq*sin(theta);

        Vbeta = ud*sin(theta) + uq*cos(theta);

(2)为什么要反park变化

        因为FOC控制的三相电流大小,所以咱们还得逐步变回去

(3)效果

4.SVPWM

4.1原理及作用

        SVPWM即空间电压矢量,控制逆变器的三相开关,以获得准圆形旋转磁场,保证力矩平稳

4.2 三相全桥的8种开关状态

其共用8个状态,六个导通,两个电感续流

总结一下这8个状态

矢量符号S_{a}S_{b}S_{c}相电压矢量大小
U_{A-N}U_{B-N}U_{C-N}U_{x}
U4100\frac{2}{3}U_{dc}-\frac{1}{3}U_{dc}-\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}
U6110\frac{1}{3}U_{dc}\frac{1}{3}U_{dc}-\frac{2}{3}U_{dc}\frac{2}{3}U_{dc}\cdot e^{j\frac{\pi }{3}}
U2010-\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}-\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}\cdot e^{j\frac{2\pi }{3}}
U3011-\frac{2}{3}U_{dc}\frac{1}{3}U_{dc}\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}\cdot e^{j\pi }
U1001-\frac{1}{3}U_{dc}-\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}\frac{2}{3}U_{dc}\cdot e^{j\frac{4\pi }{3}}
U5101\frac{1}{3}U_{dc}-\frac{2}{3}U_{dc}\frac{1}{3}U_{dc}\frac{2}{3}U_{dc}\cdot e^{j\frac{5\pi }{3}}
U00000000
U71110000

欧拉公式:e^jt=cos(t)+jsin(t)代表方向,Udc是母线电压

4.3合成矢量空间电压 

   首先合成某一扇区的一个输出磁场电压,将两个最近的空间矢量和两个零矢量分配时间,最终合成想要的矢量空间电压     

4.4SVPWM扇区判断

4.5反Clark变化

(1)公式

        Va = Valpha;

        Vb = Valpha*(-1/2)+Vbeta*sqrt(3)/3

        Vc = Valpha*(-1/2)-Vbeta*sqrt(3)/3

(2)反Clark变化在SVPWM内

4.6 几种SVPWM类型

(1)零序谐波注入的SPWM

        这个是模型搭建的,太累了,改为代码你们自己搞搞吧,很简单。

Va = Valpha;
Vb = Valpha*(-1/2)+Vbeta*sqrt(3)/3;
Vc = Valpha*(-1/2)-Vbeta*sqrt(3)/3;
V0 = -1/2(Vmax+Vmin);(Va、Vb、Vc)
Va,Vb,Vc += (V0/Udc+0.5)/ARR;

 

(2)七段式SVPWM

function [Tcm1,Tcm2,Tcm3,sector] = SVPWM(Valpha,Vbeta,Udc,Tpwm,ARR)

%输出变量初始化
Tcm1 = single(0);
Tcm2 = single(0);
Tcm3 = single(0);
sector = single(0);


%扇区计算
%N与扇区对应的关系
%  3   1   5    4  6  2
%  I  II  III  IV  V  VI

Vref1 = Vbeta;
Vref2 = (sqrt(3)*Valpha-Vbeta)/2;
Vref3 = (-sqrt(3)*Valpha-Vbeta)/2;

if(Vref1>0)
    sector = single(1);
end

if(Vref2>0)
    sector = sector+2;
end

if(Vref3>0)
    sector = sector+4;
end


%扇区内合成矢量作用时间计算
X = sqrt(3)*Vbeta*Tpwm/Udc;
Y = Tpwm/Udc*(3/2*Valpha+sqrt(3)/2*Vbeta);
Z = Tpwm/Udc*(-3/2*Valpha+sqrt(3)/2*Vbeta);

switch(sector)
    case 1
        T1 = Z;T2 = Y;
    case 2
        T1 = Y;T2 = -X;
    case 3
        T1 = -Z;T2 = X;
    case 4
        T1 = -X;T2 = Z;
    case 5
        T1 = X;T2 = -Y;
    otherwise
        T1 = -Y;T2 = -Z;
end

%过调制处理
if(T1+T2>Tpwm)
    T1 = Tpwm*T1/(T1+T2);
    T2 = Tpwm*T2/(T1+T2);
else
    T1 = T1;
    T2 = T2;
end


%扇区内合成矢量切换点时间计算
%此处为7段式,两个零矢量000 111 111插在中间,000均分插在两端
ta = (Tpwm-(T1+T2))/4;
tb = ta+T1/2;
tc = tb+T2/2;


%输出调制信号
switch(sector)
    case 1
        Tcm1 = tb;
        Tcm2 = ta;
        Tcm3 = tc;
    case 2
        Tcm1 = ta;
        Tcm2 = tc;
        Tcm3 = tb;
    case 3
        Tcm1 = ta;
        Tcm2 = tb;
        Tcm3 = tc;
    case 4
        Tcm1 = tc;
        Tcm2 = tb;
        Tcm3 = ta;
    case 5
        Tcm1 = tc;
        Tcm2 = ta;
        Tcm3 = tb;
    case 6
        Tcm1 = tb;
        Tcm2 = tc;
        Tcm3 = ta;
end


%调制信号处理,生成输入到MCU中的调制信号
Tcm1 = 2*Tcm1/Tpwm; 
Tcm2 = 2*Tcm2/Tpwm;
Tcm3 = 2*Tcm3/Tpwm;

Tcm1 = Tcm1*ARR; 
Tcm2 = Tcm2*ARR; 
Tcm3 = Tcm3*ARR;

end

(3)五段式SVPWM

function [Tcm1,Tcm2,Tcm3,sector] = SVPWM(Valpha,Vbeta,Udc,Tpwm,ARR)

%输出变量初始化
Tcm1 = single(0);
Tcm2 = single(0);
Tcm3 = single(0);
sector = single(0);


%扇区计算
%N与扇区对应的关系
%  3   1   5    4  6  2
%  I  II  III  IV  V  VI

Vref1 = Vbeta;
Vref2 = single((sqrt(3)*Valpha-Vbeta)/2);
Vref3 = single((-sqrt(3)*Valpha-Vbeta)/2);

if(Vref1>0)
    sector = single(1);
end

if(Vref2>0)
    sector = sector+single(2);
end

if(Vref3>0)
    sector = sector+single(4);
end


%扇区内合成矢量作用时间计算
X = sqrt(3)*Vbeta*Tpwm/Udc;
Y = Tpwm/Udc*(3/2*Valpha+sqrt(3)/2*Vbeta);
Z = Tpwm/Udc*(-3/2*Valpha+sqrt(3)/2*Vbeta);

switch(sector)
    case 1
        T1 = Z;T2 = Y;
    case 2
        T1 = Y;T2 = -X;
    case 3
        T1 = -Z;T2 = X;
    case 4
        T1 = -X;T2 = Z;
    case 5
        T1 = X;T2 = -Y;
    otherwise
        T1 = -Y;T2 = -Z;
end

%过调制处理
if(T1+T2>Tpwm)
    T1 = Tpwm*T1/(T1+T2);
    T2 = Tpwm*T2/(T1+T2);
else
    T1 = T1;
    T2 = T2;
end


%扇区内合成矢量切换点时间计算
%此处为5段式,两个零矢量000 111 111插在中间,000均分插在两端
ta = single(0);
tb = ta+T1/2;
tc = tb+T2/2;


%输出调制信号
switch(sector)
    case 1
        Tcm1 = tb;
        Tcm2 = ta;
        Tcm3 = tc;
    case 2
        Tcm1 = ta;
        Tcm2 = tc;
        Tcm3 = tb;
    case 3
        Tcm1 = ta;
        Tcm2 = tb;
        Tcm3 = tc;
    case 4
        Tcm1 = tc;
        Tcm2 = tb;
        Tcm3 = ta;
    case 5
        Tcm1 = tc;
        Tcm2 = ta;
        Tcm3 = tb;
    case 6
        Tcm1 = tb;
        Tcm2 = tc;
        Tcm3 = ta;
end


%调制信号处理,生成输入到MCU中的调制信号
Tcm1 = 2*Tcm1/Tpwm; 
Tcm2 = 2*Tcm2/Tpwm;
Tcm3 = 2*Tcm3/Tpwm;

Tcm1 = Tcm1*ARR; 
Tcm2 = Tcm2*ARR; 
Tcm3 = Tcm3*ARR;

end

(4)效果

         从上到下,依次是七段式、五段式、0序注入,其中七段式效果好

4.7 SVPWM输出结果怎么反应到硬件上

        将三个数作为高级定时器三个互补通道的ccr值,与ARR作比后就是占空比,以下面模型作为仿真模型,那个三角波代表的是定时器计算器,最大值就是ARR

        结果显示(注:三角波因步长原因显示错误,正确的见第三个图)

(3)一个隐藏的bug

        在三角波的上尖尖处,若三个下通道不能同时出现高电平,导致三相桥的下桥臂不能同时导通,三相电流采样会失效,这时需要用电流重构,将失效电流重构为有效电流


每天上完班已经是精疲力尽了,写作的时候难免有错

感谢指正,感谢关注        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值