基于模型的设计简化了嵌入式电机控制系统的开发

描述

本文介绍围绕基于 ARM 的嵌入式电机控制处理器构建基于模型的设计 (MBD) 平台的详细步骤。以下是最初部署的基本永磁同步电机(PMSM)控制算法的示例,以及扩展功能以包括自动化系统的多轴位置控制的便利性。

长期以来,系统和电路建模一直是电机控制系统设计的一个重要方面。使用 MBD 方法,在构建和测试物理硬件之前,使用电气、机械和系统级模型来评估设计概念。MathWorks 的最新仿真工具可以对完整的嵌入式控制系统进行建模,包括电路和机械系统域。同时,嵌入式编码工具从控制系统模型中生成C代码,以便在嵌入式控制平台上直接部署控制算法。

这些工具支持基于模型的设计流程,在最终硬件测试之前,可以在仿真平台上设计和全面测试控制算法。构建成功的 MBD 平台的关键是分区系统模型和嵌入式软件代码。一旦使用已知的算法和系统对MBD平台进行了测试,就可以在系统操作的极端极限下在仿真平台上开发和安全地测试新算法。

完整的设计流程

几十年来,MBD 一直是一个讨论话题,但直到最近几年才演变成一个完整的设计流程 — 从模型创建到完整实现。MBD是一种数学和可视化方法,用于解决与设计复杂的嵌入式控制系统相关的问题。

设计人员可以使用 MBD 来定义具有高级功能特征的模型,而不是使用复杂的结构和广泛的软件代码,而是使用连续时间和离散时间构建块。这些模型与仿真工具配合使用,可实现快速原型设计、软件测试和硬件在环 (HIL) 仿真。

仿真可以立即发现规格差异和建模错误,而不是在设计周期的后期发现。为了优化整个代码生成过程,可以添加自动代码生成,以减少任何手动实施步骤,并帮助进一步缩短总体上市时间。总而言之,MBD方法允许设计人员从更经典的设计方案扩展,直接从模型创建转向仿真、生成、HIL和受控方式的测试,从而允许更改系统设置,而无需完全重新设计系统。

本文中使用的实验设置基于交流馈电闭合电机控制系统,如图1所示。该系统代表功能齐全的PMSM主输入电机驱动器,具有功率因数校正,完全控制通信信号隔离和光学编码器反馈。该系统的核心是ADI公司的ARM Cortex-M4混合信号控制处理器ADSP-CM408。这是通过IAR和MathWorks的组合工具进行编程的,以实现MBD平台的完整实现。®

电机控制

图1.驱动系统平台。(a)交流馈电闭合电机控制系统的框图,以及(b)系统的原型。

交流电机驱动系统建模

目标驱动系统是具有编码器位置反馈的PMSM,连接到具有隔离相电流反馈的三相交流电源逆变器。驱动控制算法在混合信号专用信号处理器(ASSP)上实现,该处理器包括用于捕获电机反馈信号和控制电源逆变器的外设。

出于建模目的,该系统具有三个主要组件:电源逆变器和电机(工厂)、控制反馈电路和数字控制器。该工厂模型使用 Simulink Simscape 组件在连续时域中仿真电源逆变器电路和电机机电元件。反馈电路模型负责控制器和电机驱动模型之间的增益和数据类型转换。

Simulink 嵌入式编码器工具可创建嵌入式 C 代码,准确反映仿真平台和嵌入式控制处理器上的算法执行。成功执行基于模型的设计需要精确的系统和电路模型,以及系统模型和嵌入式控制软件的适当分区。使用的仿真求解器是固定步长离散求解器,因为系统中混合了离散和连续时间函数。

驱动系统硬件由电源板、控制板和带编码器反馈的 PMSM 组成(如图 1b 所示)。电源板包括输入整流器、三相逆变器模块、电流和电压传感器、数字和模拟信号隔离电路以及编码器信号缓冲器。该控制板包括具有 3 MHz ARM Cortex-M240F 内核的电机控制 ASSP 和专用电机控制外设,包括 PWM 定时器、正交编码器计数器、sinc滤波器和嵌入式模数转换器 (ADC)。硬件包括电机电流反馈选项,可将隔离电流传感器与嵌入式ADC配合使用,或将分流器与隔离式ADC Σ-∆转换器和嵌入式sinc滤波器配合使用。

反馈信号采集和控制算法的执行使用处理器中断机制与PWM开关频率同步。系统仿真使用相同的时间步长,因为工厂中感兴趣的时间常数比PWM开关周期长得多。功率逆变器使用平均值模型,因为全开关信号仿真不能提供有用的控制信息。

PMSM电机模型来自MathWorks SimPowerSystems库,由配置菜单甚至预设模型参数支持。用户可以根据设计开发的重点切换定制电机或逆变器型号。

电机控制(MC)算法模型是一组离散的时间函数,在仿真和嵌入式平台上执行每个时间步。通常,MC 算法函数包含在单个子系统块中,以简化代码生成过程。代码生成器创建 C 代码以执行算法输入、输出和状态变量的控制算法和数据结构。该算法本身是常用的磁场定向控制(FOC),具有外部速度环路以及内部d轴和q轴电流环路,如图2所示。

电机控制

图2.FOC 算法。

逆变器接口和反馈路径分为传感器信号调理和嵌入式接口模块。电流传感器和信号调理模型是简单的增益元件,因为它们的带宽超出了控制反馈的目标范围。位置传感器模型更复杂,因为它提供高分辨率增量位置信号和低分辨率绝对位置信号。

嵌入式信号接口的模型包括类型转换功能,因为ADC、sinc滤波器、计数器和定时器外设具有16位或32位定点输出数据寄存器。每个嵌入式接口的增益是外设系统时钟速率、采样速率和接口外设寄存器设置的函数。模型参数必须与嵌入式系统配置相匹配,以确保准确的仿真结果。

软件分区和代码生成

电机驱动系统与电机控制算法一起执行多种功能。嵌入式软件分为多个功能模块,以实现平台灵活性和易于开发。关键代码功能包括系统初始化、通信接口、应用任务、电机控制接口和电机控制算法。图 3 描述了高级驱动器程序流程,而图 4 描述了代码结构。

电机控制

图3.ISR的描述。

电机控制

图4.代码分区。

主程序调用初始化例程来配置 ASSP 硬件,然后将处理器置于连续等待循环中。所有其他函数由事件驱动的中断服务例程 (ISR) 调用。ADC 中断具有最高优先级,当新的传感器数据样本准备就绪时,ADC ISR 调用电机控制函数。ADC采样与PWM开关同步,并提供控制环路执行时序。ADC ISR 执行每个 PWM 周期,但仅在设置电机运行标志时调用电机控制例程 (PMSMctrl)。在构建代码之前选择电机电流反馈路径。

PWM跳闸中断是异步的;它仅在响应硬件故障时才调用,并且是唯一滞后故障的功能,因为硬件PWM跳闸功能会自动关闭逆变器PWM信号。通信端口 ISR 的优先级较低,处理用户命令,并传输调试监视器函数捕获的数据。内核计时器 ISR 管理后台应用程序任务,例如电机启动和停止排序、调试监视器接口和其他内务管理任务。

嵌入式代码按功能而不是根据程序流进行组织。系统初始化代码以标准方式设置处理器时钟、电源和内核计时器,几乎独立于应用程序功能。通信和应用任务代码由用户界面和系统管理要求定义,几乎不依赖于电机控制算法。

电机控制(MC)接口功能管理电机驱动硬件和控制算法之间的信号数据流。该代码特定于驱动电路连接和MC外设配置,以便为控制算法提供适当的反馈信号。电机控制算法是由 Simulink 生成的独立于平台的代码,包括用于反馈和输出信号的数据结构。所有其他驱动器代码都是手工编码的。

实施详细信息

为了从MBD方法中获得最大价值,重要的是要了解电机控制系统不同部分的建模细节要求,并将关键物理系统参数尽可能与相应的模型参数相匹配。这涉及将建模系统划分为不同的细节区域。作为总体规则,以PWM平均方式对整个系统进行建模就足够了。例如,将所有信号视为高频PWM开关周期内的平均值,不包括电压或电流信号中的PWM纹波或开关分量。

系统模型被划分为图5所示的逻辑块以及相关的信号流。如右图所示,这些块中的每一个都进一步细分,每个子块都有适当的建模方法,如表 1 所示。用户命令块不包括在此列表中。用户命令通过 C 代码中的全局参数结构传达给核心算法,一旦这些命令在 Simulink 算法中定义为全局可调参数,它们就会得到正确处理。

电机控制

图5.系统模型分区。

 

建模/代码生成 关键参数
机电系统 (1)*
 
逆变器:平均功能模型,非常简单 没有
电机:标准机电DQ型号 定子电感,反电动势/扭矩常数
机械系统:标准刚度-惯性-摩擦模型,特定应用  负载惯量 
传感器和接口 (2)
 
功能模型 增益、抵消
处理器 (3)
 
外设:功能模型 比例因子、量化效应
核心算法:从这里生成代码 高效实现,定点/浮点边界
驱动电路 (4) 功能模型 没有
*括号中的数字是指图 5 中的块。

 

除了基本设置(如类型大小、字节排序等)之外,通过使自动代码生成不特定于目标,可以实现最大的代码可移植性和易于维护性。MathWorks 提供特定于处理器的代码生成模块,可直接处理处理器外设和驱动程序。虽然此功能在某些情况下可能很有吸引力,但缺点是代码变得不那么可移植,并且设备驱动程序或外围配置(例如,在新的处理器变体中)的任何更改都需要更改代码。因此,在这里介绍的设计示例中,代码生成仅限于控制算法,所有外设在 Simulink 模型中都具有功能模型,并在应用程序项目中手动编码。图 6 强调了这种方法,其中可以看出,从 MathWorks 控制器模型生成的代码链接到主应用程序项目中的其他代码和库模块。

电机控制

图6.型号代码接口。

具有分区模型块的 Simulink 模型如图 7 所示。如图所示,代码是从模型的电机控制算法部分生成的。在硬件实现窗口→配置参数(可选择整体设备类型)和“配置参数→代码生成→接口窗口(选择标准数学库)中选择代码生成的重要设置。

电机控制

图7.建模和代码生成实现。

代码效率的另一个因素是使用的C语言方言。大多数代码生成工具和嵌入式工作台支持的两种非常常见的方言是 C89/C90 和 C99。首先,重要的是在所有工具中使用相同的方言。例如,如果嵌入式工作台配置为根据 C99 构建代码,则自动代码生成工具也必须根据 C99 标准构建代码。如果不这样做,可能会导致代码性能显著下降,在最坏的情况下,可能会导致代码意外运行。

另一个重要因素是定点与浮点类型表示。两种编码方言都支持定点,因此在这种情况下,只要在所有工具中使用相同的方言,方言的选择并不重要。但是,如果使用浮点类型,则 C 方言的选择变得更加重要。

C89/C90 不区分单精度浮点和双精度浮点。如果代码要在支持双精度的处理器上运行,这可能是可以接受的,但对于仅支持单精度的处理器(如 ARM Cortex-M4),这种区别会产生很大的不同。考虑到这一点,确保自动代码生成工具以及嵌入式工作台设置为使用 C99 方言至关重要。

Simulink 提供了 Simscape 和 SimMechanics 等工具箱,一旦知道物理参数,它们就可用于轻松对机电系统进行建模。即使物理参数没有完全表征,也可以加载电机等组件的预定义模型,以大致匹配的规格,以实现电机控制算法的初始设计。对于算法本身,有一些有用的模块,例如Park变换和正弦余弦CORDIC近似模块,可以简化电机控制算法的开发。

自动编码接口由初始化函数调用和一个或多个时间步长函数调用定义,这些函数调用必须在适当的时间步从主应用程序代码中调用。在本例中,有两个时间步长函数 - 主控制算法(在 10 kHz 的 PWM 速率下调用)和速度测量函数(以 1 kHz 速率调用)。自动生成的代码模块集成到主项目中,如图 8 所示。

电机控制

图8.代码模块组织和算法函数调用。

如前所述,代码以模块化方式组织,这使得应用程序特定功能(如网络和保护)的集成非常简单。高优先级任务(如电机控制算法)从图 3 的 ISR 调用。应用程序级任务从基本调度程序内核作为计划任务调用。MC 接口例程包含在电机控制和测量代码块中,后者包括所有电流反馈信号处理代码。ADI监控代码包括用于系统测试的调试监控功能,可在电机运行时捕获应用和控制算法信号数据。数据通过串行链路传输到PC进行显示和分析。

系统测试和调试

通过测量、计算和数据手册确定了表 1 中的关键参数后,可以使用 Simulink 模型确定速度和电流环路的适当控制器增益。这可以使用标准的PID调谐方法[2]或MathWorks提供的调谐工具(如PID调谐器工具)来实现。参考文献 3 中更详细地描述了此过程。

电流环路在建模和实验操作中的性能如图9和图10所示。在此图中,实验数据仅每 5 ms 采样一次,因此存在一些混叠,但总体趋势足够清晰。

电机控制

图9.建模和实验操作的(a)速度响应和(b)q轴电流参考的比较。

电机控制

图 10.电流环路性能——建模和实验结果。

基于模型的自动生成代码的性能可以通过检查PWM周期内的代码执行时间线来确定。这可以使用I/O引脚和示波器来完成,或者更简单地说,使用IAR嵌入式工作台C-SPY调试器中的ITM事件功能。PWM周期内的事件顺序如图11所示。

电机控制

图 11.代码执行时间线。

PWM同步脉冲在每个新的PWM周期开始时发生,该脉冲在硬件中连接到ADC定时器,ADC定时器控制每个ADC通道的采样。在这种情况下,电机电流在PWM同步脉冲和直接存储器访问(DMAed)到存储器之后立即采样,然后执行算法并生成PWM占空比的更新值。如图 11 所示,执行基于模型的自动生成代码消耗不到 PWM 周期的 10%,从而为额外的后台任务提供了大量开销。历史上对自动生成代码效率的担忧不再是一个重要因素。

在代码占用空间方面,算法自动编码的相对大小如表 2 所示,可以看出自动生成的代码占用的内存刚刚超过 10 kb,几乎相当于总占用空间的 15%。ADSP-CM408上的可用SRAM为384 kB,显然可以毫无困难地满足这种存储器要求,允许程序以尽可能快的速率从SRAM运行,并为更复杂的算法和额外的监控或用户界面功能提供足够的裕量。

 

模块 代码(字节) 数据(字节)
电机控制外设 (脉宽调制、编码器) 1584 94 2.3%
测量外设 (模数转换器、辛克、串行监控) 2224 2691 6.7%
功率因数校正控制器配置 和监测 3032 2149 7.1%
用户界面外设 (UART, LCD) 1484 5055 9%
系统(内核、状态机、启动) 1192 1364 3.5%
算法自动编码 5656 5022 14.7%
驱动程序、库 21,596 19,737 56.7%
36,768 36,112 72,880 (100%)

 

新应用程序开发

本文讨论的软件的前提是一个由两个主要组件组成的系统。第一个是基于模型的组件,用于实现控制算法。尽管开发模型时考虑了嵌入式目标,但从自动生成工具获得的代码本质上是通用的。其次,有一个手写的软件组件,它将通用算法代码绑定到嵌入式目标,处理调度,并分配处理器资源。在模型重用和可伸缩性方面,这种系统分区有几个好处。

本文讨论了单电机(单轴)的控制开发。现在,假设驱动器规范要求由同一处理器控制两个电机(双轴)。不言而喻,这是系统的根本变化,但使用通用模型的优势正在变得明显。已经开发的单轴模型没有对处理器外设做出任何假设,它是永磁电机的通用控制算法。因此,要创建能够控制单轴/双轴的模型,只需创建单轴模型的第二个实例即可。

当然,手写代码需要定制以支持单轴/双轴,但假设处理器具有正确的外设集和控制双轴的计算资源,则对手写代码的修改非常简单。无论是控制单轴还是双轴,手写代码的主要任务都是为模型的输入赋值,将模型的输出写入处理器外设,并安排何时执行模型。因此,从单轴到双轴主要是分配/配置外设和计划执行添加轴的算法的问题。该过程是无缝的,并且由于模型是通用的这一事实而启用。

如果只开发一个控制系统,则使用基于模型的设计的好处可能会受到限制。然而,在大多数情况下,产品开发意味着多个产品变体,在这些情况下,模型的重用变得很有吸引力——不仅因为缩短了开发时间,还因为使用可信模型提高了质量。随着时间的推移,算法开发人员将创建一个模型库,如果正确实现,这些模型可以跨产品重用。而且由于这些模型是通用的,它们可以在今天可用的处理器以及明天可用的处理器上运行。

除了满足产品变体或多轴控制的潜在要求外,开发人员有时还可以提供不同的控制器模式。一个典型的示例是提供扭矩控制、速度控制和位置控制模式的应用。位置控制算法的开发可以在电流和速度控制算法的基本构建块上分层。

在大多数应用中,位置控制环路作为围绕内速度和电流环路的外环路应用。基本位置控制器只需要一个比例增益项。通常不需要积分项,因为位置环路中的任何稳态误差都会导致非零速度参考。只要内部电流和速度环路调谐良好,就可以将其视为理想的单位增益模块,并且调谐位置环路的任务变得非常简单。

除了外部比例控制回路外,包括位置参考轮廓仪也很重要,以便负载遵循定义的加速和减速周期和速率。这对于最小化许多系统中的机械应力非常重要。在此应用示例中,将恒定加速度、恒定速度和恒定减速曲线应用于位置参考变化。如图12所示,其中显示了位置参考、轮廓位置参考和相应的理想速度曲线。实际速度遵循此轮廓的程度取决于速度控制器的动态响应。

电机控制

图 12.剖析位置参考。

所有这些功能(位置环路增益、位置刻画器以及辅助功能(如原点定位和末端停止检测)都作为附加模块在代码的基于模型的部分实现。唯一需要额外的手写代码更改是配置I/O以适应初始位置和结束停止信号。

结论

基于模型的设计可以成为加速电机驱动器制造商嵌入式开发的强大工具。如果以通用方式设置和配置,则可以显著减轻手写代码开发和维护的负担。它还可以加快上市时间,因为如果没有硬件,代码开发可以在没有硬件的情况下进行,如果关键系统组件的合理准确模型可用。

这些功能已在 FOC 下运行的 PMSM 驱动器的上下文中得到展示,并扩展到多轴和位置控制。详细介绍了软件模块和基于模型的组件的分区方法,该方法优化了基于模型的解决方案提供的价值。实验数据还说明了该模型在优化速度控制器参数方面的优势,以及代码生成的紧凑性和效率。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分