基于硬件在环 (HIL) 仿真的降压转换器闭环控制
本例采用硬件在环 (HIL) 仿真来实现降压转换器的闭环控制。该控制算法需要输出电压反馈,然后将反馈信号输入到 PI 控制器。控制器输出占空比,通过改变占空比来控制输出电压。有关详细信息,请参阅DC-DC 降压转换器的闭环控制。
当实际的降压转换器不可用时,您可以使用 HIL 仿真工作流程,通过运行逼真的虚拟工厂来实时验证控制算法。HIL 仿真设置包含以下要素。
运行 Simulink 的台式计算机或开发硬件。
运行控制器代码的控制器硬件。
运行物理工厂代码的目标硬件 (FPGA)。
您必须将控制器代码部署到控制器硬件,并将被控对象的 HDL 代码部署到 FPGA 目标硬件。控制器部署完成后,执行控制算法并生成 PWM 信号。同时,FPGA 硬件使用被控对象的 HDL 代码来模拟降压转换器。该仿真器接收 PWM 信号,并提供电流和转子位置的实时反馈,从而复制实际设备的运行情况。FPGA 以外部模式运行,将数据记录到 Simulink Real-Time 模型的仿真数据检查器中。
运行在台式电脑上的 Simulink 主机模型使用串行通信协议与控制器进行通信。这种交互方式使得主机模型能够通过与控制器通信来控制电机运行。

打开 MATLAB 工程
该示例打包为 MATLAB® 工程。可以使用以下方法之一打开 MATLAB 工程窗口:
1.点击 Open Project。
2.运行以下命令以访问示例的支持文件并打开 MATLAB 工程。
openExample('c2b/ClosedLoopBuckConverterUsingHardwareInLoopHILSimulationExample');
模型
MATLAB 工程包含一个模型文件夹,其中包含以下模型:
c2bBuckConverterHILModel.slx- 此目标模型包含您可以在控制器硬件上部署和运行的控制算法。

c2bBuckHILHostModel.slx- 这是用于与嵌入式目标硬件通信的主机模型。使用此模型,您可以向降压转换器提供各种命令,例如输出电压基准、PWM 使能信号。

除了这两个模型之外,您还需要一个 FPGA 系统模型(降压转换器),您可以将其部署并运行在 FPGA 目标硬件上;还需要一个 Simulink Real-Time™ 应用模型,您可以使用该模型来选择目标硬件并部署 FPGA 系统模型算法。本示例使用被控对象模型 gm_c2bbuckhilhdlwrapper_slrt.slx。该被控对象模型捕获控制器提供的 PWM 占空比,进而运行降压转换器,生成并将实际的 ADC 电压和电流信号发送回控制器硬件。您可以使用此被控对象模型生成 Simulink Real-Time (SLRT) 模型和 FPGA 目标硬件的 HDL 代码。
必需的 MathWorks 产品
仿真模型:
Simscape™
Simscape™ Electrical™
Fixed-Point Designer™
要生成代码并部署模型:
1.C2000™ Microcontroller Blockset
2.Simulink Real-Time™
3.Embedded Coder®
4.HDL Coder™(仅当您更改被控对象模型时才需要)
5.Speedgoat I/O 模块集
6.Fixed-Point Designer™
前提条件
1.要在 Speedgoat 上运行该模型,您需要从 Speedgoat 网站下载以下 3P 工具:
打开 Speedgoat 网站的下载页面:https://www.speedgoat.com/extranet#/Downloads
下载与您正在使用的 MATLAB 版本对应的 Speedgoat I/O 模块集。例如:Speedgoat I/O Blockset for R2024a(v9.8.1.1)。
下载与您正在使用的 Speedgoat 机器对应的 HDL Coder 集成包。例如:IO334-325k(R2024a, v2.0) HDL Coder 集成包。
2.更新与 MATLAB 工程中可用的目标模型关联的 c2bBuckConverterHILModelData.m 参数脚本中的降压转换器参数。打开 MATLAB 工程时,此脚本会自动打开。您也可以使用“工程”窗口从 scripts 夹中打开此脚本。
3.点击编辑器选项卡上的“运行”按钮来运行参数脚本。
必需的硬件
该示例支持此硬件配置:LAUNCHXL-F28379D 控制器 + Speedgoat IO-334 可编程 FPGA 卡。
准备硬件
1.按照下表所示,将 Speedgoat 板连接到 LAUNCHXL-F28379D 控制器板。


2.对于模拟信号,请按照下表所示将 Speedgoat 连接到控制器。

有关 Speedgoat 板的详细信息,请参阅 Speedgoat IO-334 和 Speedgoat 连接盒。
对模型进行仿真
请按照以下步骤仿真工程中包含的模型:
1.打开 MATLAB 工程中包含的模型文件夹中的目标模型 c2bBuckConverterHILModel.slx。
2.在“仿真选项卡上点击“运行”,使用模型上的单选按钮,通过 Simscape 或 HDL 系统验证降压转换器的运行情况。您可以通过在 c2bBuckConverterHILModelData.m 脚本中将 FPGA 频率 f_base 降低到 2MHz 来提高仿真速度。观察仿真结果。在部署到 FPFA 硬件之前,请务必将 f_base 恢复为 200MHz。
3.打开被控对象模型 c2bbuckhilhdlwrapper.slx。如果要更改被控对象模型,请更新 c2bbuckhilhdlwrapper.slx。仿真 c2bBuckConverterHILModel.slx 以验证仿真中的更改,并继续执行 HDL 工作流程以生成新的 SLRT 模型。
默认情况下,被控对象模型 (ts_FPGA_mdl) 的采样时间设置为 500ns。
注意:如果参数发生变化,请调整模型采样时间 (ts_FPGA_mdl)。
生成 HDL 实现模型
1.打开 c2bbuckhil.slx simscape 被控对象模型。
2.为了实现 HDL 代码生成兼容性,您需要运行 Simscape HDL 工作流顾问来生成 HDL 实现模型。
要打开 Advisor,请为您的模型运行 sschdladvisor 函数:
sschdladvisor('c2bbuckhil.slx')
3.要生成实现模型,请在 Simscape HDL 工作流顾问中保留任务的默认设置,然后运行任务。点击“全部运行”按钮,在 Advisor 中运行任务。在“生成实现模型”任务中,您可以看到指向该模型的链接。该模型与您的原始模型名称相同,前缀为 gmStateSpaceHDL_。
注意:该模型 (c2bbuckhil.slx) 已经使用了通过替换常规 IGBT 而获得的动态开关。有关详细信息,请参阅 sschdl.generateOptimizedModel。
准备 HDL 代码生成的实现模型
1.在工程中,您可以找到名为 c2bbuckhilhdlwrapper 的生成模型,该模型已修改为可在 Speedgoat IO334 上运行。该模型位于 Simulink 工程的组件文件夹中。有关详细信息,请参阅使用 HDL 工作流脚本将 Simscape Buck 转换器模型部署到 Speedgoat IO 模块。
该模型包含一个用于替代原始降压转换器模型的开关线性 Simulink 模型。该实现模型用 HDL 兼容算法替换了 Simscape 子系统,该算法执行状态空间计算。

准备用于 Simulink Real-Time 仿真模型
针对实施模型运行 HDL 工作流顾问。要打开 HDL 工作流顾问,请使用 hdladvisor 函数。例如:
hdladvisor('c2bbuckhilhdlwrapper/HDL_Wrapper')
要了解 Advisor 中的任务,右键点击该任务,然后选择“这是什么?”。请参阅 HDL 工作流顾问入门指南。
运行 HDL Advisor 会生成 RTL 代码和 IP 核,创建 Vivado 工程,构建 FPGA 比特流,然后生成 Simulink Real-Time 接口模型。确保将 FPGA 中运行的子系统外部的模块的采样时间更改为 Tcpu,脚本中将其设置为 50 微秒。
生成代码并将模型部署到目标硬件
1.完成硬件连接。
2.生成 c2bBuckConverterHILModel.slx 模型的代码,并通过单击 Simulink 工具条栏中的“构建、部署和启动”将其部署到 TI F28379d Launchpad 上。
注意:为确保 CPU2 未配置为使用 CPU1 的板载外设,请将示例程序加载到 LAUNCHXL-F28379D 的 CPU2 中。例如,您可以使用 GPIO31 加载操作 CPU2 蓝色 LED 的程序 (c28379D_cpu2_blink.slx)。有关示例程序或模型的详细信息,请参阅Texas Instruments 入门指南 C2000 Microcontroller Blockset中的“任务 2 - 创建、配置和运行 TI Delfino F28379D LaunchPad(双核)模型”部分。
3.打开被控对象模型 gm_c2bbuckhilhdlwrapper_slrt.slx 并构建模型。使用此模型对 FPGA 进行编程,并在 MATLAB 命令行窗口中执行以下几行命令,运行 500 秒。
tg = slrealtime; connect(tg); mdl = 'gm_c2bbuckhilhdlwrapper_slrt'; open_system(mdl); modelSTF = getSTFName(tg); set_param(mdl,"SystemTargetFile",modelSTF) evalc('slbuild(mdl)'); load(tg,mdl); tg.setStopTime(500); start(tg);
注意:
如果要更新被控对象模型,请更新
c2bbuckhilhdlwrapper.slx并按照 HDL 工作流程生成 SLRT 模型gm_c2bbuckhilhdlwrapper_slrt.slx并对 FPGA 进行编程。电压和电流信号的采集速率为 1 微秒。(帧长=500 纳秒/1 微秒)
4.点击 c2bBuckConverterHILModel.slx 目标模型中的主机模型超链接以打开主机模型。您还可以使用 MATLAB 工程窗口打开主机模型 c2bBuckHILHostModel.slx。
5.在仿真盘区域,转动“停止-启动”滑块开关,启用降压转换器的 PWM。
6.在主机模型中,打开“主机串行设置”、“主机串行接收”和“主机串行发送”模块,然后选择一个端口。
7.点击 Simulation 选项卡上的 Run 以运行主机模型。
8.查看示波器中记录的信号。
结果
控制器端:TI F28379D LaunchPad 的信号反馈显示 ADC 反馈信号。在 LaunchPad 上观察,输出电压从 2V 变为 3V。

通过主机以外部模式运行 gm_c2bbuckhilhdlwrapper_slrt.slx 模型,即可获得 Speedgoat 的 HIL 结果。信号以 1 微秒的间隔在 SDI 中记录。

查看上述结果的放大版本,以获得更详细的视图。
