从零基础到嵌入式代码部署 — 43 课系统学习路径
覆盖经典控制、现代控制、鲁棒/非线性/MPC、自适应/模糊、物理建模到代码生成
所有教程一键运行(run_all_tutorials)自动生成的结果图,更多见 docs/images:
| PID 闭环控制 (t05) | LQR 最优控制 (t10) |
![]() |
![]() |
| Kalman 滤波 (t12) | PMSM 矢量控制 FOC (t14) |
![]() |
![]() |
git clone https://github.com/xingd5478-ctrl/simulink-control-tutorial.git在 MATLAB 中打开项目目录,运行环境检查脚本:
>> check_setup>> t00_main_guide % 查看全部 43 课总览
>> t01_signal_basics % 第 1 课:正弦波 + 增益 + 示波器% 基础阶段 (t01-t08) — 不需要额外工具箱
% 经典控制 (t16, t17, t22) — 需要 Control System Toolbox
% 现代控制 (t09-t12) — 状态空间、LQR、观测器、Kalman
% 高级控制 (t18-t21, t23, t24) — 鲁棒、MPC、滑模、自适应、模糊
% 应用部署 (t13, t14, t25, t15) — 电机、Simscape、代码生成
% 综合案例 (t26-t30) — 机器人、建模、DSP、悬挂
% 非线性滤波 (t31-t35) — EKF、UKF、IMU 融合
% Simulink 进阶 (t36-t43) — Stateflow、Bus、模型引用、变体等
% 也可以一键运行全部(比较耗时,建议学完基础后再试)
>> run_all_tutorials每个脚本会自动创建 Simulink 模型 (.slx) → 配置模块 → 运行仿真 → 生成结果图,你不需要手动搭任何模型。
- 双击 Scope 模块 — 查看仿真波形
- 双击其他模块 — 看看参数是怎么设置的
- 修改参数 — 比如把增益从 2 改成 5,重新运行看变化
- 观察生成的 MATLAB Figure — 里面的对比图帮你理解概念
| 依赖 | 说明 | 阶段 |
|---|---|---|
| MATLAB R2020a+ | 核心运行环境 | 全部 |
| Simulink | 模型搭建与仿真 | 全部 |
| Control System Toolbox | 状态空间、LQR、Kalman、频域分析 | Phase 2-5 |
| Robust Control Toolbox | H∞ / μ 分析 | t19 (可选) |
| Model Predictive Control Toolbox | MPC 设计 | t20 (可选) |
| Fuzzy Logic Toolbox | 模糊推理系统 | t24 (可选) |
| Simscape | 物理建模 | t25 (可选) |
新手提示:t01-t08 只需 MATLAB + Simulink,不需要额外工具箱。安装 MATLAB 时勾选 Simulink 即可。运行
check_setup可以一键检查你的环境是否满足要求。
Q: 我完全没学过控制理论,能学吗?
能。Phase 1 (t01-t08) 只教 Simulink 操作,不涉及控制理论。学完 Phase 1 你就能熟练搭建 Simulink 模型了。后续教程会在需要的地方解释控制概念。
Q: 运行脚本时报 "Undefined function or variable"?
确保 MATLAB 的当前文件夹是项目根目录(simulink-control-tutorial/)。在 MATLAB 的"当前文件夹"面板中导航到该目录即可。
Q: 仿真没有波形输出?
双击模型窗口里的 Scope 模块,如果波形是一条直线,检查 Step 模块的 Step time 参数(通常在 0.5s 处跳变,不是 0s)。
Q: 模型窗口太多,怎么关闭?
在 MATLAB 命令窗口输入:
>> bdclose all % 关闭所有 Simulink 模型
>> close all % 关闭所有 FigureQ: 我想重新生成某个教程的模型,怎么做?
直接重新运行该教程脚本即可,它会自动覆盖旧的 .slx 文件:
>> t05_pid_control43 个教程,分八个阶段,按学习路径从基础到工业级应用循序递进。
| # | 教程 | 内容 | 模型 |
|---|---|---|---|
| t01 | 信号基础 | 信号、增益、示波器 | ✅ |
| t02 | 数学运算 | 加法、乘法、Mux/Demux 信号路由 | ✅ |
| t03 | 一阶系统 | 传递函数、时间常数 | ✅ |
| t04 | 二阶系统 | 阻尼比、超调量、固有频率 | ✅ |
| t05 | PID 控制 | P/I/D 各环节作用、反馈闭环 | ✅ |
| t06 | 信号源与输出 | 数据导入导出、多种信号源 | ✅ |
| t07 | 子系统 | 模型层次化封装 | ✅ |
| t08 | Mask 封装 | 参数化模块设计 | ✅ |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t16 | 频域分析 | Bode图、Nyquist图、增益/相位裕度 | 频域稳定性判据 |
| t17 | 超前-滞后校正 | Lead/Lag 补偿器、频率整形 | 经典控制设计方法 |
| t22 | 根轨迹法 | rlocus()、极点走向、补偿器设计 | 经典控制设计可视化 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t09 | 状态空间模型 | ẋ=Ax+Bu, y=Cx+Du | 现代控制理论基础 |
| t10 | LQR 最优控制 | 极点配置、Riccati 方程、Q/R 调参 | 多变量系统设计 |
| t11 | 状态观测器 | Luenberger Observer、对偶性、(A-LC) | 无传感器控制 |
| t12 | Kalman 滤波 | lqe()、Q/R 噪声建模、Luenberger 对比 | 噪声环境最优估计 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t18 | 系统辨识 | 阶跃响应法、最小二乘、模型验证 | 从实验数据到数学模型 |
| t19 | H∞ 鲁棒控制 | 混合灵敏度、hinfsyn、μ 分析 | 不确定性下的最优控制 |
| t20 | 模型预测控制 MPC | 滚动优化、QP 约束求解、显式 MPC | 带约束的多变量控制 |
| t21 | 滑模控制 SMC | 滑模面、抖振抑制、Super-Twisting | 非线性鲁棒控制 |
| t23 | MRAC 自适应控制 | MIT 规则、参考模型、参数自适应 | 参数时变系统的在线调节 |
| t24 | 模糊逻辑控制 | Sugeno FIS、隶属度函数、控制曲面 | 免模型专家经验控制 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t13 | DC 电机控制 | 电磁+机械耦合、级联 PI、LQR 对比 | 执行器建模 |
| t14 | PMSM + FOC | d-q 变换、Clarke/Park、矢量控制 | 无刷电机控制 |
| t25 | Simscape 物理建模 | 物理元件连线、多域耦合、自动推导 | 免公式推导的建模方法 |
| t15 | 代码生成 | c2d 离散化、dlqr、C 代码、FreeRTOS | 嵌入式部署 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t26 | 机器人运动学 | DH 参数、正逆运动学、PUMA560 | 机器人控制基础 |
| t27 | MSD 系统建模 | TF/SS/离散化/数值积分四法对比 | 多角度系统理解 |
| t28 | DSP 基础 | 采样定理、FFT、窗函数、低通滤波 | 信号处理实战 |
| t29 | MSD 控制系统 | PID vs LQR + 传感器噪声 | 控制方案对比 |
| t30 | 主动悬挂控制 | 1/4 车模型 + PID 闭环 | 完整工程案例 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t31 | EKF 基础 | Van der Pol 振子、Jacobian 局部线性化 | 非线性系统状态估计入门 |
| t32 | EKF 倒立摆 | 强非线性 sin(θ)、初值收敛 | 经典非线性案例实战 |
| t33 | UKF | Sigma 点、无迹变换、免 Jacobian | 高精度非线性滤波 |
| t34 | EKF vs UKF | Monte Carlo 统计对比 | 选型依据 |
| t35 | IMU 融合 | 陀螺仪+加速度计、互补滤波 vs EKF | 飞控/手机/VR 姿态估计 |
| # | 教程 | 核心理论 | 工程价值 |
|---|---|---|---|
| t36 | Stateflow 状态机 | 状态/转移/条件动作 | 逻辑控制建模 |
| t37 | 触发/使能子系统 | Enabled/Triggered 条件执行 | 嵌入式采样/使能控制 |
| t38 | Bus 信号 | Bus Creator/Selector 打包拆解 | 大规模信号组织 |
| t39 | 模型引用 | Model block 子模型复用 | 大模型分解 |
| t40 | 变体子系统 | Variant Subsystem 方案切换 | A/B 测试、多配置 |
| t41 | 模型回调 | PreLoad/Init/StopFcn | 自动化初始化/保存 |
| t42 | S-Function | Level-2 MATLAB S-Function | 自定义模块 |
| t43 | Model Advisor | 静态分析、代数环检查 | 建模质量把关 |
Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase 7 Phase 8
(基础) (经典) (现代) (高级) (机电) (综合) (非线性 NEW!) (进阶 NEW!)
t01-t08 → t16 频域 → t09 状态空间 → t18 辨识 → t13 DC电机 → t26 运动学 → t31 EKF → t36 Stateflow
├t17 校正 ├t10 LQR ├t19 H∞ ├t14 FOC ├t27 建模 ├t32 EKF实战 ├t37 触发使能
└t22 根轨迹 ├t11 观测器 ├t20 MPC ├t25 Simscape├t28 DSP ├t33 UKF ├t38 Bus信号
└t12 Kalman ├t21 滑模 └t15 代码 ├t29 控制 ├t34 EKFvsUKF ├t39 模型引用
├t23 MRAC └t30 悬挂 └t35 IMU融合 ├t40 变体
└t24 模糊 ├t41 回调
├t42 S-Function
└t43 Model Advisor
t01-t08 Simulink 基础 — 点击展开
- t01 信号基础: 认识 Simulink 模块库,搭建第一个信号流模型,理解 Gain/Scope 的作用
- t02 数学运算: Sum/Product/Mux/Demux 模块,掌握信号的路由与运算
- t03 一阶系统: 传递函数建模,理解时间常数 τ 对响应速度的影响
- t04 二阶系统: 阻尼比 ζ 与超调量的关系,从时域波形反推系统参数
- t05 PID 控制: P/I/D 三环节独立验证 + 联合闭环调参,直观理解"为什么需要 D"
- t06 信号源与输出: 从 Workspace 导数据到 Simulink,仿真结果回存 Workspace
- t07 子系统: 将复杂模型折叠成黑盒,理解层次化建模思想
- t08 Mask 封装: 自定义参数对话框,让子系统可复用、可配置
t16, t17, t22 经典控制设计 — 点击展开
- t16 频域分析: Bode/Nyquist/Nichols 图,增益裕度与相位裕度,频域稳定性判据
- t17 校正器: Lead/Lag 补偿器设计,频率整形,改善瞬态与稳态性能
- t22 根轨迹法: 开环增益 K 从 0→∞ 时闭环极点在复平面的运动轨迹,rlocus() 自动绘制,sgrid 叠加设计约束
t09-t12 现代控制理论 — 点击展开
- t09 状态空间: 从传递函数到状态空间,理解"状态"的物理意义,能控/能观性
- t10 LQR: 极点配置 → LQR 最优控制,Riccati 方程,Q/R 权重矩阵调参策略
- t11 观测器: Luenberger 观测器设计,对偶原理,分离原理验证
- t12 Kalman: 过程噪声与测量噪声建模,lqe() 设计,与 Luenberger 对比
t18-t21, t23, t24 高级控制专题 — 点击展开
- t18 系统辨识: 阶跃响应法、最小二乘法,从实验数据拟合传递函数,模型验证
- t19 H∞ 鲁棒: 不确定性建模 (ureal/uss),混合灵敏度 S/KS/T 整形,μ 分析
- t20 MPC: 预测模型、滚动优化、QP 约束求解,约束下的多变量控制
- t21 滑模控制: 滑模面设计、等效控制、抖振抑制(饱和函数/超螺旋算法)
- t23 MRAC 自适应: 参考模型指定理想行为,MIT 规则在线调节控制器参数,参数突变时自动恢复
- t24 模糊控制: Sugeno 型模糊推理系统,5×5 规则表,高斯隶属度函数,无模型专家经验控制
t13-t15, t25 机电系统与部署 — 点击展开
- t13 DC 电机: 电磁+机械耦合建模,级联 PI 控制,LQR 对比
- t14 PMSM/FOC: Clarke/Park 变换,d-q 解耦,矢量控制
- t25 Simscape: 物理建模—不用推公式,直接放元件
- t15 代码生成: c2d 离散化 → dlqr → C 代码 → FreeRTOS
t26-t30 综合应用案例 — 点击展开
- t26 机器人运动学: DH 参数、正逆运动学、PUMA560 工作空间
- t27 MSD 建模: TF/SS/离散化/数值积分四法对比
- t28 DSP 基础: 采样定理、FFT、窗函数、低通滤波
- t29 MSD 控制: PID vs LQR 一键切换 + 传感器噪声
- t30 主动悬挂: 1/4 车模型、路面→车轮→弹簧→车身→PID 闭环
t31-t35 非线性滤波(NEW v2.1.0) — 点击展开
- t31 EKF 基础: Van der Pol 振子,EKF 五步循环,Jacobian 局部线性化
- t32 EKF 倒立摆: 强非线性 sin(θ),从很差的初值收敛
- t33 UKF: Sigma 点采样,无迹变换,不需要 Jacobian
- t34 EKF vs UKF: Monte Carlo 统计对比,μ 扫参
- t35 IMU 融合: 陀螺仪+加速度计姿态估计,互补滤波 vs EKF
t36-t43 Simulink 进阶工程(NEW v2.1.0) — 点击展开
- t36 Stateflow: 状态机、状态/转移/条件动作,电机启停控制
- t37 触发/使能子系统: Enabled/Triggered 条件执行,采样保持
- t38 Bus 信号: Bus Creator/Selector 打包拆解,按名提取
- t39 模型引用: Model block 引用子模型,独立开发测试
- t40 变体子系统: 一套模型多套方案,变量切换
- t41 模型回调: PreLoad/Init/StopFcn 自动初始化保存
- t42 S-Function: Level-2 MATLAB S-Function 自定义死区模块
- t43 Model Advisor: 静态分析、代数环检查、未连接端口
完成全部 43 课,你将具备以下能力:
- 从物理定律推导状态空间模型
- 设计 LQR/Kalman 最优控制器和观测器
- 在 Bode/Nyquist 图上分析稳定性并设计补偿器
- 从实验数据辨识系统模型
- 处理参数不确定性,设计 H∞ 鲁棒控制器
- 为带约束系统设计 MPC 控制器
- 实现滑模控制应对非线性/大扰动
- 用根轨迹法分析极点走向并设计补偿器
- 设计 MRAC 自适应控制器应对参数时变系统
- 搭建模糊逻辑控制系统,不依赖精确数学模型
- 使用 Simscape 进行物理建模,免公式推导
- 连续→离散→C 代码,部署到 STM32 等嵌入式平台
- 理解级联 PI、FOC 矢量控制的工业实践
.
├── check_setup.m # 新手环境检查(运行开始前先跑这个)
├── t00_main_guide.m # 教程索引(运行查看全貌)
├── t01-t43_*.m # 43 个教程主脚本
├── models/ # Simulink 模型文件(脚本自动生成)
│ └── tutorial01-tutorial43.slx
├── utils/ # 共享工具函数
│ └── getSimData.m
├── run_all_tutorials.m # 一键运行全部教程
├── docs/images/ # 自动生成的仿真结果图
├── .github/ # Issue/PR 模板
├── README.md # 本文件(中文)
├── README_EN.md # English version
├── CHANGELOG.md # 更新日志
├── CONTRIBUTING.md # 贡献指南
├── CODE_OF_CONDUCT.md # 社区行为准则
├── SECURITY.md # 安全政策
└── LICENSE # MIT 协议
- STM32-MPU6050-System — MEMS 陀螺仪 Allan 方差 + 自适应 Kalman 实物项目
- ebpf-robot-safety — eBPF 实时控制安全监控
欢迎 Issue 和 PR!提 bug、建议新专题、改进文档都算贡献。
- 发现 bug → 使用 Bug Report 模板
- 新专题建议 → 使用 Tutorial Request 模板
- 改进代码/文档 → Fork → 修改 → PR
详见 CONTRIBUTING.md。
MIT — 可自由使用、修改、分发,详见 LICENSE。
如果这套教程对你有帮助,欢迎点个 ⭐ Star,也欢迎提 Issue 反馈问题或建议新专题。
邢栋 · 2026



