建模和仿真如何将算法开发和SoC设计结合在一起

作者:马克·科里斯和埃里克·西根,MathWorks


在本文中,您将了解建模如何帮助一小组算法和嵌入式软件工程师设计电机控制算法,并在可编程系统(SOC)上实现它。我们是这支球队的嵌入式工程师。我们将展示建模如何帮助我们分区我们的设计,使用实施资源平衡功能行为,并在实验室中测试。

可编程soc,如Xilinx®Zynq®soc和英特尔®SoC fpga在同一芯片上结合了可编程逻辑和微处理器核心,为设计团队提供了算法部署在广泛应用中的新平台,包括嵌入式视觉、通信和电机和电力电子的控制。这些设计团队通常包括两类工程师:算法工程师,负责基于数学或基于规则的算法的概念开发和细化;嵌入式工程师,负责优化算法并在嵌入式设备的软件或硬件中实现它们。

算法工程师通常在开发过程的早期使用建模,以获得对他们的算法在功能上正确应用的信心。另一方面,嵌入式工程师并不总是看到建模的好处。然而,当这些团队不密切合作时,结果可能是错误检测延迟,导致项目延迟;过度使用资源;或者由于不充分的设计和测试迭代而损害功能。

我们开始研究建模是否可以帮助算法和嵌入式工程师创造一个更高效和协作的设计过程。我们希望专注于建模算法组件,我们可以使用模拟来探索。我们将使用模拟来帮助我们做出划分决策,使用模拟和代码生成来平衡功能行为和实现资源,并自动集成和部署生成的代码和手工代码,以更有效地利用实验时间。

提出了工作流

我们提出了一个混合了从模型和手工代码生成的代码的工作流。(在整个文章中,我们将把设计的手工编码部分称为参考设计。)我们将从算法开发人员提供的模型开始,并通过添加实现详细信息来迭代地详细说明模型。在每次迭代我们都会模拟系统行为,以确保算法模型的功能正确性,实现具有代码生成的算法,以获取表现的代码,表现得像模型一样,然后使用我们的参考设计自动集成,以确保可重复的进程以确保到达硬件的可重复流程实现(图1)。

图1工作流程开发和部署到SOC的电机控制算法。

硬件平台的选择

在这种情况下,我们决定使用面向现场的控制(FOC)算法设计永磁同步电动机的速度控制器,然后将其部署到Zynq-7000所有可编程SoC智能驱动器套件II(图2)。我们选择了电机控制,因为它是一个应用程序,算法工程和嵌入式工程师通常需要一起工作。我们选择了Zynq Intelligent Drives Kit II,因为它很容易获得,并提供我们所需的I / O支持。金宝app

图2. Zynq Intelligent Drives Kit II具有可选测功机系统(来自Avnet Electronics Marketing)。

Zynq智能驱动套件II是工程师用来测试在Zynq Z-7020 SoC器件上运行的电机控制算法的开发平台。基于ZedBoard开发板,该工具包包括一个模拟设备FMC电机控制模块和24V无刷直流电机配备1,250个循环/旋转编码器。因为我们想要在一系列操作条件下测试电机控制算法,所以我们使用带有可选测功机系统的Zynq Intelligent Drives Kit II。

分区算法组件

在选择硬件平台后,我们审查了算法工程师提供的初始系统仿真模型,并确定了部署到SoC所需的额外算法组件。该模型包括一个基于数据表参数的电机控制器算法。该算法由外速度控制环和内电流控制环组成。

虽然该模型捕获了控制器的核心数学,但它没有考虑外设(如ADC、编码器和PWM)或其他操作模式(禁用、开环和编码器校准)所需的算法组件的影响。我们与算法工程师一起确定要建模的算法组件,并决定是在ARM上实现这些组件,还是在SoC上实现可编程逻辑(图3)。

图3。算法组件的划分。

我们详细阐述了初始系统模型,以包括新的算法组件(图4)。为了实现系统仿真,我们创建了与电机模型交互的现有外围设备的集总参数模型。例如,我们计划在部署设计中重用编码器外设的现有HDL代码。编码器外设读取50 MHz的数字脉冲流,并将其转换为由控制器算法在25 kHz读取的计数信号。如果我们直接建模这个脉冲流,我们将在系统模型中引入50 MHz的动态,并显著增加仿真时间。相反,我们创建了编码器的集总参数模型,将电机模型中的理想转子位置转换为算法组件所看到的编码器计数信号。在这种保真度水平上建模使我们能够模拟测试编码器校准组件所需的启动条件,并引入位置量化效果来测试速度控制组件(图5),同时保持合理的仿真时间。

图4。系统仿真模型。
图5。对编码器的标定和步进速度指令进行了系统仿真。

如果它们需要几kHz或更低的速率,我们选择在手臂上实施算法组件。一些kHz汇率的约束被设置为,因为我们计划运行Linux®ARM的操作系统。需要更快速率的算法组件将在FPGA上实现。

我们希望尽可能在臂上实施算法组件,因为我们发现手臂上的设计迭代比FPGA更快。将算法瞄准ARM核心是更容易的,因为它支持本机浮点数学操作。金宝app大多数FPGA执行浮点数学效率低下,因此定位可编程逻辑需要将算法转换为固定点的附加步骤。此外,我们发现编译手臂的C代码的过程通常比编译FPGA的HDL代码更快。

我们使用仿真来确定算法组件是否能够以ARM足够慢的速度执行,或者是否需要FPGA。例如,算法工程师最初提出了一个运行在25khz的编码器校准程序,这必须在FPGA上实现。我们用仿真来测试我们是否可以在1khz运行编码器校准组件,发现我们可以,并决定在ARM上实现它。

平衡功能行为和实现资源

一旦我们有了功能上正确的模型和期望的部件率,我们分组的所有组件用于C代码生成到一个算法C模型和所有组件用于高密度脂蛋白HDL代码生成到一个算法模型(图6)。然后我们迭代实现细节添加到模型和生成的代码,直到我们觉得适合在一个可接受的数量的内存和执行组件rate.

图6。控制器算法模型的C和HDL代码生成。

我们使用了嵌入式编码器®从算法C模型生成C代码,并生成一个总结调用接口和估计数据内存使用情况的报告。在检查报告时,我们意识到所有数据类型都是双精度浮点数。我们希望接口到FPGA的数据是整数或定点,其余的数学是单精度浮点数。我们将这些数据类型应用到模型中,使用仿真来验证行为仍然是可接受的,然后生成改进的代码。在这一点上,我们感到很有信心,代码适合在ARM上实现。

我们将算法HDL模型实现为固定点,因为固定点操作在FPGA上消耗更少的资源。为实现这一目标,我们使用算法工程师来识别设计(电流,电压和速度)中的键控范围,然后使用固定点设计器™来定义固定点数据类型,以确保计算没有溢出.我们使用HDL Coder™来生成代码和摘要报告。

我们审查了报告的资源估算部分,以确定似乎意外的数学操作。例如,我们的初始选择单词长度导致了两个34位数字的乘数,我们认为不必要地消耗FPGA资源。我们能够在资源利用率报告中识别此问题,减少模型中的精度,使用模拟验证功能仍然是正确的,然后生成改进的代码。我们使用了Xilinx Vivado®设计套件来合成代码并验证它满足时序要求。

实验室测试

一旦我们进行了候选算法实现,我们就准备好将其与我们的参考设计集成。我们开始通过手动将生成的C函数与我们的手工编码的ARM嵌入式项目集成,并将生成的HDL实体与我们的手工编码的Vivado项目集成。但是,我们意识到,如果我们始终手动执行集成,我们需要参与实验室中的每一个设计迭代。我们使用此工作流程的目标之一是启用算法工程师在实验室中自动化集成和部署过程。

我们使用了Xilinx Zynq-7000平金宝app台的HDL Coder支持包来注册我们的手工编码Vivado项目作为参考设计。然后,我们能够自动集成生成的算法HDL代码与我们的手代码,构建一个位流,并下载到FPGA。我们使用Xilinx Zynq-7000平台的嵌入式编金宝app码器支持包,自动将生成的算法C代码与Linux操作系统集成,构建一个可执行文件,下载到ARM,并从Simulink与之交互金宝app®.支持软件金宝app包提供了AXI互连,可使ARM核心和可编程逻辑中的算法组件之间的通信能够。

在初始系统设置期间,算法和嵌入式工程师必须在实验室中一起工作。作为嵌入式工程师,我们必须设置部署配置并使用算法工程师进行验证基本功能。设置系统后,算法工程师可以使用Simulink作为SOC的主要接口独立迭代设计。金宝app

该算法工程师测试了部署的控制器并确定它没有提供预期的响应。模拟和硬件结果的比较显示,我们错误地计算了ADC计数到电流的映射。该算法工程师创建了额外的测试,以更好地表征电机的扭矩常数,提高仿真和硬件之间的相关性(图7)。

图7。仿真和硬件结果的比较。

仿真和硬件测试结果之间的高相关性给了我们信心我们可以在模型水平进行设计决策,并进一步降低实验室时间。例如,在一个点时,电动机在实验室中旋转,但在某些条件下无法控制。我们理论调整问题与FPGA上实施的定点速度计算中的溢出相关。我们在模拟中复制了问题,并在关于电动机的最大速度的初始假设中确定了缺陷。我们能够在模拟中调试和解决问题,并且只使用实验室时间来验证更改。

这种方法的好处

这里描述的工作流使我们能够更有效地与算法工程师一起工作。通过仿真,我们评估了算法划分对系统性能的影响,并验证了编码器校准组件可以从较高速率的可编程逻辑分区转移到较低速率的ARM分区。

仿真也允许我们做出保存实施资源的决策,同时保持功能行为,例如减少可编程逻辑中的数学操作的单词长度,或者将要通过AXI互连传递的数据从浮点转换为固定点数据类型。最后,我们在实验室中的原型测试帮助我们识别映射ADC计数的错误,并使我们的算法工程师能够进一步测试以表征电机的扭矩常数。

总的来说,工作流程支持了我们和算法工程师之间金宝app的密切合作,在节省实验时间的同时产生了更有效的实现。

想知道更多?

有关本文中描述的工作流程的更多详细信息,请审核面向导线控制永磁同步机.此Zynq电机控制示例包括Simulink模型和MATLAB金宝app®我们的研究中使用的脚本用于运行模拟、生成代码、测试硬件,并将模拟运行与硬件测试的结果进行比较。

如果您对原型开发电机控制算法感兴趣或想要重现本文中显示的结果,并在示例中了解更多信息Avnet Zynq Intellive Drives Kit II来自安万特电子营销公司。

将Zynq电机控制示例扩展到不同的硬件配置或来自Xilinx或英特尔的不同类别的SoC FPGA,请参阅示例定义和注册自定义板和SoC工作流参考设计

进一步了解如何生产用于Simulink的PMSM和BLDC电机的准确模型,请查看文章金宝app为控制系统设计和验证建立一个高保真的电机模型

发布2016年 - 92977V00