FOC 参考手册 05 控制与估算

无位置传感器估算

磁场定向控制需要转子角度。到目前为止,本网站的所有内容都假定你已经获得了该角度——无论是来自编码器、旋转变压器还是霍尔传感器。

很多时候这是做不到的。传感器的成本往往高于控制器,其电缆又是整机中最不可靠的部件,而在密封泵或压缩机中甚至无处安装。因此问题变为:能否仅凭驱动器已知的两项信息来推算角度——即所施加的电压和由此产生的电流?

大多数情况下是可以的。本页将介绍如何实现,以及无法实现的区域——那并不是需要通过工程手段消除的空白,而是物理规律的必然结果。

核心思路

这里的每个观测器都基于同一个方程。在静止坐标系下,电机的端子电压满足

前两项是可以计算出来的—— 和 已知, 由采样测得。剩下的部分就是转子磁钢扫过定子绕组所产生的反电动势 。它与永磁体磁链方向垂直,因此它的方向就给出了转子角度:

这就是整个思路。下面的所有内容都是在不计算该导数的情况下提取的方法,因为对测量电流进行微分会严重放大噪声。

而这里的限制则体现在物理特性上,而非任何具体实现:

信号是与转速成正比的。在零转速时,反电动势完全为零,因此无法观测到任何信号。对于参考电机而言,在1800 rpm时为6.41 V,在300 rpm时为1.07 V,在150 rpm时为0.53 V——此时其大小已与逆变器自身的死区时间误差以及中的不确定性相当。本章中没有任何观测器能够避免这一问题。

角度跟踪:锁相环

下面的两个观测器都会生成一个空间矢量,并需要其角度。显而易见的答案是使用atan2,但这是错误的做法——它会将所有噪声直接传递到角度计算中,并且无法提供速度估计。

取而代之的是一个锁相环,它驱动内部角度,直至观测到的矢量误差为零。由于环路中包含积分环节,输出平滑,速度估计也随之获得,且当信号短暂丢失时,系统会保持惯性运行而非突变。

误差信号的构造非常巧妙。如果角度估计准确,反电动势矢量将完全落在估计的 q 轴上,d 轴分量为零。因此,归一化后的残余 d 轴分量就是角度估计误差:

将该误差送入 PI 调节器并积分即可得到估计角度。由于只有矢量的方向起作用,锁相环(PLL)对信号幅值完全不敏感——哪怕信号弱上一百倍,也能锁定到完全相同的位置。

观测器 1:磁链观测器

与其对电流求导,不如对电压积分。定子磁链为

而由转子磁体贡献的部分,则是在扣除定子电流自身产生的部分后剩余的:

磁链观测器:实测电流与指令电压相减得到反电动势,经漏积分器得到定子磁链,扣除定子电流自身产生的磁链后得到永磁体磁链,最后由锁相环(PLL)跟踪其角度。 ψ s λ m i α , i β 实测值 v α , v β 给定参考值,而非 实测值 v − R·i 反电动势本身 漏积分器 相位超前 atan(f c /f e ) ψ − L d ·i 分离出永磁 磁链 PLL 跟踪转子角度 θ̂ 与 ω̂ 送入 Park 与 Park 逆变换
无需新增硬件——输入就是实测电流与控制器所请求的电压,因为驱动器本来就没有电压传感器。每一步都只是减法或积分,唯一需要整定的参数就是截止频率——而这也是唯一会引入误差的地方,因为被迫采用的漏积分器在相位上会超前于理想积分器。

沿 d 轴方向,因此其角度即为转子角度,全程无需求导。

积分器是问题所在

纯积分器无法直接应用于硬件。测量电流或假设电压中的任何直流偏移——哪怕只有毫伏级、微安级——都会无界累积,使估计值在数秒内迅速发散。

通用的解决方法是将积分器改为漏积分器(一阶低通环节):将 替换为 。这相当于引入了高通滤波特性,从而限制住直流漂移。

但它也会引入相位误差,且误差方向很容易让人弄反。理想积分器在任何频率下都会产生精确的 相移;而漏积分器的相移为 ,因此其输出相对于真实磁链超前了:

当截止频率设为 20 Hz 时,在 200 Hz 电频率下相位超前 5.7°,在 120 Hz 下为 9.5°,在 60 Hz 下则达 18.4°。由于该相移是转速的已知函数,因此可以通过角度旋转将其补偿掉——但必须向后(往滞后方向)旋转,因为滤波器产生的是相位超前而非滞后。如果按直觉方向去补偿,反而会让误差翻倍。

试验台可以直接测量这一点。关闭 补偿相移:

转速已校正未校正预测的超前量
900 rpm4.2°20.0°18.4°
1800 rpm4.0°12.7°9.5°
3000 rpm3.9°9.2°5.7°

在实验台上 请注意,校正后的角度误差在所有转速下都恒为 4° 左右,而不是零。这一残余误差既不是噪声,也不是参数没调好,而是源于凸极效应(Saliency)。观测器用单一电感 去扣除定子磁链,但凸极电机在两个轴上分别呈现 和 。电感失配会在垂直于永磁体磁链的方向上留下 的残余磁链,从而将估计角度偏转:

对于基准电机,在 6 A 电流下该偏角为 4.8°;本站测试也证实该误差随 成比例变化,且在 的表贴式电机上完全消失。这是一种随负载变化的角度误差:观测器在轻载时比在重载时更准。

观测器 2:滑模观测器

同时运行一台电机的电流模型和实际电机,并通过与电流估计误差符号成比例的开关项对其进行控制:

如果 超过了反电动势的峰值,估计误差会被强制置零并保持在该值——即在误差为零的平面上进行估计滑动。一旦发生这种情况, 必须恰好补偿模型所缺失的部分。因此, 就是反电动势,无需对任何信号进行微分即可恢复。

滑模观测器:由开关项驱动的电流模型迫使模型电流跟踪实测电流,对该开关项进行滤波即可恢复反电动势,再由锁相环(PLL)跟踪其角度。 电流误差 与实测电流比较 恢复滤波器 相位滞后 atan(f c /f e ) 反电动势 e α , e β PLL 跟踪转子角度 θ̂ 与 ω̂ 送入 Park 与 Park 逆变换 i α , i β 实测值 − 滑模开关项 K · sat(误差 / 边界层厚度) 电流模型 1 / (R + sL),由 开关量 z 驱动 î α , î β 观测器自身状态 v α , v β 给定参考值,而非 实测值
其结构形态与磁链观测器截然不同。底部的反馈回路在磁链观测器中是没有对应物的——该观测器对自身的电流估计值进行闭环,因此其误差会自我反馈。注意这里的反电动势恢复滤波器会产生相位滞后,而磁链观测器的漏积分器产生的是相位超前:两者的相位补偿方向完全相反。

滑模控制以其对参数误差的不敏感性而著称,这正是其吸引力所在。但随之而来的是两个代价:

存在抖振(Chattering)。 是一个高频切换信号,因此需要低通滤波器才能恢复出平滑的反电动势,而该滤波器会产生 的相位滞后——在 300 Hz 截止频率、120 Hz 电频率下滞后达 21.8°。这是真正的相位滞后,因此角度补偿应当向前超前旋转。本页的两个观测器需要方向相反的相位补偿,这正是为什么应当自己推导而非照搬代码。

切换增益必须兼顾整个转速范围。 切换增益 必须大于最高转速下的峰值反电动势,但同一个 在低速下相对于微弱的反电动势而言又过于庞大,导致边界层对估计值产生粗糙的量化效应。这正是下方对比实验中滑模观测器(SMO)比磁链观测器更早在低速区失效的主要原因。

比较结果

工作点
观测器
逆变桥
两个观测器均在闭环中运行——控制器基于估计值进行调节,而不享有对真实角度的特权访问。上图:角度;中图:误差,带 ±10° 区间;下图:在整个转速范围内扫过的峰值误差,这才是关键的曲线。

扫频试验才是重点。对于参考电机,在6 A时:

转速反电动势磁链观测器SMO
3600 rpm12.82 V3.8°2.5°
3000 rpm10.68 V3.9°3.7°
2400 rpm8.55 V3.9°4.8°
1800 rpm6.41 V4.0°9.4°
1300 rpm4.63 V4.1°15.9°
900 rpm3.20 V4.2°40.5°
600 rpm2.14 V4.2°180°
400 rpm1.42 V60.6°180°
250 rpm0.89 V48.2°180°

从中可以得出三件事。

磁链观测器在失锁前表现十分平坦。 从 3600 rpm 一直降到 600 rpm,误差都平稳地保持在 4° 左右,随后在 600 至 400 rpm 之间发生断崖式失锁。它没有平缓劣化的过渡区可供调参挽救——能工作时很稳,一过临界点便直接崩溃。

SMO 在高速区占优,在低速区落后。 在 3000 rpm 以上,滑模观测器优于磁链观测器,因为滑模机制对参数失配不敏感,从而避开了磁链观测器因凸极性带来的 4° 固有底噪;但在 1800 rpm 以下,由于上述切换增益无法随转速缩放的原因,其表现远逊于磁链观测器。两者并没有绝对的优劣之分。

两者都会在反电动势降至约 1–2 V 时失效,对于本机而言对应几百 rpm——大约是额定转速的 10%–15%。这是一个非常值得记住的工程经验值,而且并不局限于这两种特定算法。

在实验台上 加入 1.5% 的死区时间并观察中速区:在 1800 rpm 下,磁链观测器的误差仅从 4.0° 变为 4.6°——几乎毫无影响,因为 0.72 V 的死区误差面对 6.4 V 的反电动势微不足道。问题在于死区电压误差是固定不变的,而反电动势随转速下降而缩水,两者在低速区必然正面相撞。死区时间页所讲的低速问题与本页的低速问题,本质上是同一个问题,而且会同时发作。

从静止启动

如果观测器在几百转每分钟以下无法工作,而电机又是从零速启动的,那么它究竟如何才能起动呢?

三种方案都在生产中使用。

开环斜坡(I-f启动)。 忽略转子。在给定角度上施加一个电流矢量,并以递增的速度旋转该角度;如果负载足够轻,转子就会像步进电机一样被拖动跟随。一旦速度达到观测器能够锁定的程度,就进行切换。这种方法简单且通用,但在高惯量或高摩擦的负载下会失效,而且切换时需要谨慎——瞬间的不匹配会产生较大的瞬态响应。

初始位置检测。 在开始运动之前,先向多个方向施加短时电压脉冲,并比较电流响应。对于凸极电机,电感会随转子位置而变化,因此响应各不相同,通过这些响应模式即可确定角度——包括根据轻微的饱和不对称性判断哪个磁极为正极。这样就能确保沿正确方向平稳起动。

高频注入。 在基波信号之上持续注入高频信号,并利用由此激发的凸极效应来跟踪转子位置。这种方法确实能够在零速甚至带载静止状态下工作,因为它完全不依赖反电动势,而是利用了完全不同的物理特性。

关键在于,高频注入法并不是一个“更好的观测器”,而是完全不同的测量原理——利用凸极性而非反电动势——之所以换用它,正是因为本页所依赖的反电动势原理在零低速下已经山穷水尽。无论对上述反电动势观测器做多少改进,都无法延伸到静止状态,因为那里根本没有可供观测的反电动势信号。

代码实现

磁链观测器,完整形式:

/* Leaky integration of the back-EMF gives stator flux. */
const float decay = expf(-2.0f * M_PI * cutoff_hz * dt);
flux_a = flux_a * decay + (v_a - Rs * i_a) * dt;
flux_b = flux_b * decay + (v_b - Rs * i_b) * dt;

/* Remove the flux the stator current is making; the rest is the rotor's. */
float rotor_a = flux_a - Ld * i_a;
float rotor_b = flux_b - Ld * i_b;

/* Undo the leaky integrator's phase LEAD — note the negative sign. */
const float f_elec = fabsf(omega_est) / (2.0f * M_PI);
rotate(&rotor_a, &rotor_b, -atanf(cutoff_hz / f_elec));

/* Rotor flux points along d; the PLL wants a q-pointing vector. */
pll_update(&pll, -rotor_b, rotor_a, dt);

大约二十行代码和两个电机参数。无传感器控制的难点从来都不在于算法本身。

要点回顾

  • 这一切都基于一个等式:凡是电阻和电感项无法解释的部分,就是反电动势,而反电动势指向转子。
  • 使用 PLL 跟踪所得的空间矢量,而非使用 atan2。它能提供转速信息,抑制噪声,并在信号丢失时仍能保持稳定运行。
  • 两个观测器都需要进行与转速相关的相位校正,且两者的相位关系为 相反方向——漏积分器超前,恢复滤波器滞后。
  • 该电机的磁链观测器在低至600 rpm时仍能保持4°的恒定偏差;其下限由凸极效应决定,并随负载变化而变化。SMO在高速时更为精确,但在低速时则较早失效。
  • 所有基于模型的控制方案在低速时都会失效,因为信号强度与转速成正比。通常会在额定转速的10%左右出现性能下限。
  • 从静止启动需要完全不同的机制:开环斜坡、基于脉冲的位置检测,或高频注入。