4. 连续系统仿真:传递函数模块、状态空间模块、积分器模块、仿真时间设置
各位同学,咱们今天聊聊连续系统仿真。说实话,这块内容是我当年自学控制时最头疼的部分之一。课本上全是拉普拉斯变换、状态方程推导,但一打开仿真软件,面对那些模块,反而不知道从哪下手。
其实没那么复杂。你想想看,连续系统仿真说白了就三件事:用什么模型描述系统、用什么模块搭建模型、仿真跑多久。今天咱们就把这三件事掰开揉碎了讲清楚。
4.1 传递函数模块:最直观的建模方式
传递函数,我个人习惯叫它「黑箱模型」。你不需要知道里面长什么样,只要知道输入输出关系就行。
比如一个简单的低通滤波器:
G(s) = 1 / (s + 1)
在仿真软件里,你只需要填两个数组:分子系数和分母系数。分子是 [1],分母是 [1, 1]。就这么简单。
关键点:系数要按 s 的降幂排列。比如 s² + 2s + 3,对应 [1, 2, 3]。我见过不少新手把顺序搞反,结果仿真波形完全不对。
我在项目中遇到过一件事。有一次搭建电机控制系统,传递函数里有个零点在右半平面。仿真时波形一直发散,我查了半天才发现是分子系数写错了。嗯,从那以后我每次填系数都会手算一遍极点位置。
4.2 状态空间模块:内部结构一目了然
传递函数虽然方便,但有些场景不够用。比如你要观察系统内部某个状态变量的变化,或者系统是多输入多输出的,这时候就得用状态空间模型。
状态空间的标准形式:
dx/dt = A·x + B·u
y = C·x + D·u
说白了,A 矩阵描述系统内部状态怎么互相影响,B 矩阵描述输入怎么影响状态,C 矩阵描述哪些状态能观测到,D 矩阵描述输入直接到输出的通路。
| 矩阵 | 含义 | 常见维度 |
|---|---|---|
| A | 系统矩阵(状态演化) | n×n |
| B | 输入矩阵 | n×m |
| C | 输出矩阵 | p×n |
| D | 前馈矩阵 | p×m |
我的小技巧:刚开始用状态空间时,可以先从单输入单输出系统练手。把传递函数转换成可控标准型,A 矩阵就是友矩阵,B 矩阵就是 [0,0,...,1]ᵀ。这样不容易出错。
我曾经在做一个倒立摆项目时,用了状态空间模型。当时需要观测摆杆角速度,但传感器只能测角度。通过状态空间模型,我直接提取了第二个状态变量作为角速度输出,省去了加微分器的麻烦。
4.3 积分器模块:仿真的核心引擎
你可能会问:传递函数和状态空间模块内部是怎么工作的?
答案就是积分器。所有连续系统仿真,底层都是靠积分器在跑。微分方程的解,本质上就是积分过程。
常用的积分方法:
- 欧拉法:最简单,但精度低。步长大了容易发散。
- 龙格-库塔法(RK4):工业界最常用。精度高,稳定性好。
- 隐式积分:对付刚性系统用的,比如电路仿真。
注意:积分步长不是越小越好。步长太小,仿真时间会成倍增加,而且数值误差累积反而可能变大。我一般先试 0.01 秒,看波形稳定再调小。
我记得有一次仿真一个二阶振荡系统,用欧拉法步长设了 0.1 秒,结果波形直接飞了。换成 RK4 后,同样的步长,波形稳得像教科书上的图。所以,别在积分器上省钱。
4.4 仿真时间设置:别让仿真白跑
仿真时间设置看似简单,其实坑不少。我见过有人仿真时间设了 1000 秒,结果系统 5 秒就稳态了,后面 995 秒全是浪费。
怎么设置合理的仿真时间?
- 先估算系统的时间常数:一阶系统看 τ,二阶系统看 ωₙ 和 ζ。一般仿真到 5 倍时间常数就够了。
- 关注瞬态过程:如果系统有振荡,要仿真到振荡衰减到 2% 以内。
- 考虑输入信号:阶跃信号、正弦信号、脉冲信号,不同输入需要的仿真时长不同。
经验公式:对于大多数控制系统,仿真时间设为系统上升时间的 10 倍左右,基本能覆盖完整的动态过程。
我曾经做一个液压伺服系统仿真,系统时间常数只有 0.02 秒,但我设了 10 秒仿真时间。结果数据文件巨大,后处理时电脑卡了半小时。后来我改成 0.5 秒,该看的信息一点没少。
知识体系总览
下面这张图,是我自己总结的连续系统仿真核心逻辑。你看一眼,心里就有谱了。
这张图把今天的内容串起来了。你看,传递函数和状态空间是两种建模方式,积分器是底层引擎,仿真时间设置是最后的参数配置。四者缺一不可。
实战建议:刚开始做仿真时,先用传递函数模块搭一个简单的一阶系统,设好仿真时间,跑通后再换成状态空间模型。这样一步步来,不容易被细节绕晕。
好了,今天的内容就到这里。记住我说的:模型选对、参数填对、时间设对,仿真就成功了一大半。剩下的就是调试和优化,那是另一门学问了。
公众号:蓝海资料掘金营,微信deep3321