基于龙伯格观测器的PMSM无传感器转速估计Simulink仿真
做电机控制的人对转速环都很熟悉,但一旦传感器装不进去,转速从哪来就成了首先要解决的问题。龙伯格观测器(Luenberger Observer)作为一种基于模型的状态估计方法,在无传感器控制场景里应用非常广泛。这篇文章我就用Simulink把基于龙伯格观测器的转速估计模型完整搭一遍,从数学原理讲到模块搭建,再到参数整定和排坑经验。整个过程我会按实际做项目的顺序来走,不跳步、不藏坑,适合有电机控制基础但刚接触无传感器方案的同学,也适合做仿真预研和毕业设计的在校生。
1. 先想清楚:为什么要费劲去估转速
1.1 传感器装不上的现实场景
在工业现场待过的人都知道,位置传感器往往是整个驱动系统里故障率最高的器件。压缩机、风机、泵类这些负载,电机转子经常密封在腔体里,编码器根本没有安装空间;还有一些高温、高振动环境,光电编码器或旋转变压器的寿命和可靠性都很难保证。更现实的是成本——一套高分辨率编码器加上对应的信号采集电路,在小功率电机驱动方案里可能占到总成本的相当比例。
所以无传感器控制从来不是学术玩具,而是工程刚需。它的核心思路只有一句话:用电机定子侧能测到的电压和电流,通过数学模型解算转子的位置和转速。省掉传感器之后,系统的布线简化了、故障点减少了、成本也降下来了,代价是控制器要承担一部分"估计误差"的风险,这对算法设计提出了更高要求。
1.2 龙伯格观测器在众多估算方案里的位置
提到转速估算,行内常见的方案有滑模观测器、模型参考自适应(MRAS)、扩展卡尔曼滤波、龙伯格观测器,以及高频注入法。它们各有脾气:滑模观测器鲁棒性好但存在抖振;扩展卡尔曼滤波精度高但计算量大,需要反复调噪声协方差矩阵;高频注入法能覆盖低速甚至零速,但只对凸极电机友好,且会引入额外的转矩脉动。
龙伯格观测器的优势在于结构简单、计算量小、物理意义清晰。本质上它就是按电机的数学模型复制出一个"影子系统",再用可测量的电流偏差去修正影子系统的状态,让估算值逐步贴合真实值。对于表贴式永磁同步电机在中高速段的转速估计来说,龙伯格观测器是一个非常均衡的起点方案,与其一上来就上滑模或卡尔曼,不如先把龙伯格吃透。
2. 原理拆解:反电动势里确实藏着转速
2.1 表贴式永磁同步电机的电压方程
要说清楚龙伯格观测器,得先把电机的数学模型摆出来。这里以表贴式永磁同步电机(SPMSM)为例,因为绝大多数龙伯格观测器转速估计的教材案例和工程实现都建立在它之上。在两相静止坐标系(αβ坐标系)下,电机的定子电压方程可以写成:
Vα = Rs·iα + Ls·(diα/dt) + eα
Vβ = Rs·iβ + Ls·(diβ/dt) + eβ
其中 eα、eβ 就是反电动势(back-EMF)在αβ轴上的分量。对于表贴式电机,反电动势的表达式为:
eα = -ψf·ωe·sin(θe)
eβ = ψf·ωe·cos(θe)
注意看这两个式子,ψf 是永磁体磁链,ωe 是电角速度,θe 是电角度。反电动势的幅值等于 ψf·ωe,而它的相位信息里直接包含了电角度。换句话说,只要把反电动势准确估出来,转速和位置信息就同时到手了。这就是整个方案成立的逻辑根基,后面所有的模型搭建都围绕这句话展开。
2.2 把反电动势扩展成状态变量
为了构造龙伯格观测器,我们把电压方程改写成标准状态空间形式。这里有一个关键技巧:把反电动势也当成状态变量来估计。
为什么能这么干?因为反电动势变化的频率就是电频率,相比电气时间常数 Ls/Rs 对应的动态过程,反电动势在一个很小的控制周期内变化幅度非常有限。工程上可以做近似处理:
deα/dt ≈ 0
deβ/dt ≈ 0
这个近似在大多数转速范围内都是可接受的。这样一来,原来的电流方程就扩展成一个包含电流和反电动势的四阶系统。以状态向量 x = [iα, iβ, eα, eβ]ᵀ 来看,电压方程可以重新组织为矩阵形式。系统输入是 Vα、Vβ,输出是 iα、iβ,而反电动势是不可直接测量的"扩展状态"。
这个四阶系统的可观测性是满足的,因为电流输出中耦合了反电动势的影响。观测器的形式就是在复制这套模型的同时,加入以电流偏差为驱动的修正项:
d/dt [îα; îβ; êα; êβ] = A·[îα; îβ; êα; êβ] + B·[Vα; Vβ] + K·(iα - îα, iβ - îβ)
反馈增益矩阵 K 乘以电流估算误差,从而不断修正模型状态,让估算电流逐步逼近实测电流。当电流估算收敛后,估算反电动势 êα、êβ 也就逼近真实反电动势了。这一段是整个模型的灵魂,跳过数学直接去 Simulink 里拖模块,一旦遇到问题你会完全无从下手。我建议把上面的方程亲手写在纸上,每个模块你都能和方程对应上,后面调参才有底气。
2.3 从反电动势到转速的两种提取方式
反电动势估出来之后,怎么变成转速?常见的有两条路径。
第一条是幅值法。由 eα² + eβ² = (ψf·ωe)²,直接得到转速:
ωe = sqrt(eα² + eβ²) / ψf
这个做法非常直白,一个乘积、一个求和、一个开方就能完成。缺点是它对反电动势的幅值误差敏感,电机磁链 ψf 随温度漂移时会直接折算成转速误差,而且低速时反电动势幅值小,信噪比变差。适合对精度要求不高、或运行转速偏高的场合。
第二条是角度微分法。先算电角度 θe = atan2(-eα, eβ),然后对角速度做微分得到转速。好处是转速直接从相位信息来,响应较快,而且拿到的角度可以直接用于旋转坐标变换。缺点是 atan2 在角度过零附近存在跳变,微分操作会放大噪声,转速毛刺往往很明显。所以在工程实现里,角度微分后必须串滤波,或者干脆用锁相环(PLL)跟踪角度。
我个人的仿真习惯是先用幅值法把整体链路跑通,确认观测器核心收敛正常,再切换到角度微分法并配上滤波,去逼近真实工程方案的性能。这样能帮你快速隔离问题:观测器本身的问题和转速提取链路的问题,不会搅在一起。
3. Simulink模型搭建:从白纸到可运行
3.1 顶层架构:四层职责划分
在动手拖第一个模块之前,先把模型顶层结构规划清楚。我习惯把整个仿真拆成四层:电机本体模型、测量与坐标变换、龙伯格观测器核心、转速提取与后处理。
- 电机本体模型:仿真中被控对象,输入是电压,输出是三相电流。
- 测量与坐标变换:从电机模型引出三相电流和电压,经 Clarke 变换得到 iα、iβ 和 Vα、Vβ,作为观测器的输入。
- 龙伯格观测器核心:吃进电压和电流,输出估算反电动势 êα、êβ。
- 转速提取与后处理:把估算反电动势变换成估算转速,做滤波和限幅。
为什么要把观测器输入单独拎出来强调?因为观测器是开环依赖模型的,输入信号的质量直接决定输出质量。很多同学直接把逆变器的给定电压当作观测器输入,仿真阶段问题不大,但在真实系统里,给定电压与电机端实际电压之间隔着逆变器死区、管压降等误差,这些都会折算成反电动势估计偏差。模型结构上你就要为这个讨论留出空间,后续做硬件在环或上实验台架时才会从容。
3.2 电机本体模型的搭建要点
第一步把电机的 αβ 轴电流微分方程变成 Simulink 的积分结构。实现上非常直接:用加法器算 Vα - Rs·iα - eα,乘以 1/Ls 后进积分器,积分器输出就是 iα。β 轴完全对称。这个结构的物理含义就是一个 RL 串联电路,电感上的电流等于电压积分除以电感。
这里有个重要的实现细节:模型里所有参数必须是变量,不要直接写数字。Rs、Ls、ψf、极对数定义在模型工作区或者 MATLAB 初始化脚本里,Gain 模块引用变量名。我见过太多人把具体数值填进 Gain 模块,后期改参数满模型翻找,效率极低。合理做法是在仿真前运行一段参数初始化脚本,类似下面这样:
% 电机参数 Rs = 2.875; % 定子电阻 Ohm Ls = 0.0085; % 定子电感 H flux = 0.175; % 永磁体磁链 Wb p = 4; % 极对数 % 仿真与控制参数 Ts = 1e-4; % 控制周期 Tstep = 1e-5; % 仿真步长 % 观测器参数 wn_obs = 800; % 观测器带宽 rad/s k1 = 2 * wn_obs; k2 = wn_obs^2; k3 = 5 * wn_obs; % 反电动势回路增益电机模型中的反电动势给定信号,可以由转速给定值经过积分得到电角度,套用 eα = -ψf·ωe·sin(θe)、eβ = ψf·ωe·cos(θe) 生成。我建议把这部分单独做成一个子系统,方便后面把"理想反电动势"和"估算反电动势"拉出来做对比。
3.3 观测器核心:电流估算与反电动势估算两条支路
观测器核心是整个模型的重头戏,我分两条支路说明。
第一条是电流估算支路。在 Simulink 里搭建两个结构完全对称的积分器回路,分别对应 α 轴和 β 轴。以 α 轴为例,估算电流的动态方程为:
d(îα)/dt = (-Rs/Ls)·îα + (1/Ls)·Vα - (1/Ls)·êα + k1·(iα - îα) + k3·(iβ - îβ)
注意最后一行的交叉项 k3·(iβ - îβ),它用于补偿两轴之间的耦合,不是必需的,但加上之后观测器的动态响应会更均衡。β 轴方程与 α 轴对称,把下标互换即可。搭建时务必核对每个增益的量纲和符号,这是最容易犯低级错误的地方。
第二条是反电动势估算支路。反电动势的估算形式是"纯积分 + 误差修正":估算反电动势的变化率等于电流误差乘以相应的增益。也就是说,这条支路没有任何电压前馈项,它完全由电流误差驱动。把电流误差乘上增益 k2 后送给积分器,积分输出就是 êα。这里要特别注意:纯积分环节在仿真里可能因为数值原因出现漂移。比如电流误差里有极小的直流分量,积分时间长了,反电动势估算值会慢慢偏离真实值。缓解办法是在积分器前加一个很小的饱和限幅,或者配合后面的滤波环节一起处理。
在增益矩阵的组织上,我习惯把电流回路的比例增益设为统一值,积分回路增益设为另一个值,反电动势回路的增益再单独设一个值。下面调参章节我会给出具体配置逻辑。
3.4 转速提取与后处理模块
反电动势估算出来之后,接到第二部分讲的转速提取环节。幅值法的实现只有三个模块:乘积、求和、Sqrt。但有个细节必须注意:转速很低时,估算反电动势幅值很小,sqrt 的输入可能因为数值噪声变成负值,模块会报错或者输出复数。处理办法是在求和输出之后加一个下限保护,比如 max(x, 1e-6),或者直接在 Sqrt 后面串一个饱和模块。
如果是角度微分法,模型里需要加 atan2 模块和微分环节。atan2 的输入是 -êα 和 êβ,输出范围是 -π 到 π,这个角度可以直接用于后续的 Park 变换。微分环节我强烈建议不要直接用 Simulink 的 Derivative 模块,改用一个"一阶惯性微分"结构,也就是 s/(τ·s + 1) 形式的传递函数。Derivative 模块对仿真步长和噪声极其敏感,步长一抖动输出就能爆掉。用带惯性的微分器,代价是相位略有滞后,但波形干净得多,这是我在实践中踩出来的教训。
最后一级是低通滤波器。我通常用一阶低通,截止频率放在 50 到 200 Hz 区间,具体取值和后面的调参逻辑有关,这里先按 100 Hz 试跑。整个后处理链路搭完之后,一个可运行的转速估计模型就有了雏形。接下来最关键的环节是参数怎么配,因为大多数人的模型搭得没问题,就是波形不对,病根几乎都在参数整定上。
4. 参数整定:增益、滤波和求解器
4.1 观测器增益:先按极点配置估算,再微调
很多资料讲龙伯格观测器增益,只会说"增益大一点收敛快",这话理论没错,但实操中容易带偏。增益太大会把电流测量噪声同步放大,增益太小则收敛慢,模型参数误差带来的影响也压不住。正确思路是极点配置。
在不考虑交叉耦合的简化条件下,电流误差的动态特性近似为二阶系统,其特征方程和观测器增益直接关联。工程上我更习惯的做法是:把观测器带宽和期望的收敛时间常数挂钩。假设你希望电流估算误差约在一个时间常数 τobs 内收敛,那么可以取:
k1 = 2 / τobs,k2 = 1 / τobs²
反电动势回路的增益 k3 通常比电流回路增益高出数倍。因为反电动势的变化相对缓慢,需要更强的误差驱动才能跟上负载扰动。但也不是越大越好,太大的 k3 会把电流噪声直接灌进反电动势估算里,导致转速波形高频抖动。
以我手头一台典型小功率表贴式电机为例:Rs = 2.875 Ω,Ls = 0.0085 H,ψf = 0.175 Wb,极对数 4。电气时间常数约 3 ms,第一版我设置电流误差带宽为 500 rad/s,反电动势增益取电流回路的 5 倍。仿真结果能跟上真实转速,但动态响应偏软,加减速阶段有明显的滞后。把电流带宽提高到 800 rad/s 之后,动态明显好转,转速噪声也还能接受。这个过程说明:增益先从时间常数估一个量级,再根据仿真波形做增量调整,不要一上来就暴力试。
4.2 低通滤波器的配置原则
转速提取后端的低通滤波,参数要和观测器带宽匹配。一个常见错误是把截止频率设得极低,比如 10 Hz,转速波形确实光滑了,但负载突变时转速反馈严重滞后,速度环很容易不稳定。
我的配置原则是:低通截止频率不低于观测器带宽的 1/10,不高于控制频率的 1/20。以观测器带宽 800 rad/s(约 127 Hz)、控制频率 10 kHz 为例,低通取 80 到 200 Hz 是比较合理的区间。具体调试时先取中间值,比如 100 Hz,然后观察加载和卸载瞬间的转速波形:过冲明显就往高了调,噪声明显就往低了调,两三轮就能找到适合当前工况的折中点。
另外注意滤波器阶数。一阶低通的相位滞后小、实现简单,是默认选择。不要一上来就用二阶或三阶,除非你核算过相位裕度。我见过有人给转速反馈链路上二阶低通,结果速度环震荡,排查半天才发现是相位滞后吃掉了太多裕度。
4.3 求解器与步长:仿真可信度的地基
Simulink 求解器的选择对这类连续时间仿真影响极大。带电机模型和观测器闭环的仿真,我强烈建议用固定步长求解器,比如 ode4(四阶龙格库塔),步长取控制周期的 1/10 到 1/20。
变步长求解器的问题在于:它在快速变化区间会自动缩小步长,波形局部看起来更"精细",但步长不固定会让微分和积分环节的行为难以预测。更麻烦的是,状态事件较多的模型里,变步长可能触发极短步长计算,仿真速度直线下降,甚至出现数值发散。
步长具体怎么选?开关频率 10 kHz、控制周期 100 微秒时,仿真步长取 5 到 10 微秒比较合适。步长太大会让反电动势积分的数值误差累积,低速时甚至出现收敛不稳;步长太小仿真速度让人崩溃。我的习惯是先跑 10 微秒验证逻辑,再把步长减半对比波形。如果两次结果有显著差异,说明原步长下数值误差已经不可接受,需要缩小步长重新仿真。
5. 仿真调试:我踩过的坑和排查思路
5.1 观测器不收敛或收敛极慢
这是新手最容易遇到的状况。症状表现为估算反电动势与理想反电动势相差很远,或者要几十毫秒才能追上。排查方向有三个。
第一查初始化。观测器里电流估算的积分器初始值应和实际电流初值一致。若不收敛但趋势正确,检查增益是否过小。第二查模型参数。观测器里用的 Rs、Ls 必须与电机模型完全一致。电阻误差哪怕 20%,稳态时反电动势都会出现可观测的偏差。第三查输入电压来源。电机端电压与观测器端电压必须取同一点。如果一边取相电压、一边取线电压,结果必然对不上。
分享一个印象深刻的案例:某次仿真中估算转速总是稳定偏低 15%,波形形状完全正确,就是整体低一截。排查了很久,最后发现观测器里反电动势系数用成了峰值 0.175,而电机模型里是幅值 0.0875,差了一个 2 倍的关系。这种单位系数的错误最隐蔽,波形形态看不出异常,只有幅值对不上。遇到幅值系统性偏差时,逐项核对单位和折算系数是第一优先级。
5.2 估算转速噪声大、抖动明显
转速噪声大,大概率来自三个方向:观测器增益偏高、转速提取没有滤波、或者前端电压信号含噪。仿真场景里前两个最常见。
我的调试习惯是:把估算电流和实测电流的误差信号单独拉出到示波器观察。如果电流误差本身噪声就大,说明观测器增益对测量噪声的放大已经过了头。这时候不要急着加滤波去掩盖,而应该适当降低观测器增益,从源头减少噪声注入。如果电流误差收敛得很好,但估算转速依旧抖动,问题出在转速提取或滤波环节,这时候再去调滤波器参数。
另一个经验是善用频谱观察。把转速误差信号送给频谱分析模块,如果能看到明显峰值——比如电频率两倍频附近的尖峰,通常是反电动势估算中混入了二次谐波;如果是平坦的宽带底噪,多半是观测器增益整体偏高。对症下药的效率远远高于盲目调参。
5.3 负载突变时估计值振荡
观测器本身是线性系统,如果负载突变时估算转速振荡,根源通常有两个。第一是观测器带宽与电流环带宽不匹配。观测器动态要足够快,至少不能比电流环慢一个数量级,否则负载突变后反电动势变化无法及时反映到估算值中,就会出现"追不上"式的振荡。第二是滤波器相位滞后放大了速度环的交互影响。转速反馈滞后会让速度环相位裕度不足,最终实际转速和估算转速一起振荡。
排查时建议做分步隔离实验:先把转速提取的低通滤波旁路掉,直接观察观测器核心输出的反电动势波形。如果不振荡,问题大概率在滤波链路;如果依旧振荡,回到观测器增益和模型参数去查。这种分段隔离的思路,比在一次仿真里反复试参数要高效得多。
5.4 低速段的天然瓶颈:必须认清边界
最后必须泼一盆冷水:龙伯格观测器在零速和极低速下表现很差。原因非常直白——反电动势幅值正比于转速,转速为零时反电动势为零,没有任何信号可以还原转子位置。实际工程中,龙伯格观测器基本只在额定转速的 5% 到 10% 以上使用,低速段往往需要叠加开环强拖、切频逻辑或者预定位策略。
如果只做仿真验证,我建议把初始转速设定在额定转速的 10% 左右,让观测器从启动时就有足够大的反电动势信号可供利用,收敛过程会很顺利。不要试图在仿真里把观测器从零速直接跑起来,除非你额外实现了完整的启动策略,那已经是另一个工程课题了。
我把调试过程中经常遇到的几类问题整理成了一个速查表,方便你对照定位:
| 现象 | 优先排查位置 | 常用处理手段 |
|---|---|---|
| 估算转速整体偏低/偏高 | 模型参数、单位折算系数 | 逐项核对磁链系数、幅值与有效值定义 |
| 收敛慢 | 观测器带宽、积分器初值 | 提高 wn_obs,检查积分器初始状态 |
| 转速高频抖动 | 观测器增益、低通截止频率 | 降低 k3,适当调低低通截止频率 |
| 负载突变振荡 | 带宽匹配、滤波相位滞后 | 分段隔离测试,提升带宽或降滤波阶数 |
| 低速发散 | 反电动势信噪比不足 | 提高运行转速下限,或增加辅助启动策略 |
6. 最后再分享一点个人体会
这个项目做完,我自己最大的收获是:龙伯格观测器看起来只是几个积分器和增益的组合,但你对电机模型的每一分理解都会直观反映到波形上。它不像某些黑盒调参算法,每个参数都有明确的物理含义,调参的过程本身就是加深对电机模型理解的过程。
最后送大家一个实操习惯:在 Simulink 里做这类模型时,把"理想反电动势"和"估算反电动势"画在同一张示波器图里,同时画上它们的差值。这比只盯转速波形有用得多——转速信号经过积分、滤波层层加工,很多关键细节都被抹平了,而反电动势的直接对比能让你一眼看出观测器本身的收敛速度、动态响应和残差情况。
后续如果想继续深入,比较自然的扩展方向是:把观测器估算出的角度直接接到磁场定向控制(FOC)的坐标变换里,组成完整的无传感器矢量控制闭环仿真。再加入逆变器死区补偿、电流采样噪声这些非理想因素,评估观测器在最真实工况下的表现。那一步做完,基本就可以考虑从纯仿真走向硬件实验了。