电赛备赛时间通常只有三到四周,队伍里最难啃的部分往往不是算法推导,而是实物调试。特别是用 TI C2000 DSP 做数字电源或者电机控制时,光是搞定外设初始化、PWM 波形、ADC 触发、中断服务函数,就能耗掉一大半时间。更麻烦的是,很多人还没走到控制算法阶段,就已经被上千行的 C 代码配置劝退了。
但如果你换一个思路,全程不手写 C 代码,所有控制算法都在 Simulink 里画出来,然后让 MATLAB 自动生成代码并烧录到 DSP 里,整个开发流程会完全不一样。这不是未来概念,而是 TI 官方和 MathWorks 早就做好的成熟链路。这篇文章从电赛最常见的 15A 双向 DCDC 变换器仿真开始,讲清楚怎么用 MATLAB 的 C2000 Blockset 快速完成模型搭建、算法验证和仿真分析,给后面真正上手 DSP 打底。
这篇的内容定位很明确:它是整个系列的第一篇,以“仿真”为主。你不需要有一块真实的 DSP 开发板,也不需要会写 C 语言,只要电脑上装了 MATLAB 和必要的工具箱,就能跟着把一套双向 DCDC 的 Simulink 仿真跑起来。大家最关心的代码生成和板级部署,我会在下一篇专门展开。
1. 这篇文章真正要解决的问题
先说一个很实际的痛点。很多电赛队伍在 DCDC 题目上选型时会纠结:用数字控制还是模拟控制?用单片机还是 DSP?如果选择了 DSP,前面两三周往往都花在“让程序跑起来”这件事上,而不是“让控制策略有效”。
传统 DSP 开发路径大概是这样的:安装 CCS → 新建工程 → 配置时钟 → 配置 GPIO → 配置 PWM 模块 → 配置 ADC → 写中断服务函数 → 写 PI 控制代码 → 调试串口 → 联调硬件。等到真正开始调电压环电流环的时候,比赛已经过去一半了。
而用 MATLAB + C2000 Blockset 的方式,芯片初始化和外设配置几乎全部变成了 Simulink 模块的图形化参数设置。你不需要记EPwm1Regs.TBPRD = 1000这种寄存器操作,也不需要关心 PWM 计数器工作在哪种模式,只需要在模块界面上把死区、频率、计数模式选好就行。
但这篇文章要解决的,还不仅仅是“少写代码”这件事。仿真本身也有价值。很多人直接拿着板子调,一接上功率电路就烧保险、炸 MOSFET,原因就是控制参数完全没底。如果你先在 Simulink 里把主电路、控制环路、保护逻辑都跑通了,至少能在上电之前知道:
- PID 参数大概在什么量级;
- 软启动时间应该设多长;
- 从 Buck 模式切换到 Boost 模式时的占空比变化趋势;
- 负载突变时电流环和电压环的恢复速度。
所以这篇文章适合三类读者:
第一类是准备电赛电源题目、但还没接触过 DSP 的选手,你可以通过仿真先建立整体认识。 第二类是已经会用 CCS 写简单程序、但控制算法调不明白的同学,仿真能帮你把精力集中在算法本身。 第三类是正在考虑用 MATLAB 做数字化电源开发的工程师,可以用这套流程快速评估控制策略的可行性。
一句话总结这篇文章的判断:C2000 DSP 难的不是控制理论,而是从算法到硬件的工程链路;MATLAB C2000 Blockset 的作用,是把这条链路中的代码环节压缩到最小。
2. C2000 Blockset 到底是什么
很多同学听说过“MATLAB 支持包”,但搞不清它和 TI 的 CCS、SysConfig 是什么关系。这里用一个类比来解释。
你把 DSP 想象成一个还没装修的房子。CCS 是给这个房子布线、装开关、铺管道的工具,你需要知道每根线接到哪里。而 C2000 Microcontroller Blockset 更像是装修公司提供的“套餐”:你不用自己拉线,只需要在平面图上画出“这里要一盏灯、那里要一个插座”,有人会帮你把线接好。
从技术上来说,C2000 Microcontroller Blockset 是 MathWorks 官方发布的一个 Simulink 工具箱,它和 Embedded Coder 配合,能够把 Simulink 模型转换成针对 TI C2000 系列芯片优化的 C 代码,甚至自动生成 CCS 工程文件。
它提供的模块覆盖了 C2000 芯片的常用外设:
| 模块类别 | 典型模块 | 解决的问题 |
|---|---|---|
| PWM 生成 | ePWM、HRPWM | 配置载波频率、死区时间、A/B 相输出 |
| 模拟采样 | ADC、CMPSS | 配置采样通道、触发源、结果寄存器 |
| 编码器接口 | eQEP | 电机转速位置反馈 |
| 通信接口 | SCI、SPI、I2C、CAN | 串口打印、外部通信 |
| 数字 IO | GPIO | 继电器控制、状态指示 |
| 中断系统 | ADC Interrupt、Timer Interrupt | 决定控制环在什么时候执行 |
| 内存和配置 | Data Type Conversion、Memory Copy | 匹配芯片数据格式、RAM 运行代码 |
这些模块看起来只是把 CCS 里的寄存器配置图形化了,但实际上还有一层更重要的能力:自动代码生成。你在 Simulink 里搭建的控制器,经过 Embedded Coder 生成 C 代码后,会直接生成.out文件或者 CCS 工程,你只需要在 CCS 里编译烧录即可。
那和电赛有什么关系?关系很大。电赛题目里常见的 DCDC、逆变器、PFC、电机驱动,本质上都是“采样 → 控制计算 → 更新占空比”的循环。这个循环在传统开发中散落在初始化代码、中断函数、算法文件里,而用 Blockset 后,你只需要画出一个控制子系统,设置好采样触发,剩下的事情工具链搞定。
需要特别说明的是,不同 MATLAB 版本的 Blockset 名称略有差异。老版本叫 “Embedded Coder Support Package for TI C2000 Processors”,从 R2021 前后开始,MathWorks 逐渐把它整合成独立的 “C2000 Microcontroller Blockset”。安装方式都是在 MATLAB 的 “Add-On Explorer” 里搜索 C2000 后安装。支持型号比较多,常见的有 F28003x、F28004x、F2837x、F2806x 等系列。
3. 双向 DCDC 的仿真建模思路
15A 双向 DCDC 是电赛电源题非常经典的设计要求。所谓“双向”,就是能量可以从输入侧流向输出侧,也可以从输出侧回流到输入侧。典型应用是电池充放电:充电时电流从母线流向电池,放电时电流从电池回馈到母线。
双向 DCDC 的拓扑通常有隔离型和非隔离型。电赛题一般不会强制要求隔离,所以非隔离的同步 Buck-Boost 拓扑最常用。它本质上就是四个开关管加上一个电感,工作在 Buck 模式时是降压,工作在 Boost 模式时是升压,而“同步”意味着整流管也换成了 MOSFET,而不是二极管。
在 Simulink 中搭建这个仿真,有两条路线:
第一条路线:全部用 Simscape Electrical 元件搭建。这种方式最接近电路真实情况。你需要从元件库拖出直流源、MOSFET、二极管、电感、电容、电阻,然后配置每个元件的参数。好处是波形细节完整,适合分析开关纹波和效率;缺点是仿真速度慢,而且如果控制环路没调好,很容易仿真报错。
第二条路线:用平均值模型 + 控制器模型。这种方式把开关管等效为受控电压源或受控电流源,仿真步长可以设得很大,运行速度非常快,适合调 PI 参数和验证策略,但看不到高频开关纹波。
对于电赛备赛,我建议两条路线都做:先用平均值模型整定控制参数,再用开关模型验证关键波形。你可能会问,那 C2000 Blockset 的模块在哪里?在纯仿真阶段不一定要用到芯片外设模块,因为仿真中的 PWM 信号直接用 Simulink 的 Pulse Generator 或者自建 PWM 比较逻辑就可以。
那 C2000 Blockset 什么时候用?答案是:当你想验证“这段控制算法在 DSP 里跑起来会怎么样”的时候。你可以把 Simulink 模型里的控制器部分替换成 C2000 Blockset 的外设模块,比如直接用 ePWM 模块输出 PWM 信号,用 ADC 模块读取采样值。这样在仿真阶段就能模拟出比较接近真实程序运行的行为。
如果你手头已经有 DSP 开发板,还可以做硬件在环测试:把控制器跑在真实的 DSP 芯片里,主电路仍然在 Simulink 里仿真,通过 IO 口连接信号。这种方式排查硬件问题的效率极高,也是很多工程师实际开发时会采用的验证手段。
4. 环境准备与前置条件
这篇教程假设你在 Windows 环境下操作,核心要求是安装好 MATLAB 以及必要的工具箱。版本建议用 R2021a 或更新版本,因为 C2000 Microcontroller Blockset 在新版本中集成度更高,模块名和文档也比较全。如果你的 MATLAB 版本比较旧,界面可能有差异,但整体思路一致。
你至少需要以下组件:
| 工具/工具箱 | 作用 |
|---|---|
| MATLAB 基础环境 | 脚本编写、参数计算 |
| Simulink | 图形化建模环境 |
| Simulink Control Design | 控制器设计辅助(非必须,但有更好) |
| Simscape Electrical | 电力电子主电路仿真 |
| C2000 Microcontroller Blockset | DSP 外设模块与代码生成 |
| Embedded Coder | 自动代码生成 |
| TI Code Composer Studio | 最终烧录编译(仿真阶段先不用) |
如果你只做纯仿真,不打算生成代码,那么 C2000 Blockset 和 Embedded Coder 可以等到下一篇再装。但在这篇文章里,我建议直接把它们装好,因为后续模型设置中会用到相关配置,而且提前装好可以避免以后版本不匹配的问题。
安装 C2000 Blockset 的操作路径很简单:在 MATLAB 主页点击“获取附加功能”,搜索 “C2000 Microcontroller Blockset”,点击安装即可。安装过程中 MATLAB 可能会要求你登录 MathWorks 账号,按提示操作就好。
同时,为了后面代码生成和硬件调试方便,建议把 TI 的 CCS 也提前下载。CCS 版本最好和 Blockset 的文档要求对应,一般选择 CCS 10.x 或更新版本即可。仿真阶段没有 CCS 不影响,但提前装好可以让后续切换更顺畅。
为了验证你的环境是否正常,可以在 MATLAB 命令行窗口输入以下命令检查工具箱是否存在:
% 检查 C2000 Microcontroller Blockset 是否已安装 matlab.addons.installedAddons如果安装成功,输出列表里会出现C2000 Microcontroller Blockset。如果没找到,可以在 Add-On Explorer 里手动搜索安装。
5. 搭建 15A 双向 DCDC 仿真模型
下面进入核心实操环节。我会用 Simscape Electrical 搭建一个非隔离双向 Buck-Boost 电路,然后设计一个最基础的双闭环控制:电压外环 + 电流内环。这个结构在电赛电源题里是最常用的。
5.1 新建模型并配置参数
打开 MATLAB,在命令行输入simulink打开 Simulink 起始页,新建一个空白模型,文件建议命名DCDC_Bidirectional.slx。
在模型所在的文件夹里新建一个 MATLAB 脚本,命名为param_init.m,用来统一设置模型参数。这样做的好处是,你不需要在每一个模块界面里手动输入参数,改参数也只需要改一处。
%% 15A 双向 DCDC 仿真参数初始化 % 输入侧参数 V_in = 24; % 输入电压 V V_out_ref = 48; % 输出电压参考 V I_load = 7.5; % 负载电流 A(15A 对应半载起步) % 主电路参数 L = 100e-6; % 电感 H C1 = 470e-6; % 输入侧电容 F C2 = 470e-6; % 输出侧电容 F R = V_out_ref / I_load; % 电阻负载 Ohm % 开关频率 fsw = 100e3; % 100 kHz Tsw = 1 / fsw; % PI 参数(先给初步值,后续根据仿真调) kp_i = 0.01; % 电流环比例系数 ki_i = 20; % 电流环积分系数 kp_v = 0.05; % 电压环比例系数 ki_v = 50; % 电压环积分系数 % 占空比限制 d_min = 0.05; d_max = 0.95; % 仿真时间 t_stop = 0.02; % 仿真 20ms,看启动和稳态这几个参数不是随手拍的。电感 100μH 在 100kHz 开关频率下,电流纹波可以控制在几安培以内;输出电容 470μF 用于抑制电压纹波。PI 参数是初始估计值,实际仿真中可能还需要调。
5.2 主电路建模
在 Simulink 模型画布里,打开 Simscape Electrical 库,按下面步骤搭建主电路:
- 从
Simscape > Electrical > Specialized Power Systems > Fundamental Blocks中拖入直流电压源、MOSFET、电感、电容、电阻。 - 搭建 Buck 模式的功率路径:输入源正极 → Q1(高端 MOS) → 电感 → 输出电容和负载 → 回到输入源负极。Q1 两端并联 Q2,Q2 作为同步整流管。
- Boost 模式的功率路径:输入源正极 → 电感 → Q2 → 输出侧。具体连接方式取决于你采用的具体拓扑,下面给出一个简化的拓扑示意图描述。
这里要特别注意:Simscape 的电路连接是物理连接,不能和普通的 Simulink 信号线混接。元件的电气端口用实线连接,控制信号则通过 PWM 驱动模块转换后连接到 MOSFET 的 Gate 端。
MOSFET 型号在仿真里不需要指定具体芯片型号,但需要设置导通电阻、反向恢复时间等参数。对于仿真来说,设置导通电阻Ron = 10mΩ左右,压降基本可以忽略,又不会让仿真因为理想开关而产生过大的数值尖峰。
5.3 PWM 驱动信号与死区
数字电源控制中,PWM 必须加死区时间,否则上下桥臂直通,导致短路。在 Simulink 仿真中,死区模块位于 Simulink 标准库中,也可以在 C2000 Blockset 的 ePWM 模块中配置。
如果在纯仿真阶段,最简单的做法是使用两个 Pulse Generator 分别产生互补 PWM,然后在其中一个信号上串联一个 Transport Delay,模拟死区效果。但更推荐的方式是使用 Simulink 的Dead Zone或者通过 C2000 ePWM 模块自带的死区配置。
从仿真的可信度来看,用 C2000 ePWM 模块做 PWM 生成,更接近真实芯片的输出。我在模型中用了两组 ePWM 模块:
EPwm1 -> PWM1A 和 PWM1B,用于 Buck 上下管 EPwm2 -> PWM2A 和 PWM2B,用于 Boost 上下管不过在纯仿真阶段,你也可以先用基础 PWM 发生器。下面是用 C2000 ePWM 模块的配置思路:
- 时基周期:
TBPRD = 1500(对应 100kHz,假设时钟 150MHz); - 计数模式:Up-Down(对称三角载波,适合双向变换器);
- 动作限定:在 CMPA 处输出高电平,周期归零处输出低电平;
- 死区模块:使能 B 通道输出,设置上升沿延时和下降沿延时,例如 200ns;
- 斩波模块:不使能。
这些配置在纯仿真阶段不一定全部用到,但用这种方式建立模型,后面切到真实 DSP 时只需要微调参数,不需要改结构。这其实正是这篇文章想传递的核心理念:仿真模型从一开始就要为代码生成做准备,而不是仿完就扔。
5.4 双闭环控制器建模
控制器是整个系统的核心。电压外环负责稳定输出电压,电流内环负责快速调节电感电流,这种结构比单电压环动态响应更快,也更容易限流。
在 Simulink 里搭建一个标准的双闭环结构:
- 输出电压采样值
V_out与参考值V_ref做差,送入一个 PI 控制器,得到电流参考I_ref; - 电感电流采样值
I_L与I_ref做差,送入第二个 PI 控制器,得到调制波d_ctrl; d_ctrl经过限幅后与三角波比较,生成 PWM 信号;- PWM 信号经过死区处理,驱动 MOSFET。
在模型里,控制部分的采样频率建议设置为开关频率的两倍以上,也就是至少 200kHz。如果你的电脑性能允许,可以继续提高采样频率,这样仿真结果更接近真实情况。
PI 控制器的实现方式有两种,一种直接用 Simulink 的 PID Controller 模块,另一种用积分器自己搭。用 PID Controller 模块更简单,也非常建议在仿真阶段使用,因为它的抗积分饱和等参数在界面上可以直接勾选。
PID Controller 参数设置示例:
% 使用全局变量方式,在模型里设置为 kp_i, ki_i, kp_v, ki_v % 这样可以在 param_init.m 里统一调整,不需要改模型5.5 仿真配置与运行
打开模型配置参数,设置求解器:
- 求解器类型:变步长 / auto;
- 最大步长:
1e-6秒左右,确保能看到开关纹波; - 相对容差:
1e-4左右。
如果使用 Simscape Electrical 的开关模型,变步长仿真会比较慢,但精度足够。也可以把最大步长改到1e-7以更细致地观察波形,但仿真时间会明显变长。
设置好之后,先运行一次看看是否报错。常见的报错包括:变量未定义、物理连接断裂、代数环报错等。如果报错,检查param_init.m是否已经运行,以及 Simscape 模块的电气连接是否闭合。
6. 运行结果与效果验证
运行仿真后,把输出电压和电感电流送到 Scope 模块观察。期望看到的结果是这样:
启动阶段,输出电压从零开始上升,电流内环限制了电感电流峰值,电压环逐步把输出拉向 48V。大约经过 5ms 到 10ms,输出电压进入稳态,纹波不超过几百毫伏以内。
启动瞬间最容易出现的问题有两个:
一个是电流冲击。如果没有软启动或者限幅,启动瞬间电容相当于短路,电感电流会冲得很高,仿真中有可能直接报数值错误。解决办法是给电流环参考值加一个斜坡,或者直接在电流内环的输出端限幅。
另一个是振荡发散。如果 PI 参数不合适,电压波形会出现等幅振荡甚至发散。这时优先调电流环的比例系数kp_i,因为内环响应速度决定了整个系统的稳定性。
验证控制效果的典型操作有三个:
- 在 10ms 时刻切换负载电阻,观察输出电压的跌落幅度和恢复时间;
- 改变输入电压从 24V 降到 20V,观察电压环的抑制能力;
- 切换 Buck/Boost 模式,观察电感电流方向是否反转。
负载突变可以用 Simulink 里的 Step 模块控制一个并联电阻,通过理想开关在特定时刻接入。这样能模拟真实的负载变化,比直接改电阻参数更直观。
如果波形发散,第一步不是去调电压环,而是先检查电流环能不能跟踪参考值。把电压环断开,给电流环一个恒定参考,看电感电流是否能稳定跟踪。只有电流环稳定了,再接通电压环。
7. 常见问题与排查思路
下面整理了一些仿真阶段最容易遇到的问题。这些问题几乎每个做 DCDC 仿真的同学都会碰到,建议收藏备用。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 仿真一开始就报错,提示解算失败 | 开关管参数设置不合理,或存在代数环 | 查看错误信息定位模块,检查电感电容初始值 | 给电感串联小电阻,给电容并联大电阻,设置初始电压 |
| 输出电压振荡发散 | 电流环 PI 参数过大或限幅不合理 | 观察电感电流波形,判断是否跟踪参考 | 减小 kp_i,增大 ki_i,确认限幅范围 |
| 启动电流过大 | 缺少软启动或电流限幅 | 查看启动阶段电感电流波形 | 电压参考值加斜坡,或在电流环输出加限幅 |
| 稳态输出有低频振荡 | 电压环带宽和电流环带宽没有拉开 | 检查内外环 PI 参数 | 让电流环响应速度明显快于电压环,一般比值在 5~10 倍 |
| PWM 波形不对 | 死区时间设置过大或计数模式错误 | 检查 PWM 模块配置,查看上下管波形 | 调整死区到几百 ns 量级,检查 Up-Down 模式 |
| 仿真速度特别慢 | 最大步长太小,或电路太复杂 | 查看仿真进度,检查求解器步长 | 适当放宽最大步长,或先用平均值模型简化 |
这里特别强调一下代数环问题。在双闭环控制里,如果控制器的输入直接来自主电路的输出,而主电路的输入又依赖控制器的输出,就会形成代数环。Simulink 会给出黄色警告并插入一个求解器来迭代解算,这会导致仿真极慢甚至不稳定。解决办法是:在反馈通路上增加一个 Memory 模块,或者使用单位延迟,打破这个环。在真实 DSP 程序中,控制本身就存在一拍延迟,所以在仿真里加入 Memory 模拟这种延迟,反而更接近实际。
另外一个容易踩的坑是Simscape Electrical 模块和普通 Simulink 模块的采样不同。Simscape 的物理信号和 Simulink 的数字信号之间必须通过 PS-Simulink Converter 和 Simulink-PS Converter 转换。如果你忘记加这个转换器,数据线连接不上,模型会直接报错。
8. 最佳实践与工程建议
8.1 从一开始就建立参数脚本
不要在 Simulink 模块界面里直接写死参数。所有关键参数都集中放在param_init.m里,模型里的参数名用变量名引用。这样做完参数扫描后,你只需要改动脚本,不需要逐个模块去改。
下面是一个典型的参数扫描方法,用 MATLAB 脚本循环修改参数并自动运行仿真,收集数据:
% 自动扫描电流环比例系数示例 kp_list = [0.005, 0.01, 0.02, 0.05]; results = struct(); for i = 1:length(kp_list) kp_i = kp_list(i); simOut = sim('DCDC_Bidirectional.slx'); results(i).kp_i = kp_i; results(i).vout = simOut.vout.Data; results(i).time = simOut.vout.Time; end % 绘制多条输出曲线 figure; hold on; for i = 1:length(kp_list) plot(results(i).time, results(i).vout, 'DisplayName', sprintf('kp_i=%.3f', kp_list(i))); end legend; xlabel('时间 (s)'); ylabel('输出电压 (V)');这段脚本的价值在于:你不用每次手动改参数、手动启动仿真、手动截图,只要等它跑完,就能对比不同参数下的输出波形。
8.2 模型结构要模块化
即便是电赛这种短周期项目,也建议用 Subsystem 把模型拆成四个部分:
- 主电路子系统:只包含功率级,输入控制器 PWM,输出电压电流测量值;
- 控制器子系统:包含电压环、电流环、PWM 比较逻辑;
- 保护逻辑子系统:包含过流保护、过压保护,一旦条件触发就封锁 PWM;
- 信号观测子系统:汇总需要查看的波形。
这样做的好处是,后面做自动代码生成时,你可以只把控制器子系统生成代码部署到 DSP,而主电路子系统保留在电脑里做仿真。这种“控制器在芯片里、主电路在仿真里”的模式,就是前文提到的硬件在环,它是从仿真过渡到实物的桥梁。
8.3 控制参数的整定顺序
数字电源调试,参数整定一定是先内环后外环,先电流后电压。电赛队伍最容易犯的错误是:上来就同时调两个环,结果波形乱七八糟,根本不知道是谁引起的。
我的建议是:
- 先将电压环断开,给电流环一个固定参考,只调电流环 PI;
- 电流环稳定后,把电压环接入,电压环先给很小的比例系数,逐步加大;
- 每次都记录波形,观察超调量和恢复时间,而不是靠感觉调。
8.4 在模型中预留硬件接口
现在看起来可能有点超前,但如果你确定了今后要用 C2000 做实物,仿真的时候就要预留好接口。比如:
- 控制器输出统一用
0~1的标幺化占空比信号,而不是绝对时间; - 电压电流反馈统一先做标幺化,再进 PI 控制器;
- PWM 死区时间等参数在脚本里定义,方便后续映射到 ePWM 模块。
这套习惯让你从仿真切换到 C2000 Blockset 时,只需要替换输入输出接口的模块,控制器内部基本不用改。很多人觉得自动代码生成不灵活,其实是因为模型一开始就没按硬件思维去建。
9. 总结与下一步计划
这篇内容把 15A 双向 DCDC 的仿真建模流程走了一遍:从 Pump 参数设计、Simulink 主电路搭建、双闭环控制器设计,到波形验证和参数整定。最核心的思路不是教你怎么手算电路,而是让你习惯“先仿真、后实物”的开发节奏。用 MATLAB + Simulink 做电力电子仿真,最大的优势不是省去写代码,而是让你把精力集中在控制策略本身,同时为后续通过 C2000 Blockset 自动生成 C 代码、烧录到 DSP 打基础。
仿真只是第一步,接下来有几条路径可以继续深入。你可以把模型从 Simulink 标准控制器迁移到 C2000 ePWM + ADC 模块,在 Simulink 里模拟更真实的 DSP 行为;也可以尝试用平均值模型加快仿真速度,做大批量参数扫描;还可以安装 CCS,准备把控制器代码生成后部署到真实的 LaunchPad 开发板上。
下一篇计划重点讲怎么安装配置 C2000 Microcontroller Blockset、怎么用它生成 CCS 工程、怎么把模型里的控制器部分烧录到真实 DSP 中,以及在板上调试时会遇到的典型问题。如果你正在准备电赛,建议先把这篇的仿真模型跑通,再进入下一步。如果运行中有报错或者波形不对,按第七部分的排查表先自查一遍,大概率能解决。