foc控制算法及原理详解

控制/MCU

1814人已加入

描述

  FOC(field-oriented control)为磁场导向控制,又称为矢量控制(vector control),是一种利用变频器(VFD)控制三相交流马达的技术,利用调整变频器的输出频率、输出电压的大小及角度,来控制马达的输出。其特性是可以个别控制马达的的磁场及转矩,类似他激式直流马达的特性。由于处理时会将三相输出电流及电压以矢量来表示,因此称为矢量控制。

  达姆施塔特工业大学的K. Hasse及西门子公司的F. Blaschke分别在1968年及1970年代初期提出矢量控制的概念。Hasse提出的是间接矢量控制,Blaschke提出的是直接矢量控制。布伦瑞克工业大学的维尔纳·莱昂哈德(Leonhard further)进一步开发磁场导向控制的控术,因此交流马达驱动器开始有机会取代直流马达驱动器。

  当时微处理器尚未商品化,但已经出现泛用的交流马达驱动器。当时相较于直流马达驱动器,交流马达驱动器的成本高、架构复杂,而且不易维护。而当时的矢量控制需要许多传感器及放大器等元件,因此无法将矢量控制应用在交流马达驱动器中。

  派克变换一直被用在同步马达及感应马达的分析及研究,是了解磁场导向控制最需要知道的概念。这个概念是罗伯特·派克(Robert Park)在1929年的论文中提出的。派克变换被列为二十世纪发表电力电子相关论文中,第二重要的论文。派克变换的重要性是可以将马达有关的微分方程,由变系数微分方程变成“时不变”系数的微分方程。

  矢量控制可以适用在交流感应马达及直流无刷马达,早期开发的目的为了高性能的马达应用,可以在整个频率范围内运转、马达零速时可以输出额定转矩、且可以快速的加减速。不过相较于直流马达,矢量控制可配合交流马达使用,马达体积小,成本及能耗都较低,因此开始受到产业界的关注。矢量控制除了用在高性能的马达应用场合外,也已用在一些家电中

  VFD-VE系列的向量控制核心技术是FOC((Field Oriented Control),也就是业界通称的磁场导向控制或磁束向量控制。愈来愈多的马达驱动器採用磁场导向控制,因为它可让马达在任何时刻都在最佳的扭力之下工作,所以可获得更高的效率,它具有更好的动态反应,能够达到非常精準的可变速度之控制,还有更低的扭力涟波(ripple),在马达启动、运转、和停止时可提供一致和稳定的马达转动。

  矢量控制的由来

  先简单说明一下什么是矢量控制。原理是通电导线在磁场中满足左手定则,会受到一个力的作用。PSMS电机的转子为永磁钢,定子为几

  FOC的基本控制塬理是在叁相定子侧流动的电流可以合成一个等效的合成电流向量,它的旋转角速度就是输入电源的角频率ω。透过座标转换技巧,可以将此电流向量映射到两轴旋转座标中。如果此两轴座标也同样以角速度ω旋转,则在此座标中电流向量可视为是静止的;换言之,电流向量在此座标中是直流量,既然是直流量,这样就可让马达转矩与电流成正比例关係,但还需要满足一些条件,包括马达的转子磁通必须与图中的d轴重合,而且电流向量的d轴分量必须维持为定值。满足以上的条件后,交流马达的转矩将与定子电流成正比,所以控制定子电流的向量值就可以像控制直流马达般的简易且精準。

  工作原理图

  FOC

  1、采集到两相电流

  2、经过clarke变换后得到两轴正交电流量,

  3、经过旋转变换后得到正交的电流量 Id、Iq,其中Iq与转矩有关,Id与磁通有关。在实际控制中,常将Id置为0。得到的这两个量不是时变的,因此可以单独的对这两个量进行控制,类似直流量控制一样。而不需要知道具体要给电机三相具体的电压为多少。

  4、将第3步中得到的Iq与Id量分别送进PI调节器,得到对应的输出Vq和Vd;

  5、通过传感器得到电机转过的角度。

  6、进行逆park变换,得到二轴电流量。

  7、对第6步中的Va,Vb进行逆clarke变换,得到实际需要的三相电压输入给逆变电桥,驱动电机转动。

  FOC 计算公式

  1. PMSM.C 中的ADC1Interrupt()AD中断处理函数中调MeasCurr.S 中MeasCompCurr:

  读入ACD1,ACD2(带符号小数)

  校正:ADC1*CarrADC1-offset=qIa ADC2*CarrADC2-offset=qIb

  2. PMSM.C 中的ADC1Interrupt()中调CalculateParkAngle()对相角θ处理

  先调用smcpos.c 滑模观测器中SMC_Position_Estimation(),之中

  ①又调用smc.s 中的CalcEstI 计算估算电流I :

  EstIalpha=Gsmopos*(Valpha-Ealpha-Zalpha)+Fsmopos*EstIalpha

  ---- Isα(n+1)=G*(Vα(n)-Eα(n)-Zα(n))+F*αIs α(n)

  EstI beta=Gsmopos*(V beta-E beta-Z beta)+Fsmopos*EstI beta

  ---- Isβ(n+1)=G*(Vβ(n)-Eβ(n)-Zβ(n))+F*Isβ(n)

  ②调smc.s 中CalcIError 计算实测电流与估算电流的偏差:

  IalphaError = EstIalpha – Ialpha

  Ibeta Error = EstIbeta – Ibeta

  ---- ΔI α= Is α- I α ΔI β= Is β- I β

  ③调smc.s 中CalcZalpha ,CalcZbeta 计算Z α, Zβ:

  当abs(IalphaError)《 MaxSMCError时 Zalpha = (Kslide * IalphaError) / MaxSMCError

  当abs(IalphaError)≥ MaxSMCError时

  Zalpha 为正时Zalpha= Kslide 为负时Zalpha=-Kslide

  当abs(I betaError)《 MaxSMCError时

  Zbeta = (Kslide * IbetaError) / MaxSMCError

  当abs(I beta Error)≥ MaxSMCError时

  Z beta 为正时Z beta = Kslide 为负时Z beta=-Kslide

  ---- 当|ΔI α|《Δmax 时:Z α= Ks*ΔI α/Δmax

  当|ΔI α|≥Δmax 时:|Z α|= Ks

  当|ΔI β|《Δmax 时:Z β= Ks*ΔI β/Δmax

  当|ΔI β|≥Δmax 时:|Z β|= Ks

  ④调smc.s 中CalcBEM 按低通滤波器公式计算反电动势: Ealpha = Ealpha + Kslf * (Zalpha - Ealpha)

  Ebeta = Ebeta + Kslf * (Zbeta – Ebeta)

  两级滤波,后级滤波系数为KslfFinal

  ---- Eα(n)= Eα(n-1)+Ksf*(Zα(n-1)- Eα(n-1))

  E β(n)= Eβ(n-1)+Ksf* (Zβ(n-1)- Eβ(n-1))

  ⑤调atan2CORDIC.s 中反正切函数atan2CORDIC 计算相角

  Theta = atan2CORDIC(-EalphaFinal, EbetaFinal)

  ---- θ=atan(-Eα/ Eβ)

  ⑥在smcpos.c 中的SMC_Position_Estimation函数中进行速度预算

  PrevTheta = s-》Theta

  AccumThetaCnt++

  if (AccumThetaCnt == IRP_PERCALC)

  Omega = AccumTheta

  ---- 求累加角Σθ+=θ(n)-θ(n-1)

  更新θ(n-1)= θ(n) 累加次数m(θCnt)+=1

  当m = M (速度计算需要的PWM 定时次数) 时,速度预算值ω=Σθ

  此前仅算出ω(Omega),未算 V(速度Speed) ,即未找到V=Kv*ω

  Kv=60/T(测算速度时间)/磁极对数

  ⑦调smc.s 中CalcOmegaFltred 对ω进行数字滤波

  OmegaFltred=OmegaFltred+FiltOmCoef*(Omega-OmegaFltred)

  ---- ωfl (n)= ωfl (n-1)+ Kωfl *[ω(n)- ωfl (n-1)]

  Kωfl:滤波系数=2πFc/Fpwm Fpwm:脉宽调制频率

  Fc: 滤波器截止频率(电机最低转速*磁极对数/60)

  ⑧在smcpos.c 中的SMC_Position_Estimation函数中计算滤波器系数 ??

  Kslf = OMEGA0 * _PI / IRP_PERCALC;

  KslfFinal = OMEGA0 * _PI / IRP_PERCALC

  ⑨在smcpos.c 中的SMC_Position_Estimation函数中进行相位补偿计算

  ThetaOffset=OmegaFltred*(SLOPEFRACn+SLOPEINTn)+CONSTANTn

  不同的速度有不同的补偿,程序分几个频段, 式中3常数取不同值(n 不同)。

  ---- θΔ =ωfl *(Kscn+Kstn)+ Kcn

  3. PMSM.C 中的ADC1Interrupt()中调clrkepark.s 的ClarkePark 进行座标变化

  Ialpha = Ia

  Ibeta = Ia*dOneBySq3 + 2*Ib*dOneBySq3;

  Id = Ialpha*cos(Angle) + Ibeta*sin(Angle)

  Iq = -Ialpha*sin(Angle) + Ibeta*cos(Angle)

  ─ ---- Iα= Ia Iβ=(Ia+2Ib)/√3

  Id = Iα*Cosθ+Iβ*Sinθ Iq = -Iα*Sinθ+Iβ*Cosθ

  4. PMSM.C 中的ADC1Interrupt()中调DoControl()进行Id,Iq,Speed 的PI 迭代

  5. 调trig.s 中的SinCos 计算qSin θ q Cosθ值

  6. 调InvPark.s 中的InvPark 计算 qVα qVβ值

  7. 调CalcRef.s 中的CalcRefVec 由qV α qVβ计算Vr 1 Vr2 Vr3 值

  8. 调SVGEN.s 中的CalcSVGen 由Vr 1 Vr2 Vr3计算3相PWM 占空比。

  强制角ParkParm.qAngle (输出PWM 角)和滑模估算角Smc1.Theta 电机启动时只用强制角线性递增(称斜坡法) Startup_Lock += 1 达到转速后计算强制角和估算角偏差,对强制角进行修正

  计算保存Δθ:Theta_error = ParkParm.qAngle - smc1.Theta 修正量:对强制角修正:ParkParm.qAngle += Startup_Ramp

  Δθ每次±0.05°直到≤0.05°:Theta_error += _0_05DEG

  FOC(或矢量控制)算法的简要步骤

  以下总结了控制PMSM的FOC算法步骤。

  1.先测量三相定子电流ia和ib。根据ia+ib+ic=0,计算来自两个电流传感器的电流。

  2.将三相电流转换到2轴坐标系中。该转换根据测量的ia、ib和ic值得到变量iα和iβ。从定子的角度来说,iα和iβ是时变正交电流值。该步骤称为Park变换。

  3.采用控制循环上一次迭代时计算的变换角旋转2轴坐标系,使之与转子磁通对齐。该转换根据iα和iβ得到变量id和iq。现在,将正交电流id和iq变换到旋转坐标系中。在稳态条件下,id和iq将保持恒定。该步骤称为Clarke变换。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分