【动手学电机驱动】 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 套件无感FOC 控制
【动手学电机驱动】 STM32-FOC(1)STM32 电机控制的软件开发环境
- 1. STM32 电机控制的 工作流
- 2. STM32 图形化配置工具(STM32CubeMX)
- 2.1 下载和安装
- 2.2 安装支持包
- 3. STM32 集成开发环境(STM32CubeIDE)
- 3.1 下载和安装
- 3.2 新建工程
- 4. 电机控制软件开发套件(MCSDK)
- 4.1 下载和安装
- 4.2 创建新项目
- 4.3 导入已有的项目
- 4.4 项目视图
- 4.5 生成项目
- 5. MCSDK 电机控制组件
- 5.1 X-Cube-MCSDK_5.X 中的组件
- 5.2 电机控制API
本系列从零开始,针对小白介绍使用 STM32 单片机实现 PMSM 电机的 FOC 控制,帮助读者快速上手电机控制。
本节我们首先介绍 STM32 电机控制的工作流,然后安装电机控制开发所需的软件环境。
- STM32CubeMX:STM32 图形化配置工具
- STM32CubeIDE:STM32 集成开发环境
- MCSDK:电机控制软件开发套件
已经完成软件开发环境安装和配置的同学,可以跳过本节。
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)。
- 菜单按钮,用于文件管理、切换视图和帮助等。
- 现有工程,用于加载近期的工程文件。
- 新建工程,用于创建新的工程文件。
- 软件管理,用于检查 STM32CubeMX 的更新机固件包的下载与安装。
2.2 安装支持包
-
以管理员身份运行 STM32CubmeMX。
-
点击 Help - Embedded software packages manager,弹出如下图所示的 MCU 包管理窗口,根据使用的 MCU 型号选择对应的处理器和固件版本。
- 如果已经下载了相应的固件包,可以选择 “From Local…” 从本地安装。如果尚未下载固件包,可以选择 “Install” 在线安装。
安装完成后,MCU 包管理器 Embedded software packages manager 中对应的模块前的方框变成绿色,表明安装成功。
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),主界面如下。
从上向下依次是 菜单按钮区、最近项目区和例程区。
- 菜单按钮区,由于创建新项目、加载已有项目或启动 ST电机参数测量工具。
- 最近项目区,用于加载近期的项目。
- 例程区,用于加载项目示例。
3.2 新建工程
首次双击打开软件,将自动进入工程路径配置界面,注意工程的保存路径不能带有中文字符。
新建工程的基本操作如下:
- 点击 Strat new STM32 project,进入工程主界面;
- 输入芯片型号,进行对应工程的配置;
- 设置工程名称和路径;
- 选择芯片固件包的版本;
- 选择下载器类型(推荐使用ST-LINK);
- 安装固件支持包(需要登陆账号);
完成各项配置后,保存工程文件。
关于 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),主界面如下。从上向下依次是 菜单按钮区、最近项目区和例程区。
- 菜单按钮区,由于创建新项目、加载已有项目或启动 ST电机参数测量工具。
- 最近项目区,用于加载近期的项目。
- 例程区,用于加载项目示例。
4.2 创建新项目
- 创建新项目(以IHM03 电机控制套件为例)。
- 单击"New Project"按钮,弹出"New Project"对话框,在 “General Info” 菜单中进行设置:
- 在 “Project name” 输入项目名称;
- 在 “Num.Motors” 选择电机数量为 单电机 或 双电机;
- 在 “Driving Algorithm” 选择驱动控制算法为 FOC 或 6-step;
- 在 “Hardware Mode” 选择 Modular 模式;
- 进入 “Motors” 菜单,根据 IHM03 电机控制套件的配置,选择电机为 GimBal GBM2804H-100T;
- 进入 “Power board” 菜单,根据 IHM03 电机控制套件的配置,选择驱动板为 X-NUCLEO-IHM16M1 电机驱动板;
- 进入 “Control board” 菜单,根据 IHM03 电机控制套件的配置,选择控制板为 NUCLEO-G431RB 控制板;
如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。
- 有效地完成项目配置后,点击窗口右下方 “>>OK” 按钮,就会自动生成一个电机控制项目,并显示项目视图如下。视图的内容取决于用户配置的电路板和电机的信息。
4.3 导入已有的项目
在 MCSDK 主视图中单击 LoadProject 按钮,出现一个系统对话框窗口,用户可以选择要加载的项目文件(.stwb6)。
加载的项目出现在 project 视图中,用户可以在其中对其进行细化或修改。
4.4 项目视图
项目视图由以下部分组成:
-
工具栏区域,用于控制应用程序导航、项目保存和生成;
-
硬件区域信息,当前项目的硬件信息显示在该区域。
- MCU引脚使用和冲突
鼠标移动到 MCU 型号的位置,会在窗口中显示所选MCU的信息:- 产品文件夹:单击将打开所选MCU的产品文件夹页面。
- 引脚使用和冲突:控制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 中的组件
以源程序提供的组件:
- bus_voltage_sensor.c,总线电压
- circle_limitation.c,电压极限限制
- enc_align_ctrl.c,编码器初始定位控制
- encoder_speed_pos_fdbk.c,编码器传感器相关
- hall_speed_pos_fdbk.c,Hall 传感器相关
- inrush_current_limiter.c,浪涌电流限制
- mc_math.c,数学计算
- mc_interface.c,马达控制底层接口
- motor_power_measurement.c,平均功率计算
- ntc_temperature_sensor.c,NTC 温度传感
- open_loop.c,开环控制
- pid_regulator.c,PID 环路控制
- pqd_motor_power_measurement.c,功率计算
- pwm_common.c,TIMER 同步使能
- pwm_curr_fdbk.c,SVPWM, ADC 设定相关接口
- r_divider_bus_voltage_sensor.c,实际总线电压采集
- virtual_bus_voltage_sensor.c,虚拟总线电压
- ramp_ext_mngr.c,无传感开环转闭环控制
- speed_pos_fdbk.c,速度传感接口
- speed_torq_ctrl.c,速度力矩控制
- state_machine.c,电机状态相关
- virtual_speed_sensor.c,无传感开环运行相关
以库文件提供的组件:
- fast_div.c,快速软件除法
- feed_forward_ctrl.c,前馈控制
- flux_weakening_ctrl,弱磁控制
- max_toque_per_ampere,最大转矩控制
- sto_cordic_speed_pos_fdbk.c,速度和位置反馈Cordic
- sto_pll_speed_pos_fdbk.c,速度和位置反馈PLL
- revup_ctrl.c,启动控制
在简单的电机控制应用中通常不需要修改这部分代码,如果在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 电机控制的软件开发环境的安装和配置。在下节中,我们将介绍如何使用IHM03 电机控制套件。