扫码加入

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

MCSDK5.4.8 电机库双电阻采样适配指南:从三电阻到两电阻的修改实操

6小时前
182
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

ST MCSDK5.4.8 电机库默认支持单电阻和三电阻电流采样,而双电阻采样因成本低、结构简洁,在工业电机控制中应用广泛。本文基于 ST 官方 LAT1334 应用笔记,以 STM32G43RBT6 为例,详解如何通过修改电机库文件,实现双电阻采样功能,核心涉及工程配置、函数重定义、占空比限制三大关键步骤,适用于 MCSDK5.4.8 及相近版本。

1. 双电阻采样核心机理

双电阻采样与三电阻采样遵循相同的电流重构逻辑,核心依据基尔霍夫电流定律(Ia+Ib+Ic=0),仅需采集两相电流(通常为 Ia、Ib),即可推算出第三相电流(Ic=-Ia-Ib),具体差异如下:
  • 三电阻采样:需根据电机扇区切换采样的两相(AB/AC/BC),配置灵活但硬件成本高;
  • 双电阻采样:固定采集 Ia、Ib 两相电流,直接用于 FOC 运算,硬件简化但需限制最大占空比,避免采样失效。

2. 完整操作步骤

2.1 生成三电阻采样工程(基础配置)

首先通过 MCSDK Workbench 生成三电阻采样工程,后续在此基础上修改为双电阻采样:
  1. 打开 MCSDK Workbench,创建新工程,选择目标芯片(如 STM32G43RBT6);
  2. 电流采样配置(Power Stage - Current Sensing):
    • 采样拓扑:选择 “Three Shunt Resistors”(后续通过软件修改为双电阻);
    • 配置参数:设置分流电阻值(如 0.33Ω)、放大倍数(如 1.53)、最大可测电流等;
  3. 采样信号配置(Control Stage - Analog Input and Protection):
    • 分配采样通道:Phase U 对应 ADC1_IN1(A0),Phase V 对应 ADC1_IN6(C0),Phase W 暂不配置;
    • 采样时间:设置为 7.5 ADCclk,确保采样精度;
  4. 生成工程,确认工程中包含三电阻采样核心文件r3_2_g4xx_pwm_curr_fdbk.c(路径:MCLib/G4xx/Src)。

2.2 文件拷贝与重命名(避免破坏原库)

MCSDK 电机库函数默认带__weak属性,支持用户重定义,无需修改原文件,步骤如下:
  1. 找到工程中的r3_2_g4xx_pwm_curr_fdbk.c文件,复制一份并重命名为r2_2_g4xx_pwm_curr_fdbk.c
  2. 将新文件放回原目录(MCLib/G4xx/Src),后续所有修改均在新文件中进行,保留原文件备份。

2.3 精简静态电流读取函数

双电阻采样仅需用到 PhaseAOffset 和 PhaseBOffset,无需检测 PhaseCOffset,精简步骤如下:
  1. 打开r2_2_g4xx_pwm_curr_fdbk.c,删除除 “文件包含” 和R3_2_GetPhaseCurrents函数外的所有内容;
  2. 保留#include "r3_2_g4xx_pwm_curr_fdbk.h"等必要头文件,确保编译无依赖错误;
  3. 静态电流读取函数R3_2_CurrentReadingPolarization可沿用原逻辑(不修改),仅忽略 PhaseCOffset 的使用即可。

2.4 重定义电流读取函数(核心修改)

重点修改R3_2_GetPhaseCurrents函数,屏蔽三电阻的扇区判断逻辑,直接读取双电阻电流并重构第三相,步骤如下:
  1. 删除函数的__weak属性(确保重定义生效),添加 CCMRAM 属性(可选,优化执行速度);
  2. 屏蔽扇区相关判断:删除原代码中根据Sector选择 ADC 采样通道的逻辑(三电阻采样需按扇区切换,双电阻固定采样 U、V 相);
  3. 计算 Ia、Ib 电流:通过 ADC 采样值与偏移量差值得到,添加饱和限制避免溢出;
  4. 重构 Ic 电流:根据基尔霍夫定律Ic = -Ia - Ib,补充第三相电流计算;
  5. 核心代码示例:
#if defined (CCMRAM) 
#if defined (__ICCARM__) 
#pragma location = ".ccmram" 
#elif defined (__CC_ARM) || defined(__GNUC__) 
__attribute__( ( section ( ".ccmram" ) ) ) 
#endif 
#endif 

void R3_2_GetPhaseCurrents( PWMC_Handle_t * pHdl, ab_t * Iab ) 
{
    PWMC_R3_2_Handle_t * pHandle = ( PWMC_R3_2_Handle_t * )pHdl;
    TIM_TypeDef * TIMx = pHandle->pParams_str->TIMx;
    uint32_t ADCDataReg1;
    int32_t Aux;
    uint32_t ADCDataReg2;

    // 屏蔽三电阻的扇区判断逻辑,直接读取U、V相ADC通道
    ADCDataReg1 = *pHandle->pParams_str->ADCDataReg1[0];  // 固定读取U相通道
    ADCDataReg2 = *pHandle->pParams_str->ADCDataReg2[0];  // 固定读取V相通道

    /* 禁用ADC触发源,避免扇区切换干扰 */
    LL_TIM_SetTriggerOutput(TIMx, LL_TIM_TRGO_RESET);

    /* 计算Ia电流:偏移量 - ADC采样值,添加饱和限制 */
    Aux = ( int32_t )( pHandle->PhaseAOffset ) - ( int32_t )( ADCDataReg1 );
    Iab->a = (Aux < -INT16_MAX) ? -INT16_MAX : (Aux > INT16_MAX) ? INT16_MAX : (int16_t)Aux;

    /* 计算Ib电流:同上 */
    Aux = ( int32_t )( pHandle->PhaseBOffset ) - ( int32_t )( ADCDataReg2 );
    Iab->b = (Aux < -INT16_MAX) ? -INT16_MAX : (Aux > INT16_MAX) ? INT16_MAX : (int16_t)Aux;

    /* 重构Ic电流,遵循基尔霍夫定律 */
    pHandle->_Super.Ia = Iab->a;
    pHandle->_Super.Ib = Iab->b;
    pHandle->_Super.Ic = -Iab->a - Iab->b;
}

2.5 限制最大占空比(避免采样失效)

双电阻采样无法像三电阻那样灵活选择采样点,若占空比过大会导致 ADC 采样被振铃、死区等干扰,需通过软件限制最大调制比:
  1. 占空比限制原理:有效采样需满足 t_duty > max(tr, tn) + Dtt_duty > ts + tc + ts(tr = 振铃时间,tn = 干扰时间,Dt = 死区时间,ts = 采样时间,tc = 转换时间);
  2. 修改参数文件:打开parameters_conversion.h(路径:MC_SDK_5.4.8/Middlewares/ST/MotorControl/templates);
  3. 调整最大调制比:例如计算后最大调制比为 95%,则修改MAX_MODULE参数:
    #define MAX_MODULE 31128  // 32767×95% ≈ 31128
    
  4. 同步更新 MMITABLE 数组(按 95% 比例调整各元素值,确保 FOC 运算不超限)。

3. 关键注意事项

  1. 函数属性:必须删除R3_2_GetPhaseCurrents__weak属性,否则原库函数会覆盖重定义函数;
  2. 通道固定:双电阻采样固定采集 U、V 相(Ia、Ib),工程配置时需确保 ADC 通道与硬件采样电阻对应;
  3. 占空比计算:需根据实际硬件参数(PWM 频率、死区时间、ADC 采样时间)推导最大占空比,避免盲目设置;
  4. 兼容性:修改后的文件仅适用于双电阻采样,若需切换回三电阻,需重新启用原r3_2_g4xx_pwm_curr_fdbk.c文件。
MCSDK5.4.8 电机库适配双电阻采样的核心是 “函数重定义 + 占空比限制”:通过拷贝并重命名三电阻采样文件,屏蔽扇区判断逻辑,直接读取固定两相电流并重构第三相,同时限制最大调制比避免采样失效。整个过程无需修改原库文件,兼容性强,可快速移植到 STM32G4、STM32F4 等系列芯片的电机控制项目中。

相关推荐