【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

news2024/11/29 17:38:53

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. 开发环境

  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)必须保持未覆盖状态。

在这里插入图片描述

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

  2. 配置 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” 输入项目名称,例如 “MotorProfiler”;
    • 在 “Num.Motors” 选择电机数量为 单电机:1 Motor;
    • 在 “Driving Algorithm” 选择驱动控制算法为 FOC;
    • 在 “Hardware Mode” 选择 Modular 模式。

在这里插入图片描述


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

在这里插入图片描述

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

在这里插入图片描述


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

在这里插入图片描述


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

在这里插入图片描述


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

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

在这里插入图片描述

点击 “>>OK” 确认,返回电机控制项目视图。

在这个界面,还可以对电机直接进行控制,具体使用方法将在以后的文章中介绍。


  1. 项目生成。
  • 选择菜单 “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 代码编辑、编译与调试

  1. 打开 STM32CubeIDE,导入 MotorProfiler 项目。
    如果是从 CubeMX 代码生成提示窗口点击“ OPEN PROJECT”,则进入 STM32CubeIDE后自动打开 IHM03_02 项目。

  2. 在左侧 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 */
  }

  1. 程序编译
  • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
  1. 程序下载烧录到目标板
  • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
  • 不需要程序的运行与调试。

4. 电机参数辨识和使用

4.1 电机参数辨识

  1. 回到 电机控制软件开发套件(Motor Control WorkBench),点击菜单按钮 “Motor Pilot”,打开 ST Motor Pilot 应用程序。点击 “Launch Profiler” 。

在这里插入图片描述

  1. 通过串口与上位机(PC)通讯。
  • 打开上位机(PC)的设备管理器,查看 ST Link 对应的串口的端口号(如本设备串口为 COM9)。
  • 在 ST Motor Pilot 中,在 “Port” 设置 ST Link 对应的串口位置(如 COM9),再点击按键 “Connect” 连接。
  • 连接成功后,ST Motor Pilot 显示控制板和驱动板的型号和参数。如下图所示。
    在这里插入图片描述
  1. 在窗口右侧 “Pole pairs” 输入电机的极对数(本例为 5),最大速度(本例设为 1600)及最大电流(本例设为 2.0APK)。

  2. 如果不确定所使用电机的极对数,可以点击窗口右侧 “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。
    在这里插入图片描述

在这里插入图片描述

  1. 点击“Start profile”开始辨识电机参数。

应用程序自动进行电机参数辨识,包括启停电机和以不同的转速运行,图中的蓝色进度条会显示程序运行的过程。当进度条执行到 100%时,完成电机参数辨识过程。获得的电机电气模型参数和机械模型参数显示在图中。
在这里插入图片描述

  1. 点击“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,电机停止运行。

至此,我们就完成了对新电机的参数设置。

在这里插入图片描述


参考资料:

  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/category_12645064.html)
Copyright@youcans 2024
Crated:2024-11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OGRE 3D----3. OGRE绘制自定义模型

在使用OGRE进行开发时,绘制自定义模型是一个常见的需求。本文将介绍如何使用OGRE的ManualObject类来创建和绘制自定义模型。通过ManualObject,开发者可以直接定义顶点、法线、纹理坐标等,从而灵活地构建各种复杂的几何体。 Ogre::ManualObject 是 Ogre3D 引擎中的一个类,用…

【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限

未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…

AI自动化剪辑工具:可将长视频中精彩部分提取合成短视频

最近,我发现了一款特别适合当下短视频潮流的自动化工具,它能够让我们轻松从长视频中剪辑出精彩片段,并快速生成适合分享的短视频。 这款工具叫 AI Youtube Shorts Generator,是一个开源项目,特别适合那些喜欢制作短视…

Windsurf可以上传图片开发UI了

背景 曾经羡慕Cursor的“画图”开发功能,这不Windsurf安排上了。 Upload Images to Cascade Cascade now supports uploading images on premium models Ask Cascade to build or tweak UI from on image upload New keybindings Keybindings to navigate betwe…

(二)Sping Boot学习——Sping Boot注意事项

1.springboot默认是扫描的类是在启动类的当前包或者下级包。 2.运行报错 ERROR:An incompatible version [1.2.33] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 网上试了很多方法,直接重新安装更新版…

Elasticsearch:Retrievers 介绍

检索器(retrievers)是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减…

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成

Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 1、 Doxygen简介 Doxygen 是一个由 C 编写的、开源的、跨平台的文档生成系统。最初主要用于生成 C 库的 API 文档,但目前又添加了对 C、C#、Java、Python、Fortran、PHP 等语言的支持。其从源代码中提取注释&…

Css—实现3D导航栏

一、背景 最近在其他的网页中看到了一个很有趣的3d效果,这个效果就是使用css3中的3D转换实现的,所以今天的内容就是3D的导航栏效果。那么话不多说,直接开始主要内容的讲解。 二、效果展示 三、思路解析 1、首先我们需要将这个导航使用一个大…

快速理解微服务中Fegin的概念

一.由来 1.在传统的架构里面,我们是通过使用RestTemplate来访问其他的服务,但是这种方式就存在了一个很大的缺陷,也就是被调用方如果发生了服务的迁移(IP和端口发生了变化),那么调用方也需要同步的在代码里面进行修改,…

【Git】Git 完全指南:从入门到精通

Git 完全指南:从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一,它帮助开发者高效地管理项目,支持分布式协作和版本控制。无论是个人项目还是团队开发,Git 都能提供强大的功能来跟踪、管理代码变更,并保障…

Spring Web MVC(详解中)

文章目录 Spring MVC(中)RESTFul风格设计RESTFul风格概述RESTFul风格特点RESTFul风格设计规范RESTFul风格好处RESTFul风格实战需求分析RESTFul风格接口设计后台接口实现 基于RESTFul风格练习(前后端分离模式)案例功能和接口分析功…

什么是GAN?

一、基本概念 生成对抗网络(Generative Adversarial Network,GAN)是一种由两个神经网络共同组成深度学习模型:生成器(Generator)和判别器(Discriminator)。这两个网络通过对抗的方式…

Spring |(八)AOP配置管理

文章目录 📚AOP切点表达式🐇语法格式🐇通配符 📚AOP通知类型🐇环境准备🐇通知类型的使用 📚AOP通知获取数据🐇环境准备🐇获取参数🐇获取返回值🐇获…

Flink 从入门到实战

Flink中的批和流 批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。 流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实…

Ubuntu20.04运行LARVIO

文章目录 1.运行 Toyish 示例程序2.运行 ROS Nodelet参考 1.运行 Toyish 示例程序 LARVIO 提供了一个简化的toyish示例程序,适合快速验证和测试。 编译项目 进入 build 文件夹并通过 CMake 编译项目: mkdir build cd build cmake -D CMAKE_BUILD_TYPER…

小程序-基于java+SpringBoot+Vue的戏曲文化苑小程序设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

mybatis plus如何使用mybatis xml拼接sql

在 MyBatis Plus 中,如果你想使用 MyBatis 的 XML 文件来拼接 SQL,可以结合使用 MyBatis 和 MyBatis Plus 的功能。MyBatis Plus 是一个增强 MyBatis 的工具,它提供了很多便捷的操作,但有时你可能需要使用 XML 文件来定义更复杂的…

【uniapp】轮播图

前言 Uniapp的swiper组件是一个滑块视图容器组件&#xff0c;可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装&#xff0c;可以在不同的平台上使用&#xff0c;如微信小程序、H5、App等。 效果图 前端代码 swiper组件 <template><vi…

Python爬虫爬取数据报错

报错&#xff1a; Error fetching the URL: (Connection aborted., ConnectionResetError(10054, 远程主机强迫关闭了一个现有的连接。, None, 10054, None)) 报错原因&#xff1a; 目标服务器限制&#xff1a; 目标网站可能已经检测到你的请求来自自动化工具&#xff08;如爬虫…

人工智能与传统控制系统的融合发展

在这个科技快速迭代的时代&#xff0c;人工智能技术正以前所未有的速度改变着我们的生活。在控制系统领域&#xff0c;AI技术的引入为传统控制带来了新的发展机遇和挑战。然而&#xff0c;这并不意味着传统控制将被完全取代&#xff0c;相反&#xff0c;AI与传统控制的深度融合…