【动手学电机驱动】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. 开发环境](#1. 开发环境)
    • [2. 硬件连接](#2. 硬件连接)
    • [3. 创建电机控制项目](#3. 创建电机控制项目)
      • [3.1 配置电机控制包](#3.1 配置电机控制包)
      • [3.2 图形化配置](#3.2 图形化配置)
      • [3.3 代码编辑、编译与调试](#3.3 代码编辑、编译与调试)
    • [4. 电机参数辨识和使用](#4. 电机参数辨识和使用)
      • [4.1 电机参数辨识](#4.1 电机参数辨识)
      • [4.2 使用辨识的电机参数](#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" 按钮,就会自动生成一个电机控制项目,并显示项目视图如下。
    视图的内容取决于用户配置的电路板和电机的信息。
    如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。

  2. 在左侧菜单 "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) 循环中添加以下程序(这与电机控制无关,只供参考):

c 复制代码
  /* 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)。

修改后的程序如下。

c 复制代码
  * @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

相关推荐
杰克逊的日记9 天前
MCU编程
单片机·嵌入式硬件
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件
懒惰的bit9 天前
STM32F103C8T6 学习笔记摘要(四)
笔记·stm32·学习
HX科技9 天前
STM32给FPGA的外挂FLASH进行升级
stm32·嵌入式硬件·fpga开发·flash·fpga升级
Suagrhaha9 天前
驱动入门的进一步深入
linux·嵌入式硬件·驱动
国科安芯9 天前
基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
嵌入式硬件·硬件架构·硬件工程
Li Zi9 天前
STM32 ADC(DMA)双缓冲采集+串口USART(DMA)直接传输12位原始数据到上位机显示并保存WAV格式音频文件 收藏住绝对实用!!!
经验分享·stm32·单片机·嵌入式硬件
进击的程序汪9 天前
触摸屏(典型 I2C + Input 子系统设备)从设备树解析到触摸事件上报
linux·网络·嵌入式硬件
damo王10 天前
Zephyr 系统深入解析:SoC 支持包结构与中断调度器调优实践
单片机·嵌入式硬件·zephyr
逼子格10 天前
硬件工程师笔试面试高频考点汇总——(2025版)
单片机·嵌入式硬件·面试·硬件工程·硬件工程师·硬件工程师真题·硬件工程师面试