This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2800137:将弱磁控制添加到 controlSUITE 中的硬件电机 Ctrl+PFC 套件 v2.1\HVACI 有传感器驱动器

Guru**** 2763595 points

Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1609894/tms320f2800137-adding-field-weakening-control-to-the-hw-motor-ctrl-pfc-kit-v2-1-hvaci-sensored-driver-in-controlsuite

器件型号: TMS320F2800137
Thread 中讨论的其他器件: controlSUITE

我将在 controlSUITE 中使用 HW 电机 Ctrl+PFC 套件 v2.1\HVPM_Sensored 驱动器用于我的电机控制应用。 由于标准 controlSUITE 代码不包含弱磁控制 (FWC)、因此我根据 TI 的通用电机控制 (UMC) 代码修改了 FWC 算法、并将其集成到 HVPM_Sensored 算法的控制环路中。 我希望确保我的实施方法与 TI 的架构兼容、感谢您对此进行的评估和反馈。


控制算法及其执行序列(在\HVPM_Sensored 中):
1. RC_MACRO (RC1)
2. rg_macro(rg1)
3. CLARKE_MACRO (clarke1)
4. PARK_MACRO (park1)
5. pi_macro (pi_spd)
6. FIELD_WEAKING ()      ←My Custom Implementation
7. pi_macro (pi_iq)
8. pi_macro (pi_id)
9. iPark_macro(ipark1)
10. QEP_MACRO (1、qep1)
11. SPEED_FR_MACRO (speed1)
12. svgendq_macro(svgen1)
13. PWM_MACRO (1、2、3、pwm1)

我添加了 FWC 算法

//==========================================================================
//           field_weaking ():
//==========================================================================

hvpm_isRef_A = hvpm_pi_spd.out;//来自速度控制器的总电流基准

if (hvpm_lsw == 2)//仅在闭环模式下运行

  //--------------------------------------------------------------------------------
  //步骤 1:电压幅度测量
  //--------------------------------------------------------------------------------
  //计算定子电压:Vs = sqrt (Vd^2 + Vq^2)
  _iq Vd_sq =_iqmpy (hvpm_pi_id.out、hvpm_pi_id.out);
  _iq Vq_sq =_iqmpy (hvpm_pi_iq.out、hvpm_pi_iq.out);
  hvpm_vs_V =_iqsqrt (vd_sq + Vq_sq);
   
  //基准电压(直流母线的 98%)
  hvpm_VsRef_pu =_IQ (0.98 * USER_M1_MAX_VS_MAG_PU);// USER_M1_MAX_VS_MAG_PU =      (0.66f)
   
  //--------------------------------------------------------------------------------
  //步骤 2:FWC 算法 — 角度计算
  //--------------------------------------------------------------------------------
  //根据用户标志启用/禁用 FWC
  IF (hvpm_flagEnableFWC)  
    HVPM_FWC_ENABLE (hvpm_fwcHandle);
  暴露  
  {
    HVPM_FWC_DISABLE (hvpm_fwcHandle);
    HVPM_FWC_resetUi (hvpm_fwcHandle);
  }
   
  //根据电压误差计算电流角度
  //输入:限制 (Ref) 和实际 (FBK)
  //输出:内部角度已更新
  HVPM_FWC_computeCurrentAngle (hvpm_fwcHandle、hvpm_vs_vs_v、hvpm_VsRef_pu);
   
  //--------------------------------------------------------------------------------
  //步骤 3:当前分布
  //--------------------------------------------------------------------------------
  // A) 获取当前角度
  hvpm_angleCurrent_rad = HVPM_FWC_getCurrentAngle_rad (hvpm_fwcHandle);
   
  // B) 计算相量分量 (cos/Sin)
  hvpm_fwc Phasor_Cos =_iqcos (hvpm_angleCurrent_rad);
  hvpm_fwc Phasor_Sin =_iqsin (hvpm_angleCurrent_rad);
   
  // C) 分配当前引用
  // Id REF:总电流* cos(角度)
  hvpm_pi_id.Ref =_IQmpy (hvpm_isRef_A、hvpm_fwc Phasor_Cos);
   
  // IQ REF:总电流* Sin (Angle)
  hvpm_pi_iq.Ref =_iqmpy (hvpm_isRef_A、hvpm_fwc Phasor_Sin);
}
暴露

  //外部闭环 — 重置 FWC
  HVPM_FWC_resetUi (hvpm_fwcHandle);
   
  //在其他块中处理的 ID/IQ 参考管理
}
//==========================================================================
// FWC 块结束



通用电机控制 (UMC) FWC 算法:

如果定义 (MOTOR1_FWC)
else if(obj->counterSpeed ==1)

MATH_Vec2 fwcPhasor;

//获取当前角度
obj->angleCurrent_rad = obj->angleFWC_rad;

fwcPhasor.value[0]=__cos (obj->angleCurrent_rad);
fwcPhasor.value[1]=__sin (obj->angleCurrent_rad);

if (obj->flagEnableFWC == true)

obj->idq_out_A.value[0]= obj->IsRef_A * fwcPhasor.value[0];
}

obj->idq_out_A.value[1]= obj->IsRef_A * fwcPhasor.value[1];
}
else if(obj->counterSpeed ==2)

//
//计算输出和基准矢量电压
obj->vs_v =
__sqrt ((obj->Vdq_out_V.value[0]* obj->Vdq_out_V.value[0])+
(obj->Vdq_out_V.value[1]* obj->Vdq_out_V.value[1]);

obj->VsRef_V = obj->VsRef_pu * obj->adcData.VdcBus_V;

}
else if(obj->counterSpeed == 3)// FWC

if (obj->flagEnableFWC == true)

float32_t angleFWC;

pi_run (obj->piHandle_fwc、
obj->VsRef_v, obj->vs_V,(float32_t*)&angleFWC);
obj->angleFWC_rad = MATH_PI_OVER_Two - angleFWC;
}
暴露

pi_setUi (obj->piHandle_fwc、0.0f);
obj->angleFWC_rad = MATH_PI_OVER_TUNE;
}
}

我的问题和顾虑:

1) UMC 使用状态机 (counterSpeed​​=1/2/3)-我正在单个块内按顺序执行所有三个步骤、因为 HVPM_Sensored 没有相同的状态结构。 这是否会导致问题?
2)  电压源差异:
UMC 使用:Vdq_out_V.value[0]和 Vdq_out_V.value[1]
我使用:hvpm_pi_id.out 和 hvpm_pi_iq.out(PI 控制器输出)来获得 Vd 和 Vq
这是正确的等效项吗?

3)  控制回路中的放置:

在 pi_macro (pi_spd) 和 pi_macro (pi_iq/id) 之间插入 FWC 位置是否正确?
电压反馈源:我正在使用 hvpm_pi_id.out 和 hvpm_pi_iq.out(PI 控制器输出)计算这是否正确?

 

4)  电流角度分布逻辑:

数学方法 (Id = IsRef×cos、Iq = IsRef×Sin) 是否正确?
这是否可以在调整 d-q 分布时适当地保持恒定的电流幅度?

 

5)  代码逻辑错误:

我的实施中是否存在任何明显的错误或逻辑错误?
有任何改进或优化建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    提醒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yilmaz,不幸的是,我们将无法提供您的代码的审查。