基于 MCSDK5.4.8 电机库修改两电阻采样方法

1. 前言

在当前使用的电机电阻采样方式中分为单电阻,双电阻,三电阻三种方式,其中在 ST MCSDK5.4 库中支持了两种采样方式,单电阻和三电阻,在市面还存在另外一种采样方式,即双电阻采样,本文讨论的是如何修改现有驱动库支持该种采样方式。

2. 电流双电阻采样机理

图1. 双电阻采样结构
图1. 双电阻采样结构

实际使用过程中双电阻采样同三电阻采样有相同的机制,即在 shunt 电阻上进行电流采集,并且根据基尔霍夫定理 Ia+Ib+Ic=0,采集两相电流即可以重构出第三路电流;三电阻电流采集会根据扇区不同分别转换电流采样的两个相线(AB,AC,BC 三种情况);而双电阻采样一般直接对 Ia,Ib 进行采样即可,在 FOC 运算中直接使用这两个量。

3. 操作步骤

3.1. 产生工程

使用 MCSDK workbench 产生工程,如何生成工程可以参考马达培训文档,这边不再详细说明,需要使用三电阻采样方式,注意配置的是 U,V 即对应的 Ia,Ib。
图2. MCSDK workbench 电流采样配置界面
图2. MCSDK workbench 电流采样配置界面
图3. MCSDK workbench 采样信号配置界面
图3. MCSDK workbench 采样信号配置界面

3.2. 文件拷贝

以 STM32G43RBT6 配置为例,生成工程中电流采样使用的是 r3_2_g4xx_pwm_curr_fdbk.c文件, 找到这个文件复制一份,重新命名为 r2_2_g4xx_pwm_curr_fdbk.c,我们会在这个文件中对相关函数进行重新定义。这边有个点要注意,原始的电机库文件函数定义都是__weak 属性,因此在不破坏原始文件的同时,我们可以重新定义我们需要的函数。本案例中我们只需要重新定义两个函数,一个是读取静态电流数值的函数,一个是运行过程中得到三相电流的函数。

__weak void R3_2_CurrentReadingPolarization( PWMC_Handle_t * pHdl )
__weak void R3_2_GetPhaseCurrents( PWMC_Handle_t * pHdl, ab_t * Iab )

图4. 电机库的电流采样文件所在位置
图4. 电机库的电流采样文件所在位置

3.3. 修改读取静态电流函数

因为对于两电阻采样,我们后面只会使用到 PhaseAOffset 和 PhaseBOffset 这两个值,可以将 R3_2_CurrentReadingPolarization 这个函数改为只检测这两个数据,这边也可以不进行修改,第三个 PhaseCOffset 不使用即可,这个函数我们沿用原来的。在打开的r2_2_g4xx_pwm_curr_fdbk.c 文件中,除了包含文件以及 R3_2_GetPhaseCurrents 函数外,其他内容都删除掉。
图5. 电流采样文件保留内容
图5. 电流采样文件保留内容

3.4. 修改电流读取函数

修改 R3_2_GetPhaseCurrents 函数中的电流读取与计算的设定,这边我们需要屏蔽之前三电阻方式按照扇区来区分采样以及采样相线的设定,增加如下程序,注意把__weak 属性删除掉。

#if defined (CCMRAM)
#if defined (__ICCARM__)
#pragma location = ".ccmram"
#elif defined (__CC_ARM) || defined(__GNUC__)
__attribute__( ( section ( ".ccmram" ) ) )
#endif
#endif
/**
 * @brief It computes and return latest converted motor phase currents motor
 * @param pHdl: handler of the current instance of the PWM component
 * @retval Ia and Ib current in Curr_Components format
 */ 
void R3_2_GetPhaseCurrents( PWMC_Handle_t * pHdl, ab_t * Iab )
{
	#if defined (__ICCARM__)
	 #pragma cstat_disable = "MISRAC2012-Rule-11.3"
	#endif /* __ICCARM__ */
	 PWMC_R3_2_Handle_t * pHandle = ( PWMC_R3_2_Handle_t * )pHdl; 
	#if defined (__ICCARM__)
	 #pragma cstat_restore = "MISRAC2012-Rule-11.3"
	#endif /* __ICCARM__ */
	 TIM_TypeDef * TIMx = pHandle->pParams_str->TIMx;
	 uint8_t Sector;
	 int32_t Aux;
	 uint32_t ADCDataReg1;
	 uint32_t ADCDataReg2;
	 
	 Sector = ( uint8_t )pHandle->_Super.Sector;
	 ADCDataReg1 = *pHandle->pParams_str->ADCDataReg1[Sector];
	 ADCDataReg2 = *pHandle->pParams_str->ADCDataReg2[Sector];
	 
	 /* disable ADC trigger source */
	 LL_TIM_SetTriggerOutput(TIMx, LL_TIM_TRGO_RESET);
	/* Current on Phase C is not accessible */
	/* Ia = PhaseAOffset - ADC converted value) */
	Aux = ( int32_t )( pHandle->PhaseAOffset ) - ( int32_t )( ADCDataReg1 );
	/* Saturation of Ia */
	if ( Aux < -INT16_MAX )
	{
		Iab->a = -INT16_MAX;
	}
	else if ( Aux > INT16_MAX )
	{
		Iab->a = INT16_MAX;
	}
	else
	{
		Iab->a = ( int16_t )Aux;
	}
	/* Ib = PhaseBOffset - ADC converted value) */
	Aux = ( int32_t )( pHandle->PhaseBOffset ) - ( int32_t )( ADCDataReg2 );
	/* Saturation of Ib */
	if ( Aux < -INT16_MAX )
	{
		Iab->b = -INT16_MAX;
	}
	else if ( Aux > INT16_MAX )
	{
		Iab->b = INT16_MAX;
	}
	else
	{
		Iab->b = ( int16_t )Aux;
	}
	 pHandle->_Super.Ia = Iab->a;
	 pHandle->_Super.Ib = Iab->b;
	 pHandle->_Super.Ic = -Iab->a - Iab->b;
}

3.5. 限制最大占空比

三电阻可以在任意两相采样电阻上选取可以采样的相线以及采样点,配置较灵活,但如果是双电阻,则需要注意我们若不做特别处理,最大占空比不能做到 100%,因此我们可以根据实际电路以及 PWM 频率等综合考虑进去,对最大调制比进行限制。
图6. 电流采样点位置
比如我们使用的 PWM 周期为 t,tr 为振铃波形时间,tn 为相线干扰波形,ts 为 ADC 采样时间,tc 为 ADC 转换时间,Dt 为死区时间,使用一个 ADC 进行双路电流采样,那么可以估算如下,如果按照中心点触发方式,则有效采样的最小占空比为:

𝑡𝑑𝑢𝑡𝑦 > max(𝑡𝑟,𝑡𝑛) + 𝐷𝑡 且 𝑡𝑑𝑢𝑡𝑦 > 𝑡𝑠 + 𝑡𝑐 + 𝑡𝑠

因此计算完成后需要修改 parameters_conversion.h 中的最大调制比,比如计算后我们只能到 95%的调制比,则调整为如下,关于调制比参数设定见 Workbench 的安装目录:

#define START_INDEX 57
#define MAX_MODULE 31128 // root(Vd^2+Vq^2) <= MAX_MODULE = 32767*95%
#define MMITABLE {\
	32613,32310,32016,31872,31589,31314,31046,30784,30529,30404,\
	30158,29919,29684,29456,29343,29122,28906,28695,28488,28285,\
	28186,27990,27798,27610,27425,27245,27155,26980,26808,26639,\
	26473,26392,26230,26072,25917,25764,25614,25540,25394,25250,\
	25109,24970,24901,24766,24633,24501,24372,24245,24182,24058,\
	23936,23816,23697,23580,23522,23408,23295,23184,23075,23021,\
	22913,22808,22703,22600,22499,22449,22349,22251,22154,22059,\
	21964\
}

C:\Program Files (x86)\STMicroelectronics\MC_SDK_5.4.8\Middlewares\ST\MotorControl\templates 中的parameters_conversion.h.ftl 文件,使用记事本打开即可。

4. 后续升级操作

因为两电阻采样方式,在 shunt 电阻上的振铃电流以及考虑到 ADC 采样转换时间问题,相比较三电阻来说最大占空比不能做到 100%,因此需要进行电流重构等算法以便扩大调制比。

文档中所用到的工具及版本

MCSDK:5.4.8


本文档参考ST官方的《【应用笔记】LAT1334+基于MCSDK5.4.8电机库修改两电阻采样方法》文档。
参考下载地址:https://download.csdn.net/download/u014319604/89036764

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:数据降维主成分分析PCA

一、引言 1.数据分析的重要性   在当今的信息爆炸时代&#xff0c;数据已经渗透到各个行业和领域的每一个角落&#xff0c;成为决策制定、科学研究以及业务发展的重要依据。数据分析则是从这些数据中提取有用信息、发现潜在规律的关键手段。通过数据分析&#xff0c;我们能够…

【QGIS基于边界裁剪DEM】

文章目录 1、前言2、操作步骤 1、前言 QGIS内置的栅格裁剪工具&#xff08;如Raster Clipping&#xff09;操作简便&#xff0c;允许用户使用矢量图层作为裁剪掩膜&#xff0c;灵活定义裁剪区域。基于QGIS对相关数据依据边界进行裁剪&#xff0c;可以更好地进行数据可视化展示…

iOS - Runtime - Class-方法缓存(cache_t)

文章目录 iOS - Runtime - Class-方法缓存(cache_t)1. 散列表的存取值 iOS - Runtime - Class-方法缓存(cache_t) Class内部结构中有个方法缓存&#xff08;cache_t&#xff09;&#xff0c;用散列表&#xff08;哈希表&#xff09;来缓存曾经调用过的方法&#xff0c;可以提高…

车载以太网AVB交换机 TSN交换机 时间敏感网络 6端口 百兆 SW100TSN

SW100 TSN时间敏感网络AVB交换机 为6端口百兆车载以太网交换机&#xff0c;其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100/1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现纳米级时间同步&#xff0c;车载以太网多通道交换&#xff0c;Bypass数据采集和监控等功能&…

深度学习中常用计算距离的几种算法对比与python实现

前言 距离度量在许多机器学习算法中扮演着至关重要的角色&#xff0c;无论是监督学习还是无监督学习。选择适当的距离度量可以显著影响模型的性能。 在高维数据集中&#xff0c;欧几里得距离可能会受到所谓的“维度诅咒”的影响&#xff0c;因为随着维度的增加&#xff0c;数…

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)--问题分析

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)–问题分析 在使用alarm函数进行序号处理测试的时候发现如果把输出重定向到文件里面会导致信号的处理出现严重的延迟(ubuntu18) #include <stdio.h> #include <stdlib.h> #include <unist…

API成网络攻击常见载体,如何确保API安全?

根据Imperva发布的《2024年API安全状况报告》&#xff0c;API成为网络攻击者的常见载体&#xff0c;这是因为大部分互联网流量&#xff08;71%&#xff09;都是API调用&#xff0c;API是访问敏感数据的直接途径。根据安全公司Fastly的一项调查显示&#xff0c;95%的企业在过去1…

线性数据结构----(数组,链表,栈,队列,哈希表)

线性数据结构 数组链表栈使用场景 队列应用场景 哈希表特点哈希函数&#xff0c;哈希值&#xff0c;哈希冲突键值对 Entry 开放寻址法和拉链法 参考文档 数组 数组(Array) 是一种很常见的数据结构。由相同类型的元素组成&#xff0c;并且是使用一块连续的内存来存储的。 在数组…

模板方法模式(继承的优雅使用)

目录 前言 UML plantuml 类图 实战代码 AbstractRoutingDataSource DynamicDataSource DynamicDataSourceContextHolder 前言 在设计类时&#xff0c;一般优先考虑使用组合来替代继承&#xff0c;能够让程序更加的灵活&#xff0c;但这并不意味着要完全抛弃掉继承。 …

使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库&#xff0c;它提供了一系列用于处理 URL 的函数和类&#xff0c;包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request&#xff1a;它是最基本的HTTP请求模块&#xff0c;可以用来模拟发送请求。只…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

面试题-Elasticsearch集群架构和调优手段(超全面)

对于Elasticsearch&#xff08;ES&#xff09;&#xff0c;我了解并有经验。在我之前的公司&#xff0c;我们有一个相对大型的ES集群&#xff0c;以下是该集群的架构和一些调优手段的概述&#xff1a; 1. 集群架构 集群规模&#xff1a;我们的ES集群由15个节点组成&#xff0c…

论文篇05-论文范文-论数据访问层设计技术及其应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题:论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分…

MySQL之MVCC如何实现可重复读和提交读

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;Github传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有…

质量研发模型---V模型

质量研发模型&#xff08;V模型&#xff09; V模型强调软件开发的协作和速度&#xff0c;将软件实现和验证有机结合起来&#xff0c;在保证较高的软件质量情况下缩短开发周期。 通过对该模型的水平和垂直的关联和比较分析&#xff0c;理解软件开发和测试的关系&#xff0c;该模…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容&#xff0c;人们在智能手机上将其视为视觉叠加。 然而&#xff0c;WebAR 可在手机的普通网络浏览器上运行&#xff0c;无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

AI大模型学习:引领智能时代的新篇章

AI大模型学习 随着人工智能技术的不断发展&#xff0c;大模型学习已经成为当前人工智能领域的热门话题。这项技术正在改变着我们对AI的认识和应用&#xff0c;同时也为未来的智能时代开启了新的篇章。 ### 什么是AI大模型学习&#xff1f; AI大模型学习指的是利用大规模数据…

可视化图表:柱状图,最直观的比较数据的方式。

可视化图表是一种将数据通过图形化的方式展示出来的工具&#xff0c;它可以帮助我们更直观地理解数据的分布、趋势和关系。其中&#xff0c;柱状图是最常见和常用的一种图表类型&#xff0c;它通过长方形的柱子来表示数据的大小。本文将介绍柱状图的定义和作用、数学原理、样式…

fl studio21.2中文版下载及使用基础教学

FL Studio 21.2.2是一款功能强大的音乐制作软件&#xff0c;也被广大用户称为“水果编曲”。这款软件支持简体中文和英语&#xff0c;适用于Windows 10/11&#xff08;仅限64位&#xff09;以及MacOS 10.13.6或更高版本的系统。 在FL Studio 21.2.2中&#xff0c;用户可以享受…

软考高级:软件构件与中间件技术概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…