这个例子展示了如何建模控制器,并在Xilinx®Zynq™-7000全可编程SoC目标上实现它。本例使用了带Analog Devices®电机控制FMC板的ZedBoard™。如果您没有所需的硬件,您可以使用这个示例来帮助您为自己的硬件配置开发一个控制器。
本例为永磁同步电机(PMSM)建模了一个面向场的控制器(FOC),但是您可以应用本例中显示的技术来开发大多数控制器算法。该图像显示了从模型仿真到将控制器算法部署到嵌入式硬件板的通用工作流程。
模拟一个系统测试平台,以深入了解控制器算法设计的行为。然后探索设计,了解如何划分算法。算法的高速率部分被划分为一个为HDL代码生成而配置的模型。算法的低速率部分被划分到一个为C代码生成而配置的模型中。从这些模型生成C和HDL代码,并了解如何将这些代码集成到设计中。
在探索了算法C和HDL代码之后,将算法代码自动部署到处理器和可编程逻辑的参考框架中。然后,在部署的应用程序上执行测试,记录结果,并将它们与模拟结果进行比较。
由于本示例将位流和ARM®可执行文件部署到Xilinx Zynq,因此在启动示例之前必须设置Xilinx Zynq硬件板。要确保环境的正确设置,请完成着眼于Xilinx Zynq平台(高密度脂蛋白编码器)在开始此示例之前使用硬件配置的示例。
有关硬件的详细信息,请参见Zynq所有可编程SoC/模拟器件智能驱动套件.
本节展示如何打开示例项目,检查控制器模型,并通过仿真验证控制器行为。这个例子被打包成一个项目。有关Simulink项目的更多信息,请参见金宝app什么是项目?(金宝app模型)
1.运行zynqexPMSMFOCStart
函数在默认的MATLAB项目文件夹中创建并打开本示例的项目文件的工作副本。要选择特定的文件夹,请使用文件夹的绝对路径作为输入。文件夹的绝对路径必须小于80个字符。
zynqexPMSMFOCStart (“C: \ Temp”);
2.选择快捷方式管理查看此示例使用的快捷方式。
3.右键单击快捷方式并识别开放而且运行快捷方式上下文菜单项。
4.运行任务。快捷方式打开focZynqTestBench
模型。
task.t1_openSimulationTestBenchModel
Motor_And_Load子系统由表面PMSM、电机负载、编码器和电流传感器的数学模型组成。Controller_Algorithm子系统包括I/O工程单元转换、电气位置计算、转子速度计算、模式调度器和四种控制模式(禁用、开环速度控制、编码器校准和闭环速度控制)。的C / D
而且D / C
子系统将数据从连续时间、可变时间步长解算器和浮点数据类型,转换为离散时间、固定时间步长解算器和定点数据类型,进行仿真。
如果您没有安装SimPowerSystems, Motor_And_Load子系统包含一个块,该块允许您使用默认电机和负载参数模拟模型。在这种情况下,您不能浏览或修改参数。
5.在模拟“Simulink工具金宝app条”页签中,单击运行模拟模型。
6.当模型完成运行时,打开模拟数据检查器.在模拟选项卡上,单击数据检查.有关模拟数据检查器的更多信息,请参见模拟数据检查器(金宝app模型).
7.在模拟数据检查器,选择< commandType >,< velocityCommand >,< rotorVelocity >,< controllerMode >信号。
对于前两秒,控制器被命令校准编码器位置传感器。在控制器实现闭环控制之前,必须对编码器位置传感器进行校准。在位置校准的第一部分,电机加速使用开环控制,以识别编码器的索引脉冲。一旦找到索引,控制器命令并保持零位置,直到编码器偏移被识别。在这段时间内,速度为零。2秒后,控制器变为闭环控制,并遵循命令速度剖面。在闭环速度控制中,FOC调节永磁同步电动机的相电流。
本节向您展示如何通过分别为软件和硬件实现生成C和HDL代码,将控制器算法划分为互补的软件和硬件实现。检查在代码生成期间创建的报告,以展示如何将此代码集成到自己的嵌入式设计中。
1.在focZynqTestBench
模型,打开Controller_Algorithm子系统。控制器算法包含Algorithm_C和Algorithm_HDL块,它们引用focZynqC
而且focZynqHDL
模型,分别。的focZynqC
模型包含了要在软件中实现的部分算法。类似地,focZynqHDL
模型包含要在硬件上实现的算法的部分。
2.运行任务。函数打开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平台的硬件设置。有关硬件设置的信息,请参见安装Xilinx金宝app Zynq平台支持.
2.如图所示连接ZedBoard。
3.如图所示连接AD-FMCMOTCON2-EBZ控制器板和ZedBoard。
本节向您展示如何使用HDL Workflow Advisor为算法生成HDL代码,将HDL打包到IP核中,将IP核集成到Xilinx参考设计中,并创建位流。
1.运行任务。t4_openHdlWorkflowAdvisor函数打开HDL WorkflowAdvisor。
task.t4_openHdlWorkflowAdvisor
2.在HDL Workflow Advisor >设置目标> 1.1设置目标设备和合成工具集团目标平台设置为ZedBoard和FMCMOTCON2
.ZedBoard和FMCMOTCON2
是一个Vivado参考设计,包含ADC,编码器和PWM组件。有关如何创建此参考设计的信息,请参见为Zynq工作流定义定制板和参考设计(高密度脂蛋白编码器).
3.选择1.2.设置目标接口用于识别端口。的目标平台接口IP前缀是指在ZedBoard电机控制参考设计中注册的连接。
4.选择4.3构建FPGA比特流>运行到所选任务或者运行任务。t5_generateBitstreamAndInterfaceBlock函数,用于为算法生成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.运行任务。函数打开focZynqArmDeployment
模型。
task.t7_openZynqArmModel
的focZynqArmDeployment
模型可以生成C代码,自动与Linux ARM参考框架集成,并将可执行文件部署到Xilinx Zynq平台上的ARM处理器上。部署模型引用原始控制器模型,并包含测试刺激、作用域和AXI_Interface库块将比特流部署到可编程逻辑部分。
2.在硬件选项卡上,单击监视和调优在ARM处理器上以可执行文件的形式构建、部署和运行模型。生成的代码根据参考框架编译,以创建可执行文件。在执行时,Simulink监视信号金宝app,并在作用域中显示它们。
3.打开模拟数据检查器查看已记录的信号,并将其与先前从focZynqTestBench
模型。在模拟选项卡上,单击数据检查.
4.在模拟数据检查器,选择rotorVelocity信号。在编码器校准模式下,由于模拟电机和真实电机在不同的转子位置启动,信号最初不同,然后一致。相比之下,仿真中的闭环速度控制与硬件非常相似。之所以会出现差异,是因为电机和传感器的仿真模型使用数据表值,而没有明确说明物理电机的制造公差。
继续探索本示例中的文件,以深入了解模拟、代码生成和自动化部署如何帮助您为硬件开发控制器。
HDL Coder支金宝app持浮点单精度数据类型。打开示例的浮点模型:
zynqexPMSMFOCSingleStart
浮点模型突出了HDL Coder从包含定点和浮点数据类型的混合模型生成HDL代码的能力。按照相同的任务,在Xilinx Zynq SoC平台上实现单精度电流控制算法。