引言:本文章介绍了FOC流程图上模块的公式、作用、种类,及最后如何实现
1.FOC总的流程图
接下来我们从读取到三相电流逐步理清上面这个FOC框图,以及讲解软件和硬件是如何配合的。开始之前,先简单说一下FOC的输入数据是怎么获得的。
三相电流,通过采样三相桥下桥臂的采样电阻的电压,再用欧姆定律计算电流获得。
转子位置,编码器读取后,再转换为电角度。
2.Clark变化
首先是Clark变化,将三相电流,转变为两相,也就是FOC的轴和
轴,减少后续计算量。
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个状态
矢量符号 | 相电压 | 矢量大小 | |||||
---|---|---|---|---|---|---|---|
U4 | 1 | 0 | 0 | ||||
U6 | 1 | 1 | 0 | ||||
U2 | 0 | 1 | 0 | ||||
U3 | 0 | 1 | 1 | ||||
U1 | 0 | 0 | 1 | ||||
U5 | 1 | 0 | 1 | ||||
U0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
U7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
欧拉公式: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
在三角波的上尖尖处,若三个下通道不能同时出现高电平,导致三相桥的下桥臂不能同时导通,三相电流采样会失效,这时需要用电流重构,将失效电流重构为有效电流
每天上完班已经是精疲力尽了,写作的时候难免有错
感谢指正,感谢关注