您的位置:首页 > 科技 > IT业 > 湖南益阳_中企动力企业邮箱手机邮箱_中国搜索_武汉搜索引擎排名优化

湖南益阳_中企动力企业邮箱手机邮箱_中国搜索_武汉搜索引擎排名优化

2024/12/23 12:17:16 来源:https://blog.csdn.net/youcans/article/details/144168477  浏览:    关键词:湖南益阳_中企动力企业邮箱手机邮箱_中国搜索_武汉搜索引擎排名优化
湖南益阳_中企动力企业邮箱手机邮箱_中国搜索_武汉搜索引擎排名优化

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(10)使用旋钮调节电机转速

    • 1. 开发环境
    • 2. 硬件连接与快速运行
    • 3. 使用旋钮调节电机转速程序的开发
      • 3.1 配置电机控制包
      • 3.2 图形化配置 ADC 和 PWM
      • 3.3 代码编辑、编译与调试
      • 3.4 上位机监控
    • 4. API 函数说明
      • 4.1 状态请求函数 RCM_GetUserConvState
      • 4.2 返回ADC转换结果 RCM_GetUserConv
      • 4.3 执行用户定义的常规 ADC 转换:RCM_RequestUserConv

P-NUCLEO-IHM03 STM32电机控制套件使用FOC算法,为三相、低压和低电流的 BLDC 或 PMSM 电机提供电机控制解决方案。
本节从 STM32 电机控制包配置开始,在基于 IHM03 电机控制套件的无感 FOC 电机控制基础上,介绍使用 Nucleo 开发板上的旋钮对电机进行调速,学习 ADC 的配置和调用。


1. 开发环境

  1. 硬件要求
  • Windows PC
  • X-NUCLEO-IHM16M1 电机驱动扩展板
  • STM32 Nucleo 开发板
  • 直流电源,输出电压 12 VDC
  • 三相直流无刷电机
  • USB Type-A 或 Type-c 至 Micro-B 连接线缆
  1. 系统要求:
  • Windows 操作系统(Windows 7、Windows 8 和 Windows 10)、Linux 64-bit 或 macOS
  • USB Type-A 或 Type-c 至 Micro-B 连接线缆,用于将 STM32 Nucleo 板连接到 PC
  1. 开发工具
  • STM32 电机控制 SDK:X-CUBE-MCSDK
  • STM32 图形化配置工具:STM32CubeMX
  • 集成开发环境 IDE,可以选择一下三者之一:
    • STM32 集成开发环境(STM32CubeIDE)
    • Keil 开发套件(MDK-ARM-STR)
    • IAR 嵌入式开发环境(IAR-EWARM)

2. 硬件连接与快速运行

  1. X-NUCLEO-IHM16M1 电机驱动板必须通过位于两侧的 CN7 和 CN10 连接器插接到 NUCLEO-G431RB 控制板上, 堆叠如下图所示。
    NUCLEO-G431RB 板上的两个按钮(蓝色用户按钮B1和黑色重置按钮B2)必须保持未覆盖状态。

  2. 将三条电机线 U、V、W 连接到 X-NUCLEO-IHM16M1 电机驱动板上的 CN1连接器。

  3. 配置 NUCLEO-G431RB 控制板上的跳线:

  • 从 USB 为 NUCLEO-G431RB 供电时,要将JP5 的 5V-STLK 源设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚);
  • JP8 的 VREF 设为 [1-1] 位置(跳线安装在 pin1、pin1 针脚);
  • JP6(IDD)设为 ON 状态(安装 2针跳线)。
  1. 配置控制板和驱动板的跳线,以选择所需的控制算法(如六步方波):
    NUCLEO-IHM16M1 电机驱动板的跳线设置:
  • J5 设为 ON 状态(安装 2针跳线);
  • J6 设为 ON 状态(安装 2针跳线);
    NUCLEO-G431RB 控制板的跳线设置:
  • JP4 和 JP7 设为 OFF 状态(不安装跳线);
  • J2 设为 [2-3] 位置(跳线安装在 pin2、pin3 针脚);
  • J3 设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚)。

注意:更改控制模式之前,必须关闭电源电压。

  1. 将 12V/2A 直流电源连接到 NUCLEO-G431RB 控制板上的 CN1 连接端口(mini-USB),或连接到 X-NUCLEO-IHM16M1 电机驱动板上的 J4 连接器(电源插座),并通电。

3. 使用旋钮调节电机转速程序的开发

3.1 配置电机控制包

  1. 打开 电机控制软件开发套件(Motor Control WorkBench),创建新项目。
    单击"New Project"按钮,弹出"New Project"对话框。
    在 “General Info” 菜单中进行设置:

    • 在 “Project name” 输入项目名称,例如 “IHM03_05”;
    • 在 “Num.Motors” 选择电机数量为 单电机:1 Motor;
    • 在 “Driving Algorithm” 选择驱动控制算法为 FOC;
    • 在 “Hardware Mode” 选择 Modular 模式。
  2. 进入 “Motors” 菜单,根据 IHM03 电机控制套件的配置,从菜单中选择电机型号,套件中的电机是 GimBal GBM2804-100T 直流无刷电机。
    本例使用 KJ230F 直流无刷电机,则从电机选项卡中选择 KJ230F(用户自定义电机的操作参见 STM32-FOC(8)MCSDK Profiler 电机参数辨识)。

在这里插入图片描述


  1. 进入 “Power board” 菜单,根据 IHM03 电机控制套件的配置,选择驱动板为 X-NUCLEO-IHM16M1 电机驱动板。

  2. 进入 “Control board” 菜单,根据 IHM03 电机控制套件的配置,选择控制板为 NUCLEO-G431RB 控制板。

  3. 完成项目配置后,点击窗口右下方 “>>OK” 按钮,就会自动生成一个电机控制项目,并显示项目视图如下。
    视图的内容取决于用户配置的电路板和电机的信息。
    如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。
    点击 “>>OK” 确认,返回电机控制项目视图。

  4. 项目生成。

  • 选择菜单 “Generate the project” 按键,根据配置参数生成项目。
  • 跳出 “Project generation” 窗口,选择 STM32CubeMX 版本、固件版本(Firmware Package Version),Target Toolchain 为 STM32CubeIDE。
  • 默认使用 HAL 驱动。
  • 点击 “GENERATE” 按键,生成代码。

注意选择的固件包的版本,如果没有安装相应版本的固件包,则会自动下载。

如下图所示,项目生成完成后,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX 进行图形化配置。

在这里插入图片描述


3.2 图形化配置 ADC 和 PWM

在 Motor Control WorkBench 中生成项目,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX,对 ADC 进行配置以使用 旋钮。


  1. ADC 配置。
  • 在 Pinout &Configuration 选项下,从左侧下拉菜单中选择 Analog – ADC1。
  • 从中间的 ADC1 Mode and Configuration 选项下,将 ADC1-IN8 配置为 “IN8 Single-ended”,即为单端输入。
  • 在右侧的 Pinout view 视图中,点击 PC2 引脚,将 PC2 配置为 ADC1-IN8,用于旋钮的 ADC 输入。

在这里插入图片描述


  1. 参考点灯实验程序,将PA5 管脚设置为 GPIO_Output——这与电机控制无关,只供参考。

  2. 点击 “Project Manager” 菜单按钮,进入工程配置界面。

  • 输入项目名称为 “IHM03_05”,选择项目的保存路径。
  • 将Toolchain / IDE 设为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)。
  • 点击右上角 “GENERATE CODE” 生成代码。

在这里插入图片描述

加载完毕后,弹出 “Code Generation” 代码生成提示窗口。点击“ Open Project” 按键,进入 STM32CubeIDE。


3.3 代码编辑、编译与调试

  1. 打开 STM32CubeIDE,导入 IHM03_05 项目。
    如果是从 CubeMX 代码生成提示窗口点击“ Open Project” 按键,则进入 STM32CubeIDE 后自动打开 IHM03_05 项目。
    注意如果在 STM32CubeIDE 中还有其它打开的项目,要点击鼠标右键选择 “Close Project” 关闭其它项目。

  2. 修改主程序 main.c,添加使用 ADC 实现旋钮调速的代码。

  • (1) 在左侧 Project Explorer 中,选择 IHM03_02 – Application – User,打开主程序 main.c
  /******************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************/
  • (2) 在实例函数定义(Private function prototypes)段落之后,在(Private user code)部分添加:
    • 调速功能初始化函数 void HandsOn2_Init(void)
    • 调速功能处理函数 void HandsOn2(void)
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* Hand On 2 -用户ADC控制速度 */
#include "regular_conversion_manager.h"
#define MIN_SPEED 200  //最低转速 200rpm
#define MAX_SPEED 1200  //最高转速 1200rpm//定义用户ADC
RegConv_t ADC_Userconv;
uint8_t ADC_UserHandle;
uint16_t ADC_UserValue;
uint16_t Set_Speed;void HandsOn2_Init(void)
{ADC_Userconv.regADC=ADC1;ADC_Userconv.channel=MC_ADC_CHANNEL_8;ADC_Userconv.samplingTime=ADC_SAMPLETIME_92CYCLES_5;RCM_RegisterRegConv(&ADC_Userconv);  // 注册ADC转换ADC_UserHandle = ADC_Userconv.convHandle;  // 获取转换句柄//启动电机MC_StartMotor1();
}void HandsOn2(void)
{HAL_Delay(200);//检查常规转换状态if (RCM_GetUserConvState()==RCM_USERCONV_IDLE){// 请求用户转换,传递描述转换的结构体指针RCM_RequestUserConv(&ADC_Userconv);}else if (RCM_GetUserConvState()==RCM_USERCONV_EOC){ADC_UserValue=RCM_GetUserConv();}//计算设定速度值Set_Speed=(ADC_UserValue>>4)/8+MIN_SPEED;if(Set_Speed>MAX_SPEED){Set_Speed=MAX_SPEED;}MC_ProgramSpeedRampMotor1(Set_Speed/6, 500);
}/* USER CODE END 0 */
  • (3) 在 main() 函数的初始化部分,调用 HandsOn2_Init() 对 ADC进行初始化:
  /* Initialize interrupts */MX_NVIC_Init();/* USER CODE BEGIN 2 */HandsOn2_Init();/* USER CODE END 2 */
  • (4) 在 main() 函数的 while(1) 循环中,调用 HandsOn2() 处理调速功能。
  /* Infinite loop */while (1){/* USER CODE BEGIN WHILE */HandsOn2();/* USER CODE END WHILE */}

在这里插入图片描述


  1. 程序编译
  • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
  1. 程序下载烧录到目标板
  • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
  1. 程序的运行与调试
  • 对照 2.1 检查 IHM03 套件硬件连接和电源连接。
  • 接通 12Vdc 电源。
  • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。电机控制程序启动,电机旋转。
  • 调节 X-NUCLEO-IHM16M1 电机驱动板上的 R17 蓝色旋钮,可以调节电机的转速。

3.4 上位机监控

为了更清楚的监测电机运行状态和转速,可以使用 MCSDK6.0 Pilot 上位机进行控制与监测,本节介绍具体操作。

关于 MCSDK6.0 Pilot 上位机控制与调试方法,可以详见: STM32-FOC(7)MCSDK Pilot 上位机控制与调试。下面介绍本例的具体操作。

  1. 打开电机控制软件开发套件(Motor Control WorkBench),单击工具栏的 “Motor Pilot” 按钮,启动电机导向应用程序 ST Motor Pilot。

  2. 在 ST Motor Pilot 中,点击菜单 “GUI – Load GUI”,根据项目内容选择相应的 QML 图形界面文件,加载上位机 GUI 文件 MC_FOC_SDK.qml。

  3. 连接上位机。
    3.1 打开上位机(PC)的设备管理器,查看 ST Link 对应的串口的端口号。
    3.2 在 ST Motor Pilot 中,在 “Port” 设置 ST Link 对应的串口位置,再点击按键 “Connect” 连接。
    3.3 连接成功后,ST Motor Pilot 显示电机的运行状态和参数,包括:电机转速,直流母线电压,温度,功率,运行状态,故障代码等。

  4. 建立实时监控速度曲线图
    4.1 点击菜单栏中的 “Registers” 按钮,切换到寄存器显示界面,显示设定的寄存器参数的实时值。
    4.2 在寄存器显示界面,选择需要实时监控的参数,生成实时变化图。

  • 选择速度参考值 SPEED_REF(ID=153),点击对应的 “Configure” 按钮,选择 “Send to new plot” 后按 “Apply”,自动建立绘图框 plot1,将 SPEED_REF 绘制到 plot1 绘图框。
  • 选择速度测量值 SPEED_MEAS(ID=89),点击对应的 “Configure” 按钮,选择 “plot1” 后按 “Apply”,将 SPEED_MEAS 也绘制到 plot1 绘图框。
  1. 监控程序运行
    通过 STM32CubeIDE 的工具栏中 “Resume” 按键 或 F8 快捷键运行程序,或按下开发板黑色按钮(复位键)运行程序,在上位机通过 ST Motor Pilot 监测程序运行状态。
    用螺丝刀调节 X-NUCLEO-IHM16M1 电机驱动板上的 R17 蓝色旋钮,可以调节电机的转速。电机运行速度的参考值 SPEED_REF、速度测量值 SPEED_MEAS 的曲线,实时显示在 ST Motor Pilot 的会图框 plot1,如下图所示。

在这里插入图片描述

在这里插入图片描述


4. API 函数说明

API 函数是 电机控制SDK的高级编程接口,位于 MC SDK 中的电机应用层,处于 用户层 与 电机库 之间。API 函数基于电机库构建,就像是行为描述操作,便于用户调用。使用 API 函数,可以完成基于MCSDK 应用程序的各种电机基本操作。

在本例程中,从 MC SDK 调用了几个 基本的 API 函数:

RCM_GetUserConvState();
RCM_GetUserConv();
RCM_RequestUserConv();


4.1 状态请求函数 RCM_GetUserConvState

函数 RCM_GetUserConvState 的作用是返回最近一次用户定义的常规 ADC 转换的状态。这是用于跟踪转换请求状态的重要函数,帮助用户判断是否可以发起新的转换或读取已有的转换结果。

RCM_UserConvState 由转换管理器(如 RCM_RequestUserConv 和 RCM_GetUserConv)动态更新。
在请求新的转换之前,用户需要调用 RCM_GetUserConvState 确保当前状态为 UDRC_STATE_IDLE。

  • 如果状态不是空闲,则需要等待当前任务完成。
  • 如果状态为 UDRC_STATE_EOC,表明转换已经完成,可以调用 RCM_GetUserConv 读取结果。

函数原型:

RCM_UserConvState_t RCM_GetUserConvState(void)

  • 功能:返回上次请求的常规转换的状态。
  • 返回值:返回类型为 RCM_UserConvState_t,表示当前转换的状态。
    -UDRC_STATE_IDLE:空闲状态,表示没有任何挂起的常规转换请求,可以请求新的转换
    -UDRC_STATE_REQUESTED:表示常规转换已被请求,但尚未完成。转换器正在处理当前任务,暂时无法接受新的转换请求。
    -UDRC_STATE_EOC:常规转换已完成,但尚未读取。表示常规转换已经完成,但结果尚未被用户读取。

4.2 返回ADC转换结果 RCM_GetUserConv

RCM_GetUserConv 是一个用来获取最近一次 ADC 转换结果的函数。在实时系统中,通过结合 RCM_RequestUserConv 和 RCM_GetUserConvState,可以实现对 ADC 转换任务的有效管理和结果读取。

函数原型:

uint16_t RCM_GetUserConv(void)

  • 功能:返回用户定义的最近一次常规 ADC 转换的结果值。
  • 参数:该函数没有输入参数。
  • 返回值:该函数返回一个 uint16_t 类型的值
    • 正常情况下,返回最近一次常规 ADC 转换的结果。
    • 如果在转换过程中发生错误,则返回值为 0xFFFF,表示转换失败。
  • 前提条件:
    调用此函数前,需要通过 RCM_GetUserConvState 检查当前转换状态,确认状态为 RCM_USERCONV_EOC(End of Conversion,表示转换完成)。
  • 工作流程:
    • 转换状态检查:在调用 RCM_GetUserConv 之前,需先通过 RCM_GetUserConvState 确认转换已经完成(状态为 RCM_USERCONV_EOC)。
    • 获取结果:调用 RCM_GetUserConv,返回最近的 ADC 转换结果。
    • 错误判断:如果返回值是 0xFFFF,表明在转换过程中发生了错误,需要进行相应的错误处理。

4.3 执行用户定义的常规 ADC 转换:RCM_RequestUserConv

RCM_RequestUserConv 是一个调度函数,用于管理用户定义的常规 ADC 转换。它的作用是将用户配置的转换任务注册到转换管理器中,并确保调度与状态一致。通过正确使用此函数,可以实现高效的 ADC 转换管理,并避免资源竞争。

函数原型:

bool RCM_RequestUserConv(RegConv_t *regConv)

  • 功能:请求执行一个用户定义的常规 ADC 转换。

  • 参数:
    RegConv_t *regConv:指向 RegConv_t 类型的指针。表示用户定义的常规转换的配置(包含 ADC 配置、通道、采样时间等信息)。

  • 返回值:

    • true:如果转换被成功调度,即当前没有正在进行的其他转换,并且转换状态为 RCM_USERCONV_IDLE。
    • false:如果有其他转换正在进行或转换请求未能被调度(例如状态不是 RCM_USERCONV_IDLE)。
  • 工作逻辑:

    • 状态检查:首先检查全局变量 RCM_UserConvState 是否为 RCM_USERCONV_IDLE(表示空闲)。如果状态不是空闲,说明有其他转换正在进行,函数直接返回 false。
    • 设置句柄:如果状态为空闲,将用户定义的转换配置 regConv 设置为全局变量 RCM_UserConvHandle。这相当于将当前的转换任务调度到转换管理器中。
    • 更新状态:将转换状态 RCM_UserConvState 更新为 RCM_USERCONV_REQUESTED,表示转换已被调度,等待执行。
    • 返回值:如果成功调度,返回 true。如果未能调度,返回 false。

(本节完)


参考资料:

  1. P-NUCLEO-IHM03 STM32电机控制套件
  2. UM2505 - STM32G4 Nucleo-64 boards (MB1367), STMicroelectronics/意法半导体, 2021
  3. UM2538 - STM32 motor-control pack using the FOC algorithm for three-phase, low-voltage, and low‑current motor evaluationl, STMicroelectronics/意法半导体, 2023
  4. 许少伦等,STM32G4入门与电机控制实战,电子工业出版社,2023

版权声明:
youcans@qq 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/144168477)
Copyright@youcans 2024
Crated:2024-12

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com