使用基于 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');
前提条件
在将模型部署到硬件上之前,请完成以下任务:
在 STM32MotorControlData 脚本中更新目标硬件设备 COM 端口。可以通过编辑硬件参数按钮访问此脚本。
获取电机参数。默认电机参数已提供,可以用电机数据表或其他来源的值替换。不过,如果您有电机控制硬件,则可以通过使用 Motor Control Blockset 参数估计工具来估计要使用的电机的参数。有关详细信息,请参阅使用自定义硬件估计 PMSM 参数 (Motor Control Blockset)。
如果您从数据表或其他来源获得电机参数,请在与 Simulink® 模型相关联的模型初始化脚本中更新电机参数和逆变器参数。要快速访问此脚本,请点击模型中的 Edit motor and algorithm parameters 按钮。
在模型初始化脚本中更新霍尔偏移值。如果霍尔偏移量未知,请先运行霍尔偏移量计算模型。在标定完成后,计算出的偏移量将显示在主机模型中。必须在脚本的
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® 模型发出命令,并以闭环控制方式运行电机。
生成代码并在目标硬件上运行模型
仿真模型并查看仿真结果。
确保电机参数和霍尔偏移值已更新。有关详细信息,请参阅Hall Offset Calibration for PMSM with STM32 Processors。
模型自动计算模数转换器 (ADC) 或电流偏移值。要禁用此功能(默认情况下启用),请在模型初始化脚本中将
inverter.ADCOffsetCalibEnable变量的值更新为 0。您也可以计算 ADC 偏移值,并在模型初始化脚本中手动更新它。有关说明,请参阅使用基于 STM32 处理器的板对三相 AC 电机进行开环控制。打开目标模型并选择所需的逆变器板。
点击硬件选项卡上的编译、部署和启动以将模型部署到硬件上。
在目标模型中,点击主机模型按钮以打开主机模型。

有关主机模型和目标模型之间串行通信的详细信息,请参阅主机-目标通信。
8.在与目标模型关联的模型初始化脚本中,使用变量 target.comport 指定通信端口。该示例使用此变量来更新主机模型中可用的 Host Serial Setup、Host Serial Receive 和 Host Serial Transmit 模块的端口参数。
9.更新主机模型中的参考转速值。
10.点击仿真选项卡上的运行以运行主机模型。
11.将 Start / Stop Motor 开关的位置切换到 On 以开始运行电机。
注意:当您在硬件上以低参考转速运行此示例时,已知问题使 PMSM 可能不会按照低参考转速运行。
12.在主机模型的 Time Scope 中,观测来自 RX 子系统的调试信号。