3. 控制系统建模的数学基础
在Simulink中搭建控制系统模型之前,必须先明确一个核心问题:你手中的数学模型,将以什么形式进入Simulink? 同一个物理系统,可以用微分方程描述,也可以写成传递函数,还可以转换为状态空间。这三种数学形式在Simulink中都有对应的实现路径,但适用场景、建模效率和数值特性各不相同。本节围绕“数学形式→Simulink模块→连续/离散处理”这条主线展开,帮助你在实际建模时做出合理选择。
一、三种数学形式的本质与转换关系
考虑一个典型的二阶机械系统——质量-弹簧-阻尼系统。设质量 m = 1 kg,阻尼系数 c = 2 N·s/m,刚度 k = 10 N/m,外力 F(t) 为输入,位移 x(t) 为输出。其微分方程为:
m·x''(t) + c·x'(t) + k·x(t) = F(t)
即:x''(t) + 2x'(t) + 10x(t) = F(t)
在零初始条件下进行拉普拉斯变换,得到传递函数:
G(s) = X(s)/F(s) = 1 / (s² + 2s + 10)
若选取状态变量 x₁ = x(位移)、x₂ = x'(速度),则可写出状态空间形式:
ẋ₁ = x₂
ẋ₂ = -10x₁ - 2x₂ + F
y = x₁
即 A = [0 1; -10 -2],B = [0; 1],C = [1 0],D = 0。这三种形式描述的是同一个系统,区别在于信息组织方式:微分方程保留物理直觉,传递函数突出输入输出关系,状态空间则暴露内部状态并天然适合多输入多输出系统。
二、Simulink中的对应实现
微分方程路径最直接:将最高阶导数项留在等式左侧,其余项移到右侧,然后用一串 Integrator 模块逐级积分。对于 x'' = F - 2x' - 10x,搭建时用一个 Sum 模块计算右侧,输出接入第一个 Integrator 得到 x',再接入第二个 Integrator 得到 x,并将 x 和 x' 分别乘以增益 10 和 2 后反馈回 Sum。这种方式的优势是物理意义透明,且容易引入非线性环节(如饱和、死区)。
传递函数路径使用 Continuous 库中的 Transfer Fcn 模块。在模块参数对话框中,Numerator coefficients 填写 [1],Denominator coefficients 填写 [1 2 10]。Simulink 内部会自动将其转换为状态空间形式进行求解,用户无需手动处理。这种方式适合线性时不变系统,尤其是从频域设计方法(如Bode图、根轨迹)过渡到仿真验证的场景。
状态空间路径使用 State-Space 模块,在参数中分别填入 A、B、C、D 矩阵。对于上述系统:
A = [0 1; -10 -2]
B = [0; 1]
C = [1 0]
D = 0
状态空间模块的优势在于:可以直接观察内部状态 x₁ 和 x₂,便于分析能控性、能观性,也方便扩展到多输入多输出系统。在Simulink中,还可以用 Integrator 和 Gain 模块手动搭建状态方程,这种方式在教学和需要自定义状态更新逻辑时非常有用。
三、连续系统建模要点
连续系统建模的核心是求解器选择和初始条件设置。Simulink 默认使用变步长求解器 ode45,适用于大多数非刚性系统。如果系统包含快速变化动态或刚性特性(如控制器增益很大、时间常数差异悬殊),应改用 ode23tb 或 ode15s。求解器参数中的 Relative tolerance 和 Absolute tolerance 直接影响仿真精度和速度,默认值 1e-3 和 1e-6 在多数场景下可用,但若发现结果异常振荡或仿真步数过多,应优先检查这两个参数。
初始条件方面,Integrator 模块可以设置初始状态,State-Space 模块也有 Initial conditions 参数。对于传递函数模块,初始条件默认为零,若需要非零初始状态,应改用状态空间形式或手动搭建积分器链。
四、离散系统建模要点
离散系统建模的关键参数是采样时间 Ts。在Simulink中,每个离散模块都需要指定采样时间,通常设为 -1 表示继承上游模块的采样时间,或直接填入具体数值(如 0.01 秒)。离散传递函数使用 Discrete Transfer Fcn 模块,其分母多项式以 z 为变量。例如,将连续传递函数 G(s) = 1/(s²+2s+10) 以 Ts = 0.01 s 离散化,可使用零阶保持器(ZOH)方法,在MATLAB中执行:
G = tf(1, [1 2 10]);
Gd = c2d(G, 0.01, 'zoh');
得到的 Gd 即为离散传递函数,其分子分母系数可直接填入 Discrete Transfer Fcn 模块。离散状态空间模块 Discrete State-Space 同样需要填入离散化后的 A、B、C、D 矩阵,并指定采样时间。
需要特别注意的是:连续模块和离散模块不能随意混用。如果系统中同时存在连续和离散部分,Simulink 会在两者之间自动插入零阶保持器或一阶保持器,但采样时间必须正确设置,否则会出现代数环或仿真步长冲突。建议在建模初期就明确系统的采样周期,并统一所有离散模块的 Ts 值。
Transfer Fcn 或 State-Space 模块更高效;若系统需要离散化实现,先用 c2d 在 MATLAB 中完成离散化,再将系数填入离散模块,避免在 Simulink 中手动推导差分方程。
五、三种形式的选用判断
实际建模时,可以按以下逻辑快速判断:若系统包含明显非线性(如饱和、间隙、摩擦),或需要观察内部物理量,选微分方程路径;若系统是线性时不变且只关心输入输出关系,选传递函数路径;若系统是多输入多输出,或需要做状态反馈、观测器设计,选状态空间路径。三种形式之间可以相互转换,Simulink 也提供了 LTI System 模块和 tf、ss 等 MATLAB 函数支持这种转换。理解它们的对应关系,比记住某个模块的用法更重要。