无位置传感器估算
磁场定向控制需要转子角度。到目前为止,本网站的所有内容都假定你已经获得了该角度——无论是来自编码器、旋转变压器还是霍尔传感器。
很多时候这是做不到的。传感器的成本往往高于控制器,其电缆又是整机中最不可靠的部件,而在密封泵或压缩机中甚至无处安装。因此问题变为:能否仅凭驱动器已知的两项信息来推算角度——即所施加的电压和由此产生的电流?
大多数情况下是可以的。本页将介绍如何实现,以及无法实现的区域——那并不是需要通过工程手段消除的空白,而是物理规律的必然结果。
核心思路
这里的每个观测器都基于同一个方程。在静止坐标系下,电机的端子电压满足
前两项是可以计算出来的—— 和 已知, 由采样测得。剩下的部分就是转子磁钢扫过定子绕组所产生的反电动势 。它与永磁体磁链方向垂直,因此它的方向就给出了转子角度:
这就是整个思路。下面的所有内容都是在不计算该导数的情况下提取的方法,因为对测量电流进行微分会严重放大噪声。
而这里的限制则体现在物理特性上,而非任何具体实现:
信号是与转速成正比的。在零转速时,反电动势完全为零,因此无法观测到任何信号。对于参考电机而言,在1800 rpm时为6.41 V,在300 rpm时为1.07 V,在150 rpm时为0.53 V——此时其大小已与逆变器自身的死区时间误差以及中的不确定性相当。本章中没有任何观测器能够避免这一问题。
角度跟踪:锁相环
下面的两个观测器都会生成一个空间矢量,并需要其角度。显而易见的答案是使用atan2,但这是错误的做法——它会将所有噪声直接传递到角度计算中,并且无法提供速度估计。
取而代之的是一个锁相环,它驱动内部角度,直至观测到的矢量误差为零。由于环路中包含积分环节,输出平滑,速度估计也随之获得,且当信号短暂丢失时,系统会保持惯性运行而非突变。
误差信号的构造非常巧妙。如果角度估计准确,反电动势矢量将完全落在估计的 q 轴上,d 轴分量为零。因此,归一化后的残余 d 轴分量就是角度估计误差:
将该误差送入 PI 调节器并积分即可得到估计角度。由于只有矢量的方向起作用,锁相环(PLL)对信号幅值完全不敏感——哪怕信号弱上一百倍,也能锁定到完全相同的位置。
观测器 1:磁链观测器
与其对电流求导,不如对电压积分。定子磁链为
而由转子磁体贡献的部分,则是在扣除定子电流自身产生的部分后剩余的:
沿 d 轴方向,因此其角度即为转子角度,全程无需求导。
积分器是问题所在
纯积分器无法直接应用于硬件。测量电流或假设电压中的任何直流偏移——哪怕只有毫伏级、微安级——都会无界累积,使估计值在数秒内迅速发散。
通用的解决方法是将积分器改为漏积分器(一阶低通环节):将 替换为 。这相当于引入了高通滤波特性,从而限制住直流漂移。
但它也会引入相位误差,且误差方向很容易让人弄反。理想积分器在任何频率下都会产生精确的 相移;而漏积分器的相移为 ,因此其输出相对于真实磁链超前了:
当截止频率设为 20 Hz 时,在 200 Hz 电频率下相位超前 5.7°,在 120 Hz 下为 9.5°,在 60 Hz 下则达 18.4°。由于该相移是转速的已知函数,因此可以通过角度旋转将其补偿掉——但必须向后(往滞后方向)旋转,因为滤波器产生的是相位超前而非滞后。如果按直觉方向去补偿,反而会让误差翻倍。
试验台可以直接测量这一点。关闭 补偿相移:
| 转速 | 已校正 | 未校正 | 预测的超前量 |
|---|---|---|---|
| 900 rpm | 4.2° | 20.0° | 18.4° |
| 1800 rpm | 4.0° | 12.7° | 9.5° |
| 3000 rpm | 3.9° | 9.2° | 5.7° |
在实验台上 请注意,校正后的角度误差在所有转速下都恒为 4° 左右,而不是零。这一残余误差既不是噪声,也不是参数没调好,而是源于凸极效应(Saliency)。观测器用单一电感 去扣除定子磁链,但凸极电机在两个轴上分别呈现 和 。电感失配会在垂直于永磁体磁链的方向上留下 的残余磁链,从而将估计角度偏转:
对于基准电机,在 6 A 电流下该偏角为 4.8°;本站测试也证实该误差随 成比例变化,且在 的表贴式电机上完全消失。这是一种随负载变化的角度误差:观测器在轻载时比在重载时更准。
观测器 2:滑模观测器
同时运行一台电机的电流模型和实际电机,并通过与电流估计误差符号成比例的开关项对其进行控制:
如果 超过了反电动势的峰值,估计误差会被强制置零并保持在该值——即在误差为零的平面上进行估计滑动。一旦发生这种情况, 必须恰好补偿模型所缺失的部分。因此, 就是反电动势,无需对任何信号进行微分即可恢复。
滑模控制以其对参数误差的不敏感性而著称,这正是其吸引力所在。但随之而来的是两个代价:
存在抖振(Chattering)。 是一个高频切换信号,因此需要低通滤波器才能恢复出平滑的反电动势,而该滤波器会产生 的相位滞后——在 300 Hz 截止频率、120 Hz 电频率下滞后达 21.8°。这是真正的相位滞后,因此角度补偿应当向前超前旋转。本页的两个观测器需要方向相反的相位补偿,这正是为什么应当自己推导而非照搬代码。
切换增益必须兼顾整个转速范围。 切换增益 必须大于最高转速下的峰值反电动势,但同一个 在低速下相对于微弱的反电动势而言又过于庞大,导致边界层对估计值产生粗糙的量化效应。这正是下方对比实验中滑模观测器(SMO)比磁链观测器更早在低速区失效的主要原因。
比较结果
扫频试验才是重点。对于参考电机,在6 A时:
| 转速 | 反电动势 | 磁链观测器 | SMO |
|---|---|---|---|
| 3600 rpm | 12.82 V | 3.8° | 2.5° |
| 3000 rpm | 10.68 V | 3.9° | 3.7° |
| 2400 rpm | 8.55 V | 3.9° | 4.8° |
| 1800 rpm | 6.41 V | 4.0° | 9.4° |
| 1300 rpm | 4.63 V | 4.1° | 15.9° |
| 900 rpm | 3.20 V | 4.2° | 40.5° |
| 600 rpm | 2.14 V | 4.2° | 180° |
| 400 rpm | 1.42 V | 60.6° | 180° |
| 250 rpm | 0.89 V | 48.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%左右出现性能下限。
- 从静止启动需要完全不同的机制:开环斜坡、基于脉冲的位置检测,或高频注入。