【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识
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(8)MCSDK Profiler 电机参数辨识
- 1. 开发环境
- 2. 硬件连接
- 3. 创建电机控制项目
- 3.1 配置电机控制包
- 3.2 图形化配置
- 3.3 代码编辑、编译与调试
- 4. 电机参数辨识和使用
- 4.1 电机参数辨识
- 4.2 使用辨识的电机参数
P-NUCLEO-IHM03 STM32电机控制套件,为三相、低压和低电流的 BLDC 或 PMSM 电机提供电机控制解决方案。此前我们已经学习了使用 IHM03 电机控制套件开发无感 FOC 电机控制程序的基础操作。
从 MCSDK6.2.0 之后,用户需要自己生成工程编译固件(firmware)将 电机参数下载到目标板上。本节以 MCSDK 6.3 为例,详细介绍使用 MCSDK Profile 辨识电机参数的工程。
1. 开发环境
- 硬件要求
- Windows PC
- X-NUCLEO-IHM16M1 电机驱动扩展板
- STM32 Nucleo 开发板
- 直流电源,输出电压 12 VDC
- 三相直流无刷电机
- USB Type-A 或 Type-c 至 Micro-B 连接线缆
- 系统要求:
- Windows 操作系统(Windows 7、Windows 8 和 Windows 10)、Linux 64-bit 或 macOS
- USB Type-A 或 Type-c 至 Micro-B 连接线缆,用于将STM32 Nucleo板连接到 PC
- 开发工具
- STM32 电机控制 SDK:X-CUBE-MCSDK
- STM32 图形化配置工具:STM32CubeMX
- 集成开发环境 IDE,可以选择一下三者之一:
- STM32 集成开发环境(STM32CubeIDE)
- Keil 开发套件(MDK-ARM-STR)
- IAR 嵌入式开发环境(IAR-EWARM)
2. 硬件连接
- X-NUCLEO-IHM16M1 电机驱动板必须通过位于两侧的 CN7 和 CN10 连接器插接到 NUCLEO-G431RB 控制板上, 堆叠如下图所示。
NUCLEO-G431RB 板上的两个按钮(蓝色用户按钮B1和黑色重置按钮B2)必须保持未覆盖状态。

-
将三条电机线 U、V、W 连接到 X-NUCLEO-IHM16M1 电机驱动板上的 CN1连接器。
-
配置 NUCLEO-G431RB 控制板上的跳线:
- 从 USB 为 NUCLEO-G431RB 供电时,要将JP5 的 5V-STLK 源设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚);
- JP8 的 VREF 设为 [1-1] 位置(跳线安装在 pin1、pin1 针脚);
- JP6(IDD)设为 ON 状态(安装 2针跳线)。

- 配置控制板和驱动板的跳线,以选择所需的控制算法(如六步方波):
NUCLEO-IHM16M1 电机驱动板的跳线设置:
- J5 设为 ON 状态(安装 2针跳线);
- J6 设为 ON 状态(安装 2针跳线);
NUCLEO-G431RB 控制板的跳线设置: - JP4 和 JP7 设为 OFF 状态(不安装跳线);
- J2 设为 [2-3] 位置(跳线安装在 pin2、pin3 针脚);
- J3 设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚)。
注意:更改控制模式之前,必须关闭电源电压。

- 将 12V/2A 直流电源连接到 NUCLEO-G431RB 控制板上的 CN1 连接端口(mini-USB),或连接到 X-NUCLEO-IHM16M1 电机驱动板上的 J4 连接器(电源插座),并通电。
3. 创建电机控制项目
3.1 配置电机控制包
- 打开 电机控制软件开发套件(Motor Control WorkBench),创建新项目。
单击"New Project"按钮,弹出"New Project"对话框。
在 “General Info” 菜单中进行设置:- 在 “Project name” 输入项目名称,例如 “MotorProfiler”;
- 在 “Num.Motors” 选择电机数量为 单电机:1 Motor;
- 在 “Driving Algorithm” 选择驱动控制算法为 FOC;
- 在 “Hardware Mode” 选择 Modular 模式。

- 进入 “Motors” 菜单,根据 IHM03 电机控制套件的配置,从菜单中选择一款用使用的电机参数接近的电机型号(推荐以电压为参考进行选择),例如 GimBal GBM2804H-10。

- 点击所选电机表单右下角 “Save as” 图标按键,将其另存为 自定义的电机型号,打开 “Save as…” 窗口如下;
- 输入电机 Name 和 Description,例如修改 Name 为 KJ100;
- 根据使用的电机的规格参数修改 Motor parameters,例如修改极对数为 5。

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

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

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

- 在左侧菜单 “Project Steps” 中勾选 “Application Configuration” 选项框,点击选中,再勾选 “Motor Profiler” 选项框。

点击 “>>OK” 确认,返回电机控制项目视图。
在这个界面,还可以对电机直接进行控制,具体使用方法将在以后的文章中介绍。
- 项目生成。
- 选择菜单 “Generate the project” 按键,根据配置参数生成项目。
- 跳出 “Project generation” 窗口,选择 STM32CubeMX 版本、固件版本(Firmware Package Version),Target Toolchain 为 STM32CubeIDE。
- 默认使用 HAL 驱动。
- 点击 “GENERATE” 按键,生成代码。
注意选择的固件包的版本,如果没有安装相应版本的固件包,则会自动下载。
如下图所示,项目生成完成后,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX 进行图形化配置。

3.2 图形化配置
在 Motor Control WorkBench)中生成项目,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX,如下图所示。
参考点灯实验程序,可以将PA5 管脚设置为 GPIO_Output——这与电机控制无关,只供参考。

点击 “Project Manager” 菜单按钮,进入工程配置界面。
- 输入项目名称为 “MotorProfiler”,选择项目的保存路径。
- 将Toolchain / IDE 设为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)。
- 点击右上角 “GENERATE CODE” 生成代码。

加载完毕后,弹出代码生成提示窗口,如下图所示。点击 “OPEN PROJECT”,进入 STM32CubeIDE。
3.3 代码编辑、编译与调试
-
打开 STM32CubeIDE,导入 MotorProfiler 项目。
如果是从 CubeMX 代码生成提示窗口点击“ OPEN PROJECT”,则进入 STM32CubeIDE后自动打开 IHM03_02 项目。 -
在左侧 Project Explorer 中,选择 IHM03_01 – Application – User,打开主程序 main.c ,中断服务程序 tm32g4xx_it.c,stm32g4xx_mc_it.c ,如下图所示。

如果要加入 LED2 闪烁功能,则要在主程序 main.c 的 while(1) 循环中添加以下程序(这与电机控制无关,只供参考):
/* Infinite loop */while (1){/* USER CODE BEGIN WHILE */HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);/* Insert delay 500 ms */HAL_Delay(500);/* USER CODE END WHILE */}
- 程序编译
- 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
- 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
- 程序下载烧录到目标板
- 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
- 不需要程序的运行与调试。
4. 电机参数辨识和使用
4.1 电机参数辨识
- 回到 电机控制软件开发套件(Motor Control WorkBench),点击菜单按钮 “Motor Pilot”,打开 ST Motor Pilot 应用程序。点击 “Launch Profiler” 。

- 通过串口与上位机(PC)通讯。
- 打开上位机(PC)的设备管理器,查看 ST Link 对应的串口的端口号(如本设备串口为 COM9)。
- 在 ST Motor Pilot 中,在 “Port” 设置 ST Link 对应的串口位置(如 COM9),再点击按键 “Connect” 连接。
- 连接成功后,ST Motor Pilot 显示控制板和驱动板的型号和参数。如下图所示。

-
在窗口右侧 “Pole pairs” 输入电机的极对数(本例为 5),最大速度(本例设为 1600)及最大电流(本例设为 2.0APK)。
-
如果不确定所使用电机的极对数,可以点击窗口右侧 “Pole pairs” 右侧 “Detect pole pairs” 检测电机的极对数。通过将电机轴旋转一圈找到有几个稳定位置来检测电机的极对数。
(1)弹出 “Pole pairs detection” 窗口,点击 “Start” 按键;
(2)窗口提示输入检测电流值,建议设为最大电流的 10%(本例设为 0.2Apk);
(3)窗口提示在固定部分和旋转部分上做标记(便于确定“将电机轴旋转一圈”这一过程);
(4)窗口提示“Spin your motor manually, the number of pole pairs is the number of notches you will feel during a complete mechanical rotation of the motor.”
用手轻轻地缓慢旋转电机(轴),手会感觉到一定的阻力(需要用一点力量才能使电机旋转),当旋转一定角度时会感觉到一个平衡点(接近该点时手上的阻力减小,远离该点时阻力变大)。将电机轴旋转一圈,一共有多少个这样的平衡点,电机的极对数就是平衡点的数量。
(5)将检测到的极对数(电机旋转一圈的平衡点数量)输入到 Pole pairs detection。


- 点击“Start profile”开始辨识电机参数。
应用程序自动进行电机参数辨识,包括启停电机和以不同的转速运行,图中的蓝色进度条会显示程序运行的过程。当进度条执行到 100%时,完成电机参数辨识过程。获得的电机电气模型参数和机械模型参数显示在图中。

- 点击“Save” 保存辨识获得的电机参数。
根据提示,输入电机名(例如 KJ100),将电机参数保存在 hardware\motor 文件夹的 KJ100.json 文件中。今后就可以 MCSDK 在创建项目时选择该电机,即可自动调用该电机的参数值。

4.2 使用辨识的电机参数
使用辨识的电机参数,有两种方法。
- 一种方法是从 MCSDK 新建项目,在选择电机时选中刚才添加的电机,则自动从 hardware\motor 文件夹的 KJ100.json 文件中读取电机参数。然后可以参考本系列中文(5)、文(6)实现无感方波控制或 FOC 控制。
STM32-FOC(5)基于 IHM03 的无感方波控制
STM32-FOC(6)基于 IHM03 的无感FOC 控制

该用户自定义电机 KJ100 的详细参数(参数辨识结果)如下图所示。

-
另一种方法是对于已有的项目,在源程序中直接修改电机参数进行设置。
打开电机参数定义文件 pmsm_motor_parameters.h,找到其中的电机电气参数定义部分 “MOTOR ELECTRICAL PARAMETERS”,按照电机参数辨识结果将电机参数修改如下: -
将极对数 POLE_PAIR_NUM 修改为 5;
-
将定子电阻 RS 修改为 3.4 (ohm);
-
将定子电感 LS 修改为 0.00058 (H)。
修改后的程序如下。
* @file pmsm_motor_parameters.h
/* * @file parameters_conversion.h *//* Define to prevent recursive inclusion -------------------------------------*/
#ifndef PMSM_MOTOR_PARAMETERS_H
#define PMSM_MOTOR_PARAMETERS_H/*************************** Motor Parameters ***************************//***************** MOTOR ELECTRICAL PARAMETERS ******************************/
/* GimBal GBM2804H-100T */
/*
#define POLE_PAIR_NUM 7 // Number of motor pole pairs
#define RS 5.3 // Stator resistance , ohm
#define LS 0.001058 // Stator inductance, H
*//* MyMotor KJ-100 */
#define POLE_PAIR_NUM 5 // Number of motor pole pairs
#define RS 0.44 // Stator resistance , ohm
#define LS 0.00014 // Stator inductance, H
重新编译程序,将程序下载烧录到目标板 NUCLEO-G431RB 。
- 检查 IHM03 套件硬件连接和电源连接。
- 驱动板、控制板上电后:
- LED2 灯闪烁(如果加入闪灯程序)。
- 按下蓝色按键 B1,电机开始运行。
- 按下黑色按键 B2,电机停止运行。
至此,我们就完成了对新电机的参数设置。

参考资料:
- 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/category_12645064.html)
Copyright@youcans 2024
Crated:2024-11
相关文章:
【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识
STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)IHM03 电机控制套件介绍 STM32-FOC(5&…...
【C++11】尽显锋芒
(续) 一、可变参数模板 C11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称 为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包:表示零…...
掌握控制流的艺术:Go语言中的if、for和switch语句
标题:掌握控制流的艺术:Go语言中的if、for和switch语句 在Go语言的编程世界中,控制流语句是构建程序逻辑的基石。if语句、for循环和switch语句是我们最常用的控制流工具,它们让我们能够根据不同的条件执行不同的代码块。本文将深入探讨这些语句的使用方法、技术细节和实际…...
飞书会话消息左右排列
飞书会话消息左右排列 1. 飞书登录后,点击头像,弹出菜单有个按钮设置 2. 3....
.net 支持跨平台(桌面)系列技术汇总
1. 首先微软老大哥的.net core 。 .NET Core 是微软开发的一个跨平台、高性能的开源框架,用于构建云和互联网连接的新型应用。 它允许开发者在 Windows、macOS 和 Linux 上使用喜爱的开发工具进行开发,并支持部署到云或本地环境。 .NET Core 是对 .NET …...
springboot 静态资源访问
最近在学习springboot,在学习中一个静态资源访问,难道了我三天,在网上找了很多的资料,又是配置,又是重写WebMvcConfigurationSupport,因为以前没有接触,本来很简单的事情走了很多弯路࿰…...
【linux学习指南】初识Linux进程信号与使用
文章目录 📝信号快速认识📶⽣活⻆度的信号📶 技术应⽤⻆度的信号🌉 前台进程(键盘)🌉⼀个系统函数 📶信号概念📶查看信号 🌠 信号处理🌉 忽略此信…...
L1G1000 书生大模型全链路开源开放体系笔记
关卡任务 观看本关卡视频后,写一篇关于书生大模型全链路开源开放体系的笔记。 视频链接:【书生浦语大模型全链路开源体系】 : 书生浦语大模型开源开放体系_哔哩哔哩_bilibili 书生大模型全链路开源开放体系笔记 在人工智能领域,大模型的…...
亚信安全与飞书达成深度合作
近日,亚信安全联合飞书举办的“走近先进”系列活动正式走进亚信。活动以“安全护航信息化 共筑数字未来路”为主题,吸引了众多数字化转型前沿企业的近百位领导参会。作为“走近先进”系列的第二场活动,本场活动更加深入挖掘了数字化转型的基础…...
深入讲解Spring Boot和Spring Cloud,外加图书管理系统实战!
很抱歉,我的疏忽,说了这么久还没有给大家详细讲解过Spring Boot和Spring Cloud,那今天给大家详细讲解一下。 大家可以和下面这三篇博客一起看: 1、Spring Boot 和 Spring Cloud 微服务开发实践详解https://blog.csdn.net/speaking_me/artic…...
【三维生成】Edify 3D:可扩展的高质量的3D资产生成(英伟达)
标题:Edify 3D: Scalable High-Quality 3D Asset Generation 项目:https://research.nvidia.com/labs/dir/edify-3d demo:https://build.nvidia.com/Shutterstock/edify-3d 文章目录 摘要一、前言二、多视图扩散模型2.1.消融研究 三、重建模型…...
Java求职招聘网站开发实践
一、项目介绍 本文将介绍如何使用Java技术栈开发一个求职招聘网站。该网站主要实现求职者和招聘方的双向选择功能,包含用户管理、职位发布、简历投递等核心功能。 二、技术选型 后端框架:Spring Boot 2.7.0数据库:MySQL 8.0前端框架&#…...
一文详细了解websocket应用以及连接断开的解决方案
文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…...
如何做含有identify抓信号的fpga版本(image或者Bit)
在数字的FPGA debug中除了ila就是identify了,identify是synopsys公司的RTL级的调试工具。要用起来idetify,第一步就是要做出含有identify的信号的FPGA版本,quartus的是image,Ximlinx的是Bit或者Bin文件。具体有以下几步࿱…...
AIGC实践-使用Amazon Bedrock的SDXL模型进行文生图
一、Bedrock 简介 Amazon Bedrock 是 Amazon Web Services (AWS) 提供的一种生成式 AI 服务。通过 Bedrock,用户可以方便地使用多种基础模型(Foundation Models),包括 OpenAI 的 GPT、Anthropic 的 Claude 等。这些模型可以用于各…...
【源码】Sharding-JDBC源码分析之SQL中分片键路由ShardingSQLRouter的原理
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
初学 flutter 环境变量配置
一、jdk(jdk11) 1)配置环境变量 新增:JAVA_HOMEC:\Program Files\Java\jdk-11 //你的jdk目录 在path新增:%JAVA_HOME%\bin2)验证是否配置成功(cmd运行命令) java java -version …...
蓝牙 AVRCP 协议详解
前言 随着无线音频设备的普及,蓝牙已经成为智能设备间通信的主流方式之一。除了传输音频流的 A2DP 协议外,AVRCP(Audio/Video Remote Control Profile,音频/视频远程控制协议)为用户提供了对蓝牙音频设备的控制能力&am…...
在 Ubuntu 18.04 上安装 MySQL 5.7和MySQL 8
1.Ubuntu安装MySQL 5.72.Ubuntu安装MySQL 8 在 Ubuntu 18.04 上安装 MySQL 5.7,可以按照以下步骤操作: 1. 更新系统包列表 运行以下命令以确保系统包列表是最新的: sudo apt update2. 检查默认 MySQL 版本 Ubuntu 18.04 默认提供 MySQL 5.…...
第4章 Spring Boot自动配置
自动配置概述 SpringBoot的两大核心 Spring Boot 框架的两大核心特性可以概括为“启动器”(Starter)和“自动配置”(Auto-configuration)。 启动器(Starter): Spring Boot 提供了一系列的 Star…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
