第一部分:核心概念与 Simulink 优势
在开始之前,我们需要理解 Simulink 是什么以及为什么它如此强大。

什么是 Simulink?
Simulink 是 MathWorks 公司开发的 MATLAB 的重要组成部分,是一个基于模型的多域仿真和基于模型的设计环境,它提供了一个图形化界面,允许用户通过拖放“模块”(Blocks)来构建动态系统的方框图模型,并进行仿真分析。
- 多域仿真:可以同时处理连续时间系统(如电路、机械)、离散时间系统(如数字控制算法)、事件驱动系统(如状态机)以及它们的混合。
- 模块化:将复杂的系统分解为功能独立的模块,易于理解、修改和重用。
- 可视化:仿真过程和结果直观可见,便于调试和分析。
为什么选择 Simulink 进行仿真研究?
- 直观性:图形化的建模方式比编写复杂的微分方程或差分方程代码更直观,更贴近物理系统的结构。
- 高效性:内置了大量预定义的模块库(如信号源、连续/离散模块、数学运算、仪表盘等),极大简化了建模过程。
- 集成性:与 MATLAB 无缝集成,MATLAB 负责数值计算、脚本编写、数据分析和高级可视化,Simulink 负责系统建模和仿真,两者结合,功能强大。
- 验证与确认:支持模型在环、软件在环、硬件在环等测试流程,是现代工程开发(尤其是汽车、航空航天、工业控制领域)的标准工具。
- 丰富的工具箱:针对特定领域(如控制系统、通信系统、电力系统、FPGA 设计等)提供了专业工具箱,扩展了其应用范围。
第二部分:Simulink 仿真研究的通用流程
一个完整的 Simulink 仿真研究通常遵循以下步骤:
明确研究目标
这是最关键的一步,在打开 Simulink 之前,必须清晰地定义:
- 研究对象:你想要研究的是什么系统?(一个直流电机速度控制系统、一个通信系统的误码率、一个无人机的飞行轨迹)
- 研究目的:你希望通过仿真得到什么?(验证系统稳定性、分析系统动态响应、优化控制器参数、研究系统在不同参数下的性能)
- 性能指标:如何衡量系统的性能?(上升时间、超调量、调节时间、稳态误差、带宽、能耗等)
示例目标:设计一个 PID 控制器,使直流电机在 0.5 秒内达到设定速度,超调量不超过 10%。

建立数学模型
根据物理定律、控制理论或系统原理,建立系统的数学模型,这通常包括:
- 机理建模:基于牛顿定律、基尔霍夫定律、流体力学等基本原理,推导出系统的微分方程或传递函数。
- 数据驱动建模:如果系统机理复杂,可以通过实验数据辨识出系统的模型(如 ARX 模型、神经网络模型等)。
示例:直流电机的数学模型可以表示为一阶传递函数:G(s) = K / (τs + 1),K 是增益, 是时间常数。
构建 Simulink 模型
这是将数学模型转化为 Simulink 方框图的过程。
- 新建模型:在 MATLAB 命令窗口输入
simulink或点击工具栏图标,打开 Simulink 库浏览器,然后新建一个模型文件(.slx)。 - 选择模块:从库浏览器中拖拽所需的模块到模型编辑区。
- 信号源:
Step(阶跃信号)、Sine Wave(正弦波)、Constant(常数)等,用于输入激励。 - 连续模块:
Transfer Function(传递函数)、State-Space(状态空间)、Integrator(积分器)等,用于描述被控对象。 - 数学运算:
Sum(求和)、Gain(增益)、PID Controller(PID 控制器)等。 - 仪表盘:
Scope(示波器)、Display(数字显示器)、XY Graph(XY 图形)等,用于观察输出。
- 信号源:
- 连接模块:用鼠标连接模块的输入输出端口,形成信号流。
- 设置参数:双击每个模块,打开参数对话框,输入具体的数值或表达式(如传递函数的分子分母系数)。
配置仿真参数
点击模型工具栏的“Model Configuration Parameters”(模型配置参数)按钮,打开设置窗口。

- Solver(求解器):选择求解算法(如
ode45用于连续系统,ode1用于刚性系统)和仿真时间(如0到10秒)。 - Data Import/Export:设置如何将数据导入/导出到 MATLAB 工作区。
- Diagnostics:设置仿真时的警告和错误级别。
运行仿真与结果分析
- 运行:点击工具栏的“Run”按钮开始仿真。
- 可视化:双击
Scope模块,观察系统输出随时间变化的曲线。 - 数据导出:将 Scope 或其他模块的数据导出到 MATLAB 工作区,以便进行更深入的分析。
- 性能评估:根据步骤一设定的性能指标,分析仿真结果,从 Scope 的曲线上测量上升时间和超调量。
迭代优化与验证
仿真结果通常不会一步到位,根据分析结果,返回步骤三或步骤二,调整模型参数(如 PID 的 Kp, Ki, Kd),重新运行仿真,直到满足设计要求,通过对比理论分析、仿真结果和(如果可能)实验数据,来验证模型的准确性。
第三部分:实例研究——PID 控制器设计与仿真
让我们通过一个具体的例子来走完整个流程。
研究目标:为一个一阶惯性系统 G(s) = 1 / (s + 1) 设计一个 PID 控制器,使得系统在单位阶跃输入下,具有快速的响应速度和小的超调量。
步骤 1 & 2:明确目标与建立模型
- 被控对象:
G(s) = 1 / (s + 1) - 控制器:
C(s) = Kp + Ki/s + Kd*s(PID 控制器) - 系统结构:典型的单位负反馈系统。
步骤 3:构建 Simulink 模型
-
打开 Simulink,新建一个模型。
-
从库浏览器拖拽以下模块到模型中:
- Sources 库:
Step(作为输入信号r(t)) - Continuous 库:
PID Controller(作为控制器 C(s))Transfer Function(作为被控对象 G(s))
- Math Operations 库:
Sum(用于求和,注意设置符号为 以实现负反馈) - Sinks 库:
Scope(用于观察输出y(t)和误差e(t))
- Sources 库:
-
按照下图连接模块:
-
设置参数:
- 双击
Step模块,设置Step time为0。 - 双击
Transfer Function模块,设置Numerator为[1],Denominator为[1 1]。 - 双击
PID Controller模块,初始设置P为1,I为0,D为0。
- 双击
步骤 4:配置仿真参数
- 打开模型配置参数,设置
Stop time为10秒,Solver选择ode45(默认)。
步骤 5:运行仿真与初步分析
- 点击
Run运行仿真。 - 双击
Scope,可以看到输出曲线是一条缓慢上升的指数曲线,有稳态误差,这是因为只有比例控制,且增益较小。- 分析:响应太慢,且有稳态误差,需要引入积分作用消除稳态误差,并增大比例作用加快响应。
步骤 6:迭代优化
- 第一次尝试:增大
P到2,I设置为1,D为0。重新
