首页 > 其他分享 >基于 MCSDK5.4.8 电机库修改两电阻采样方法

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

时间:2024-03-28 09:00:10浏览次数:21  
标签:采样 __ 电阻 Iab pHandle MCSDK5.4 电流

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 进行双路电流采样,那么可以估算如下,如果按照中心点触发方式,则有效采样的最小占空比为:

标签:采样,__,电阻,Iab,pHandle,MCSDK5.4,电流
From: https://blog.csdn.net/u014319604/article/details/137054352

相关文章

  • CAN盒上接120Ω电阻的作用及原理
    提高信号质量:通过在CAN总线两端各加一个120欧姆的终端电阻,可以使总线的两端阻抗与通讯电缆的阻抗相同,这有助于减小信号的失真和抖动,从而保证信号传输的准确性。提高抗干扰能力:120欧姆的终端电阻能够确保高频低能量的信号迅速衰减,减少对原信号的干扰,这对于提高整个系统的抗......
  • pcl采样:随机采样
    pcl随机采样,实际上就是抽稀头文件代码结果......
  • PointNet++论文复现(二)【最远点采样-球查询-采样和分组 代码详解】
    最远点采样-球查询-采样和分组-代码详解专栏持续更新中!关注博主查看后续部分!最远点采样、球查询等位于pointnet2_utils.py定义点云坐标归一化点云坐标归一化是一种预处理步骤,用于将点云数据标准化到一个统一的尺度,通常是在一个特定的范围内,比如[-1,1]或[0,1]。这一......
  • 采样器
    EasyDiffusion包括许多不同的“采样器”,它们创建的图像略有不同。每个采样器都遵循不同的过程将输入转换为最终图像。最好尝试不同的采样器,找到最适合您正在制作的图像的采样器。例如,使用一个采样器时,一张图像可能看起来更好,而使用另一个采样器时,另一张图像可能看起来更好。以......
  • 地形 SplattingMap 采样 HLSL Demo
    地形SplattingMap采样HLSLDemoFetchingsplattingindexTranslateitintoalocalcacheindexSampleallthepbrtexturesfromthecache使用ChatGPT写一个hlsl脚本来实现这三个步骤。这个示例假设已经有了splattingindex纹理和一组PBR(Physically-BasedR......
  • 芒果YOLOv5改进86:上采样Dysample:顶会ICCV2023,轻量级图像增采样器,通过学习采样来学习上
    ......
  • 单片机干货-IIC上拉电阻有什么用?
    简短不看版:1.I2C要加上拉电阻,阻值一般为3-10K(通常选4.7k)2. 不仅要加上拉电阻,并且同时SCL,SDA要配置成开漏输出模式。3.目的一方面是为了防止出现如图所示的短路问题,另外一方面是为了总线仲裁(看谁能往总线写数据)另一方面是因为I2C是一种多主机协议,而SDA只有一根线,因此传......
  • 触摸屏显示器的电容屏与电阻屏特点总结
    企业生产触摸屏显示器的电容屏与电阻屏特点信息收集总结,相比差异如下:一、电容屏主要特点:1、高灵敏度:电容屏的触摸体验通常更好,因为它们不需要施加压力来操作,只需用手指轻轻触摸屏幕即可。2、多点触控能力:电容屏支持同时识别多个触摸点,这使得它们非常适合于需要频繁进行多点操作......
  • AWR1243+DCA1000——原始数据中部分chirp采样数据为0
    问题:mmWaveStudio中设置2发4收,帧周期10ms,帧数200,帧中Chirp数为1,ADC采样数512。发现采集的bin文件大小正确,但是部分chirp采样数据为零!解决:尝试加大帧周期;减少采样点;降低dca1000evm里的网络delay参考:[https://e2echina.ti.com/support/sensors/f/sensors-forum/785057/dca1000evm......
  • 电阻专题
    定义:阻碍电子移动的因素大小。导体对电流的阻碍作用R=X*l/AX:电阻率L:材料长度A:横截面积电阻按照阻值可以分为固定电阻和可变电阻两种固定电阻--线绕电阻:电阻丝缠绕的电阻固定电阻--碳质电阻,几十年前的电阻,目前几乎不使用了,了解即可碳树脂混合物具有导电性,可以是石墨烯。......