1. 课程导入与开发环境搭建
汽车控制算法开发不是“打开 Simulink 画几个框图、点一下运行”这么简单。它是一条从需求到量产代码的受控工程链路:需求先被拆成可验证的功能指标,再被建模为可执行的控制器,随后在模型在环(MIL)、软件在环(SIL)、处理器在环(PIL)和硬件在环(HIL)中逐级验证,最后生成符合 AUTOSAR 或目标编译器约束的嵌入式代码,并经过标定与实车验证。Simulink 在这条链路中的价值,是把“控制逻辑”变成可仿真、可测试、可追溯、可自动生成代码的工程资产。
1.1 汽车控制算法开发的 V 模型流程
V 模型左侧是设计分解,右侧是逐级验证,底部是代码实现。以纯电动汽车整车控制器(VCU)中的“加速踏板扭矩请求”功能为例,可以看清每一层到底在做什么:
- 整车级需求:踏板开度 0%~100% 对应请求扭矩 0~300 N·m,响应时间小于 100 ms,且需满足扭矩安全监控。
- 系统级设计:将需求拆为踏板信号采集、开度-扭矩 MAP、驾驶模式修正、扭矩限制与仲裁四个子系统。
- 软件架构:定义各子系统的输入输出端口、采样周期(如 10 ms)、数据类型(single/uint16)与运行实体。
- 单元实现:在 Simulink 中搭建 MAP 查表、滤波、限幅、状态机等具体逻辑。
- 单元测试(MIL):用信号编辑器或测试用例验证 MAP 输出、边界与饱和行为。
- 集成测试(SIL/PIL):将模型生成代码,在 PC 或目标处理器上验证接口与数值一致性。
- 系统/HIL 测试:接入 dSPACE 或 Speedgoat 实时机,模拟踏板、电机、电池与整车动力学。
- 实车标定与验收:在台架与实车上完成扭矩响应、平顺性与安全监控验证。
V 模型的关键不是“画成 V 形”,而是每一层设计都有对应的验证层。左侧每写一条需求,右侧就要有可执行的测试用例覆盖它;否则模型只是“能跑”,不是“可交付”。
1.2 Simulink 在 V 模型中的具体定位
Simulink 不是只出现在 V 模型底部的“画图工具”,它贯穿左右两侧:
- 左侧设计阶段:用 Simulink 建立可执行规格(Executable Specification)。相比 Word 文档,模型能直接仿真,能提前暴露接口不匹配、数据类型溢出、采样周期冲突等问题。
- 底部实现阶段:通过 Embedded Coder 将模型生成 C 代码,配合 AUTOSAR 组件模板生成 RTE 接口,直接进入编译链路。
- 右侧验证阶段:用 Simulink Test 管理测试用例,用 Simulink Coverage 统计模型覆盖率,用 Polyspace 做静态分析,用 Simulink Real-Time 或 Speedgoat 做 HIL。
因此,一个合格的 Simulink 工程必须同时满足“可仿真、可测试、可生成代码、可追溯”四个条件。只满足“能跑出波形”的模型,在量产项目中通常无法通过评审。
1.3 MATLAB/Simulink 安装与版本选择
汽车项目对版本一致性要求很高。建议遵循以下原则:
- 版本统一:项目组、供应商、测试台架使用同一 MATLAB 版本,例如 R2023b。不同版本生成的模型在库链接、代码生成配置上可能不兼容。
- 工具箱按需安装:基础控制算法至少需要 Simulink、Stateflow、Embedded Coder、Simulink Test、Simulink Coverage、Fixed-Point Designer。若做 AUTOSAR,还需 AUTOSAR Blockset;若做 HIL,需 Simulink Real-Time 或对应硬件支持包。
- 安装路径避免中文与空格:例如
C:\MATLAB\R2023b,否则部分代码生成工具链会报路径错误。 - 编译器匹配:Embedded Coder 需要目标编译器,如 MinGW-w64(PC 端 SIL)或 Tasking/GHS/GreenHills(目标 MCU)。安装后可用
mex -setup检查。
安装完成后,建议在 MATLAB 命令窗口执行以下检查:
ver % 查看已安装工具箱与版本
mex -setup C % 配置 C 编译器
slLibraryBrowser % 打开 Simulink 库浏览器
coder.checkGpuInstall % 若涉及 GPU 代码生成时使用
1.4 工程目录规范
汽车控制算法项目通常持续数年、多人协作,目录规范直接影响可维护性。推荐按“模型、数据、脚本、测试、生成代码、文档”分层,且所有路径使用相对路径,保证工程可整体迁移。
| 目录 | 用途 | 示例内容 |
|---|---|---|
01_model/ | Simulink 模型与子系统 | VCU_TorqueRequest.slx、TorqueMap.slx |
02_data/ | 标定数据、MAP、参数 | pedal_map.mat、motor_limit.par |
03_script/ | 初始化与自动化脚本 | init_params.m、build_model.m |
04_test/ | 测试用例与测试报告 | MIL_TorqueRequest.mldatx |
05_codegen/ | 生成代码与编译配置 | VCU_TorqueRequest_ert_rtw/ |
06_doc/ | 需求、接口、评审记录 | SWRS_TorqueRequest.docx |
建议在工程根目录放置一个
startup.m,统一添加路径、加载参数、设置代码生成缓存目录。这样任何成员打开工程后只需运行一次 startup,即可获得一致的编译与仿真环境。
不要把
.slx、.mat、生成代码和临时缓存混放在同一目录;也不要把绝对路径写进模型回调或脚本。否则工程迁移到另一台电脑或 CI 服务器时,极易出现“模型能打开但无法编译”的问题。