4. 系统建模与参数:电机传递函数推导、电气时间常数与机械时间常数、系统辨识方法简介
做电机控制这么多年,我越来越觉得一个道理:控制做得好不好,七分在模型,三分在算法。你想想看,连被控对象长什么样都不知道,调出来的PID参数能靠谱吗?
这一章,我们就来聊聊直流电机的“底细”。我会从传递函数推导讲起,再带你搞清楚电气时间常数和机械时间常数这两个关键参数。最后,我会分享一些我在现场做系统辨识的土办法——嗯,这些方法虽然看着不高级,但真的很管用。
核心观点:电机模型不是用来“算准”的,而是用来“理解”的。理解透了,调参才有方向。
4.1 直流电机的传递函数推导
我们先从最基本的电枢控制直流电机说起。它的等效电路其实很简单:一个电阻R,一个电感L,一个反电动势E,再加上一个机械负载。
电枢回路的电压方程是:
Ua = Ra * Ia + La * dIa/dt + E
其中E = Ke * ω,Ke是反电动势常数,ω是电机转速。
再看机械部分。电机的转矩方程:
T = Kt * Ia = J * dω/dt + B * ω + TL
Kt是转矩常数,J是转动惯量,B是阻尼系数,TL是负载转矩。
把这两个方程联立,做拉普拉斯变换,就能得到电机的传递函数。我习惯把它写成这样的形式:
G(s) = ω(s) / Ua(s) = Kt / [(La * s + Ra) * (J * s + B) + Kt * Ke]
这个式子看着有点复杂,但别怕。我们把它拆开看:
- 电气部分:La * s + Ra,代表电枢回路的动态特性
- 机械部分:J * s + B,代表转子的动态特性
- 耦合项:Kt * Ke,代表机电耦合
在实际项目中,我经常把这个传递函数简化成二阶系统。为什么呢?因为大部分直流电机,尤其是小功率的,电气时间常数远小于机械时间常数。这时候,电气部分可以近似为一个惯性环节。
我的经验:在做仿真的时候,别一上来就用精确模型。先用简化模型跑通逻辑,再慢慢加细节。我曾经在一个项目中,花了两周时间建了一个超精确的模型,结果发现控制算法本身就有问题——白白浪费了时间。
4.2 电气时间常数与机械时间常数
这两个参数,说白了就是电机“反应快慢”的度量。
电气时间常数 τe:
τe = La / Ra
它决定了电流对电压变化的响应速度。τe越小,电流建立得越快。一般小电机的τe在几毫秒到几十毫秒之间。
机械时间常数 τm:
τm = J * Ra / (Kt * Ke)
它决定了转速对电流变化的响应速度。τm通常比τe大一个数量级,从几十毫秒到几百毫秒不等。
为什么要区分这两个时间常数?
- 电流环设计:主要考虑τe,带宽可以设得比较高
- 速度环设计:主要考虑τm,带宽要低一些
- 位置环设计:带宽更低,通常只有速度环的1/5到1/10
我记得有一次调试一个大型伺服系统,速度环怎么调都振荡。后来一查,发现机械时间常数比预想的大了三倍——负载的转动惯量算错了。嗯,从那以后,我每次做系统设计,都会先实测一下这两个时间常数。
避坑指南:我曾经在一个项目中,直接用电机手册上的参数做设计。结果实际系统响应慢得像蜗牛。后来才发现,手册上的参数是在空载条件下测的,而实际负载的惯量大了好几倍。所以,一定要用实际工况下的参数。
4.3 系统辨识方法简介
理论推导是一回事,实际参数是另一回事。系统辨识,就是通过实验数据来“猜”出电机的真实参数。
我常用的方法有三种,各有各的适用场景:
| 方法 | 原理 | 适用场景 | 精度 |
|---|---|---|---|
| 阶跃响应法 | 给电机加一个阶跃电压,记录电流和转速的响应曲线 | 现场快速估算 | 中等 |
| 频率响应法 | 扫频输入,测量幅频和相频特性 | 实验室精确建模 | 高 |
| 最小二乘法 | 采集输入输出数据,用数学方法拟合模型参数 | 在线自适应控制 | 较高 |
阶跃响应法是我在现场用得最多的方法。操作很简单:
- 让电机空载运行在某个稳定转速
- 突然改变电压(比如加10%的阶跃)
- 记录电流和转速的变化曲线
- 从曲线上读出τe和τm
具体怎么读?看电流曲线:从0上升到63%的时间,就是τe。看转速曲线:从0上升到63%的时间,就是τm。当然,这是近似值,但足够用了。
频率响应法更精确,但需要扫频仪或者信号发生器。我一般在实验室做产品定型时用这个方法。扫频范围从0.1Hz到1000Hz,记录幅频和相频曲线,然后用曲线拟合工具提取参数。
最小二乘法适合做在线辨识。我有个项目需要在运行中自动调整PID参数,就是用这个方法实时更新电机模型。代码实现也不复杂:
// 简化的递推最小二乘法(RLS)伪代码
// 输入:u(k) 电压,y(k) 转速
// 输出:theta 参数向量 [a1, a2, b1]
theta = [0, 0, 0]'; // 初始参数
P = 1000 * eye(3); // 初始协方差矩阵
lambda = 0.98; // 遗忘因子
for k = 3:N
phi = [-y(k-1), -y(k-2), u(k-1)]';
e = y(k) - phi' * theta;
K = P * phi / (lambda + phi' * P * phi);
theta = theta + K * e;
P = (P - K * phi' * P) / lambda;
end
这段代码看着简单,但实际用起来坑不少。比如数据要预处理,要去掉直流分量,还要防止协方差矩阵发散。我刚开始用的时候,就遇到过参数突然跳变的情况——后来加了数据窗和限幅才解决。
我的建议:如果你刚开始做系统辨识,别急着上复杂算法。先用阶跃响应法摸清电机的“脾气”,再用频率响应法精调。等经验积累够了,再考虑在线辨识。一步一步来,反而更快。
4.4 本章知识体系
为了让你更直观地理解这一章的内容,我画了一张图。它展示了从物理模型到参数辨识的完整逻辑链条:
从这张图你可以看到,整个知识体系是层层递进的。先有物理模型,再推导传递函数,然后提取关键参数,最后用这些参数指导控制器设计。每一步都有它的意义,缺一不可。
好了,这一章的内容就到这里。记住一句话:模型是控制的基础,参数是模型的灵魂。下一章,我们会把这些参数用到PID整定中去,看看它们到底怎么影响控制效果。
公众号:蓝海资料掘金营,微信deep3321