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:从 UMC 移植到 HVPM(硬件电机 Ctrl+PFC 套件 v2.1\HVPM_sensored):PI 控制器缩放和调优差异

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1610899/tms320f2800137-porting-from-umc-to-hvpm-hw-motor-ctrl-pfc-kit-v2-1-hvpm_sensored-pi-controller-scaling-and-tuning-differences

器件型号: TMS320F2800137

您好、

在使用相同的电机和逆变器硬件的情况下、我们在硬件电机 Ctrl+PFC 套件 v2.0\HVPM_Sensored 项目中实现了通用电机控制 (UMC) 框架中的 PI 控制器。

尽管使用相同的 PI 架构和增益值、但与 UMC 相比、HVPM 中的电机响应明显更慢。 此外、在从高速转换到低速期间、电机首先减慢到零(或接近零)、然后再次加速至目标速度、不会平稳稳定。

属于 UMC 的 PI 控制器计算函数的相关部分:

 float32_t LS_d_H = objUser->MOTOR_LS_d_H;
  float32_t LS_q_H = objUser->motor_LS_q_H;

  float32_t Rs_Ohm = objUser->MOTOR_obj; Rs_Ohm
  float32_t RdoverLd_rps = Rs_Ohm / LS_d_H;
  float32_t RqoverLq_rps = Rs_Ohm / LS_q_H;

  float32_t BWC_rps = objUser->BWC_rps;
  float32_t currentCtrlPeriod_sec =
        (float32_t) objUser->numCtrlTicksPerCurrentTick /
        objUser->ctrll Freq_Hz;

  float32_t outMax_V = objUser->vd_sf *
      objUser->maxVsMag_V;

  float32_t Kp_Id = LS_d_H * BWC_rps;
  float32_t Ki_Id = 0.25f * RdoverLd_rps * currentCtrlPeriod_sec;

  float32_t Kp_Iq = LS_q_H * BWC_rps;
  float32_t Ki_Iq = 0.25f * RqoverLq_rps * currentCtrlPeriod_sec;

  //设置 ID 控制器
  pi_setGains (obj->pi Handle_Id、Kp_Id、Ki_Id);
  pi_setUi (obj->pi Handle_Id、0.0f);
  pi_setRefValue(obj->pi Handle_Id、0.0f);
  pi_setFbackValue (obj->pi Handle_Id、0.0f);
  pi_setFfwdValue (obj->pi Handle_Id、0.0f);

  pi_setMinMax (obj->pi Handle_Id、-outMax_V、outMax_V);

  //设置 IQ 控制器
  pi_setGains (obj->pi Handle_Iq、Kp_Iq、Ki_Iq);

  pi_setUi (obj->pi Handle_Iq、0.0f);
  pi_setRefValue(obj->pi Handle_Iq、0.0f);
  pi_setFbackValue (obj->pi Handle_Iq、0.0f);
  pi_setFfwdValue (obj->pi Handle_Iq、0.0f);
  pi_setMinMax(obj->pi Handle_Iq、0.0f、0.0f);

  //设置速度控制器
  if (objUser->obj.hp_kgm2 Kctrl_Wb_<= 0.01f)
  {
    float32_t KP_spd1 = 2.5f * objUser->maxCurrent_A / objUser->max Frequency_Hz;
    float32_t KI_spd1 = 5.0f * objUser->maxCurrent_A * objUser->ctrlPeriod_sec;

    pi_setGains (obj->piHandle_spd、kp_spd1、ki_spd1);
  }
  暴露
  {
    float32_t speedCtrlPeriod_sec =
      (float32_t) objUser->numCtrlTicksPerSpeedTick /
      objUser->ctrll Freq_Hz;

    float32_t BWdelta = objUser->BWdelta;

    float32_t Kctrl_Wb_ p_kgm2 = objUser->objp_kgm2; Kctrl_Wb_

    float32_t KP_SPD = BWC_rps/(Kctrl_Wb_* bWdelta p_kgm2);
    float32_t KI_SPD = BWC_rps * speedCtrlPeriod_sec /(BWdelta * BWdelta);

    pi_setGains (obj->piHandle_spd、KP_spd、KI_spd);
  }
  pi_setUi (obj->piHandle_spd、0.0f);
  pi_setRefValue (obj->piHandle_spd、0.0f);
  pi_setFbackValue (obj->piHandle_spd、0.0f);
  pi_setFfwdValue (obj->piHandle_spd、0.0f);

  pi_setMinMax (obj->piHandle_spd、
         -objUser->maxCurrent_A、
         objUser->maxCurrent_A);
/******************************************************************************************************** /

下面、在左侧、您可以​​从 UMC 调试屏幕中看到 Controller 值、右侧是我如何将这些值传输​​到 HVPM 的屏幕截图。 是否​​正确添加了控制器的最大值和最小值? 我将最大值和最小值​​分为 FULL_SCALE_CURRENT 和 FULL_SCALE_VOLTAGE 值、将​​其转换为 PU 格式、并在 IQMath 中使用。 这是正确的吗?

image.png

 

我的问题是:

为什么 UMC 和 HVPM 之间的相同 PI 逻辑和增益会导致 HVPM 中的动态变化变慢?

UMC 中存在 TRAJ 算法是否会影响这种差异?

HVPM 是否在速度或电流环路中包含可能影响瞬态响应的额外滤波、升压或限制器?

UMC 和 HVPM 的电流和速度环路执行速率或采样因素是否需要重新计算 PI 增益?

我们的目标是在使用相同电机和逆变器时实现与 UMC 中观察到的相似的 HVPM 动态行为。

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

    您好 Yılmaz、

    如此之多的事情可以很容易地使相同的 PI 增益在 UMC(基于浮点数据和 SI 单位)和 HVPM 示例(定点,标幺值和限制符)之间的行为有很大不同。 我不希望在这里获得相同的性能。

    此致、

    Masoud