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 形”,而是每一层设计都有对应的验证层。左侧每写一条需求,右侧就要有可执行的测试用例覆盖它;否则模型只是“能跑”,不是“可交付”。

汽车控制算法开发 V 模型与 Simulink 定位 整车级需求 扭矩/响应/安全指标 系统级设计 子系统划分与接口 软件架构 端口/周期/数据类型 单元实现 Simulink 模型搭建 嵌入式 C 代码生成 Embedded Coder / AUTOSAR 单元测试 MIL 边界/饱和/时序 集成测试 SIL/PIL 代码与模型一致性 系统/HIL 测试 实时机与整车模型 实车标定与验收 响应/平顺/安全 Simulink 核心定位 建模 · 仿真 · 测试 · 代码生成 · 追溯 设计分解 ↓ 逐级验证 ↑

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 服务器时,极易出现“模型能打开但无法编译”的问题。