扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32的FOC控制——基于 IHM03 的无感方波控制

03/16 10:37
384
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.开发环境

硬件要求:

系统要求:

    • Windows 操作系统(Windows 7、Windows 8 和 Windows 10)、Linux 64-bit 或 macOSUSB Type-A 或 Type-c 至 Micro-B 连接线缆,用于将STM32 Nucleo板连接到 PC

开发工具:

    STM32 电机控制 SDK:X-CUBE-MCSDKSTM32 图形化配置工具:STM32CubeMX集成开发环境 IDE,可以选择以下三者之一:

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-2] 位置(跳线安装在 pin1、pin2 针脚);

JP6(IDD)设为 ON 状态(安装 2针跳线)。

(4)配置控制板和驱动板的跳线,以选择所需的控制算法(如六步方波):

NUCLEO-IHM16M1 电机驱动板的跳线设置:

    • J5 设为 ON 状态(安装 2针跳线);J6 设为 ON 状态(安装 2针跳线);
     NUCLEO-G431RB 控制板的跳线设置:JP4 和 JP7 设为 OFF 状态(不安装跳线)。

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

(5)将 12V/2A 直流电源连接到 NUCLEO-G431RB 控制板上的 CN1 连接端口(mini-USB),或连接到 X-NUCLEO-IHM16M1 电机驱动板上的 J4 连接器(电源插座),并通电(IHM03 套件中标配的云台电机的最大电压为12 VDC)。3.无感方波电机控制3.1 配置电机控制包(1)打开电机控制软件开发套件(Motor Control WorkBench),创建新项目。

单击"New Project"按钮,弹出"New Project"对话框。

在 “General Info” 菜单中进行设置:

在 “Project name” 输入项目名称,例如 IHM03_01;

在 “Num.Motors” 选择电机数量为 单电机:1 Motor;

在 “Driving Algorithm” 选择驱动控制算法为 6步方波:6-Step;

在 “Hardware Mode” 选择 Modular 模式。

(2)进入 “Motors” 菜单,根据 IHM03 电机控制套件的配置,选择电机为 GimBal GBM2804H-100T。

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

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

(5)完成项目配置后,点击窗口右下方 “>>OK” 按钮,就会自动生成一个电机控制项目,并显示项目视图如下。

视图的内容取决于用户配置的电路板和电机的信息。

如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。

(6)修改配置的电路板和电机的信息。

如果配置的电路板或电机的信息与实际使用产品有差异,可以点击相应的模块(蓝色模块),进入该模块的参数配置页面进行修改。

在本例中,电机 GimBal GBM2804H-100T 的默认设置(具体参数与SDK版本有关)为最大电压 10Vdc、最大电流 0.8Apk。这与本套件的配置不一致,因此要点击图中 Motor 蓝色模块,进入电机参数设置页面,将最大电压设为 14.8Vdc、最大电流设为 2.1Apk。

完成电机参数修改后,点击 “>>OK” 确认,返回电机控制项目视图。如下图所示,此时 Motor 蓝色模块中的电机参数已经被修改为 “14.8Vdc/2.1Apk” 。

在这个界面,还可以对电机直接进行控制。

(7)配置速度位置控制方案。

点击项目视图中的 “Speed Sensing” 蓝色模块,进入速度位置管理界面。

在 Main Sensor – Sensor Selection 选项中,选择 Sensorless - ADC,即采用无传感器(基于ADC 采样检测过零点)进行控制。

六步方波的驱动方式,就是在同一时刻只有两相绕组通电,一相输入、另一相输出、第三相悬空,以此类推换向6步,分别是U+V-,U+W-,V+W-,V+U-,W+U-,W+V-。一个周期内每一相的导通时间保持120度的电角度。

当 BLDC 电机转动时,反电势过零点发生在浮空相。通过检测各相各相对地电压,并与直流母线电压对比。当端电压等于直流母线电压一半时,即发生过零事件。在基于ADC的过零点检测方案中,同时测量端电压与直流母线电压并进行对比,获得过零信号。

检测到过零发生并延迟30度,等待转子转过“死点”时进行换向,就能保证电机的持续运行。

(8)项目生成

选择菜单 “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” 菜单按钮,进入工程配置界面。

输入项目名称为 “IHM03_01”,选择项目的保存路径。

将Toolchain / IDE 设为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)。

点击右上角 “GENERATE CODE” 生成代码。

加载完毕后,弹出 代码生成 提示窗口,如下图所示。点击“ OPEN PROJECT”,进入 STM32CubeIDE。

3.3 代码编辑、编译与调试

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

2.在左侧 Project Explorer 中,选择 IHM03_01 – Application – User,打开主程序 main.c ,中断服务程序 tm32g4xx_it.c,stm32g4xx_mc_it.c ,如下图所示。

主程序 main.c


  /******************************************************************************  * @file           : main.c  * @brief          : Main program body  ******************************************************************************/

中断服务程序 tm32g4xx_it.c

  /******************************************************************************  * @file    stm32g4xx_it.c  * @brief   Interrupt Service Routines.  ******************************************************************************/

中断服务程序 stm32g4xx_mc_it.c

  /******************************************************************************  * @file    stm32g4xx_mc_it.c  * @author  Motor Control SDK Team, ST Microelectronics  * @brief   Main Interrupt Service Routines.  *          This file provides exceptions handler and peripherals interrupt  *          service routine related to Motor Control for the STM32G4 Family.  ******************************************************************************/

如果要加入 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 */  }

3.程序编译

    用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。点击工具栏中 “Build Debug” 按键对程序代码进行编译。

4.程序下载并烧录到板子

点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。

程序烧录完成后,显示内容如下。

STMicroelectronics ST-LINK GDB server. Version 7.8.0Copyright (c) 2024, STMicroelectronics. All rights reserved.
Starting server with the following options:        Persistent Mode            : Disabled        Logging Level              : 1        Listen Port Number         : 61234        Status Refresh Delay       : 15s        Verbose Mode               : Disabled        SWD Debug                  : Enabled        InitWhile                  : Enabled
Waiting for debugger connection...Debugger connectedWaiting for debugger connection...Debugger connectedWaiting for debugger connection...      -------------------------------------------------------------------                       STM32CubeProgrammer v2.17.0                        -------------------------------------------------------------------
Log output file:   C:UsershuangAppDataLocalTempSTM32CubeProgrammer_a24036.logST-LINK SN  : 003E00363432511230343838ST-LINK FW  : V3J15M7Board       : NUCLEO-G431RBVoltage     : 3.28VSWD freq    : 8000 KHzConnect mode: Under ResetReset mode  : Hardware resetDevice ID   : 0x468Revision ID : Rev XDevice name : STM32G43x/G44xFlash size  : 128 KBytesDevice type : MCUDevice CPU  : Cortex-M4BL Version  : 0xD4
Memory Programming ...Opening and parsing file: ST-LINK_GDB_server_a24036.srec  File          : ST-LINK_GDB_server_a24036.srec  Size          : 35.75 KB   Address       : 0x08000000 
Erasing memory corresponding to segment 0:Erasing internal memory sectors [0 17]Download in Progress:File download completeTime elapsed during download operation: 00:00:00.944
Verifying ...Download verified successfully 

5.程序运行与调试

    对照 2.1 检查 IHM03 套件硬件连接和电源连接。接通 12Vdc电源。点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。

    • LED2 灯闪烁(如果加入闪灯程序)。按下蓝色按键 B1,电机开始运行。按下黑色按键 B2,电机停止运行。

实验效果如下:

至此,我们就完成了使用 IHM03 电机控制套件开发基本的无感方波电机控制程序。4.更换电机与电机参数设置当更换电机时,需要根据电机参数对配置进行修改。一种方法是在 MCSDK 中增加用户自定义的电机型号;另一种方法是通过 IDE 在程序中直接修改电机参数,下面对此进行介绍。

我们更换另一种型号的直流电机 KJ230F,该电机的主要参数为:

我们首先介绍 如何在程序中设置电机参数。

(1)打开中断处理程序 stm32g4xx_mc_it.c,鼠标选中 “parameters_conversion.h” 后按 F3 按键打开;

/*   * @file    stm32g4xx_mc_it.c *//* Includes ------------------------------------------------------------------*/#include "mc_config.h"#include "mc_type.h"//cstat -MISRAC2012-Rule-3.1#include "mc_tasks.h"//cstat +MISRAC2012-Rule-3.1#include "parameters_conversion.h"

(2)打开包含文件 parameters_conversion.h,鼠标选中 “pmsm_motor_parameters.h” 后按 F3 按键打开;

/*     * @file    parameters_conversion.h *//* Define to prevent recursive inclusion -------------------------------------*/#ifndef PARAMETERS_CONVERSION_H#define PARAMETERS_CONVERSION_H
#include "mc_math.h"#include "parameters_conversion_g4xx.h"#include "pmsm_motor_parameters.h"#include "drive_parameters.h"#include "power_stage_parameters.h"

(3)打开电机参数定义文件 pmsm_motor_parameters.h,找到其中的电机电气参数定义部分 “MOTOR ELECTRICAL PARAMETERS”,修改如下:

    将极对数 POLE_PAIR_NUM 修改为 5;将定子电阻 RS 修改为 1.7 (ohm);将定子电感 LS 修改为 0.0018 (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  ******************************/#define POLE_PAIR_NUM           5 /* Number of motor pole pairs */#define RS                      1.7 /* Stator resistance , ohm*/#define LS                      0.00018 /* Stator inductance, H                                                 For I-PMSM it is equal to Lq *//* When using Id = 0, NOMINAL_CURRENT is utilized to saturate the output of the   PID for speed regulation (i.e. reference torque).   Transformation of real currents (A) into int16_t format must be done accordingly with   formula:   Phase current (int16_t 0-to-peak) = (Phase current (A 0-to-peak)* 32767 * Rshunt *                                   *Amplifying network gain)/(MCU supply voltage/2)*/
#define MOTOR_MAX_SPEED_RPM     1572 /*!< Maximum rated speed  */#define MOTOR_VOLTAGE_CONSTANT  5.0 /*!< Volts RMS ph-ph /kRPM */#define NOMINAL_CURRENT_A       2.160

(4)重新编译程序,将程序下载烧录到目标板 NUCLEO-G431RB 。

    对照 2.1 检查 IHM03 套件硬件连接和电源连接。驱动板、控制板上电后:

    • LED2 灯闪烁(如果加入闪灯程序)。按下蓝色按键 B1,电机开始运行。按下黑色按键 B2,电机停止运行。

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

如果电机运行异常,例如噪音大,卡顿,则需要进一步调节控制环路的 PI 参数。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

嵌入式开发工程师,创客教师,芯片应用工程师,主要致力于芯片应用解决方案设计、嵌入式硬件设计、嵌入式软件设计、51单片机、STM32单片机、Arduino单片机、ESP32单片机、FPGA等主流控制器的开发,以及创客、开源硬件设计等领域研究。

微信公众号