FOC控制算法详解
一、基本概念:FOC(field-oriented control)为磁场导向控制,又称为矢量控制(vector control),是一种利用变频器(VFD)控制三相电机的技术,利用调整变频器的输出频率、输出电压的大小及角度,来控制电机的输出。由于处理时会将三相输出电流及电压以矢量来表示,因此称为矢量控制。二、控制原理:FOC控制的其实是电机的电磁场方向。转子的转子力矩正比于定子的磁场向量与转子磁场矢量的矢量积。由矢量的关系可知,若使电机的转矩时刻保持最大,则定子磁场向量应与转子磁场向量相互垂直。又因为磁场的大小与方向与电流的大小与方向有着直接的关系,所以在用FOC控制算法控制BLDC时的关键就是控制三相输入的电流大小与方向。而控制电流产生定子磁场与转子磁场垂直的关键在:控制稳定的三相输入电压及其电流向量,并且我们得知道转子的实时位置。输入电流的方向控制,FOC给出了空间电流矢量的概念。其实质是将三相的电流矢量结合,再分解为垂直和平行于转子磁体轴方向的两个分量即d-q结构。垂直方向的电流分量所产生磁场正交于转子的磁场,这就产生了旋转力矩。而平行于转子磁轴方向的电流分量,所产生的磁场与转子磁场一致,就不会产生任何的力矩。另外,一个好的控制算法就需要使这个平行于转子磁轴方向的电流分量尽量最小化,因为,这个电流分量只会使电机产生多余的热量,并加剧轴承的磨损。我们需要控制线圈的电流,以使垂直于转子磁轴方向的电流分量达到最大。由此而得到的电机力矩和这个电流分量的大小成比例。为了使与转子磁场同向的定子电流矢量最小化(为零)且垂直的磁场最大化,定子线圈内的弦波电流需要随着转子的转动角度实时地进行相位调整。控制稳定的三相电流输入可以建立P-I控制器,P-I控制是在不停的调制输入,一旦电机电流被转化成d-q结构,控制将变得非常简单。我们需要两路P-I控制器;一个控制平行与转子磁场的电流,一个控制垂直向电流。因为平行向电流的控制信号为零,所以这就使电机平行向的电流分量也变成零,这也就驱使电机的电流矢量全部转化为垂直向的电流。由于只有垂直向电流才能产生有效的力矩,这样电机的效率被最大化。另一路P-I控制器主要用来控制垂直向的电流,以获得与输入信号相符的需求力矩。这也就使垂直向电流按照要求被控制以获得所需的力矩。转子的实时位置的确定有两种情况:有位置传感器、无位置传感器。对于有传感器,由于电机的传感器(一般为编码器)能反馈电机转子的位置信息,因此在控制中可以不使用位置估算算法,控制起来相对无传感器简单,但是对带传感器的电机应用来说,往往对控制性能要求较高。对于无传感器,由于电机不带任何传感器,因此不能通过简单读取传感器的测量值来得到电机转子的位置信息,所以在控制中需要通过采集电机相电流,使用位置估算算法来计算转子位置。具体的FOC控制原理图:https://i-blog.csdnimg.cn/blog_migrate/541067442214c895f865c823d0e111aa.png1、采集到两相电流2、经过clarke变换后得到两轴正交电流量,3、经过旋转变换后得到正交的电流量 Id、Iq,其中Iq与转矩有关,Id与磁通有关。在实际控制中,常将Id置为0。得到的这两个量不是时变的,因此可以单独的对这两个量进行控制,类似直流量控制一样。而不需要知道具体要给电机三相具体的电压为多少。4、将第3步中得到的Iq与Id量分别送进PI调节器,得到对应的输出Vq和Vd;5、通过传感器得到电机转过的角度。6、进行逆park变换,得到二轴电流量。7、对第6步中的Va,Vb进行逆clarke变换,得到实际需要的三相电压输入给逆变电桥,驱动电机转动。三、坐标变换理论:坐标变换理论可以降低马达方程的复杂性,利用坐标变换把定子及转子变量变换到一个旋转坐标系中,该坐标系的转速为角速度ω。假设fax, fbx, fcx 为三相瞬时变量,位于相移120度的a,b,c坐标上,fqx, fdx, f0x 为其变换变量,位于正交坐标d,q上:https://i-blog.csdnimg.cn/blog_migrate/68f9da184934793a5b7db5b177b63b77.png变换方程为:https://i-blog.csdnimg.cn/blog_migrate/c05af632d40e1c6506b426f4211dfc6d.png3个变换方程用于矢量控制:Clarke: ω=0, θ(0)=0 -> θ=0;Park: ω=ωr, θ(0)=θr(0) -> θ=θr;反Park: ω=-ωr , θ(0)= θr(0) ->θ=-θr所以有:Clarke将定子电流转变为静止直角参考坐标(称αβ坐标);然后,Park将电流转变为按随机的速度旋转的坐标为(磁场定向控制,与转子同步);反向Park变换使反电动势从旋转坐标(q, d)到静止坐标。变换过程如下图:https://i-blog.csdnimg.cn/blog_migrate/7953f18ed430af441d23f8357f694e14.pngClark变换应用于定子电流:https://i-blog.csdnimg.cn/blog_migrate/392f43d170fd191711da312411c9683e.pngPark变换应用于定子电流:https://i-blog.csdnimg.cn/blog_migrate/dbb281f6a0344e4be60163924050c91c.pngPark逆运算变换应用于定子电压:https://i-blog.csdnimg.cn/blog_migrate/0a90bf9e9bc2c56e500b45b427eb695e.png程序的运行过程:1、程序先通过 ADC 采样,对 BLDC 电机的 a、b 两相进行电流采样;2、通过 Clarke() 函数将 a、b 两相电流转换为静止坐标系上的电流Iα、Iβ ;3、由 Park() 函数将电流Iα、Iβ 和经 DAC 转换的旋转角度θ转化为电流 Iq、Id;4、将电流 Iq、Id 的电流差输入到建立的 PI 控制器里,通过调节适当的 PI 控制系数输出最佳的旋转电压Vd、Vq;5、用 Circle Limitation 来限制 Vd、Vq 的值以选择恰当的值;6、用 Rev_Park()函数将旋转电压 Vd、Vq 转换为静止坐标系上的电压Vα、Vβ;7、通过三电阻式相电流重构法将电压 Vα、Vβ ,重新建立为 BLDC 电机的三相电压 Ux、Uy、Uw 的大小;8、用 SV_PWM 算法计算矢量及其分分扇区的扇区信息,通过控制 TIM 控制6个 MOSFET 管来控制各相电压方向以达到最后的控制目的。四、扇区的计算:扇区六种状态的计算方式,令 N=4*C+2*B+A;N值与扇区的对应关系:https://i-blog.csdnimg.cn/blog_migrate/80731fabed08a46a339497ea1f09b3df.png基本矢量作用时间计算与三相 PWM 波形的合成:PWM 周期计数器的值------为NTpwm=fdsp/fs/2。发波系数:https://i-blog.csdnimg.cn/blog_migrate/3145877491a9b3296e5e44a085c69f8d.pngUnom 为系统额定电压(线电压),开关频率为 fs ,系统时钟为 fc,输入额定电压 Udc,则PWM周期计数器的值:NTpwm=fc/fs/2。又有电压基值https://i-blog.csdnimg.cn/blog_migrate/3eef0f88a090e5f58ca9ef10945f6bd7.png,实际电压 U=U'Ubase,U'为标幺值,可以计算得到各扇区基本矢量的作用时间:https://i-blog.csdnimg.cn/blog_migrate/0e466c897539e0c81dd3144146d7a5f4.png 五、AD采样:STM32 的12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC采样程序流程:1、采样前需要读取三个采样通道的零电流值,以进行传感器校准;2、ADC经TIM1的N通道进行上升沿实践触发后进入中断,进入起动模式,通过FOC驱动算法获得采样值,用计算出的值Vα、Vβ来判断其所在扇区位置和三相PWM输出的占空比;ADC采样注意事项:只有在下桥臂打开时由SVPWM的当前扇区决定该读哪两相电流,程序中只采样A、B相电流,C相的电流通过 Ia+Ib+Ic=0 的电机电流关系得出。每次桥臂开关状态有变化时,会在shunt电阻上的电压产生一个电子干扰,时间长度为TNoise,且当下桥臂打开后,需要等待一段时间来使shunt电阻上的电压达到稳定值,时间长度为TRise,所以在TNoise 及TRise期间不能读相电流; 单电阻采样的时刻与三电阻不一样,且对于变负载或者位置环的应用,单电阻采样不准,因此不建议采用。六、磁链输出限制对于FOC算法,Vqs与Vds是由2个PID调节器单独计算的,因此需要正确计算电压矢量V,使之输入到SVPWM模块最大的电压幅值为:S16_MAX (即:32767)。https://i-blog.csdnimg.cn/blog_migrate/360cebb056c6911e7b174c2a3f521eb9.png 七、单电阻采样的原理:对于一个电机驱动硬件系统,硬件的简化框图如下:https://i-blog.csdnimg.cn/blog_migrate/68f9da184934793a5b7db5b177b63b77.png对于下桥臂的每一个开关状态,其对应的流过采样电阻的电流如表1。T4, T5 及T6 的开关状态与T1, T2 及T3互补。在表1中, 值“0” 表示开关管关闭,而“1”表示开关管打开。 https://i-blog.csdnimg.cn/blog_migrate/396a0a8c7cb896a08c1db0ee2be9681a.pnghttps://i-blog.csdnimg.cn/blog_migrate/eefbd531d6b04eedf7691c19d3adb7a6.png其最终生成的输出PWM如下图所示:https://i-blog.csdnimg.cn/blog_migrate/0752cfa6e3e420dd0c88fb1c6381b1ed.png使用中心对称模式, 每个PWM 周期被分成7个时间段;• 在其中的三个时间段(I,IV,VII),电阻中的电流为0;• 在其余的时间段,由于PWM为中心对称模式,电阻中的电流是对称的;• 如图所示,存在两种情况:• 时间段II 及VI, iShunt = –iC;• 时间段III 及V, iShunt = iA;• 因此,此时有可能从采样值重建马达的三相电流:• 时间段III 及V , iA = iShunt• 时间段II 及VI, iC = -iShunt• iB = -iA - iC由于电流会有一定的稳定时间,我们需要避开这个时间。定义‘TRise’: 任一管子开关后,ADC通道上的输入信号的稳定时间;定义Tmin: 执行电流采样所需要的最小时间:等于TRise +ADC 采样时间+ 死区时间;定义DMIN :TMIN的占空比的表达形式https://i-blog.csdnimg.cn/blog_migrate/3e12c93bb5374eb3676a288ae191ca9a.png则由图可以看出,AD采样是需要避开电流稳定的时间段,通常是通过延时一段时间后采样来实现的。但是,存在以下两种情况,就会衍生出电流采样不准的问题:1、相邻空间矢量扇区的边界区域https://i-blog.csdnimg.cn/blog_migrate/3145877491a9b3296e5e44a085c69f8d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3NTc1ODQx,size_16,color_FFFFFF,t_70在相邻的两个空间矢量扇区的边界区域, 有两个桥臂的占空比几乎相同;在这种情况下,七个子时间段变成了五个,这样的后果为:只可能采样到两个相电流中的一个;因此,如果电压矢量进入到下图的灰色区域,就不能在同一个PWM周期中同时采样到两个相电流。2、低调制比在低调制比的情况下,三个桥臂的占空比几乎相同;• 在这种情况下,七个子时间段变成了三个;• 在所有的三个时间段,流过采样电阻的电流为0;• 这就意味着当电压矢量进入下列灰色区域时,无法采样到相电流。备注: 三电阻可以在任何时刻采样,不存在此类问题。https://i-blog.csdnimg.cn/blog_migrate/1993f311c587b4ff8a64f151128d8e82.png
FOC的核心在于坐标变换,将三相静止坐标系(abc)中的电流和电压转换到两相旋转坐标系(dq)中。这通常通过Clarke变换(从abc到αβ)和Park变换(从αβ到dq)来实现。 FOC又分有感和无感控制算法 FOC算法需要较高的采样频率来实现快速响应和精确控制。选择合适的ADC采样频率和控制算法的执行频率。 FOC算法的输出是dq坐标系中的电压指令,这些指令需要通过逆Park变换和逆Clarke变换转换回三相静止坐标系,然后通过脉宽调制(PWM)控制逆变器,产生相应的三相电压。 FOC的目标是通过控制电机的磁场来优化电机的扭矩和速度控制。 需要对逆变器的非线性进行补偿,可以采用死区补偿算法、电压前馈补偿和电流反馈补偿等方法。这些补偿算法可以提高逆变器的输出精度,减少谐波和转矩脉动。 FOC 算法需要实时采样电机的电流和速度,并进行复杂的计算。采样和计算延迟会影响控制算法的实时性和性能。 调整PI控制器的参数以获得良好的动态响应和稳态性能。可能需要进行多次调整和测试。 为了减少采样和计算延迟,可以采用高速的微控制器、优化的算法和硬件加速技术。同时,需要合理安排控制算法的执行顺序,避免不必要的计算和等待时间。 准确的电机参数(如电阻、电感、磁链等)对于FOC控制至关重要。这些参数通常需要通过实验或辨识方法获得。 由于MOSFET开关存在死区时间,需要在PWM生成中加入死区补偿,以减少扭矩波动。 设计稳定的PI或PID控制器,调节比例系数和积分系数。
使用适当的滤波器,消除高频噪声和振荡。
FOC 算法在电机启动和低速运行时可能会遇到一些问题,如启动电流大、低速不稳定和转矩脉动等。
为了解决这些问题,可以采用特殊的启动策略,如预定位、软启动和低速补偿算法。这些策略可以提高电机在启动和低速运行时的性能和稳定性。 使用高精度的电流和电压传感器,获取实时的电流和电压反馈。
对传感器数据进行滤波和校准,消除噪声和误差。 FOC(Field-Oriented Control,磁场定向控制)是一种先进的电机控制算法,尤其适用于永磁同步电机(PMSM)和无刷直流电机(BLDC)。 FOC算法对计算资源有一定要求, 微控制器或DSP等硬件资源能够满足算法需求。 FOC控制算法对实时性要求较高,因为电机的状态和控制信号需要快速更新。因此,选择高性能的处理器和优化的算法实现是必要的。 建立电机的数学模型,包括电机的电压、电流、磁链和转矩等参数的关系。 需要对FOC控制算法进行充分的调试和测试