第3章 连续系统建模:积分模块、微分模块、传递函数模块、状态空间模块、连续系统仿真设置

连续系统建模,说白了就是描述那些随时间连续变化的物理过程。比如电机转速、弹簧振动、水温变化——这些都不是跳变的,而是平滑过渡的。Simulink里处理这类问题,靠的就是几个核心模块。我刚开始学的时候,总觉得这些模块长得差不多,用起来却总出岔子。今天咱们就把它们掰开揉碎了讲清楚。

3.1 积分模块:连续系统的“记忆体”

积分模块是连续系统里最基础、也最容易被低估的模块。它的数学本质很简单:y(t) = ∫ x(t) dt。但实际用起来,坑不少。

核心要点:积分模块保存了系统的“状态”。没有积分器,就没有动态系统。

我在项目中遇到过一个问题:一个简单的PID控制器,仿真结果总是不对。查了半天,发现是积分器的初始条件设成了0,而实际系统启动时已经有初速度了。嗯,这里要注意——积分模块的初始条件参数,一定要根据物理实际来设置。

积分模块的参数设置,我习惯这样配:

参数 说明 我的建议
Initial condition 初始状态值 从物理模型或实测数据获取
External reset 外部复位方式 一般选none,除非需要重置
Limit output 输出限幅 建议勾选,防止积分饱和
Show saturation port 显示饱和标志 调试时打开,方便观察

小技巧:积分模块的“Limit output”一定要勾上。我曾经在一个位置环控制里忘了设限幅,结果积分器一路飘到1e6,仿真直接崩了。你想想看,物理系统哪有无限积分的道理?

3.2 微分模块:用的时候要小心

微分模块 y(t) = dx/dt,理论上很完美,实际用起来却是个“噪声放大器”。

为什么会这样?因为真实信号总有噪声。微分操作对高频噪声特别敏感——信号稍微抖一下,导数就剧烈跳变。我在做振动分析时吃过这个亏:直接用微分模块处理加速度信号,结果出来的速度曲线全是毛刺,根本没法用。

所以我的建议是:

  • 能不用就不用。很多场景可以用积分反推,或者用传递函数近似
  • 必须用时加滤波。比如用 s/(T*s+1) 这种近似微分器
  • 仿真步长要小。微分精度依赖小步长,步长大了误差惊人

警告:千万不要在纯微分模块后面直接接饱和或非线性模块。我曾经这么干过,结果仿真结果完全失真,查了两天才发现是微分后的高频分量被非线性环节“整流”了。

3.3 传递函数模块:经典控制理论的桥梁

传递函数模块 Transfer Fcn 是频域设计的核心。你只要给出分子分母系数,Simulink自动帮你搭好内部结构。

举个例子,一个二阶低通滤波器:

分子: [1]
分母: [1, 2*ζ*ω, ω^2]

比如阻尼比0.7,自然频率10 rad/s:

分子: [1]
分母: [1, 14, 100]

我在实际项目中习惯这样配:

  • 分子分母长度要匹配。分子阶次不能高于分母,否则物理不可实现
  • 系数用变量名,别写死。比如 [1] 写成 num,方便调参
  • tf() 函数先在MATLAB里验证,再复制到模块里

经验之谈:传递函数模块的“分母”系数顺序是从高次到低次。我刚开始总搞反,把 [1, 14, 100] 写成 [100, 14, 1],结果系统完全不对。你记住:最高次项系数在最前面。

3.4 状态空间模块:现代控制理论的利器

状态空间模块 State-Space 用矩阵描述系统:

dx/dt = A*x + B*u
y     = C*x + D*u

这个模块的好处是:

  • 适合多输入多输出系统
  • 内部状态清晰,方便做状态反馈
  • 数值稳定性比传递函数好

我做一个四轮独立驱动车辆模型时,就用状态空间模块。四个轮子、三个方向自由度,总共7个状态。如果用传递函数,得写7个模块,连线连到崩溃。状态空间一个模块搞定,矩阵一填就行。

参数设置要注意:

矩阵 维度 说明
A n×n 系统矩阵,n为状态数
B n×m 输入矩阵,m为输入数
C p×n 输出矩阵,p为输出数
D p×m 直通矩阵,通常为0

注意:D矩阵不能随便填0。如果系统有直通路径(比如比例控制),D矩阵非零。我见过有人把D设成全0,结果仿真结果跟实测差了一个常数偏移,查了半天才发现是直通项丢了。

3.5 连续系统仿真设置:别让仿真设置毁了你的模型

模型搭得再好,仿真设置不对,结果也是废的。我见过太多人在这上面翻车。

仿真设置的核心参数:

参数 推荐值 为什么
Solver ode45(变步长)或ode4(定步长) ode45精度高,ode4适合实时仿真
Start time 0 一般从0开始
Stop time 根据系统时间常数定 至少覆盖5个最大时间常数
Max step size 系统最小时间常数的1/10 步长太大,高频动态丢失
Relative tolerance 1e-3 或 1e-4 精度要求高就设小点

我个人习惯这样配:

  • 先跑一次变步长(ode45),看系统动态有多快
  • 根据结果,确定合适的定步长
  • 如果模型有开关或非线性,用ode23t或ode15s,别用ode45

避坑指南:我曾经做一个液压系统仿真,用ode45跑,结果压力曲线一直在振荡。我以为是模型错了,折腾了两天。后来换成ode23t,问题立刻解决。原来液压系统的刚性太大,ode45根本处理不了。记住:刚性系统用刚性求解器。

3.6 知识体系总览

下面这张图,把连续系统建模的核心逻辑串起来了。你看一眼,心里就有数了。

连续系统建模知识体系 连续系统建模 积分模块 微分模块 传递函数模块 状态空间模块 关键参数 初始条件、限幅 噪声敏感、需滤波 分子分母系数 A、B、C、D矩阵 仿真设置:求解器、步长、容差 核心原则:物理真实 + 数值稳定 + 参数合理

这张图把四个模块和仿真设置的关系理清了。你从中心出发,先选模块,再配参数,最后调仿真设置。每一步都有坑,但每一步也都有解法。

好了,连续系统建模这块,核心就是这些。积分器管记忆,微分器管变化率,传递函数管频域,状态空间管多变量。仿真设置是最后一道关,别让它卡住你。下次咱们聊离散系统,那又是另一番天地了。


专注资料整理