4. 惯量辨识原理:基于电机运动方程的惯量辨识数学模型推导
各位工程师朋友,咱们今天聊点硬核的。惯量辨识,说白了就是让伺服系统自己“掂量”一下自己带的负载有多重。你想想看,如果伺服不知道负载有多重,那它的加减速性能、位置跟随精度,基本就是瞎蒙。我在现场调试时见过太多这样的案例——工程师凭感觉设个惯量比,结果要么系统抖得像筛子,要么响应慢得像蜗牛。
嗯,要搞懂惯量辨识,咱们得从最基础的电机运动方程说起。这是整个辨识算法的根,根扎不稳,上面长出来的全是歪脖子树。
4.1 电机运动方程:伺服系统的“牛顿第二定律”
先回忆一下经典力学。牛顿告诉我们:F = ma。放到旋转运动里,就变成了:
Te − TL = J · dω/dt
这里:
- Te — 电磁转矩,电机产生的驱动力矩
- TL — 负载转矩,包括摩擦力、切削力、重力分量等
- J — 系统总惯量(电机转子惯量 + 负载惯量折算值)
- ω — 电机机械角速度
- dω/dt — 角加速度
这个方程看起来简单,但里面藏着不少坑。我刚开始做伺服驱动开发时,就天真地以为只要测出转矩和加速度,除一下就能得到惯量。结果数据出来乱七八糟,根本没法用。为什么?因为TL这个家伙太不老实了——它随着速度、位置、温度都在变。
核心要点:惯量辨识的本质,就是在未知且变化的负载转矩干扰下,从运动方程中把J“拎”出来。
4.2 离散化处理:从连续方程到可计算的差分形式
实际伺服系统里,我们拿到的都是离散采样数据。电机运动方程需要写成差分形式:
Te(k) − TL(k) = J · [ω(k) − ω(k−1)] / Ts
其中:
- k — 当前采样时刻
- Ts — 采样周期(通常0.1ms ~ 1ms)
- ω(k) − ω(k−1) — 速度增量
这里有个细节要注意:速度信号通常来自编码器,而编码器直接测量的是位置。速度是通过位置差分算出来的。这就引入了量化噪声和延迟。我建议在工程实现时,速度信号一定要做低通滤波,否则加速度信号会噪声大到离谱。
实战技巧:我个人习惯用二阶巴特沃斯低通滤波器,截止频率设在速度环带宽的3~5倍。这样既能滤掉高频噪声,又不会把有用的加速度信息给削没了。
4.3 最小二乘法:让数据自己“说话”
好,现在我们有了一堆离散数据点:[Te(k), ω(k), ω(k−1)]。怎么从中估计出J和TL?
最经典的方法就是递推最小二乘法(RLS)。咱们把运动方程改写成矩阵形式:
y(k) = φ(k) · θ
其中:
- y(k) = Te(k) — 系统输出(已知)
- φ(k) = [ (ω(k)−ω(k−1))/Ts , 1 ] — 回归向量(已知)
- θ = [ J , TL ]T — 待估参数(未知)
你看,这样一来,惯量辨识就变成了一个标准的参数估计问题。RLS算法的核心公式如下:
// 递推最小二乘核心步骤
// 初始化:θ(0) = [J_guess, 0]^T, P(0) = α·I (α取较大值,如1000)
// 每一步迭代:
// 1. 计算增益向量
K(k) = P(k-1)·φ(k) / [λ + φ(k)^T · P(k-1) · φ(k)]
// 2. 更新参数估计
θ(k) = θ(k-1) + K(k)·[y(k) − φ(k)^T · θ(k-1)]
// 3. 更新协方差矩阵
P(k) = [I − K(k)·φ(k)^T] · P(k-1) / λ
// λ为遗忘因子,0.95~0.99之间
// λ越小,算法跟踪越快,但噪声敏感度越高
这里λ是遗忘因子。λ=1时,所有历史数据权重相同,适合恒定惯量场景。λ<1时,旧数据逐渐被“遗忘”,适合惯量缓慢变化的场景。我在做注塑机伺服时,惯量会随着模具开合而变化,这时候λ取0.97左右效果最好。
注意:RLS算法对激励信号有要求。如果电机匀速运行(加速度≈0),那么φ(k)的第二列和第一列高度相关,会导致协方差矩阵病态,估计结果发散。这就是为什么惯量辨识必须在加减速过程中进行。
4.4 激励信号设计:给系统“挠痒痒”的正确姿势
要让RLS算法收敛得好,输入信号必须满足持续激励条件。说白了,就是速度变化要足够丰富,不能老是一个节奏。
常用的激励信号有:
- 梯形速度曲线 — 简单实用,但频率成分单一
- S形速度曲线 — 加速度连续变化,激励更充分
- 伪随机二进制序列(PRBS) — 频率覆盖宽,辨识精度高
我个人最常用的是S形曲线。为什么?因为梯形曲线在加减速切换点有加速度突变,会激发机械谐振,导致辨识结果被谐振分量污染。S形曲线平滑过渡,对机械系统更友好。
下面这张图展示了惯量辨识的整体流程:
4.5 工程实现中的几个关键细节
理论讲完了,咱们聊聊落地时容易踩的坑。
第一,数据同步问题。 转矩指令Te和速度反馈ω(k)来自不同的采样通道,存在时间延迟。我曾经在一个项目中,因为没做延迟补偿,辨识出来的惯量值偏大了15%。后来在数据采集时加了插值对齐,精度才上来。
第二,摩擦转矩的处理。 低速时,静摩擦和库仑摩擦占主导,会严重干扰辨识结果。我的做法是:在辨识前先做一个“摩擦前馈”标定,把摩擦模型参数先辨识出来,然后在运动方程中减去摩擦分量。
第三,遗忘因子的自适应调整。 固定遗忘因子不够灵活。我习惯让λ随着速度变化率自动调整——加速度大时λ取小值(快速跟踪),加速度小时λ取大值(平滑估计)。
经验总结:惯量辨识不是一锤子买卖。我建议在设备每次上电后,先做一次快速粗辨识(用梯形波,耗时0.5秒),然后在正常运行过程中用RLS做慢速精辨识(持续更新)。这样既保证了启动时的快速响应,又兼顾了运行中的自适应能力。
4.6 辨识结果的验证方法
怎么知道辨识出来的惯量准不准?我一般用两个方法交叉验证:
- 转矩观测法:用辨识出的Ĵ和T̂ₗ重构转矩,与实际转矩对比。如果重构误差在5%以内,说明辨识结果可信。
- 阶跃响应法:给速度环一个阶跃指令,观察实际响应曲线。如果响应曲线与仿真曲线(用辨识参数)吻合,那基本就稳了。
| 验证方法 | 操作方式 | 判定标准 | 适用场景 |
|---|---|---|---|
| 转矩重构法 | 用Ĵ和T̂ₗ计算Te_recon,与实际Te对比 | 均方根误差 < 5% | 在线验证 |
| 阶跃响应法 | 施加速度阶跃,对比实测与仿真响应 | 超调量偏差 < 2%,调节时间偏差 < 10% | 离线验证 |
| 惯量比对法 | 已知负载惯量,对比辨识值与理论值 | 偏差 < 3% | 实验室标定 |
好了,关于惯量辨识的数学模型推导,咱们就聊到这儿。核心就三件事:运动方程是基础,RLS是工具,激励信号是前提。把这三点吃透了,你就能让伺服系统自己“掂量”出负载的重量,然后自动把参数调到位。