第二章 开发环境搭建:MATLAB/Simulink安装与配置、嵌入式编码器安装、必要的工具箱介绍

好,咱们直接进入正题。做基于模型的开发,第一件事就是把家伙事儿备齐。我见过不少新手,装个软件就卡半天,后面代码生成更是各种报错。其实说白了,环境搭好了,后面能省80%的麻烦。

2.1 MATLAB/Simulink 版本选择与安装

我个人习惯,选版本有个原则:不追新,不守旧。太新的版本,第三方硬件支持包可能还没跟上;太老的版本,很多新功能没有,代码生成效率也低。

目前工业界用得比较稳的,是 R2021b 到 R2023b 这个区间。我项目组现在统一用 R2022b,为什么?因为当时有个客户指定的编译器,只有这个版本兼容得最好。你想想看,要是装了个最新版,结果编译器不认,那多耽误事。

注意: 安装路径不要有中文!不要有空格!我见过有人装在 "D:\程序\MATLAB" 下面,结果编译的时候路径解析出错,折腾了两天。老老实实用 "D:\MATLAB\R2022b" 这种格式。

安装步骤其实很简单,但有几个坑我得提一下:

  • 许可证文件:如果是公司买的网络许可证,记得配好 license server 地址。我刚开始用的时候,老以为激活失败是软件坏了,后来发现是 IT 给的服务器地址少了个端口号。
  • 产品选择:别一股脑全装。我建议只勾选你需要的:MATLAB、Simulink、Embedded Coder、Stateflow,再加上几个常用的工具箱。全装的话,硬盘占用轻松超过 30GB,而且启动慢。
  • 防火墙设置:安装过程中如果卡在 "正在激活",八成是防火墙拦了。临时关一下,或者把 MATLAB 加入白名单。

2.2 嵌入式编码器(Embedded Coder)安装

Embedded Coder 才是咱们做代码生成的核心。没有它,Simulink 只能生成那种跑在 PC 上的原型代码,没法直接烧到单片机里。

安装的时候,在 MathWorks 产品列表里找到 “Embedded Coder”,勾上就行。但我提醒你,光装这个还不够,还得装对应的 硬件支持包

我的经验: 在 MATLAB 命令行输入 targetinstaller,会打开 Support Package Installer。这里可以下载你需要的芯片支持包,比如 TI C2000、Infineon TC2xx/TC3xx、NXP S32K 等等。我曾经给一个客户做项目,他们用的芯片比较冷门,结果支持包没装对,代码生成出来全是乱码。后来发现是版本不匹配。

安装完成后,怎么验证呢?我教你一个快速方法:

% 在 MATLAB 命令行输入:
>> which('rtwgen')
% 如果返回路径,说明 Embedded Coder 安装成功
>> coder.checkLicense
% 检查许可证是否有效

如果返回 "License checkout failed",别慌。先看看环境变量 LM_LICENSE_FILE 有没有配对。我遇到过最奇葩的一次,是杀毒软件把 license 文件当病毒隔离了……

2.3 必要的工具箱介绍

做发动机控制,不是光有 Simulink 和 Embedded Coder 就够的。下面这几个工具箱,我建议你装上,省得后面用到的时候抓瞎。

工具箱名称 用途 我的评价
Stateflow 状态机建模,用于模式切换、故障处理逻辑 必装。发动机的启动、怠速、加速、减速这些模式,用 Stateflow 画出来最直观。
Simulink Coder 生成 C 代码的基础包 Embedded Coder 的前置依赖,装 Embedded Coder 时会自动装。
Fixed-Point Designer 定点数建模与仿真 发动机控制很少用浮点,因为成本高。这个工具箱帮你做定标,避免溢出。
Vehicle Dynamics Blockset 车辆动力学模型 做硬件在环(HIL)仿真时很有用。不过如果只是做算法,可以先不装。
Simulink Design Verifier 模型形式化验证 这个我强烈推荐。它能自动检测模型里的死逻辑、除零错误。我曾经用它发现过一个隐藏很深的溢出 bug,要是没发现,代码跑起来后果不堪设想。
Polyspace Bug Finder 代码静态分析 生成代码后,用 Polyspace 扫一遍,能发现运行时错误。很多 OEM 要求必须过这一关。

嗯,这里要注意一点:工具箱不是越多越好。我见过有人一口气装了 20 多个工具箱,结果 MATLAB 启动要 5 分钟。你想想看,每次改个参数都要等半天,效率全没了。所以我的建议是:按需安装,用到什么装什么

2.4 环境验证:跑一个简单的例子

装完别急着走,咱们跑个例子验证一下。我习惯用 Embedded Coder 自带的 rtwdemo_engine 模型:

% 在命令行输入:
>> rtwdemo_engine
% 这会打开一个发动机控制示例模型
>> slbuild('rtwdemo_engine')
% 生成代码

如果一切顺利,你会看到 MATLAB 下方输出 "### Successful completion of build procedure"。这时候去工作目录看看,应该多了一个 rtwdemo_engine_ert_rtw 文件夹,里面就是生成的 C 代码。

避坑指南: 我曾经遇到过生成代码时卡在 "Checking for available compiler"。这是因为 MATLAB 没找到 C 编译器。解决办法:在命令行输入 mex -setup,选一个已安装的编译器。做嵌入式开发,我推荐 MinGW-w64 或者 TI 的编译器,别用 Visual Studio,太大了。

好了,环境搭好,咱们就可以正式开始做模型了。下一章,我会带你从零开始搭建一个发动机扭矩控制模型。到时候你会发现,前面这些准备工作,花得值。