这个例子展示了如何建模控制器,并在Xilinx®Zynq™-7000全可编程SoC目标上实现它。本例使用了ZedBoard™和Analog Devices®电机控制FMC板。如果您没有所需的硬件,您可以使用这个示例来帮助您为自己的硬件配置开发一个控制器。
这个例子为永磁同步电机(PMSM)建模了一个磁场定向控制器(FOC),但是你可以应用这个例子中显示的技术来开发大多数控制器算法。该图像显示了从模型仿真到在嵌入式硬件板上部署控制器算法的通用工作流。
模拟一个系统测试台,以了解控制器算法设计的行为。然后探索设计,看看算法是如何划分的。算法的高速率部分被划分为一个模型,该模型被配置为用于HDL代码生成。算法的低速率部分被划分为一个模型,该模型被配置为C代码生成。从这些模型中生成C和HDL代码,并学习如何将这些代码集成到设计中。
在探索算法C和HDL码之后,将算法代码的自动部署到处理器和可编程逻辑的参考框架中。然后,在已部署的应用程序上执行测试,记录结果,并将它们与模拟结果进行比较。
由于本示例将位流和ARM®可执行文件部署到Xilinx Zynq,因此在开始示例之前必须设置Xilinx Zynq硬件板。要确保正确设置环境,请完成瞄准Xilinx Zynq平台(HDL编码器)在开始本示例之前,使用您的硬件配置示例。
有关硬件的更多信息,请参见Zynq All Programmable SoC/Analog Devices Intelligent Drives Kit.
本节将展示如何打开示例项目,检查控制器模型,并通过仿真验证控制器行为。这个例子被打包为一个项目。有关Simulink项目的更多信息,请参见金宝app是什么项目?(金宝appSimulink)
1.运行zynqexPMSMFOCStart
在默认MATLAB项目文件夹中为此示例创建和打开项目文件的工作副本功能。要选择特定文件夹,请使用文件夹的绝对路径作为输入。文件夹的绝对路径必须小于80个字符。
zynqexPMSMFOCStart (“C: \ Temp”);
2.选择捷径管理查看此示例使用的快捷方式。
3.右键单击快捷方式并识别开放和运行快捷方式上下文菜单项。
4.运行的任务。t1_openSimulationTestBenchModel快捷方式以打开focZynqTestBench
模型。
Task.t1_opensimulationtestbenchmodel.
Motor_And_Load子系统由表面PMSM的数学模型、电机负载、编码器和电流传感器组成。Controller_Algorithm子系统包括I/O工程单元转换、电气位置计算、转子速度计算、模式调度程序和四种控制模式(禁用、开环速度控制、编码器校准和闭环速度控制)。的C / D
和D / C
子系统从连续时间,可变时间步求解器和浮点数据类型转换数据,以离散时间,固定时间步求解器和定点数据类型,仿真。
如果没有安装SimPowerSystems,则Motor_And_Load子系统包含一个块,使您能够使用默认的电机和负载参数模拟模型。在这种情况下,您不能探索或修改参数。
5.在模拟选项卡,单击金宝app运行来模拟模型。
6.当模型完成运行时,打开仿真数据检测器.在模拟选项卡上,单击数据检查.有关模拟数据检查器的更多信息,请参见仿真数据检测器(金宝appSimulink).
7.在仿真数据检测器,选择< commandType >,
在前两秒,控制器被命令校准编码器位置传感器。编码器位置传感器必须经过校准,控制器才能实现闭环控制。在位置校准的第一部分,电机加速使用开环控制,以识别编码器的指数脉冲。一旦找到索引,控制器就会命令并保持一个零位置,直到标识编码器偏移量为止。在这段时间内,速度为零。两秒钟后,控制器转为闭环控制,并遵循指令速度剖面。在闭环速度控制中,FOC可以调节永磁同步电动机的相电流。
本节向您展示如何将控制器算法划分为互补的软件和硬件实现,分别生成用于软件和硬件实现的C和HDL代码。检查在代码生成期间创建的报告,可以看到如何将此代码集成到自己的嵌入式设计中。
1.在focZynqTestBench
模型,打开Controller_Algorithm子系统。控制器算法包含了Algorithm_C和Algorithm_HDL块,它们引用了FOCZYNQC
和Foczynqhdl.
模型,分别。的FOCZYNQC
模型包含要在软件中实现的算法部分。类似地,Foczynqhdl.
模型包含要在硬件上实现的算法的部分。
2.运行的任务。t2_generateCCode函数打开FOCZYNQC
模型,生成C代码并生成报告。
task.t2_generateccode.
的FOCZYNQC
模型包含模式调度程序,速度控制回路,开环速度控制器,和自动校准编码器偏移的例行程序。
3.代码生成报告显示生成的代码如何与模型相对应。如果您是代码生成报告的新手,您可以从代码接口报告要查看代码的函数界面。C代码是可移植的,可以与使用ANSI-C编译器的任何浮点嵌入式处理器集成。有关代码生成报告的详细信息,请参阅用于代码生成的报告.
4.运行的任务。t3_generateHdlCode函数来打开Foczynqhdl.
模型,生成HDL代码,并生成报告。
task.t3_generateHdlCode
的Foczynqhdl.
模型包含电气位置计算、转子速度计算、过流检查和磁场定向控制器。
5.代码生成报告显示HDL代码如何对应于模型。如果您是代码生成报告的新手,您可以通过探索来开始生成的源文件报告的窗格并选择focZynqHdl.vhd
包含实体规范的文件。算法的HDL代码是便携式的,可以与支持VHDL代码的任何FPGA集成。金宝app
本节介绍安装和连接硬件单板的方法。
1.运行Xilinx Zynq平台的硬件设置。有关硬件设置的信息,请参见安装支持Xili金宝appnx Zynq平台.
2.如图所示连接zedboard。
3.连接AD-FMCMOTCON2-EBZ控制器板和ZedBoard,如图所示。
本节展示了如何使用HDL Workflow Advisor生成算法的HDL代码,将HDL包装为IP内核,将IP内核集成到Xilinx参考设计中,并创建比特流。
1.运行task.t4_openhdlworkfraphadodvisor函数以打开HDL工作流程顾问。
task.t4_openhdlworkfraphvisor.
2.在这方面HDL工作流顾问>1.1设置目标设备和合成工具集团目标平台被设置为ZedBoard和FMCMOTCON2
.ZedBoard和FMCMOTCON2
是一个Vivado参考设计,包含ADC,编码器和PWM组件。有关如何创建此参考设计的信息,请参见定义自定义板和Zynq工作流程的参考设计(HDL编码器).
3.选择1.2.设置目标接口来识别端口。的目标平台界面IP前缀指的是在ZedBoard电机控制参考设计中注册的连接。
4.选择4.3构建FPGA Bitstream >运行到Selected Task或者从项目中运行任务.t5_generatebitreamAndInterfaceBlock函数,为算法生成HDL代码,并从Xilinx参考设计中创建FPGA比特流。
task.t5_generatebitstreamAndInterfaceBlock.
5.按照打开的新DOS命令提示符上的比特流生成进度。除了生成比特流外,还包括定制目标还生成focZynqHdlAxiInterfaceLib
软件接口库。该库包含Axi_Interface块。axi_interface.块,它包含AXI4-Lite接口组件,提供从部署在ARM处理器上的模型到部署在可编程逻辑上的模型的连接。
6.运行的任务4.4程序目标设备或者运行任务。t6_downloadBitstream函数从项目编程FPGA。
task.t6_downloadBitstream
本节将展示如何为控制器生成C代码,并自动将此代码与Linux参考框架集成,以构建、部署并将模型作为可执行文件运行到ARM处理器。然后可以将运行在处理器上的模型记录的数据与仿真结果进行比较。
1.运行的任务。t7_openZynqArmModel函数打开focZynqArmDeployment
模型。
Task.T7_openzynqmarmodel.
的focZynqArmDeployment
模型可以生成C代码,使用Linux ARM参考框架进行自动化,并将可执行文件部署到Xilinx Zynq平台上的ARM处理器。部署模型引用原始控制器模型并包含在中创建的测试刺激,范围和AXI_Interface库块将位流部署到可编程逻辑部分。
2.在这方面硬件选项卡上,单击监视和优化在ARM处理器上作为可执行文件构建、部署和运行模型。生成的代码根据引用框架进行编译,以创建可执行文件。在执行过程中,Simulink监控金宝app信号,在scope中显示它们。
3.打开仿真数据检测器查看记录的信号并将它们与以前记录的信号进行比较focZynqTestBench
模型。在模拟选项卡上,单击数据检查.
4.在仿真数据检测器,选择rotorVelocity信号。在编码器校准模式期间,由于模拟和实际电动机开始不同的转子位置,信号最初差异。相比之下,仿真和硬件中的闭环速度控制非常相似。发生差异,因为电机和传感器的仿真模型使用数据表值,并且不明确地解释物理电机的制造公差。
继续探索此示例中的文件,以了解如何了解仿真,代码生成和自动化部署如何帮助您为硬件开发控制器。
HDL编码器支持浮点金宝app单精度数据类型。打开一个浮点模型的例子:
zynqexpmsmfocsinglestart.
浮点模型强调了HDL Coder从包含定点和浮点数据类型混合的模型生成HDL代码的能力。按照相同的任务,在Xilinx Zynq SoC平台上实现单精度电流控制算法。