无感FOC电机驱动
相关仿真模型地址:ChenZR0509/FOC-: 存放FOC驱动学习过程中用到的资料以及笔记
第一部分 扩展卡尔曼滤波算法
第一章 扩展卡尔曼滤波算法方程组
状态预测方程:x^n+1∣n=x^n∣n+fnx^n∣n+Bnun
协方差预测方程:Pn+1∣n=AnPn∣nAnT+Q
观测方程:zn=h(xn)
状态更新方程:x^n∣n=x^n∣n−1+Kn(zn−h(x^n∣n−1))
协方差更新方程:Pn∣n=(I−KnHn)Pn∣n−1
卡尔曼增益方程:Kn=Pn∣n−1HnT(HnPn∣n−1HnT+Rn)−1
第二章 扩展卡尔曼滤波FOC电机驱动应用
-
已知永磁同步电机在α轴和β轴下的电压平衡方程为:
{Uα=Riα+Ldtdiα−weψfsinθeUβ=Riβ+Ldtdiβ+weψfcosθe
-
以电流为状态,故而可得其状态方程为:
{dtdiα=−LRiα+L1Uα+L1weψfsinθedtdiβ=−LRiβ+L1Uβ−L1weψfcosθe
-
仅考虑匀速转动的情况可得转速和角度方程为:
{dtdwe=0dtdθe=we
-
联立可得:
⎩⎪⎪⎪⎨⎪⎪⎪⎧dtdiα=−LRiα+L1Uα+L1weψfsinθedtdiβ=−LRiβ+L1Uβ−L1weψfcosθedtdwe=0dtdθe=we
-
特取非线性状态空间方程格式为:
{x˙=f(x)+Buy=Cx+Du
-
各变量取值如下所示:
状态变量:x=⎣⎢⎢⎢⎡iαiβweθe⎦⎥⎥⎥⎤
输入变量:u=[UαUβ]
输出变量:y=⎣⎢⎢⎢⎡iαiβweθe⎦⎥⎥⎥⎤
-
测量方程不同于输出方程,我们仅需测量输出信号的前两个元素即可,因此:
观测方程:zn=h(xn)=Cx+Du=Hx
测量变量:z=[iαiβ]
-
因此可得:
fn=ΔT⎣⎢⎢⎢⎡−LRiα+L1weψfsinθe−LRiβ−L1weψfcosθe0we⎦⎥⎥⎥⎤
An=⎣⎢⎢⎢⎡1−LRΔT00001−LRΔT00L1ψfsinθeΔT−L1ψfcosθeΔT11L1weψfcosθeΔTL1weψfsinθeΔT01⎦⎥⎥⎥⎤∣∣∣∣∣∣∣∣∣xn=x^n∣n
B=⎣⎢⎢⎢⎡L10000L100⎦⎥⎥⎥⎤
Bn=BΔT=⎣⎢⎢⎢⎡L1ΔT0000L1ΔT00⎦⎥⎥⎥⎤
C=⎣⎢⎢⎢⎡1000010000100001⎦⎥⎥⎥⎤
D=⎣⎢⎢⎢⎡0000⎦⎥⎥⎥⎤
H=[10010000]
第三章 扩展卡尔曼滤波M文件编写
旨在不使用编码器等传感器以预测电机转动角度和速度等信息;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| function [Speed,Angle] = EKF(ualpha,ubeta,ialpha,ibeta,R,L,Flux,Pn) persistent Flag x Pm;
if isempty(Flag) Flag = 1; x=zeros(4,1); Pm=diag([0 0 0 0]); end
Qm=[0.001,0,0,0; 0,0.001,0,0; 0,0,0.001,0; 0,0,0,0.001];
Rm=[0.001,0; 0,0.001];
Ts=1e-6;
Am=[-R/L,0,Flux/L*sin(x(4)),Flux/L*x(3)*cos(x(4)); 0,-R/L,-Flux/L*cos(x(4)),Flux/L*x(3)*sin(x(4)); 0,0,1,0; 0,0,1,1];
Bm=[1.0/L,0; 0,1.0/L; 0,0; 0,0];
Hm=eye(2,4);
Fm=[-R/L*x(1)+Flux/L*x(3)*sin(x(4)); -R/L*x(2)-Flux/L*x(3)*cos(x(4)); 0 x(3)];
AmHat=eye(4)+Ts*Am; BmHat=Ts*Bm; FmHat=Ts*Fm;
u=[ualpha;ubeta];
z=[ialpha;ibeta];
xHat=x+FmHat+BmHat*u;
zHat=Hm*xHat;
PmHat=AmHat*Pm*AmHat'+Qm;
Km=PmHat*Hm'/(Hm*PmHat*Hm'+Rm);
x=xHat+Km*(z-zHat);
Pm=(eye(4)-Km*Hm)*PmHat;
Speed=x(3)/Pn;
Angle=rem(x(4),2*pi); end
|