3. 工业对象数学建模与Simulink实现
工业控制系统设计的起点不是控制器,而是被控对象。若对象的动态特性描述不准确,再精巧的PID参数或先进算法也只是在错误的模型上做优化。本节围绕机理建模展开:先建立微分方程、传递函数、状态空间三种描述之间的转换关系,再以直流电机为主线完成从物理定律到Simulink可运行模型的完整搭建,并简要说明加热炉、液位系统、机械臂关节的建模要点与参数辨识验证方法。
一、三种模型描述及其转换
机理建模的本质是用物理定律(牛顿定律、基尔霍夫定律、能量守恒、质量守恒)写出对象的微分方程,再按使用场景改写成不同形式。
微分方程是最原始的形式,直接反映物理规律。例如直流电机电枢回路的电压平衡与机械轴上的转矩平衡:
L·di/dt = u - R·i - Ke·ω
J·dω/dt = Kt·i - B·ω - TL
其中 u 为电枢电压,i 为电枢电流,ω 为转子角速度,R、L 为电枢电阻与电感,Ke 为反电动势系数,Kt 为转矩系数,J 为转动惯量,B 为粘性摩擦系数,TL 为负载转矩。两个方程通过电流 i 与角速度 ω 相互耦合,这是电机建模的关键。
传递函数在零初始条件下对微分方程取拉普拉斯变换得到,适合频域分析与经典控制器设计。以 ω 为输出、u 为输入、TL 视为扰动,可得:
Kt
G(s) = -------------------------------------
L·J·s² + (R·J + B·L)·s + (R·B + Kt·Ke)
分母二次项说明电机是二阶系统;当电枢电感 L 很小可忽略时,可降阶为一阶惯性环节 K/(Ts+1),这是工程上常用的简化。
状态空间把高阶方程化为一阶向量形式,便于多输入多输出、非线性扩展和数值求解。取状态 x=[i, ω]ᵀ,输入 u=[u, TL]ᵀ,输出 y=ω:
ẋ = A·x + B·u , y = C·x + D·u
A = [ -R/L -Ke/L ] B = [ 1/L 0 ]
[ Kt/J -B/J ] [ 0 -1/J ]
C = [ 0 1 ] , D = [ 0 0 ]
三种形式描述同一对象,选择依据是任务:写方程理解物理、用传递函数做频域设计、用状态空间做现代控制与仿真。下图给出三者的转换路径与各自适用场景。
二、典型工业对象的建模要点
直流电机:如上所述,核心是电气与机械两个子系统的耦合。建模时需注意反电动势 Ke·ω 是电气方程中的反馈项,它使电机具有自阻尼特性;负载转矩 TL 作为扰动输入进入机械方程。
加热炉:以能量守恒为基础,输入为加热功率 P,输出为炉温 T。考虑炉体热容 C 与向环境散热的热阻 R,可得一阶模型 C·dT/dt = P - (T-Ta)/R,传递函数为 K/(Ts+1),其中 T=RC 为热时间常数,通常达数百秒,属于大惯性对象。
液位系统:以质量守恒为基础,输入为入口流量 Qin,输出为液位 h。水箱截面积 A,出口流量与液位平方根相关(湍流流出)时模型为非线性:A·dh/dt = Qin - k√h。在小偏差范围内线性化后可得一阶模型,但大范围工况需保留非线性。
机械臂关节:单关节可简化为转动惯量 J 与粘性摩擦 B 的二阶系统,输入为电机力矩 τ,输出为关节角 θ:J·θ̈ + B·θ̇ = τ。若考虑重力矩与科氏力,则需引入与位形相关的非线性项,此时状态空间形式比传递函数更合适。
三、参数辨识与模型验证
机理建模得到的参数(R、L、J、B、Ke、Kt)往往不能直接查手册获得,需要通过实验辨识。常用方法有:
- 阶跃响应法:给对象施加阶跃输入,记录输出曲线,从稳态增益、上升时间、超调量反推 K 与 T。适合一阶或可近似一阶的对象。
- 频率响应法:施加正弦扫频信号,测量幅频与相频特性,拟合传递函数参数。适合需要频域精度的场合。
- 最小二乘拟合:采集输入输出数据,构造回归矩阵,用最小二乘估计差分方程系数,再转换为连续模型参数。适合有噪声的实测数据。
辨识完成后必须验证。验证不是看曲线“像不像”,而是定量比较:计算模型输出与实际输出的均方根误差(RMSE),检查残差是否白噪声,并在不同工况(不同负载、不同工作点)下重复验证。若误差集中在某一频段,说明该频段模型结构或参数有偏差,需回到机理方程检查是否遗漏了关键动态。
四、在Simulink中搭建直流电机模型
下面以状态空间形式在Simulink中搭建直流电机模型。示例参数取:R=2 Ω,L=0.5 H,J=0.02 kg·m²,B=0.002 N·m·s,Ke=0.1 V·s/rad,Kt=0.1 N·m/A。这些是教学示例值,实际应以辨识结果为准。
搭建步骤:
- 在Simulink中新建模型,从Continuous库拖入State-Space模块。
- 双击State-Space模块,在A、B、C、D栏填入矩阵。A=[-R/L, -Ke/L; Kt/J, -B/J],B=[1/L, 0; 0, -1/J],C=[0, 1],D=[0, 0]。
- 用Step模块作为电压输入 u,用Constant模块作为负载转矩 TL,通过Mux合成两路输入接入State-Space的u端口。
- State-Space输出 y 即为角速度 ω,接Scope观察。若需观察电流,将C改为[1,0;0,1]输出两路状态。
- 设置仿真时间5 s,求解器选ode45,步长自动。
运行后应观察到:阶跃电压施加瞬间电流快速上升,角速度按二阶响应上升并趋于稳态。稳态角速度约为 u·Kt/(R·B+Kt·Ke) = 10×0.1/(2×0.002+0.01) ≈ 71.4 rad/s。若在0.5 s时突加负载 TL=0.05 N·m,角速度会下降,电流上升以补偿负载,这正是电机带载能力的体现。
若发现仿真结果与预期不符,常见排查方向:矩阵维度是否匹配(A为2×2,B为2×2,C为1×2,D为1×2);输入端口顺序是否与B矩阵列对应;单位是否统一(电压V、电流A、转矩N·m、角速度rad/s)。
完成上述模型后,可将State-Space替换为传递函数模块做交叉验证:用同一组参数分别运行,比较两条角速度曲线是否重合。若重合,说明两种描述一致,模型可信;若不一致,检查传递函数系数是否由同一组R、L、J、B、Ke、Kt推导而来。这一步是模型验证中最直接有效的手段。