Main Content

PMSM 的无传感器磁场定向控制

此示例采用磁场定向控制 (FOC) 方法来控制三相永磁同步电机 (PMSM) 的转速。有关 FOC 的详细信息,请参阅磁场定向控制 (FOC)

此示例使用无传感器的位置估计方法。您可以选用滑动模式观测器或磁通观测器或扩展的 EMF 观测器来估计示例中使用的 FOC 算法的位置反馈。

Sliding Mode Observer (SMO) 模块根据测量位置和估计位置之间的误差生成滑动运动。该模块生成的估计值与测量位置严格成正比。该模块使用定子电压 $({V_\alpha },{V_\beta })$ 和电流 $({I_\alpha },{I_\beta })$ 作为输入,并估计电机模型的电动势 (emf)。它使用 emf 进一步估计转子位置和转子转速。

Flux Observer 模块使用相同的输入 $({V_\alpha },{V_\beta },{I_\alpha },{I_\beta })$ 来估计定子磁通、生成的转矩和转子位置。

Extended EMF Observer 模块根据在静态 alpha-beta 参考坐标系中测得的电压和电流,计算电气位置 ${\theta _e}$(或 $\sin {\theta _e}$$\cos {\theta _e}$)以及 PMSM 的机械转速。

为确保检测到的转子位置准确,请将逆变器板电阻值添加到电机模块的定子相电阻参数以及 Sliding Mode Observer、Flux Observer 和 Extended EMF Observer 模块的定子电阻参数中。

如果您使用磁通观测器,此示例可以运行 PMSM 和无刷直流 (BLDC) 电机。

无传感器的观测器和算法对于超出基转速的电机运行存在已知限制。我们建议您仅将无传感器示例用于基转速以下的运行。

从开环控制到闭环控制的转换

使用闭环转速控制运行电机需要准确估计电机的实时位置。该示例使用无传感器观测器进行位置估计。然而,无传感器位置观测器,如磁通观测器、滑动模式观测器和扩展电动势观测器,需要可测量的电机电流和电压值才能成功估计转子位置。为了生成无传感器位置估计所需的电流和电压,应采用开环控制运行电机。在无传感器观测器成功估计了转子位置后,可以从开环控制转换为闭环控制。

然而,成功完成这种转换可能充满挑战,因为电机的动态特性可能会使得确定准确的 PI 控制增益以及其他参数变得困难。此示例说明一种实现这种平稳转换的简化方法。该方法包括以下三个阶段:

  • 使用开环控制启动并运行电机。

  • 使用最大开环转速限值切换到闭环。

  • 使用闭环控制遵循给定的参考转速。

阶段 1:使用开环控制启动并运行电机

该示例使用开环控制启动并运行电机。使用开环控制运行电机取决于 d 轴电压 (Vd) 和最大开环转速限值参数。对于具有高惯量或高摩擦的电机,该示例中使用的默认值 Vd 可能不满足它们的要求。因此,建议您增大 Vd 的最小限值。由于增大 Vd 的最低限值会使电机电流和电机温度增加,我们建议您小幅增大 Vd 的最低限值。请使用变量 MIN_OL_VD_LIMIT(在与该示例相关的模型初始化脚本 mcb_pmsm_foc_sensorless_f28069MLaunchPad_datascriptmcb_pmsm_foc_sensorless_f28379d_datascript 中提供)更改 Vd 的最小限值。

在无传感器观测器开始跟踪转子位置后,该示例会移至阶段 2。

阶段 2:使用最大开环转速限值切换到闭环

在此阶段,您可以验证无传感器观测器是否使用与 Vd 对应的最小电流值 (Id) 来成功估计转子位置。

  • 此示例通过使用最大开环转速限值(由模型初始化脚本中提供的 MAX_OL_POS_SPDMAX_OL_NEG_SPD 变量定义)运行电机来开始此阶段。

注意:您可以调整 MAX_OL_POS_SPDMAX_OL_NEG_SPD 的值,以确保在该示例中生成足够的电流 (Id),从而成功估计转子位置。

  • 验证无传感器观测器是否成功计算出转子的实时位置值。

  • 然后,该示例初始化 d 轴电流 (Id)、q 轴电流 (Iq) 和转速 PI 控制器,以启用闭环磁场定向控制 (FOC)。确保您在模型初始化脚本中为 PI 控制器设置初始变量值(IqVdVq)。

此示例使用子系统 State Machine Handler/Compute Control-loop Initial Values 来计算 IqVdVq 的默认初始值。它还利用 PI 控制环中的计算初始值。

该示例确保在第一次启用 IdIq 和转速 PI 控制器时,控制器的初始值保持不变。这三个 PI 控制环中的积分器使用初始值 ${y_0} = {y_{t - 1}} - {K_p} \times error$(其中,${y_{t - 1}}$ 是上一个值,${K_p}$ 是控制器增益)。

  • 然后,该示例使用 Stateflow 将电流 Id 从当前测量值逐渐减至零。

注意:在转换为闭环后,您可以直接使用转子位置(由无传感器观测器估计)、参考 Id 电流(设置为零)和参考 Iq 电流(从转速控制环获得)。不过,使用这种方法会导致电流瞬变,从而使无传感器位置估计器的输出失真。为了实现平滑的电流转换,该示例将电流 Id 减至零。您可以使用模型初始化脚本中提供的变量 RAMP_STEP_SIZE 来设置 Id 电流的减速,该操作由 Stateflow 执行。

阶段 3:使用闭环控制遵循给定的参考转速

在该示例中,当 Id 减至零后,将进入以下阶段:使用 FOC 算法通过遵循给定的闭环参考转速来运行电机。

注意:要更改电机转向,Stateflow 会将电机转速从当前闭环转速更改为最大开环转速限值,以转换到开环模式。接着,它会在开环运行期间更改电机转向,然后转换回闭环控制并遵循参考转速。您可以利用电机动力学过程中所需的额外时间进行调整,以适应 Stateflow 中的延迟。

模型

该示例包括以下模型:

您可以将这些模型用于仿真和代码生成。

对于可用于不同硬件配置的模型名称,请参阅“生成代码并将模型部署到目标硬件”一节中的“必需的硬件”主题。

必需的 MathWorks 产品

要仿真模型,您需要:

1.对于模型:mcb_pmsm_foc_sensorless_f28069MLaunchPad

  • Motor Control Blockset™

  • Fixed-Point Designer™

  • Stateflow®(仅在修改示例模型时才需要)

2.对于模型:mcb_pmsm_foc_sensorless_f28379d

  • Motor Control Blockset™

  • Stateflow(仅在修改示例模型时才需要)

要生成代码并部署模型,您需要:

1.对于模型:mcb_pmsm_foc_sensorless_f28069MLaunchPad

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™

  • Stateflow(仅在修改示例模型时才需要)

2.对于模型:mcb_pmsm_foc_sensorless_f28379d

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™(仅在优化代码生成时需要)

  • Stateflow(仅在修改示例模型时才需要)

前提条件

1.获取电机参数。我们对 Simulink® 模型提供了默认电机参数,您可以用电机数据表或其他来源的值替换这些默认值。

不过,如果您有电机控制硬件,则可以通过使用 Motor Control Blockset 参数估计工具来估计要使用的电机的参数。有关说明,请参阅使用推荐的硬件估计 PMSM 参数

参数估计工具使用估计的电机参数更新 motorParam 变量(在 MATLAB® 工作区中)。

2.如果您从数据表或其他来源获得电机参数,请在与 Simulink® 模型相关联的模型初始化脚本中更新电机参数和逆变器参数。有关说明,请参阅估计控制增益和使用工具函数

如果您使用参数估计工具,则可以在模型初始化脚本中更新逆变器参数,但不能更新电机参数。该脚本会自动从更新后的 motorParam 工作区变量中提取电机参数。

如果使用的是 Sliding Mode Observer,且电机参数通过参数估计工具进行估计,则 Sliding Mode Observer 参数需要调节。

仿真模型

此示例支持仿真。请按照以下步骤仿真模型。

1.打开此示例附带的一个目标模型。

2.使用 Position Estimator 按钮选择以下无传感器位置估计方法之一:

3.要仿真模型,请点击仿真选项卡上的运行

4.要查看和分析仿真结果,请点击仿真选项卡上的数据检查器

生成代码并将模型部署到目标硬件

本节将指导您生成代码并在目标硬件上运行 FOC 算法。

此示例使用一个主机模型和一个目标模型。主机模型是控制器硬件板的一个用户界面。您可以在主机上运行主机模型。使用主机模型的前提条件是将目标模型部署到控制器硬件板上。主机模型使用串行通信对目标 Simulink® 模型发出指令,并以闭环控制方式运行电机。

必需的硬件

此示例支持以下硬件配置。您还可以在 MATLAB® 命令提示符下使用目标模型名称打开对应硬件配置的模型。

有关与前述硬件配置相关的连接,请参阅 LAUNCHXL-F28069M 和 LAUNCHXL-F28379D 配置

生成代码并在目标硬件上运行模型

1.仿真目标模型并观测仿真结果。

2.完成硬件连接。

3.模型会自动计算模数转换器 (ADC) 或电流偏移值。要禁用此功能(默认启用),请在模型初始化脚本中将变量 inverter.ADCOffsetCalibEnable 的值更新为 0。

您也可以计算 ADC 偏移值,并在模型初始化脚本中手动更新它。有关说明,请参阅以开环控制方式运行三相交流电机并校准 ADC 偏移量

4.按所需的硬件配置打开目标模型。如果您要更改该模型的默认硬件配置设置,请参阅模型配置参数

5.将一个示例程序加载到 LAUNCHXL-F28379D 的 CPU2(例如使用 GPIO31 操作 CPU2 蓝色 LED 的程序 c28379D_cpu2_blink.slx),以确保 CPU2 没有错误地配置为使用预留给 CPU1 的板载外设。有关示例程序或模型的详细信息,请参阅 Getting Started with Texas Instruments C2000 Microcontroller Blockset (C2000 Microcontroller Blockset) 中的“任务 2 - 为 TI Delfino F28379D LaunchPad(双核)创建、配置和运行模型”部分。

6.使用 Position Estimator 按钮选择一个无传感器位置估计方法。

7.点击硬件选项卡上的编译、部署和启动以将目标模型部署到硬件上。

8.在目标模型中,点击主机模型超链接以打开关联的主机模型。

有关主机模型和目标模型之间串行通信的详细信息,请参阅Host-Target Communication

9.在与目标模型关联的模型初始化脚本中,使用变量 target.comport 指定通信端口。该示例使用此变量来更新主机模型中可用的 Host Serial Setup、Host Serial Receive 和 Host Serial Transmit 模块的端口参数。

10.更新主机模型中的 Reference Speed 值。

注意:

  • 在以要求的参考转速运行电机(通过使用 Sliding Mode Observer、Flux Observer 或 Extended EMF Observer)之前,请使用开环控制以 0.1 x pmsm.N_base 的转速开始运行电机。然后,将转速增加到 0.25 x pmsm.N_base(其中,pmsm.N_base 是电机基转速的 MATLAB 工作区变量),以转换为闭环控制。

  • 加速和减速过快可能会影响无传感器位置计算。

11.点击仿真选项卡上的运行以运行主机模型。

12.将 Start / Stop Motor 开关的位置切换到 On,以开始在开环条件下运行电机(默认情况下,电机以 10% 的基转速旋转)。

注意:请勿长时间在开环条件下运行电机(使用此示例)。电机可能会消耗大量电流并产生过多热量。

我们设计了开环控制,使电机以小于或等于基转速 10% 的参考转速运行。

当您在硬件上以低参考转速运行此示例时,因为已知问题,PMSM 可能不会按照低参考转速运行。

13.将电机的参考转速增至高于基转速的 10% 的值,以从开环控制切换到闭环控制。

注意:要更改电机的旋转方向,请将电机的参考转速降至低于基转速 10% 的值。这会使电机回到开环条件。更改旋转方向,但保持参考转速的大小不变。然后转换到闭环状态。

14.在主机模型的 Time Scope 中,观测来自 RX 子系统的调试信号。

注意:

  • 如果参考转速和参考转矩较高,则可能会影响 Sliding Mode Observer 模块的性能。

  • 如果您使用基于 F28379D 的控制器,还可以选择要监控的调试信号。

其他可尝试的操作

您可以使用 SoC Blockset™ 来实现无传感器闭环电机控制应用,以应对与 ADC-PWM 同步、控制器响应和研究不同 PWM 设置相关的挑战。有关详细信息,请参阅Integrate MCU Scheduling and Peripherals in Motor Control Application

您还可以使用 SoC Blockset™ 开发无传感器实时电机控制应用,以利用多个处理器核实现设计模块化、更高的控制器性能和其他设计目标。有关详细信息,请参阅Partition Motor Control for Multiprocessor MCUs