当前位置: 首页 > article >正文

【动手学电机驱动】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. 开发环境

  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.kler.cn/a/412728.html

相关文章:

  • HTML详解(1)
  • 【AI学习】Mamba学习(十八):S6的硬件感知设计
  • 前端:base64的作用
  • k8s集群增加nfs-subdir-external-provisioner存储类
  • 在 Mac(ARM 架构)上安装 JDK 8 环境
  • 从零开始学GeoServer源码(二)添加支持arcgis切片功能
  • 神经网络中的神经元是什么?
  • QT6学习第四天 感受QT的文件编译
  • uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
  • P5732 【深基5.习7】杨辉三角
  • QT QGridLayout控件 全面详解
  • 【设计模式】【结构型模式(Structural Patterns)】之代理模式(Proxy Pattern)
  • Python 网络爬虫入门教程:理论与实践
  • Spring Boot开发实战:从入门到构建高效应用
  • Spark垃圾回收
  • 活着就好20241128
  • 【设计模式】【结构型模式(Structural Patterns)】之外观模式(Facade Pattern)
  • 医学机器学习:数据预处理、超参数调优与模型比较的实用分析
  • T3 TensorFlow入门实战——天气识别
  • laravel-operate
  • 数学期望在算法中的应用
  • 开源 - Ideal库 - Excel帮助类,设计思路(一)
  • 【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译
  • Ollama - 简化使用本地大语言模型
  • 双十一线上服务调用链路追踪SkyWalking实战分析
  • PostgreSQL表膨胀问题解析