主要内容

使用基于 STM32G4xx 的处理器和霍尔传感器对 PMSM 进行磁场定向控制

此示例采用磁场定向控制 (FOC) 方法来控制三相永磁同步电机 (PMSM) 的转速。FOC 算法需要转子位置反馈,这可以通过使用霍尔传感器来获得。

闭环 FOC 算法用于调节三相 PMSM 的转速和转矩。

此示例使用 Embedded Coder® Support Package for STMicroelectronics® STM32 Processors 中的基于 STM32G4xx 的外设模块和 Motor Control Blockset™ 中的 MCB 库模块。

霍尔传感器用于测量转子位置。霍尔效应传感器根据施加磁场的强度更改其输出电压。

一个 PMSM 由三个霍尔传感器组成,这三个传感器的电气间隔为 120 度。采用这种设置的 PMSM 可以提供六种有效的二进制状态组合(例如,001、010、011、100、101 和 110)。

传感器以 60 度的倍数提供转子的角位置,控制器用它来计算角速度。

然后,控制器使用角速度来计算转子的精确角位置。

必需的硬件

此示例需要以下硬件:

  • Nucleo-STM32G431RB 板。

  • X-NUCLEO-IHM07M1 或 X-NUCLEO-IHM16M1 驱动扩展板。

  • BLY172S-24V-4000 - 无刷 DC 电机

硬件连接

X-Nucleo-IHM16M1 逆变器板的连接如下所示:

可用模型

此示例包括以下模型:

目标模型可用于代码生成和仿真。

主机模型作为仿真运行,并与目标硬件通信以控制电机。您可以使用 open_system 命令打开 Simulink 模型。例如:

open_system('STM32_HallFOC_Target');

前提条件

在将模型部署到硬件上之前,请完成以下任务:

  1. STM32MotorControlData 脚本中更新目标硬件设备 COM 端口。可以通过编辑硬件参数按钮访问此脚本。

  2. 获取电机参数。默认电机参数已提供,可以用电机数据表或其他来源的值替换。不过,如果您有电机控制硬件,则可以通过使用 Motor Control Blockset 参数估计工具来估计要使用的电机的参数。有关详细信息,请参阅使用自定义硬件估计 PMSM 参数 (Motor Control Blockset)

  3. 如果您从数据表或其他来源获得电机参数,请在与 Simulink® 模型相关联的模型初始化脚本中更新电机参数和逆变器参数。要快速访问此脚本,请点击模型中的 Edit motor and algorithm parameters 按钮。

  4. 在模型初始化脚本中更新霍尔偏移值。如果霍尔偏移量未知,请先运行霍尔偏移量计算模型。在标定完成后,计算出的偏移量将显示在主机模型中。必须在脚本的 pmsm.PositionOffset 变量中更新计算出的值。有关详细信息,请参阅Hall Offset Calibration for PMSM with STM32 Processors

您可以使用以下命令打开偏移量计算目标模型:

open_system('STM32_HallOffset_Target');

配置模型

1.打开 STM32_HallFOC_Target 模型。此模型配置用于基于 STM32G4 xx 硬件。

2.要在其他基于 STM32 的板上运行模型,请首先按 Ctrl+E 打开“配置参数”对话框。然后,通过导航到硬件实现 > 硬件板选择所需的硬件板。

3.转至编译选项,并点击浏览以选择 STM32CubeMX 工程文件。

外设配置

STM32CubeMX 配置

ADC 配置

  • ADC 和 PWM 保持同步,以便于 ADC 注入组转换基于计时器 1 的更新事件启动。

  • ADC 配置为从注入转换读取电流和电压反馈,并从常规转换读取 Vdc。

PWM 配置

  • 配置 PWM 频率和 PWM 通道。Timer1 配置为生成更新事件,以使 ADC 与 PWM 同步。这种同步对于在合适的时间读取电流反馈非常重要。

  • 将重复计数器设置为 1,以确保每个周期发生一次更新事件。

  • 计数器周期使用模型中的外设模块根据提供给 STM32MotorControlData 脚本中 PWM_Frequency 变量的值进行更新。

霍尔传感器接口

  • Timer2 在 XOR ON/霍尔传感器模式中配置。此计时器提供关于霍尔状态转换之间的时间信息。

  • 理想情况是使用 32 位计时器来实现此目的,因为 16 位计时器可能在霍尔转换发生之前溢出。这将导致捕获的数据不准确。这在电机低速运行时较为明显。

  • 将用于与 GPIO 引脚对接的引脚配置为具有高输出速度。

串行配置

使用 LPUART 模块进行主机-目标串行通信。确保在 STM32CubeMX 中设置的波特率与 STM32MotorControlData.m 脚本中的 target.SCI_baud_rate 变量匹配。

外设模块配置

双击模块以打开模块参数配置。如果要在不同硬件板上运行此示例,请确保指定的参数值相同。

  • 配置 Analog to Digital Converter 模块

此示例中的算法使用异步调度。脉冲宽度调制 (PWM) 模块触发 ADC 转换。转换结束时,ADC 会发出一个中断信号,以触发 FOC 算法。

  • 配置 PWM Output 模块

选择在计数器启用后设置重复计数器参数,以便在计时器计数器溢出时更新事件。

  • 配置计时器捕获模块

算法使用 Timer2 与霍尔传感器对接。当霍尔状态发生变化时,会生成 Capture Compare 1 中断。转换时的计时器计数存储在计时器 2 的 Capture Compare 1 寄存器中。请确保启用 Capture Compare 1 中断。

  • 配置 UART/USART Read 和 Write 模块

LPUART1 模块配置为与主机模型通信。如果您使用不同的 USART 模块(例如用于串行通信的外部 FTDI),请相应地更新模型中的 USART 模块。

STM32MotorControlData.m 脚本中设置来自 STM32CubeMX 的波特率。同时更新 COM 端口。例如:

对模型进行仿真

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

1.打开此示例附带的 STM32_HallFOC_Target

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

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

生成代码并在目标硬件上部署和运行

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

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

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

  1. 仿真模型并查看仿真结果。

  2. 完成硬件连接

  3. 确保电机参数和霍尔偏移值已更新。有关详细信息,请参阅Hall Offset Calibration for PMSM with STM32 Processors

  4. 模型自动计算模数转换器 (ADC) 或电流偏移值。要禁用此功能(默认情况下启用),请在模型初始化脚本中将 inverter.ADCOffsetCalibEnable 变量的值更新为 0。您也可以计算 ADC 偏移值,并在模型初始化脚本中手动更新它。有关说明,请参阅使用基于 STM32 处理器的板对三相 AC 电机进行开环控制

  5. 打开目标模型并选择所需的逆变器板。

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

  7. 在目标模型中,点击主机模型按钮以打开主机模型。

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

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

9.更新主机模型中的参考转速值。

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

11.将 Start / Stop Motor 开关的位置切换到 On 以开始运行电机。

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

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

有关详细信息: