【动手学电机驱动】STM32-FOC(5)基于 IHM03 的无感 FOC 控制

news2024/11/24 7:30:29

STM32-FOC(1)STM32 电机控制的软件开发环境
STM32-FOC(2)STM32 导入和创建项目
STM32-FOC(3)STM32 三路互补 PWM 输出
STM32-FOC(4)IHM03 电机控制套件介绍
STM32-FOC(5)基于 IHM03 的无感FOC 控制
STM32-FOC(6)基于 IHM03 无感方波控制

【动手学电机驱动】STM32-FOC(5)基于 IHM03 的无感 FOC 控制

    • 1. 开发环境
    • 2. 硬件连接与快速运行
      • 2.1 硬件连接
      • 2.2 快速运行
      • 2.3 跳线配置
    • 3. 无感 FOC 电机控制程序开发
      • 3.1 配置电机控制包
      • 3.2 图形化配置
      • 3.3 代码编辑、编译与调试

此前我们已经学习了 STM32G4 MCU 编程的基本操作,实现了 3路互补带死区 PWM波的生成。
P-NUCLEO-IHM03 STM32电机控制套件使用FOC算法,为三相、低压和低电流的 BLDC 或 PMSM 电机提供电机控制解决方案。
本节从 STM32 电机控制包配置开始,介绍使用 IHM03 电机控制套件开发无感 FOC 电机控制程序的基础操作。


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. 硬件连接与快速运行

P-NUCLEO-IHM03 STM32电机控制套件已经将演示软件预装在STM32 Flash 中,便于在外设独立模式下进行演示。对于新购买的 IHM03 电机控制套件(没有烧录过其它程序),连接硬件系统后就可以快速运行。


2.1 硬件连接

IHM03 电机控制套件硬件连接的操作步骤如下。

  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. 配置 X-NUCLEO-IHM16M1 电机驱动板上的跳线,以选择所需的控制算法(如 FOC):
  • J5 设为 ON 状态(安装 2针跳线);
  • J6 设为 ON 状态(安装 2针跳线);
  • 对于 FOC 控制,将跳线设置为:
    • 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 连接器(电源插座),并通电(IHM03 套件中标配的云台电机的最大电压为12 VDC)。

2.2 快速运行

由于 IHM03 电机控制套件在出厂时已经将演示软件预装在STM32 Flash 中,可以在外设独立模式下进行演示。对于新购买的 IHM03 电机控制套件(没有烧录过其它程序),连接硬件系统后就可以快速运行,具体操作步骤如下。

  1. 按下 NUCLEO-G431RB 控制板上的蓝色按钮 B1,电机就开始转动。

  2. 调节 X-NUCLEO-IHM16M1 电机驱动板上的电位器,可以调节电机的转速。

注意:对于已使用过的 IHM03 电机控制套件,可能 Flash 中已烧录其它程序(例如上节中的生成 PWM 实验),则不能采用该方式快速运行,而需要按本文内容开发无感 FOC 电机控制程序,才能实现电机控制。


2.3 跳线配置

X-NUCLEO-IHM16M1 电机驱动板上的跳线配置,如下图所示。根据跳线选择,可以选择单分流器或三分流器电流传感模式、带上拉的霍尔传感器或编码器,或NUCLEO-G431RB板的外部电源。

在这里插入图片描述

注意 JP4 和 JP7 必须具有相同的配置:对于三分流配置,JP4 和 JP7 都是打开的;对于单分流配置,JP4 和 JP7 都是关闭的。在 PCB 上三分流器或单分流器的正确位置与默认位置一起显示。

P-NUCLEO-IHM03 板上的主要连接端子的功能如下表所示。

在这里插入图片描述

P-NUCLEO-IHM03 堆叠在 ST-morpho 连接器上,可从控制板的两侧访问公引脚头(CN7和CN10)。它们可用于将 X-NUCLEO-IHM16M1 电源驱动板连接到 NUCLEO-G431RB 控制板。ST morpho连接器上提供MCU的所有信号和电源引脚。


3. 无感 FOC 电机控制程序开发

3.1 配置电机控制包

  1. 打开 电机控制软件开发套件(Motor Control WorkBench),创建新项目。
    单击"New Project"按钮,弹出"New Project"对话框,如下图所示。

在这里插入图片描述


  1. 在 “General Info” 菜单中进行设置:
    • 在 “Project name” 输入项目名称;
    • 在 “Num.Motors” 选择电机数量为 单电机:1 Motor;
    • 在 “Driving Algorithm” 选择驱动控制算法为 磁场定向控制:FOC;
    • 在 “Hardware Mode” 选择 Modular 模式;

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

在这里插入图片描述


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

在这里插入图片描述


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

在这里插入图片描述


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

在这里插入图片描述


  1. 修改配置的电路板和电机的信息。
    如果配置的电路板或电机的信息与实际使用产品有差异,可以点击相应的模块(蓝色模块),进入该模块的参数配置页面进行修改。
    在本例中,电机 GimBal GBM2804H-100T 的默认设置(具体参数与SDK版本有关)为最大电压 10Vdc、最大电流 0.8Apk。这与本套件的配置不一致,因此要点击图中 Motor 蓝色模块,进入电机参数设置页面,将最大电压设为 14.8Vdc、最大电流设为 2.1Apk。

在这里插入图片描述

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

在这里插入图片描述

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


  1. 配置速度位置控制方案。

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

在 Main Sensor – Sensor Selection 选项中,选择 Sensor-less(Observer+PLL),即采用无传感器(使用位置观测器+PLL获取实时的转子位置)进行控制。

在这里插入图片描述


  1. 项目生成。
  • 选择菜单 “Generate the project” 按键,根据配置参数生成项目。
  • 跳出 “Project generation” 窗口,选择 STM32CubeMX 版本、固件版本(Firmware Package Version),Target Toolchain 为 STM32CubeIDE。
  • 默认使用 HAL 驱动。
  • 点击 “GENERATE” 按键,生成代码。

在这里插入图片描述

注意选择的固件包的版本,如果没有安装相应版本的固件包,则会自动下载。

  1. 项目生成完成后,点击 “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_01 项目。
    如果是从 CubeMX 代码生成提示窗口点击“ OPEN PROJECT”,则进入 STM32CubeIDE后自动打开 IHM03_01 项目。

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

  • 主程序 main.c

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

在这里插入图片描述

如果要加入 LED2 闪烁功能,则要在 while(1) 循环中添加以下程序(这与电机控制无关,只供参考):

    /* USER CODE BEGIN 3 */
	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
	/* Insert delay 200 ms */
	HAL_Delay(200);

打开中断服务程序 tm32g4xx_it.c,stm32g4xx_mc_it.c。

  • 中断服务程序 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.
  ******************************************************************************/


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

在这里插入图片描述

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

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

STMicroelectronics ST-LINK GDB server. Version 7.8.0
Copyright (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

Waiting for debugger connection...
Debugger connected
Waiting for debugger connection...
Debugger connected
Waiting for debugger connection...
      -------------------------------------------------------------------
                       STM32CubeProgrammer v2.17.0                  
      -------------------------------------------------------------------

Log output file:   C:\Users\huang\AppData\Local\Temp\STM32CubeProgrammer_a12524.log
ST-LINK SN  : 003E00363432511230343838
ST-LINK FW  : V3J15M7
Board       : NUCLEO-G431RB
Voltage     : 3.28V
SWD freq    : 8000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x468
Revision ID : Rev X
Device name : STM32G43x/G44x
Flash size  : 128 KBytes
Device type : MCU
Device CPU  : Cortex-M4
BL Version  : 0xD4

Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_a12524.srec
  File          : ST-LINK_GDB_server_a12524.srec
  Size          : 38.10 KB 
  Address       : 0x08000000 

Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 19]
Download in Progress:

File download complete
Time elapsed during download operation: 00:00:01.011

Verifying ...
Download verified successfully 
Shutting down...
Exit.

在这里插入图片描述

  1. 程序的运行与调试
  • 对照 2.1 检查 IHM03 套件硬件连接和电源连接。
  • 接通 12Vdc电源。
  • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。
    • LED2 灯闪烁(如果加入闪灯程序)。
    • 按下蓝色按键 B1,电机控制程序启动。电机指示灯亮,电机旋转。

实验结果如下:
请添加图片描述


至此,我们就完成了使用 IHM03 电机控制套件开发基本的无感 FOC 电机控制程序。


参考资料:

  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/article/details/143450689)
Copyright@youcans 2024
Crated:2024-11

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

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

相关文章

光老化测试的三种试验:紫外老化、氙灯老化、碳弧灯老化

光老化是指材料在阳光照射下,由于紫外线、热和氧气的共同作用而发生的物理和化学变化。这种现象对纺织材料、塑料材料、涂料材料和橡胶材料的应用有显著影响。这些材料户外家具、汽车内饰和户外供水排水管道、建筑外墙涂料、汽车漆面、船舶涂料、汽车轮胎、密封件、…

VMWare安装包及安装过程

虚拟机基本使用 检查自己是否开启虚拟化 如果虚拟化没有开启,需要自行开启:百度加上自己电脑的品牌型号,进入BIOS界面开启 什么是虚拟机 所谓的虚拟机,就是在当前计算机系统中,又开启了一个虚拟系统 这个虚拟系统&…

消费的外部性

大学宿舍,遇到在你睡觉的时候开外放不戴耳机的室友,但中午12点,室友却在那拉上窗帘睡觉。能带饭吗?能代签到吗?能倒个垃圾吗?能带个外卖吗?自己永远麻烦别人,你要让他帮个忙又这推那…

易趋亮相2024 PMI项目管理大会

11月9日-10日,2024 PMI项目管理大会在广州圆满举办,项目管理行业优秀代表企业——易趋(隶属深圳市蓝云软件有限公司),携最新产品和解决方案亮相本次展会。 (主论坛现场) 本届大会以“‘项’有所成 行以致远…

边缘计算与推理算力:智能时代的加速引擎

在数据量爆炸性增长的今天,边缘计算与推理算力正成为推动智能应用的关键力量。智能家居、自动驾驶、工业4.0等领域正在逐步从传统的云端计算转向边缘计算,而推理算力的加入,为边缘计算提供了更强的数据处理能力和实时决策能力。本文将探讨边缘…

基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面

文章目录 前言🎓一、数据集准备🎓二、模型训练🍀🍀1.初始化🍀🍀2.加载数据集🍀🍀3.划分数据集,并保存到新的文件夹🍀🍀4.可视化数据集&#x1f34…

马斯克万卡集群AI数据中心引发的科技涟漪:智算数据中心挑战与机遇的全景洞察

一、AI 爆发重塑数据中心格局 随着AI 技术的迅猛发展,尤其是大模型的崛起,其对数据中心产生了极为深远的影响。大模型以其数以亿计甚至更多的参数和对海量数据的处理需求,成为了 AI 发展的核心驱动力之一,同时也为数据中心带来了…

移远通信亮相骁龙AI PC生态科技日,以领先的5G及Wi-Fi产品革新PC用户体验

PC作为人们学习、办公、娱乐的重要工具,已经深度融入我们的工作和生活。随着物联网技术的快速发展,以及人们对PC性能要求的逐步提高,AI PC成为了行业发展的重要趋势。 11月7-8日,骁龙AI PC生态科技日在深圳举办。作为高通骁龙的重…

Unity资源打包Addressable资源保存在项目中

怎么打包先看“Unity资源打包Addressable AA包” 其中遗留一个问题,下载下来的资源被保存在C盘中了,可不可以保存在项目中呢?可以。 新建了一个项目,路径与“Unity资源打包Addressable AA包”都不相同了 1.创建资源缓存路径 在…

postman变量和脚本功能介绍

1、基本概念——global、collection、environment 在postman中,为了更好的管理各类变量、测试环境以及脚本等,创建了一些概念,包括:globals、collection、environment。其实在postman中,最上层还有一个Workspaces的概…

为什么汽车电源正在用 48V 取代 12V

欧姆定律也有利于 48 伏电源 假设您需要为汽车的起动电机供电。可能存在以下静态和动态特征: 电源电压:12V 额定电流:40A 额定功率:480W 标称平均阻抗:0.3Ω 浪涌电流:150A 浪涌功率:1,8…

【webrtc】 RTP 中的 MID(Media Stream Identifier)

RTP 中的 MID(Media Stream Identifier) RID及其与MID的区别 cname与mid的对比【webrtc】CNAME 是rtprtcp中的Canonical Name(规范化名称) 同样都是RTP头部扩展: 基于mediasoup的最新的代码,学习,发现mid在创建RtpSendStream时是必须传递的参数: 例如 D:\XTRANS\soup\…

酷炫的鼠标移入效果(附源码!!)

预览效果 源码(htmljs部分) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

PHP和Python脚本的性能监测方案

目录 1. 说明 2. PHP脚本性能监测方案 2.1 安装xdebug 2.2 配置xdebug.ini 2.3 命令行与VS Code中使用 - 命令行 - VS Code 2.4 QCacheGrind 浏览 3. Python脚本性能监测方案 3.1 命令行 4. 工具 5.参考 1. 说明 获取我们的脚本程序运行时的指标&#xff0c;对分析…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

hive中windows子句的使用

概述 1&#xff0c;windows子句是对窗口的结果做更细粒度的划分 2、windows子句中有两种方式 rows &#xff1a;按照相邻的几行进行开窗 range&#xff1a;按照某个值的范围进行开窗 使用方式 (rows | range) between (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING…

GPT4的下一代Orion已经降速了?

嘿&#xff0c;大家好&#xff0c;我是小索奇&#xff01;说起AI&#xff0c;相信不少人都和我一样&#xff0c;总感觉这玩意儿发展得就像装了火箭&#xff0c;快得让人眼花缭乱。咱们从GPT-3到GPT-4&#xff0c;一路哇哦着过来&#xff0c;天天惊叹它越来越聪明&#xff0c;越…

【LinuxC编程】06 - 守护进程,线程

进程组和会话 概念和特性 进程组&#xff0c;也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念&#xff0c;是为了简化对多个进程的管…

探索 Python 图像处理的瑞士军刀:Pillow 库

文章目录 探索 Python 图像处理的瑞士军刀&#xff1a;Pillow 库第一部分&#xff1a;背景介绍第二部分&#xff1a;Pillow库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;简单的库函数使用方法第五部分&#xff1a;结合场景使用库第…

【数据结构 | C++】字符串关键字的散列映射

字符串关键字的散列映射 给定一系列由大写英文字母组成的字符串关键字和素数P&#xff0c;用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数&#xff0c;每个字符占5位&#xff1b;再用除留余数法将整数映射到长度为P的散列表中。 例如将字符串AZDEG插入长…