1616832_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1616832_zh-CN

1616832_zh-CN

基于 S32K344 的三相无传感器 PMSM 电机控制套件(使用 MBDT 模块)

本文内容与 AN13902:《基于 S32K344 的三相无传感器 PMSM 电机控制套件(使用 MBDT 模块)》完全一致


1. 简介


基于模型的设计工具箱 (Model-Based Design Toolbox,MBDT) 支持通过 MATLAB® 和 Simulink® 环境实现面向 NXP 处理器的基于模型的设计流程。

该工具箱旨在助力开发日益复杂的应用,它是一组工具和库的集合,可帮助客户在 MCU 和处理器上进行原型设计并加速算法开发。

MBDT 整合了 NXP 工具(实时驱动程序、配置工具、汽车数学和电机控制库 (AMMCLib)、编译器和工具链),提供完整的开发解决方案,具有以下优势:

  • 代码/算法的可重用性
  • 易于理解/易于遵循的图表
  • 自动代码生成
stefanvlad_0-1678970238033.png

S32K3 是基于 Arm® Cortex®-M7 的微控制器系列,提供单核、双核和锁步核配置,支持高达 ASIL(汽车安全完整性等级)D 功能安全的汽车和工业应用,运行频率高达 240MHz,配备浮点单元 (FPU)。S32K3 适用于电机控制、电池管理系统(BMS)或车身控制模块 (BCM) 等应用。


2. 电机控制 PMSM 示例


适用于 S32K3 的 MBDT 插件包含一个电机控制示例 (s32k3xx_mc_pmsm.mdl),支持以下功能:

  • 三相 PMSM 速度矢量控制 (FOC)
  • 采用两个分流电阻的电流检测
  • 通过无传感器算法或编码器位置传感器估算轴位置和速度
  • 使用 FreeMASTER 调试工具的应用控制用户界面

如需安装适用于 S32K3 的 MBDT 插件,请查看 NXP MBDT 页面下的《S32K3xx 基于模型的设计工具箱 - 快速入门指南》。

s32k3xx_mc_pmsm.mdl 示例展示了如何使用 MCSPTE1AK344 无刷直流电机 (BLDC) 和永磁同步电机 (PMSM) 电机控制开发套件,通过两个分流电流传感器实现永磁同步电机 (PMSM) 的磁场定向控制 (FOC) 矢量控制。此 Simulink® 模型配置为与 Sunrise 42BLY3A78-24110 电机配合使用,但用户可加载 “s32k3xx_mc_pmsm_data_linix.m” 脚本以使用 Linix 45ZWN24-40 电机。

应用程序部署到目标设备后,RGBLED0_GREEN 应保持常亮。通过提供的项目选择所需的电机速度,然后在 FreeMASTER 中按下 “On/Off” 按钮。或者,可按下 USER_SW0 按钮(板上的 SW6)以顺时针(CW)模式启动电机,或按下 USER_SW1 按钮(板上的 SW5)以逆时针(CCW)模式启动电机。同时按下两个按钮或复位按钮将停止电机。同时按下两个按钮或复位按钮可停止电机。

若无误,电机应开始旋转,且 RGBLED0_GREEN 将开始闪烁。若出现任何错误,电机将不运行,且 RGBLED0 将从绿色变为红色常亮。


2.1 必需软件



2.2 必要硬件


stefanvlad_1-1678968674981.png

2.3 准备演示


  • MCSPTE1AK344 与原始 S32K3X4EVB-Q172 板相比有一些修改。如需了解具体变化,请查看 NXP 网站上的《MCSPTE1AK344 电机控制套件的 S32K3X4EVB-Q172 板修改 schematic 附录》。
  • 检查 DEVKIT-MOTORGD 上的板载跳线 J9、J10 和 J11 是否处于下图中的 2-3 位置,以通过分流电阻启用相电流测量:
    stefanvlad_2-1678968675534.png
  • 将 micro-USB 电缆连接在主机 PC 和 OpenSDA USB 端口(J40)之间,并将 SW1 切换到 S32K3X4EVB-Q172 板上的位置 2。
  • 将 12V 电源连接到DEVKIT-MOTORGD板,并将 S32K3X4EVB-Q172 板上的SW1从2位置切换到1位置。
  • SW1 旁边的四个 LED 应亮起并呈橙色常亮,若它们闪烁,将开关从位置 1 移至 2 再移回 1,以启动无活动看门狗的 SBC。
  • 在 MATLAB® 中打开 s32k3xx_mc_pmsm.mdl。用户可在 Sunrise 42BLY3A78-24110 电机(MCSPTE1AK344 套件)或 MCSPTE1AK144 开发套件中的 Linix 45ZWN24-40 电机之间选择。如需从默认的 Sunrise 电机更换,点击 “电机选择” 模块中的 “Linix 电机参数”。
  • 构建程序并下载到目标板,RGBLED0_GREEN 亮起。
  • 从 “FreeMASTER_control” 文件夹打开 “S32K_PMSM_Sensorless.pmp”FreeMASTER 项目,点击 “Tools” 菜单,然后点击 “Connection Wizard”,接着点击两次 “Next”,选择分配给 S32K3X4EVB-Q172 板的 COM 端口和 115200 波特率。

2.4 运行演示


  • 在 “S32K_PMSM_Sensorless” 项目中,点击 “App Control” 选项卡,使用速度仪表选择所需速度,然后点击 “On/Off” 按钮。
    或者,按下 USER_SW0 按钮以顺时针(CW)模式启动电机,按下 USER_SW1 按钮以逆时针(CCW)模式启动电机。
    同时按下两个按钮或复位按钮将停止电机。
  • 若出现任何故障,电机将停止,故障将在 FreeMASTER 项目中显示,且 RGBLED0_RED 将亮起。如需再次运行电机,点击 “Fault” 按钮清除故障,然后重新启动电机。
  • 电机旋转时,RGBLED0_GREEN 将每秒闪烁一次。

3. Model Overview


下图展示了包含所有模块的模型概览:

stefanvlad_3-1678968675614.png

主要模块如下:

  • Initialize 模块包含 S32K344 MCU 和 GD3000 预驱动器的函数
  • Hardware_interrupt_handler 调用测量模块并驱动电机控制算法
  • 测量读取ADC FIFO缓冲区并调用以下模块
  • Board buttons 控制电机的启动(顺时针或逆时针)和停止
  • State machine 子系统包含电机控制应用程序的主要 “StateFlow”,以及在每个状态中执行的 S 函数
  • Motor selection 模块包含 Sunrise 或 Linix 电机的参数
  • RGBLED0 toggle 模块控制绿色 LED 的闪烁
  • Update PWM 模块调用外设模块以更新新的占空比数值
  • Var. Init. 模块包含模型和 FreeMASTER 中使用的大多数变量
  • FreeMASTER Recorder 模块将数据从模型传输到 PC

3.1 初始化函数


生成代码中运行的第一个模块用于配置:

  • 通过 FreeMASTER 进行通信
  • 模数转换器 (ADC) - ADC0 和 ADC1 实例
  • GD3000 逆变器板驱动器
  • 六个PWM通道
  • 触发“MBD_e_init”事件
stefanvlad_0-1678976198381.png

3.2 ADC 中断和测量


硬件中断处理程序由 ADC(模数转换器)激活,并以 100μs 的周期循环调用以采样 FOC 状态变量,它是该电机控制应用程序的主要驱动程序。

DEVKIT-MOTORGD 上的分流电阻用于测量电机定子相电流。电流流过逆变器的每个桥臂 (R56、R57 和 R58),产生的电压降输入运算放大器进行增益调整和信号滤波,然后由 ADC 外设读取。R60 用作直流母线电流的低侧分流电阻。

尽管 S32K344 包含三个 ADC,且板上有三个分流电阻(R56、R57 和 R58),但本应用中同时仅监控两个电流,以展示 ADC 单触发模式和 BCTU 控制模式的并行使用。第三个定子电流通过以下公式获得:

stefanvlad_1-1678976240256.png

有关电流测量的特定硬件的更多详细信息,请参见《基于 S32K344 的三相无传感器 PMSM 电机控制套件(使用 RTD 底层 API)》应用笔记 AN13767 的第 3.3 章 “相电流测量”。

硬件中断处理程序调用测量块子系统:

stefanvlad_2-1678976343164.png

Measurement 模块读取 ADC FIFO(先进先出)缓冲区,并使用多路复用器 (MUX) 创建一个包含 3 个信号的总线,每个信号包含相应 ADC 通道的值:

stefanvlad_3-1678976422482.png

此子系统还为其他子系统生成函数调用:

  • 板载按钮 (Board Buttons)
  • 状态机 (State Machine)

3.3 板载按钮


该模块提供启动电机顺时针(CW)或逆时针(CCW)方向并停止电机的功能:

stefanvlad_4-1678976507225.png

当按下 USER_SW0 按钮时,电机沿顺时针方向启动,而当按下 USER_SW1 按钮时,电机沿逆时针方向启动。

同时按下两个按钮将停止电机并重新准备系统以便再次启动。

FreeMASTER 工具可读取两个全局变量(btSpeedUp 和 btSpeedDown),以顺时针或逆时针方向启动或停止电机。

通过连续按下同一按钮来逐步增加/减小速度,这会触发下面的 If Action 子系统:

stefanvlad_5-1678977036606.png

如果 “cntSpeedUp” 值大于 “MBD_SPEED_UP_CNT”,计数器值将重置为 0;否则,它将随着子系统的每次运行而增加。


4. 状态机


这是MATLAB模型中的主电机控制模块,也是最复杂的一个:

stefanvlad_6-1678977081566.png

主状态机模块控制电机控制应用程序的流程:

stefanvlad_7-1678977107405.png

应用程序状态机由以下六个状态组成:

  • INIT – local_MBD_init
  • FAULT – local_MBD_fault
  • READY – local_MBD_ready
  • CALIB – 本地_MBD_校准
  • ALIGN – local_MBD_align
  • RUN – local_MBD_run

INIT状态是第一个执行的状态,在此状态下,PWM输出被禁用,变量被重置为零。

初始化后,RGBLED0_GREEN 设置为 “点亮”,并在设备进入 “READY” 状态之前设置 “MBD_ready”。

系统进入CALIB状态后,测量 A 相和 B 相电流的偏移量。

接着是电机的 ALIGN 阶段,启动斜坡启动,电机进入 RUN 状态,在此状态下电机从开环切换到闭环。

每个状态都会调用模型子系统,接下来我们将详细研究这些构建元素。


4.1 计算事件


该模块基于原始 ADC 读数计算所有定子电流,并计算事件和直流母线电压:

stefanvlad_8-1678977191528.png

查看 “ Compute Events and ADCs” 模块内部:

stefanvlad_9-1678977234879.png

仅当电机在 OnOffState 设置为 OFF 且 OnOffSwitch 设置为 TRUE 时启动,或者电机在 OnOffState 设置为开启 ON 且 OnOffSwitch 设置为 FALSE 时停止,才会生成事件。

stefanvlad_10-1678977255168.png

该子系统检查 OnOffState 是否等于 1,如果为真,它将设置事件的输出为 MBD_e_app_on;否则,输出为关闭。

Calc_iABC获取ADC的原始值并将其转换为实际电流:

stefanvlad_16-1678968676045.png

它还使用以下公式确定第三个定子电流:

stefanvlad_18-1678968676046.png

UDC_filt 模块获取原始 ADC 值并计算原始和滤波后的直流母线电压:

stefanvlad_1-1679055102268.pngstefanvlad_19-1678968676087.png

原始 ADC 值经过偏移和乘以 MATLAB 脚本 “s32k3xx_mc_pmsm_data.m” 中的常数 MBD_U_DCB_MAX。

AMMCLib 函数 GDFLIB_FilterMA 实现指数移动平均滤波器。滤波器将根据预设值初始化内部状态。

此预设的目的是避免过大的瞬态。在这种情况下,使用常数12是因为额定直流电压为12伏。

UDC_filt 模块的输出更新两个全局变量:

  • Udcb_Filt
  • Udcb_Raw

这些变量特别重要,因为它们在故障状态下的电流环路中用于检查过压、在对齐状态中以及用于消除直流母线纹波。


4.2 初始化状态


此代码块将所有变量重置为其默认初始状态,并调用一个函数来禁用PWM:

stefanvlad_20-1678968676144.png

InitLeds 模块将 RGBLED0 设置为零,同时将 OnOffState、OnOffSwitch 和 SwitchFaultClear 也设置为零:

stefanvlad_21-1678968676184.png

在所有变量设置完成后,MBD_e_init_done 被发送到全局变量 Event。


4.3 故障状态


该模块检查 MBD_State 是否为故障状态,然后检查可能出现的各种错误,例如过流、过压和欠压:

stefanvlad_22-1678968676209.png

还会检查 A、B 或 C 各相的过流,以及直流母线过压和直流母线过流。

stefanvlad_23-1678968676281.png

如果达到任何限制,将触发禁用 PWM 输出的函数调用。


4.4 对齐状态


该子系统通过为 D 和 Q 参考设置恒定值来对齐电机轴:

stefanvlad_24-1678968676360.png

SetStates子系统设置变量并重置对齐过程所需的计数器:

stefanvlad_25-1678968676383.png

逆帕克变换由Calc_uAIBReq用于计算Ud和Uq电压:

stefanvlad_26-1678968676425.png

Wait_to_align 模块使用计数器等待电机轴机械对齐:

stefanvlad_27-1678968676439.png

对齐子系统使用计时器等待,直到计数器为负,然后重置所有以下变量:DutyCycleValues (:)、uDQReq1、uDQReq2、iDQReq1、iDQReq2、Rst_FastLoop、Rst_SlowLoop、trackingToSensorless、speedLoopCntr、openLoop_wRotEl、pospeControl_wRotEl、sensorless_wRotEl、sensorless_thRotEl、openLoop_thRotEl:

stefanvlad_28-1678968676466.png

在所有值设置完成后,MBD_e_align_done将被发送到 Event 全局变量。

最后一个子系统用于消除直流母线纹波并计算 PWM 占空比:

stefanvlad_29-1678968676495.png

它使用了两个 AMMCLib 函数“GMCLIB_ElimDcBusRip”和“GMCLIB_SvmStd_FLT”。

“GMCLIB_ElimDcBusRip” 函数提供了一种计算方法,用于重新计算所需定子电压矢量的直轴 Uα 和交轴 Uβ 分量,以补偿功率级直流母线上的电压纹波。

“GMCLIB_SvmStd_FLT”函数将两相(α-β)正交坐标系中的值转换为由两组星形连接的三相定子绕组(f32A-f32B-f32C)和(f32D-f32E-f32F)组成的六相系统,使用空间矢量调制(SVM)算法。

为了说明从定子参考电压(α 和 β)到改进型空间矢量调制 (SVM) 的转换,我们可以仔细观察下面的波形:

stefanvlad_30-1678968676596.png

我们采用改进型空间矢量调制,通过持续上下偏移三相电压系统,实现直流母线电压的充分利用。

stefanvlad_31-1678968676754.png

这种偏移称为 “三次谐波注入”,能够使基波振幅提高 15.5%,与标准正弦 PWM 调制相比,可使电机达到更高的速度范围或输出更大的扭矩。


4.5 就绪状态


此状态包含 2 个块 GreenLedOn 和 ReadyStateSetStates,如下图所示:

stefanvlad_32-1678968676829.png

GreenLedOn 模块将 RGBLED0 设置为纯绿色常亮,并关闭另外两个颜色的 LED。

“ReadyStateSetStates” 将值“MBD_e_ready”发送到 Event,并将常量“MBD_ready”发送到“MBD_State”全局变量。

就绪状态子系统还会生成一个函数调用来禁用 PWM 输出。


4.6 校准状态


该模块计算 A 相和 B 相电流的偏移量,并使用计数器等待,直至可以重置变量:

stefanvlad_33-1678968676894.png

“Calculate_I_ABCoffsets”使用 MATLAB 脚本中的“IphaseAB_raw”值和常数“MBD_I_MAX”作为 AMMCLib 模块的输入。

stefanvlad_34-1678968676943.png

“GDFLIB_FilterMA_FLT” 函数模块实现了一个指数移动平均滤波器,用于计算原始相电流与脚本 “s32k3xx_mc_pmsm_data.m” 文件中设置为常数的最大电流 “MBD_I_MAX” 之间的偏移量。

该函数返回一个单精度浮点值,表示步骤 (k) 中输入信号的滤波值。

计数器的实现很简单,每一步都使用递减并进行比较:

stefanvlad_35-1678968676963.png

如果 “CalibCnt” 计数器值大于 “CalibTimer” 值,它将触发 “ResetVariables” 子系统:

stefanvlad_36-1678968676987.png

这将设置所有上述变量,并将值“MBD_e_calib_done”发送到事件全局状态。


4.7 运行状态


这是主要的应用模块,包含重置函数和电机控制环路:

stefanvlad_37-1678968677013.png


“Rst_FastLoop”变量用于在用户希望停止并重新启动电机时重置电机控制算法。

电机控制算法如下图所示,从电流采集、Clark+Park 变换、反电动势和角度跟踪观测器、电流环路、反 Park 变换加直流母线纹波补偿到 PWM 输出:

stefanvlad_38-1678968677055.png

上述示意图与应用笔记 AN13767《基于 S32K344 的三相无传感器 PMSM 电机控制套件(使用 RTD 底层 API)》中的电机控制应用类似:

stefanvlad_39-1678968677191.png

 

4.8 电机控制算法概述


为了简化控制系统,我们可以从模块集的角度 “线性” 审视这种电机控制算法:

stefanvlad_40-1678968677319.png

第一步是获取电机定子相电流。

分流电阻上的电压降被送入运算放大器进行放大和信号滤波,然后输入到模数转换器(ADC)。

随后,ADC 用于检测两相电流,然后电机控制算法根据基尔霍夫定律计算第三相电流,该定律指出流入节点的电流之和为零:

stefanvlad_41-1678968677320.png

然后使用正向 Clark 变换将三相系统转换为两相正交系统 (α,β)。

然后使用 Park 变换将静止系统转换为旋转 d-q 参考系,之后将其输入到反电动势和角度跟踪观察器中,以计算下一个 PWM 换向的指令电压。

使用反 Park 变换将 d-q 坐标转换回 α 和 β 静止坐标系。

stefanvlad_42-1678968677385.png

空间矢量调制 (SVM) 模块使用反 Clark 变换生成电机绕组的三相电压,完成从电流采集到生成电压指令的电机控制环路。

有关方程、静止和旋转参考系的更多信息,请参阅应用笔记 AN13767 的第 3.2 章 “正交相同步参考系中的 PMSM 模型”。


5. 电流环路 (Fast Loop)


在称为磁场定向控制 (FOC) 的变频驱动控制方法中,电流控制至关重要。将定子相电流转换为正交旋转两相系统后,会得到两个独立的电流分量。

直轴(d 轴)电流分量称为磁通产生分量,与磁通量正交的交轴(q 轴)分量称为转矩产生分量。

stefanvlad_43-1678968677554.png

电流控制环路用于以高精度、高动态性和高带宽控制三相电机的转矩和磁通量。

回顾 MATLAB 模型,让我们按照从 ADC 信号采集到 PWM 输出电压指令的相同逻辑进行介绍。

首先,我们将 ADC 原始值输入到 “Calc_iABC” 模块中,该模块计算三相电流,然后使用 “CurrentSenseProcessing” 模块将其转换为单精度浮点数。

其次,是正向 Clark 变换子系统:

stefanvlad_44-1678968677567.png

这使用“GMCLIB_Clark_FLT”单精度浮点函数,用于将三相(A-B-C)坐标系中的值转换为两相(α-β)正交坐标系,遵循以下方程:

stefanvlad_0-1679055016147.png

接下来是Park变换,使用“GMCLIB_Park_FLT”函数:

stefanvlad_2-1679055122740.png

这根据以下方程将两相(α-β)静止正交坐标系中的值转换为两相(d-q)旋转正交坐标系中的值:

stefanvlad_3-1679055155471.png

其中,(theta_e) 表示转子磁通的电气位置。

电流环路模块接收 d-q 电流坐标作为输入,如下所示:

stefanvlad_4-1679055173362.png

“AMCLIB_CurrentLoop” 函数实现电流控制环路,它是 FOC 的组成部分,代表电机控制结构中最内层的环路。

电流控制环路包含两个递归形式的 PI 控制器,其参数可在 AMMCLib 模块内配置:

stefanvlad_5-1679055223490.png

这些参数可在模型文件夹的脚本 “s32k3xx_mc_pmsm_data.m” 中修改。

电流环路的输出是所需的 Ud 和 Uq 指令电压,它们被送入反 Park 模块:stefanvlad_51-1678968677761.png

“GMCLIB_ParkInv”函数计算逆帕克变换,将两相(d-q)旋转正交坐标系中的量转换为两相(α-β)静止正交坐标系,使用以下方程:

stefanvlad_52-1678968677767.png

接下来,两个信号馈送到 DC 总线 Ripple Compensation 模块:

stefanvlad_53-1678968677780.png

接下来,这两个信号送入直流母线纹波补偿模块:

stefanvlad_54-1678968677794.png

DutyCycleValues值用于更新生成 PWM 信号的 MCU 定时器,这些信号被输入到 GD3000 MOSFET 驱动器中。

“sin-cos” 模块计算转子位置 (theta_e) 的正弦值和余弦值:stefanvlad_55-1678968677810.png

这些信号是角度估计所必需的,并被送入 Park 和反 Park 模块。

反电动势和角度跟踪观察器模块的顶部包含以下内容:

stefanvlad_56-1678968677866.png

“AMCLIB_BemfObsrvDQ”函数返回实际旋转参考系与估计旋转参考系之间的相位误差:

stefanvlad_6-1679055403251.png

反电动势和角度跟踪观察器模块的底部包含“AMCLIB_TrackObsrv_FLT”函数:

stefanvlad_58-1678968678064.png

位置跟踪观测器具有一个 PI 控制器,用于计算工作点 Θestim = Θe 附近的线性近似。

该块的参数是:

stefanvlad_59-1678968678148.png

观察者将“Omega_e”输入到速度回路中,该回路在此模型中被称为慢速回路。

以上所有模块都是电机控制算法“Fast Loop”的一部分,对于当前控制逻辑至关重要。

该函数接收由 “AMCLIB_BemfObsrvDQ” 计算的相位误差 (Θerr),并使用它来估计转子的角速度和位置。

估计的转子位置是通过在锁相环(PLL)中将γ-δ参考框架的相位误差(Θerr)驱动至零来获得的。

PLL 结构如下图所示:

stefanvlad_60-1678968678231.png

此外,我们将介绍其他所需的模块或子系统。


6. Speed Loop(Slow Loop)


Speed Loop 子系统的运行速度远低于 Current Loop:

stefanvlad_61-1678968678245.png

当计数器 “speedLoopCntr” 等于变量 “MBD_SPEED_LOOP_CNTR” 时,慢速环路子系统运行,其执行速度是快速环路的 1/10:

stefanvlad_62-1678968678267.png

首先,进入该子系统后,计数器 “speedLoopCntr” 重置为零,然后进行检查:

stefanvlad_63-1678968678280.png

如果 “PosMode” 等于 2,意味着电机处于无传感器模式,它将设置速度:

stefanvlad_64-1678968678317.png

“PosMode1” 内部有一个小型状态机,用作速度限制器:

stefanvlad_65-1678968678368.png

这将速度输出限制在两个限值之间:“-HighLimSpeed” 和 “+HighLimSpeed”。

速度环路模块实现 “AMCLIB_FWSpeedLoop” 函数:

stefanvlad_66-1678968678412.png

“AMCLIB_FWSpeedLoop” 函数在 FOC 外环控制中实现速度 PI 控制器,并为永磁同步电机实现弱磁算法:

stefanvlad_67-1678968678578.png

上述 diagram 所示的外环中,“AMCLIB FWSpeedLoop” 函数实现了速度 PI 控制器和弱磁控制器。


7. 开环


该模块使用AMMCLib库中的几个函数计算开环“theta_e”:

stefanvlad_68-1678968678611.png

为了计算 theta,我们知道角速度 (ω) 等于角位置 θ 随时间的变化率:

stefanvlad_69-1678968678614.png

此外,我们可以根据以下公式对 omega 进行积分:

stefanvlad_70-1678968678625.png

现在让我们看看 MATLAB 中的实现:

stefanvlad_71-1678968678644.png

这将 “FwSpeedLoop_pRamp_fltState” 变量值除以常数 “MBD_WEL_MAX”,并将其转换为 32 位分数数据类型。

Open Loop 的第二部分由以下组成:

stefanvlad_7-1679056130339.png

“GFLIB_IntegratorTR” 函数使用梯形(双线性)变换实现离散积分器。

结果被转换为 32 位分数数据类型,并乘以常数 “pi”。

系统中有四种运行模式:

stefanvlad_8-1679056179524.png

根据具体场景,每种模式会修改不同的参数。

force mode 施加开环 omega,其他变量为零:

stefanvlad_9-1679056203573.png

tracking mode 将控制 omega 设置为零,theta 设置为开环值:

stefanvlad_10-1679056221256.png


当电机在闭环(无传感器)模式下运行时,位置模式为第二种情况。

stefanvlad_76-1678968678759.png

这将变量 “sensorless_thRotEl” 中的 “theta_e” 除以常数 “pi”,并将其转换为 32 位分数数据类型。

默认模式是:

stefanvlad_77-1678968678766.png

自动模式由一个状态机组成,该状态机根据开环速度切换“PosMode”:

stefanvlad_78-1678968678806.png

函数“MLIB_Abs_FLT”返回开环电气欧米茄的绝对值。

“PosMode” 状态机有以下状态:

stefanvlad_79-1678968678882.png

根据 Open Loop Speed 有 3 种状态:

  • 强制模式 = 0
  • 跟踪模式 = 1
  • Sensorless模式 = 2

这确保电机控制算法根据速度自动切换运行模式。


8. RGBLED0 切换


该模块实现一个定时器,用于切换 RGBLED0_GREEN 的状态。

stefanvlad_80-1678968678915.png

该子系统的第二个功能是关闭另外两个 LED,为 RGBLED0_BLUE 和 RGBLED0_RED 的 NXP 函数模块 Dio_WriteChannel 赋予值 0。

定时器使用变量 “LEDCounter”,该变量在快速环路的每个周期递增,并与值 2500 进行比较。

如果大于 2500,它将把计数器值重新初始化为 0,并触发 If Action 子系统:

stefanvlad_81-1678968678934.png

在此子系统中,将 LEDState 与逻辑 “1” 进行比较,并进行按位异或屏蔽,将结果值赋予 RGBLED0_GREEN 的变量和函数 Dio_WriteChannel。


9. Update PWMs


该模块根据硬件缩放和每个通道的预先计算值生成相应的PWM占空比值。

stefanvlad_82-1678968678989.png

占空比以数组形式存储在一个数据变量中,对应三个通道。

它们与常数 “32768” 相乘以实现占空比偏移,然后被输入到每个 PWM 通道。

此外,“DutyCycleValues” 会根据相同 PWM 模块的相位偏移输入进行调整,Sync Update 输入为常数 “1”,这意味着每个通道都是同步的。

该子系统使用 NXP PWM 模块和 “PWM_SetDutyPhaseShift” 函数来对齐三个通道:PWM0、PWM1 和 PWM2。


10. FreeMASTER 配置 GUI


打开 “S32K_PMSM_Sensorless” 项目,点击 “App Control” 页面,使用速度仪表选择所需速度,然后点击 “On/Off” 按钮:stefanvlad_83-1678968679063.png

此外,用户可以查看各种参数,例如下面的 IDQ currents:

stefanvlad_84-1678968679098.png

我们还可以仔细查看三相电机电流:

stefanvlad_11-1679056559665.png

三相电流以 RGB 颜色表示,根据电机负载不同,其峰值为 1.4 [A]。


11. 结论


MCSPTE1AK344 开发套件提供了一整套硬件功能,与上述的 s32k3xx_mc_pmsm.mdl 示例配合使用,为使用恩智浦(NXP)适用于 NXP Model-Based Design Toolbox for S32K3 进行电机控制算法建模创造了完整的开箱即用体验。

MBDT 在 Simulink® 环境中集成了 NXP 的各类工具,如汽车数学与电机控制库 (AMMCLib)、编译器、配置工具、实时驱动程序 (RTD) 和工具链。它与 Embedded Coder® 一起,为微控制器生成优化代码,确保最先进的软件循环能够在恩智浦微控制器上以最高性能运行。

要了解更多关于适用于 S32K3 的基于模型的设计工具箱的功能,请访问 MBDT 社区页面。你可以在此处发起话题,与创建 MBDT 工具箱的工程师直接交流。除了专注于电池管理系统、AUTOSAR 或电机控制应用的典型应用演示外,你还可以参加 NXP MBDT 培训和课程,如初学者指南系列。

你也可以访问 NXP.com,获取有关 NXP 所提供的开发生态系统的更多信息。


12. 参考文献


 

目录


本文内容与 AN13902:《基于 S32K344 的三相无传感器 PMSM 电机控制套件(使用 MBDT 模块)》完全一致

示例模型
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-05-2026 12:26 AM
更新者: