☰
基于龙贝格观测器的PMSM无传感器控制:去掉编码器的反电动势估算方案
2026/10/20 7:09:58 网站建设 项目流程

做驱动器方案的成本核算时,编码器往往是最先被盯上的零件。一颗 1024 线的增量式编码器,加上线缆和接口,价格几乎能顶掉半个主控芯片;在风机、泵、压缩机这类批量大、工况又相对固定的产品上,客户基本都会问一句:能不能把码盘去掉,改成无感?于是“基于龙贝格观测器的 PMSM 无传感器控制”这类方案就成了刚需。

这个方案的核心其实不玄:PMSM 转子上的永磁体转动时,会在定子绕组里感应出与转子位置直接相关的反电动势。只要用电压电流把反电动势估出来,位置和转速就都藏在里面了。龙贝格观测器做的事情就是——把反电动势当作一个额外的状态变量,用电流测量误差实时修正。相比滑模观测器,它没有抖振和滤波相位补偿问题;相比扩展卡尔曼滤波,它没有协方差矩阵要调。对工程落地来说,这是一条上手快、效果好、又容易定位问题的路线。

下面我按一条完整链路来讲:从数学模型、观测器结构、增益设计,到离散化、起动切换、仿真与台架排错,最后和几种常见无感方案做对比。文章里涉及的电机参数都是通用示例,建议你拿自己的电机参数替换着算一遍,别直接抄。

1. 无传感器控制的突破口:为什么偏偏盯上反电动势

1.1 编码器是“眼睛”,反电动势是“耳朵”

有编码器的时候,转子位置是直接量出来的:码盘一转,脉冲一来,角度和转速都清楚了。去掉编码器之后,等于把眼睛蒙上,得靠听声音判断人在哪个方向——这个“声音”就是反电动势。

永磁同步电机的转子是磁体,定子绕组在旋转磁场中会感应出电压。这个感应电压的幅值和转速成正比,相位则正比于转子磁极位置。换句话说,只要能从定子端测到的电压电流里把反电动势分离出来,转子位置和转速就“自己送上门”了。这个物理事实,是所有基于反电动势的无感方案共用的底层逻辑。

1.2 PMSM 在静止坐标系下到底怎么描述

做无感控制,绝大多数观测器都建在静止两相坐标系(αβ 轴)里,而不是旋转坐标系(dq 轴)。原因很直接:dq 轴的定义本身依赖于转子位置角 θ,位置未知还得先知道位置,这成了先有鸡还是先有蛋的问题。而 αβ 轴是定子侧的固定坐标系,方程里没有未知角度,只有电压、电流和反电动势。

表贴式 PMSM(Ld≈Lq=Ls)的 αβ 轴电压方程可以写成:

u_α = R_s · i_α + L_s · d(i_α)/dt + e_α

u_β = R_s · i_β + L_s · d(i_β)/dt + e_β

其中反电动势分量是:

e_α = -ψ_f · ω_e · sin(θ_e)

e_β = ψ_f · ω_e · cos(θ_e)

这里 R_s 是定子电阻,L_s 是同步电感,ψ_f 是永磁磁链,ω_e 是电角速度,θ_e 是转子磁极电角度。注意反电动势的幅值是 ψ_f·ω_e,角度信息就藏在 e_α、e_β 这个“sin/cos 对”里。

如果是凸极率比较大的内置式电机(Ld≠Lq),严格说要用扩展反电动势模型,把 dq 电感差产生的项也合并进去。不过很多内置式电机在中高速段用标准模型也能跑,参数偏差可以通过观测器增益和后续补偿吸收一部分。

1.3 反电动势大小和转速成正比:低速难的问题从根上就存在

从 e = ψ_f·ω_e 能立刻看出一件事:速度越低,反电动势越小。转速接近零时,信号幅度趋近于零,位置信息是 0/0 的分式,谁也没法从里面解出角度。

举个数:假设示例电机 ψ_f = 0.105 Wb,极对数为 3,额定转速 3000 rpm 时电角速度约 942 rad/s,反电动势幅值约 99 V。当转速掉到 50 rpm 机械转速时,电角速度只有约 15.7 rad/s,反电动势幅值只剩 1.65 V。在 310 V 母线电压、几十伏开关噪声的环境里去捞一个 1.65 V 的信号,难度一下子就上来了。

所以任何纯反电动势方案都有一个共同限制:零速和极低速段不能直接依赖观测器,必须靠起动策略顶过去。这也决定了系统要设计成“低速 I/F + 中高速观测器”的分段结构。

2. 龙贝格观测器到底在“观测”什么

2.1 状态方程:把电机当成一个动态系统重写

龙贝格观测器的标准玩法,是把电机模型写成状态空间形式,再构造一个闭环估计器。观测器的意思很直白:真实系统我们看不到全部状态,只有输出(电流)能测到;那就搭一个和真实系统一模一样的数学模型,喂同样的输入,用输出误差去修正模型内部的估计状态,让模型内部状态慢慢逼近真实状态。

对于这个应用,取状态向量为:

x = [i_α, i_β, e_α, e_β]^T

输入 u = [u_α, u_β]^T,输出 y = [i_α, i_β]^T。系统的状态方程是:

d(i_α)/dt = (u_α - R_s·i_α - e_α) / L_s

d(i_β)/dt = (u_β - R_s·i_β - e_β) / L_s

d(e_α)/dt = -ω_e · e_β

d(e_β)/dt = ω_e · e_α

这里假设转速变化相对较慢,反电动势的微分近似等于角速度旋转一个 90 度。龙贝格观测器就写成:

d(x̂)/dt = A·x̂ + B·u + G·(y - C·x̂)

其中 x̂ 是估计值,G 是反馈增益矩阵,C·x̂ 就是估计出来的电流。实测电流减估计电流,产生一个修正项,把估计状态往真实方向拉。

2.2 为什么把反电动势“升格”成状态变量

有人会问:反电动势不是能直接从公式 e = u - R_s·i - L_s·d(i)/dt 算出来吗?为什么要费劲把它当状态?

因为微分在工程上是噪声放大器。实测电流一抖,求导之后反电动势全是毛刺,根本没法直接用。把反电动势升格成状态变量之后,观测器走的是一条“积分 + 修正”的路子:先按模型预估反电动势,再用电流误差慢慢修。积分天然是低通滤波器,对高频噪声有抑制作用。这句话其实是整个龙贝格观测器好用与否的关键,理解它,后面调参就不会瞎试。

2.3 误差方程:观测器为什么一定能收敛

为了方便理解,拿单轴(α 轴)来看。观测器电流和反电动势的估计微分可以写成:

d(î_α)/dt = (u_α - R_s·î_α - ê_α)/L_s + k1·(i_α - î_α)

d(ê_α)/dt = k2·(i_α - î_α)

定义电流误差 e_i = i_α - î_α,反电动势误差 e_e = e_α - ê_α。假设真实反电动势变化缓慢,误差方程就会变成:

d(e_i)/dt = -(R_s/L_s + k1)·e_i - e_e/L_s

d(e_e)/dt = -k2·e_i

这是一个二阶线性系统,特征方程是:

s² + (R_s/L_s + k1)·s + k2/L_s = 0

只要合理选 k1、k2,让系统特征根落在左半平面,电流估计误差和反电动势估计误差都会收敛到零。观察一下会发现这个结构很像一个带积分整定的扰动观测器:k1 管电流误差的快速修正,k2 管反电动势(慢变量)的持续跟踪。β 轴完全同理,两轴都是解耦的,增益可以取一模一样的值。

3. 观测器增益怎么定:极点配置、参数失配的直观理解

3.1 用二阶误差方程设计两个增益

龙贝格观测器的增益设计,本质是给误差系统配置极点。把特征方程配成标准的二阶系统形式:

s² + 2·ζ·ω_n·s + ω_n² = 0

就能得到:

k1 = 2·ζ·ω_n - R_s/L_s

k2 = L_s·ω_n²

其中 ω_n 是观测器自然频率(带宽),ζ 是阻尼比。工程上阻尼比通常取 1,也就是临界阻尼,误差不会超调也不会来回震荡。ω_n 取得越高,电流误差收敛越快,跟踪速度突变的能力越强;但代价是对电流噪声更敏感,离散化误差更容易触发不稳定。实跑下来,先把 ω_n 定在电流环带宽的 0.5~1 倍,再根据波形慢慢降。

3.2 一个具体的增益计算例子

为了让你有个数量级概念,给一组示例电机参数:

参数数值
定子电阻 R_s1.2 Ω
定子电感 L_s4.2 mH
永磁磁链 ψ_f0.105 Wb
极对数3
额定转速3000 rpm
额定电流(峰值)4.5 A
直流母线电压310 V

先算电气时间常数:τ_e = L_s/R_s ≈ 3.5 ms,因此 R_s/L_s ≈ 285 s⁻¹。

设开关频率 10 kHz,采样周期 T_s = 100 μs。取 ω_n = 800 rad/s,ζ = 1,则:

k1 = 2 × 1 × 800 - 285 = 1315 s⁻¹

k2 = 4.2e-3 × 800² = 2688 V/(A·s)

验证离散化条件:ω_n × T_s = 800 × 0.0001 = 0.08,远小于 0.2,前向欧拉离散在这个带宽下完全没问题。把 k1、k2 按这个量级设进观测器,通常第一版就能跑出比较合理的角度波形,再根据噪声水平上下微调即可。

3.3 参数失配时各坏在哪

调完增益,下一个绕不开的问题是参数不准。无感方案的模型参数越偏,观测器估计出来的角度就越偏。

  • R_s 失配最阴险,它只在中低速、大电流时坏事。假设实测电流 3 A,R_s 模型偏差 0.2 Ω,电压误差 0.6 V。额定附近反电动势 99 V,0.6 V 只占 0.6%,角度误差小到忽略;但转速掉到电角速度 30 rad/s 时反电动势只有 3.15 V,同样 0.6 V 的误差就是 19% 的比例,位置偏十几度。所以 R_s 不准的电机,低速带载会明显出现角度偏移和扭矩波动。

  • L_s 失配影响动态过程。电感取大,观测器认为电流变化更“肉”,动态时角度会带超前或滞后;取小了则容易把噪声放大。上了台架注意观察加减速瞬间的角度误差,那里最能暴露 L_s 偏差。

  • ψ_f 失配直接导致速度估计成比例偏。反电动势幅值除以 ψ_f 才是速度,ψ_f 估小了速度就估高了,速度环靠积分还能把静差吸收,但动态性能和观测器输出幅值都会受影响。

磁钢温度升高时 ψ_f 会下降,绕组发热时 R_s 会变大。工业产品如果对低温升和低速性能要求高,除了离线辨识,通常还要加在线电阻辨识或温度补偿,否则季节一变、工况一重,位置精度就漂了。

4. 从公式到固件:离散化、角度提取与一拍延迟补偿

4.1 离散化与采样时序

仿真里可以连着微分方程跑,固件里必须离散。最常用的是前向欧拉离散,以 α 轴为例,每个周期做一次更新:

// T_s = 0.0001,单位秒 float err_i = i_alpha - i_est_alpha; i_est_alpha += ((v_alpha - RS * i_est_alpha - e_est_alpha) / LS + k1 * err_i) * T_s; e_est_alpha += (k2 * err_i) * T_s;

前向欧拉在 ω_n·T_s 小于 0.1~0.2 时都很稳。如果开关频率低或观测器带宽高,建议换成梯形法或改用更高阶离散,不然高速时观测器容易先于真实系统“鬼畜”。

采样时序上有个老生常谈但又必须强调的点:电流采样要放在 PWM 载波的中心点(或每次开关动作间隔的中段),避开上下桥臂开关瞬间的毛刺。观测器吃的是电流误差,采出来的电流不干净,后面全部白搭。

4.2 atan2 还是锁相环

反电动势估计出来之后,最朴素的做法是直接算角度:

θ_e = atan2(-ê_α, ê_β)

atan2 实现简单、没有整定参数,但它的输出直接吃反电动势噪声,而且转速过零时角度会跨过 ±π 跳变,速度方向翻转的场合容易引起控制系统抖动。所以我更推荐加一个锁相环(PLL)来提取角度和转速。

PLL 的处理思路是把反电动势旋转到当前估计角度下,把误差信号送给 PI 调节器。误差可以取:

ε = -ê_α·cos(θ̂) - ê_β·sin(θ̂)

当估计角度 θ̂ 等于真实角度时,ε = E·sin(θ_e - θ̂) = 0。整定 PI 时,PLL 带宽通常取观测器带宽的 1/5~1/10,阻尼取 1。带宽低一点角度波形更干净,代价是加速时角度滞后更多。我给一个我自己常用的量级:观测器 ω_n=800 rad/s 时,PLL 带宽取 120~200 rad/s 左右。

4.3 一拍延迟怎么补

数字控制系统天然有延迟:电流在 PWM 中心采样,计算要占一个周期,算完的电压指令要等下一个载波周期才更新。这个“一拍延迟”在低速时没什么感觉,高速时却是实打实的角度滞后。

按 942 rad/s 的电角速度、100 μs 周期算,一拍延迟的角度滞后是 0.094 rad,约 5.4°。对于 FOC 来说,5° 的角度误差已经能明显影响扭矩输出,速度越高越难看。最省钱的补偿方法是在 PLL 输出角度上直接加一个前馈:

θ_comp = θ_pll + ω̂·T_delay

其中 T_delay 根据 PWM 更新方式取 1~1.5 倍的 T_s。在实际台架上,这一小段代码往往能把电流波形和扭矩波形改善一大截,属于无感调试里投入产出比最高的一步。

5. 零速与低速那段最难熬:预定位、I/F 起动与无缝切换

5.1 为什么零速下观测器必然失效

反电动势幅值正比于转速,转速为零时反电动势为零。观测器内部虽然还保留着电机的“形状”,但没有可用的激励信号,它既不知道转子在哪个角度,也无法区分位置和零速的区别。从公式看,θ_e = atan2(0, 0) 也是未定式。所以纯反电动势方案不可能在零速给出可靠的位置,这是物理决定的,不是算法不够高级。

想要真正的零速带载无感,得用高频注入一类的凸极检测方法,但那对表贴式电机很不友好,代码和硬件也要复杂一截。对风机、泵、压缩机这些允许转子先转一下或允许从固定状态起动的场合,更实际的做法是用起动流程把速度抬到观测器能工作的区间。

5.2 三段式起动:预定位、I/F 强制换相、闭环接管

我习惯把起动分成三个阶段。

第一步是预定位。给定子注入一个固定角度的电压矢量,持续 200~500 ms,让转子被定子磁场吸过去,停在已知角度。这个方法简单粗暴,但对带摩擦负载和定位力矩大的负载可能吸不动,可以改成“短脉冲扫查 + 响应比较”的方式,或者干脆接受转子会动一下。

第二步是 I/F 起动,也叫电流频率法。电流环保持闭环,让电流矢量按一个斜坡转速旋转,转子被电流产生的磁场带着走。关键在电流幅值怎么给:低速时转矩全靠电流硬拉,幅值要给足;速度升上去后反电动势能自己出力了,再逐步把电流降回额定水平。一个常用简单的调度就是:

i_amp_ref = I_start - (I_start - I_rated) · ω_ref / ω_switch

其中 ω_switch 是准备切换闭环的转速点。我通常把起动初始电流设到额定电流的 60%~100%,负载重的取上限。

第三步才是切换到观测器闭环。切换之前,观测器最好一直后台运行,喂同样的电压指令和实测电流,让它先用 I/F 的输出角度作为参考慢慢收敛。这样切换那一刻,观测器的反电动势估计已经基本盯住了,不会出现角度猛跳。

5.3 切换时刻的工程细节

切换不是过了某个速度就咔一声切过去,得加一组条件判断:

切换条件建议取值示例
参考电角速度已超过阈值120 rad/s 左右
PLL 估计角度与 I/F 指令角度偏差小于 10° 且持续 50 ms
观测器电流误差幅值持续小于额定电流的 10%
电流采样和速度估计无异常无过流、无失步标志

切换时一定要做两件事:把 PLL 里的角度状态直接初始化成 I/F 的角度,把速度积分器初始化成参考转速。这样比让 PLL 自己慢慢追过去平滑得多,几乎看不到电流突变。

还要留一条退路。如果切换之后检测到失步、过流或者角度误差突然变大,应当自动退回 I/F 状态并重新预定位。工业现场负载变化很大,多一套后备逻辑,量产的时候能少挨不少骂。

5.4 带载与正反转的额外措施

如果负载是二次方律的风机泵类,低速不需要多少扭矩,I/F 起动非常轻松。但如果是低速就要出大扭矩的场合,I/F 阶段容易失步,转速爬不上去。这个当口有两个方向:一是提高起动电流并加长 I/F 爬坡时间,靠“硬拉”硬带起来;二是彻底换思路,上高频注入或者加一个能在零速出位置的辅助策略。

正反转频繁的工况还要注意速度过零时的滞回。建议切换阈值带滞回:比如 120 rad/s 切闭环,掉到 80 rad/s 以下才退回 I/F,避免在切换点附近来回抖动。

6. 仿真到台架调试:我踩过的坑与有效排查顺序

6.1 仿真模型怎么搭才贴近实物

仿真阶段最容易犯的错,是把电机、逆变器全当成理想模型,跑到爽之后台上直接翻车。我现在搭仿真,第一版用理想模型把控制逻辑和观测器跑通,确认角度误差在全速度段都收敛;第二版开始往里面加三样东西:死区时间、电流采样延迟、ADC 量化噪声。

需要重点记录的角度误差不是稳态值,而是加减速瞬间、突加负载瞬间的峰值偏差。稳态都准不代表动态准,动态偏差往往才是失步的导火索。再加一组测试用例:0→3000 rpm 斜坡起动、50% 额定负载突加、正反转切换、低速 100 rpm 维持。这四个场景过了,台架成功率会高很多。

6.2 台架调试里最常翻车的三个问题

上了台架之后,观测器代码本身反而往往不是最难的,最花时间的是把“脏信号”收拾干净。

现象最可能的根因快速验证方法处理手段
位置纹波是 6 倍频逆变器死区电压误差关掉死区补偿对比波形增加死区时间补偿
位置纹波是 1 倍频电流采样零漂静止时看三相电流偏置上电自动零漂校准
低速角度偏移随电流增大R_s 失配仿真里把 R_s 改大 20% 复现离线或在线电阻辨识
高速角度滞后变明显一拍延迟未补偿加角度前馈看波形改善θ + ω̂·T_delay

死区这个坑值得多说一句。死区时间一设,输出电压就出现一个依赖相电流方向的误差矢量,在相电流过零点附近跳变,表现到观测器里就是反电动势多了 6 倍频的纹波。最简单的办法是按三相电流符号查表补偿平均电压误差,过零点附近用小电流区间线性化处理。补偿做完,角度纹波能小一个数量级,效果立竿见影。

电流零漂则表现为 dq 轴电流里混入一个与转速无关的偏置,位置估计出现 1 倍频的摆动。解决手段是在每次上电时采集零状态下的电流平均值,存下来做减偏置。这个校准成本极低,量产必做。

6.3 参数辨识与标定流程

观测器对电机参数的依赖很高,所以电机参数不能只靠铭牌猜。我给每个新电机都会走一遍离线辨识流程:

  • 定子电阻 R_s:注入一个直流电压矢量,等电流稳定后 R = U/I。注意电流不要太大,时间不要太长,绕组会发热。
  • 定子电感 L_s:给一相注入阶跃电压,记录 di/dt 波形,由 u = R·i + L·(di/dt) 反解电感。多做几个位置取平均,减少磁饱和影响。
  • 永磁磁链 ψ_f:用另一台电机把被测电机拖到已知转速,或者直接自己 I/F 转起来,测量反电动势的线电压峰值 E_ll,由 ψ_f = E_ll / (√3·ω_e) 计算。

标定过程要记录绕组温度。铜绕组的电阻温度系数大约是每度 0.4%,磁钢磁链随温度下降更多。常温下标好了,高温满载跑半小时再看低速波形,位置偏了不要惊讶,这正是参数失配在作怪。

7. 和滑模、MRAS、EKF 放一起比:龙贝格方案的适用边界

7.1 横向对比

无感方案远不止龙贝格观测器一种,选型时我一般从这张表入手:

方案基本原理调参复杂度参数失配鲁棒性计算量低速能力典型应用
龙贝格观测器线性状态重构低,两个增益一般低差,需 I/F 辅助风机、泵、压缩机
滑模观测器滑模面强迫收敛中,需处理抖振较好低差,需 I/F 辅助高速外设、宽参数变化场合
MRAS参考模型与自适应模型的误差驱动中,需处理自适应律较好中差感应电机无感较多
扩展卡尔曼滤波随机最优估计高,协方差矩阵难调较好,抗噪声强高差,需辅助起动强噪声、高精度估计场景

龙贝格的优势非常明确:结构简单、增益有解析公式、离散化容易、计算量小,随便一个中等性能的 MCU 都能在 10 kHz 中断里跑完。缺点也相当清晰:它太依赖模型,参数一偏性能就掉,遇到强非线性负载和宽温度范围需要额外兜底。

7.2 我理解的适用边界

给别人选型时,我一般这么判断:如果产品是风机、水泵、压缩机,转速范围基本在中高速段,负载特性平稳,预算又卡得死,龙贝格观测器就是性价比很高的选择,配合三段式起动完全够用。

如果产品是伺服,要求低速大扭矩甚至零速保持,那龙贝格单独扛不住,要么上高频注入,要么做成“低速注入 + 高速龙贝格”的混合结构。如果现场环境温度变化剧烈、电机参数漂移严重,那滑模观测器那种不依赖精确模型的思路更稳,但代价是要处理抖振和滤波延迟。

我在实际项目里的习惯,是第一次接触无感方案时先用龙贝格把整条链路跑通。原因很简单:它每一步都能解析计算,出了问题能直接定位到某个参数、某个延迟、某个补偿没做对。先把这些基本功揉碎吃透,再去看滑模、卡尔曼,才不会迷路。直接一上来就堆高级算法,往往连系统哪里坏的都说不清。

调试做多了之后会发现,真正决定无感方案能跑多好的,不是观测器理论选得多高级,而是低速起动策略、死区补偿和采样调理这些“脏活”做没做到位。龙贝格观测器在这条链路上承担的是中高速段最基础、最容易定位问题的那一棒——这恰恰是它最大的价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询