【动手学电机驱动】 STM32-FOC(1)STM32 电机控制的软件开发环境
STM32-FOC(1)STM32 电机控制的软件开发环境
STM32-FOC(2)STM32 导入和创建项目
STM32-FOC(3)STM32 三路互补 PWM 输出
STM32-FOC(4)IHM03 电机控制套件介绍
STM32-FOC(5)基于 IHM03 的无感方波控制
STM32-FOC(6)基于 IHM03 的无感FOC 控制
STM32-FOC(7)MCSDK Pilot 上位机控制与调试
STM32-FOC(8)MCSDK Profiler 电机参数辨识
STM32-FOC(9)无感 FOC 电机转速调节
STM32-FOC(10)使用旋钮调节电机转速
【动手学电机驱动】 STM32-FOC(1)STM32 电机控制的软件开发环境
本系列从零开始,针对小白介绍使用 STM32 单片机实现 PMSM 电机的 FOC 控制,帮助读者快速上手电机控制。
本节我们首先介绍 STM32 电机控制的工作流,然后安装电机控制开发所需的软件环境。
已经完成软件开发环境安装和配置的同学,可以跳过本节。
1. STM32 电机控制的 工作流
STM32 电机控制 SDK 工作流:
- 使用 MotorControl Workbench(MCSDK) 创建工程;
- 在 STM32CubeMX 中生成代码;
- 在 CubeIDE 或 Keil 中打开代码,进行调试、编译与下载;
- 使用 MCSDK 可以实现对电机的在线调试、波形观测与状态监测。
2. STM32 图形化配置工具(STM32CubeMX)
STM32CubeMX 是ST公司推出的图形化配置工具,通过傻瓜化的操作便能实现相关配置,自动创建单片机工程及初始化代码。
STM32CubeMX工具可简化硬件和外设配置过程,而且用于开发的Nucleo板也拥有较高的性价比。同时也提供了丰富的部件供用户选择。
STM32CubeMX集成了HAL库和LL库,生成的代码也是基于这两个库。HAL库是ST标准库后推出的,设计采用高分层思想,当工程更改主控芯片后,所有函数几乎不需要任何更改。HAL库和LL库按外设模块设计,配置时可选择响应模块用不同的库。
STM32CubeMX 可以作为 eclipse 插件形式安装,也可以单独运行,需要安装JAVA运行环境。通过插件式安装,可以将STM32CubeMX 集成在一个IDE,使用十分方便。
2.1 下载和安装
-
下载 图形化配置工具(STM32CubeMX)安装程序。
打开 ST 官网,用户登录,进入CubeMX 下载页面,选择所需的版本进行下载。
官方下载地址:https://www.st.com.cn/content/st_com/zh/stm32cubemx.html -
双击运行下载的安装程序(例如:SetupSTM32CubeMX-6.12.1-Win.exe,需要 1.2G 空间),根据提示进行安装。
注意安装路径中不要有中文。
建议不要安装在系统盘中。 -
安装完成后,以管理员身份运行 STM32CubeMX,主界面如下。分为:菜单栏、现有工程(Existing Projects)、新建工程(New Project) 和 软件管理(Manage software installations)。

2.2 安装固件支持包
为了实现在STM32系列MCU之间的无缝移植,ST公司推出了硬件抽象层 HAL(Hardware Abstraction Layer) 固件库。随着 HAL 库的推出,ST 公司逐渐停止了对标准固件库的更新,加入了很多第三方的中间件,如RTOS,USB,TCP/IP和图形。
HAL 固件库可以通过在线安装或离线安装。
在线安装
-
以管理员身份运行 STM32CubmeMX。
-
点击 Help – Embedded software packages manager,弹出如下图所示的 MCU 包管理窗口,根据使用的 MCU 型号选择对应的处理器和固件版本。
- 选择 “Install”,在线安装 HAL 固件支持包。
安装完成后,MCU 包管理器 Embedded software packages manager 中对应的模块前的方框变成绿色,表明安装成功。
离线安装
离线安装需要下载安装包。
-
根据使用的 MCU 型号,从 ST 官网下载 HAL 库 选择对应的处理器和固件版本,下载 HAL 固件支持包。
-
点击 Help – Manage embedded software packages,选择 “From Local…” 离线安装下载的 HAL 固件支持包。
3. STM32 集成开发环境(STM32CubeIDE)
STM32CubeIDE是一体式多操作系统开发工具,是一种高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。
STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,以便提供一体化工具体验,并节省安装与开发时间。在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。
STM32CubeIDE还具有标准和高级调试功能,其中包括CPU内核寄存器、存储器和外设寄存器以及实时变量查看、串行线传输监测器接口或故障分析器的视图。
3.1 下载和安装
-
下载 STM32 集成开发环境(STM32CubeIDE)安装程序。
打开 ST 官网,用户登录,进入 STM32CubeIDE 下载页面,选择所需的版本进行下载。
官方下载地址:https://www.st.com.cn/zh/development-tools/stm32cubeide.html -
双击运行下载的安装程序(例如:st-stm32cubeide_1.16.1_22882_20240916_0822_x86_64.exe),根据提示进行安装。
注意安装路径中不要有中文。
建议不要安装在系统盘中。 -
安装完成后,打开 STM32 集成开发环境(STM32CubeIDE),主界面如下。
从上向下依次是 菜单按钮区、最近项目区和例程区。
3.2 新建工程
首次双击打开软件,将自动进入工程路径配置界面,注意工程的保存路径不能带有中文字符。
新建工程的基本操作如下:
完成各项配置后,保存工程文件。
关于 STM32CubeIDE 的使用,将在后文详细介绍。
4. 电机控制软件开发套件(MCSDK)
STM32微控制器提供工业标准Arm® Cortex®-M内核的性能,可运行矢量控制控制或FOC模式,广泛应用于空调、家用电器、无人机、建筑和工业自动化、医疗和电动自行车等高性能驱动的应用领域。
4.1 下载和安装
-
下载 电机控制软件开发套件(MCSDK)安装程序。
打开 ST 官网,用户登录,进入MCSDK 下载页面,选择所需的版本进行下载。
官方下载地址:https://www.st.com.cn/zh/embedded-software/x-cube-mcsdk.html -
双击运行下载的安装程序(例如:en.X-CUBE-MCSDK-FUL_6.3.1.exe,需要 1.2G 空间),根据提示进行安装。
注意安装路径中不要有中文。
建议不要安装在系统盘中。 -
安装完成后,打开 电机控制软件开发套件(MCSDK),主界面如下。从上向下依次是 菜单按钮区、最近项目区和例程区。

4.2 创建新项目
- 创建新项目(以IHM03 电机控制套件为例)。
如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。
4.3 导入已有的项目
在 MCSDK 主视图中单击 LoadProject 按钮,出现一个系统对话框窗口,用户可以选择要加载的项目文件(.stwb6)。
加载的项目出现在 project 视图中,用户可以在其中对其进行细化或修改。
4.4 项目视图
项目视图由以下部分组成:
工具栏区域,用于控制应用程序导航、项目保存和生成;
硬件区域信息,当前项目的硬件信息显示在该区域。
鼠标移动到 MCU 型号的位置,会在窗口中显示所选MCU的信息:
鼠标移动到控制板型号的位置,会在窗口中显示所选控制板的信息:
鼠标移动到驱动控制板型号的位置,会在窗口中显示所选驱动板的信息:
项目步骤区域,显示需要配置参数的硬件,包括:电机,电源,PWM发生器和其它参数。
硬件配置详细信息区域,用于微调所选硬件功能,方便查看所有主要信息和保护。
4.5 生成项目
单击工具栏区域的 “Generate the project” 会生成用户应用程序项目文件。
弹出一个窗口,允许用户选择目标工具链、固件包版本、驱动器类型,并生成电机控制固件应用程序。
如果项目文件尚未保存,则会弹出一个信息窗口,指示此项目需要先保存才能生成。使用“Save&Generate ”按钮进行保存和生成。
5. MCSDK 电机控制组件
ST MCSDK 以 STM32Cube 的外部组件方式提供给用户,主要包含三部分:
三相永磁同步电动机固件库(Motor Control FirmWare),ST Motor Control Workbench(ST电机工作台,简称“ST MC WB”),以及由ST MC WB从后台调用的 STM32CubeMX。
ST MCSDK 固件主要由 电机控制座舱(Motor Control Cockpit)、电机控制库(Motor Control Library)和用户界面库(UI Library)组成。电机控制库是底层的组件库,是 ST MCSDK 固件的核心,由一组组件组成,每个组件实现一项特定功能。电机控制座舱将这些组件集成起来,实现完整的电机控制功能。用户界面用于调试通信。
5.1 X-Cube-MCSDK_5.X 中的组件
以源程序提供的组件:
以库文件提供的组件:
在简单的电机控制应用中通常不需要修改这部分代码,如果在Application MC API层不能满足应用需求时才会需要修改这部分代码。
5.2 电机控制API
在mc_api.c中有各种可以供用户使用的API接口,对于普通的电机控制用户可以不用关心底层的实现,只需要使用这些API就可完成电机控制。
电机库可以支持两个电机,在函数中使用后缀 Motor1 和 Motor2 来区分是电机1还是电机2。 下面以控制电机1 为例来说明API接口的含义。
电机控制API说明
函数名称 | 函数形参 | 函数返回值 | 函数功能 |
---|---|---|---|
MC_StartMotor1 | void | bool | 启动电机 |
MC_StopMotor1 | void | bool | 停止电机 |
MC_ProgramSpeedRampMotor1 | hFinalSpeed、hDurationms | void | 设定目标速度以及持续时间 |
MC_ProgramTorqueRampMotor1 | hFinalTorque、hDurationms | void | 设定目标力矩以及持续时间 |
MC_SetCurrentReferenceMotor1 | Iqdref | void | 设定 Iq,Id 参考 |
MC_GetCommandStateMotor1 | void | MCI_Command State_t | 返回指令执行状态 |
MC_StopSpeedRampMotor1 | void | bool | 停止速度指令执行,速度指令保存为执行停止前速度指令 |
MC_StopRampMotor1 | void | void | 停止执行电机正在运行的斜坡 |
MC_HasRampCompletedMotor1 | void | bool | 指令是否执行完成 |
MC_GetMecSpeedReferenceMotor1 | void | int16_t | 返回机械参考速度 |
MC_GetMecSpeedAverageMotor1 | void | int16_t | 返回平均机械速度 |
MC_GetLastRampFinalSpeedMotor1 | void | int16_t | 返回上次指令速度 |
MC_GetControlModeMotor1 | void | STC_Modality_t | 返回控制模式 |
MC_GetImposedDirectionMotor1 | void | int16_t | 返回电机转动方向 |
MC_GetSpeedSensorReliabilityMotor1 | void | bool | 返回当前速度传感器可信度 |
MC_GetPhaseCurrentAmplitudeMotor1 | void | int16_t | 返回电流值 |
MC_GetPhaseVoltageAmplitudeMotor1 | void | int16_t | 返回电压值 |
MC_GetIabMotor1 | void | ab_t | 返回 a,b 相电流 |
MC_GetIalphabetaMotor1 | void | alphabeta_t | 返回 clark 变换后的 Iα,Iβ |
MC_GetIqdMotor1 | void | qd_t | 返回 park 变换后的 Id,Iq |
MC_GetIqdrefMotor1 | void | qd_t | 返回 Id, Iq 参考 |
MC_GetVqdMotor1 | void | qd_t | 返回变换电压量 Vd, Vq |
MC_GetValphabetaMotor1 | void | alphabeta_t | 返回变换电压量 Vα, Vβ |
MC_GetElAngledppMotor1 | void | int16_t | 返回电角度 DPP 数据 |
MC_GetTerefMotor1 | void | int16_t | 返回电流参考 |
MC_SetIdrefMotor1 | hNewIdref | void | 设定电流 Id 参考 |
MC_Clear_IqdrefMotor1 | void | void | Iq,Id 数据回到默认值 |
MC_AcknowledgeFaultMotor1 | void | bool | 清除异常状态 |
MC_GetOccurredFaultsMotor1 | void | uint16_t | 得到发生了的故障状态 |
MC_GetCurrentFaultsMotor1 | void | uint16_t | 得到当前的故障状态 |
MC_GetSTMStateMotor1 | void | State_t | 得到电机状态 |
至此,我们就完成了 STM32 电机控制的软件开发环境的安装和配置。
参考资料:
- P-NUCLEO-IHM03 STM32电机控制套件
- UM2505 – STM32G4 Nucleo-64 boards (MB1367), STMicroelectronics/意法半导体, 2021
- UM2538 – STM32 motor-control pack using the FOC algorithm for three-phase, low-voltage, and low‑current motor evaluationl, STMicroelectronics/意法半导体, 2023
- 许少伦等,STM32G4入门与电机控制实战,电子工业出版社,2023
版权声明:
【动手学电机驱动】是 youcans@qq 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/143355334)
Copyright@youcans 2024
Crated:2024-11
作者:youcans_