3、控制系统建模:电机数学模型、机械系统模型、传感器模型简化
说实话,很多初学者一听到「建模」两个字就头大。我当年也是这样,总觉得建模是数学家干的事,跟我做控制的有什么关系?
后来被现实狠狠教育了一回——有次我调一个伺服系统,PID参数怎么整都振荡,最后发现是模型里忽略了一个摩擦项。嗯,从那以后我再也不敢跳过建模这一步了。
这一章,咱们就把三环控制里最常用的三个模型拆开揉碎。不搞复杂的偏微分方程,只讲你写代码、调参数时真正用得上的东西。
3.1 电机数学模型:从电压到转速的桥梁
电机是执行器的核心。你给一个电压,它转起来。但转多快、能输出多大扭矩,这中间有个数学关系。
我习惯把直流电机模型分成两部分:电气方程和机械方程。
3.4.1 电气方程
说白了就是基尔霍夫电压定律。电枢回路上有三个电压分量:
- 电阻压降:
i · R - 电感压降:
L · di/dt - 反电动势:
Ke · ω(转速越高,反电动势越大)
合起来就是:
U = i · R + L · di/dt + Ke · ω
你想想看,如果电机堵转了(ω=0),反电动势消失,电流会瞬间飙升。我在项目里见过有人忘了这个,直接把驱动板烧了。
3.4.2 机械方程
电机轴上的力矩平衡:
J · dω/dt = Kt · i - B · ω - TL
其中:
J:转动惯量(电机转子+负载折算)Kt:扭矩常数(通常Kt ≈ Ke)B:粘性阻尼系数TL:负载扭矩
L 通常很小(毫亨级),如果电流环带宽不高,可以直接忽略电感项。这样模型就从二阶降为一阶,调参省事不少。
3.2 机械系统模型:惯量、阻尼与弹性
电机后面连着负载,可能是齿轮、丝杠、皮带或者直接连一个转台。这些东西加在一起,构成了机械系统。
我一般把机械系统简化成三种基本元件:
| 元件 | 符号 | 物理意义 | 单位 |
|---|---|---|---|
| 惯量 | J |
抵抗加速度的能力 | kg·m² |
| 阻尼 | B |
与速度成正比的阻力 | N·m·s/rad |
| 刚度 | K |
抵抗形变的能力(弹性) | N·m/rad |
大多数工业应用里,机械系统可以简化为一个二阶振荡环节:
G(s) = 1 / (J · s² + B · s + K)
为什么会这样?因为惯量储能、阻尼耗能、刚度储能,三者构成了一个弹簧-质量-阻尼系统。
3.3 传感器模型简化:编码器、霍尔与电流采样
传感器是控制系统的眼睛。你模型建得再好,传感器不准,一切都是白搭。
3.3.1 编码器模型
增量式编码器输出两路正交脉冲(A、B),通过计数得到位置。速度则通过对位置差分得到。
但这里有个坑:差分求速度会放大噪声。我习惯在速度计算后面加一个低通滤波器,截止频率设为速度环带宽的 3~5 倍。
// 伪代码:带滤波的速度计算
static float prev_pos = 0;
static float filtered_vel = 0;
float raw_vel = (current_pos - prev_pos) / dt;
filtered_vel = 0.8f * filtered_vel + 0.2f * raw_vel; // 一阶低通
prev_pos = current_pos;
3.3.2 霍尔传感器模型
霍尔传感器只能给出 60° 或 120° 电角度的离散位置。用于方波控制还行,但做正弦波控制就太粗糙了。
我个人的做法是:用霍尔信号估算转速,然后用这个转速去推算连续位置,作为启动时的临时反馈。等编码器信号稳定了再切换。
3.3.3 电流采样模型
电流采样通常用采样电阻+运放,或者霍尔电流传感器。采样值经过 ADC 读入单片机。
这里要注意两个问题:
- 采样时刻: 必须在 PWM 载波的中点采样,避开开关噪声。
- 偏置校准: 运放有零漂,上电后先采一次零电流值,后面所有采样值都减去这个偏置。
核心要点: 传感器模型简化的原则是——保留主要特性,忽略次要细节。编码器的分辨率、电流采样的延迟、霍尔的角度误差,这些必须保留;而传感器的温漂、非线性,在入门阶段可以先忽略。
3.4 知识体系总览
下面这张图把本章的三个模型串起来了。你看一眼,就能明白它们在三环控制里的位置。
3.5 模型简化原则:什么时候可以偷懒?
做工程不是做学术。模型不是越精确越好,而是够用就好。我总结了几条简化原则:
- 忽略小时间常数: 如果电感时间常数
L/R远小于电流环采样周期,直接忽略电感。 - 合并惯量: 电机和负载的惯量可以折算到同一根轴上,用一个
J表示。 - 线性化摩擦: 库仑摩擦(静摩擦)是非线性的,但在低速场合可以用粘性阻尼近似。
- 传感器延迟等效为一阶惯性: 编码器采样延迟、电流采样滤波延迟,都可以用一个
1/(T·s+1)代替。
K/(J·s+B) 的一阶形式,把传感器延迟忽略掉。等电流环和速度环调稳了,再回头把被忽略的项加回来。这样调试路径最清晰,不容易把自己绕晕。