STM32 电机教程 20 - 基于ST MC Workbench 无感FOC

本文详细介绍如何使用ST电机库实现无感磁场定向控制(FOC)算法,针对2836无刷电机,通过NUCLEO-F103RB和X-NUCLEO-IHM07M13SH开发板进行配置和调试,提供了详细的步骤和参数调整技巧。

原文:https://blog.youkuaiyun.com/zhanglifu3601881/article/details/92810517?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

 

前言

      磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示:

第19讲成功实现了基于NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH及MotorControl Workbench的单电阻FOC算法实现,本节就给大家介绍使用ST 电机库实现无感FOC算法让电机运转起来。本节工程代码直接在19讲基础上进行修改即可。

本节所用电机为2836无刷电机,电机有两组线(hall传感器线和电机三相线),工作电压24V,最大转速12000rpm:

示例详解

本节用到ST官方推出的NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH 开发板。

 

    1. 准备操作

按下图接好跳线端子(单电阻接线方式):

本节的MotorControl Workbench工程直接用第19讲的即可,直接复制上一讲生生成工程文件及代码工程文件,改名为Motor20:

在配置工程之前,先用Motor Profiler 5.3.3工具测量一下电机相关参数,具体操作可看《STM32 电机教程 1 - 用ST Motor Profiler 测量电机参数》一节,测得结果如下:

打开工程文件,按下图完成配置:

 

速度传感及位置传感选择Sensor-less(observer+pll 或 observer+cordic ):

按上述配置好后,这个时候在Firmware Drive Mangagement 下会多一个Start -up parameters 选项,选择该选项:

有了前面17-19节的基础,上面的一些启动参数保持默认基本都可以了,当然如有特殊需求可自行更改对应的参数,比如想要启动再快一点,可以适当减小相应的延时,如果想让电机启动后初始速度大一点则可以修改目标速度考虑到无感算法在低速时表达不是佳,建议启动时相应的速度尽量大些,可以增加无感起动的成功率,如下图是本例所使用的配置参数:

基础模式:

高级自定义模式:

需要注意的是第19讲是采用的单电阻方案,所涉及的一些硬件配置如下(三电阻方案有兴趣的同学可以自行去完成相关实验):

 

确认之后工程会有如下提示信息:

 

进到MCU模拟通道设置窗口看一下,确定配置正确(如下图)即可!

到这里就可以成生程代码了:

 

进入MDK-ARM目录,打开keil 工程:直接编译工程,编译成功后下载代码到开发板,记得勾选下载选项中的复位和运行选项:

程序下载完成后,用MotorControl Workbench工具调节试,操作如下,。

可以看到无感模式下,速度抖动有所增加:

 

OK,本期实验完成!本节内容到此结束,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

文中源码及资料下载,关注十三公众号:

在公众号里给十三发送 “下载|STM32 电机教程 20” :

### LKS32MC071CBT8 技术规格概述 LKS32MC071CBT8 是一款基于 ARM Cortex-M0+ 内核的微控制器,专为电机控制和其他嵌入式应用设计。以下是其主要的技术参数和技术特性: #### 微控制器核心 - **处理器架构**: 基于 ARM Cortex-M0+ 的 32 位 RISC 处理器。 - **工作频率**: 支持高达 48 MHz 的主频运行[^4]。 #### 存储资源 - **闪存容量**: 提供最高达 64 KB 的片上 Flash 存储空间用于程序存储。 - **SRAM 容量**: 配备 8 KB 的 SRAM 作为数据缓存区域。 #### 外设支持 - **定时器/计数器**: 包含多个通用定时器以及 PWM 输出单元,适用于复杂的电机驱动场景。 - **ADC 功能**: 内置高精度模数转换器 (ADC),能够实现对模拟信号的有效采样处理。 - **通信接口**: - UART/SPI/I²C 接口支持多种外部设备互联需求。 - 不具备内置 RTC 计时器功能,可通过外接 DS1302 实现时间管理能力[^2]。 #### 开发环境配置建议 对于快速搭建项目框架而言,在创建新工程项目期间可以考虑直接引入 `lks32mc07x_periph_driver\Source` 文件夹内的源码文件来简化初始化流程并充分利用官方库函数完成底层硬件操作封装。 ```c #include "lks32mc07x_gpio.h" #include "lks32mc07x_rcc.h" void GPIO_Init(void){ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA,&GPIO_InitStruct); } ``` 上述代码片段展示了如何通过调用标准外设库中的 API 来设置指定引脚的工作模式为例证说明了利用这些预定义好的工具包能极大地方便开发者进行具体业务逻辑编码前的基础准备工作。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值