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.

[参考译文] TMS320F28379D:了解一些快速电流环路参数

Guru**** 2539500 points
Other Parts Discussed in Thread: TMDXIDDK379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1113081/tms320f28379d-understanding-some-fast-current-loop-parameters

器件型号:TMS320F28379D
主题中讨论的其他器件:TMDXIDDK379D

大家好、我有几个关于快速电流环路库参数的问题。 我已经为 自己的硬件和电机定制了 tmdxiddk379d 示例解决方案代码。 我遇到了一个问题、在我发出3600 RPM 速度命令时、我只能将电机速度提高到3100 RPM。 电机额定转速为3600 RPM。 在3100 RPM 时、即使在轻负载水平下、也有接近额定值的大相电流。 我怀疑这是反电动势问题、在这些高速下、相电压不再能够克服 PMSM 产生的反电动势、从而阻止电机以更快的速度运行。 我对几个快速电流环路参数有一些问题、希望这些参数能帮助我解决这个问题。

1) 1)首先、在 fcl_f2837x_tmdxiddk_settings.h 文件中定义电机参数的位置、控制算法假定磁通的单位是多少? 我已粘贴在 TEKNIC_2310PLN04K 的#define 电机参数代码下方。  

//
// Define the electrical motor parameters (Teknic Servomotor)
//
#elif(USER_MOTOR == TEKNIC_2310PLN04K)
#define RS          0.381334811         // Stator resistance (ohm)
#define RR          NULL                // Rotor resistance (ohm)
#define LS          0.000169791776      // Stator inductance (H)
#define LR          NULL                // Rotor inductance (H)
#define LM          NULL                // Magnetizing inductance (H)
#define FLUX        0.0398557819        // BEMF constant (V/Hz)
#define POLES       8                   // Number of poles
#define ENC_SLOTS   1000                // Numer of slots in the encoder

#define M_ID_START  0.2                 // alignment reference d-axis current
#define M_IQ_LI5    0.10                // reference q-axis current for level5
#define M_IQ_LN5    0.10                // ref q-axis current for no level5

V LINE 到中性点 pk、V LINE 到中性点 rms、V LINE 到线路 rms、V LINE 到线路 pk 等中的值吗? 如果我发现这个装置有误、它会影响我在更高速度下的性能。 我将该值插入主脚本中的 FCL_params.BemfK 值、如下面的代码所示。 我的磁通当前已设置为0.5178 V 线至中性峰/ Hz。

2)我的第二个问题与 maxModIndex 的计算有关。 从下面的 initFCLVars()函数中,我的 maxModIndex 值为0.879。 这是根据使用单采样模式的60kHz 开关频率和1.00 (us)的默认 FCL_COMPUTATION_TIME 计算得出的。 由于调制指数直接影响逆变器输出相电压、因此电机生成的较大反电动势在较高速度时也会出现这种情况。 在我看来、maxModIndex 应该尽可能接近1、但这样做的唯一方法是进一步缩短 FCL 计算时间、使其尽可能接近零、这显然无法达到零。  

//Function that initializes the variables for Fast current Loop library
void initFCLVars()
{

#if(SAMPLING_METHOD == SINGLE_SAMPLING)
    maxModIndex = (TPWM_CARRIER - (2 * FCL_COMPUTATION_TIME)) / TPWM_CARRIER;
    FCL_params.carrierMid = maxModIndex * INV_PWM_HALF_TBPRD * 0x10000L;
#elif(SAMPLING_METHOD == DOUBLE_SAMPLING)
    maxModIndex = (TPWM_CARRIER - (4 * FCL_COMPUTATION_TIME)) / TPWM_CARRIER;
    FCL_params.carrierMid = INV_PWM_HALF_TBPRD * 0x10000L;
#endif
    FCL_params.adcScale   = ADC_PU_PPB_SCALE_FACTOR * LEM_TO_SHUNT;
    FCL_params.sdfmScale  = SD_PU_SCALE_FACTOR * SDFM_TO_SHUNT;
    FCL_params.cmidsqrt3   = FCL_params.carrierMid * sqrtf(3.0f);

    FCL_params.tSamp = (1.0F / SAMPLING_FREQ);
    FCL_params.Rd    = RS;
    FCL_params.Rq    = RS;
    FCL_params.Ld    = LS;
    FCL_params.Lq    = LS;
    FCL_params.BemfK = FLUX; // 0.8 default
    FCL_params.Ibase = BASE_SHUNT_CURRENT; // LEM sensing is scaled to match
                                           // with shunt sensing
    FCL_params.Wbase = 2.0 * PI * BASE_FREQ;
    FCL_params.wccD  = CUR_LOOP_BANDWIDTH;
    FCL_params.wccQ  = CUR_LOOP_BANDWIDTH;

    return;
}

那么、有几个有关这方面的问题。

定义调制指数的范围是多少? 它是否从0变为1?

该方程式来自何处计算 maxModIndex? 我想详细了解这一点。

我能否覆盖方程式并指定我自己的 maxModIndex (例如、将其设置为1)? 如果我这么做、会发生什么情况?

最后、carrierMid 的价值是什么?它有什么作用? 我的值计算为~2400万。

如果有任何帮助或指导 TI 进一步阅读有关此内容的资源、我们将不胜感激。 此外、我刚刚注意到3100 RPM 是我全速(3600 RPM)的~86%、并且鉴于我的 maxModIndex 是0.88、那么调制指数似乎是限制我速度的因素?

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

    所有单元如头文件中参数的注释所示。 对于  Rs、Ls 和磁通、该值是线对中性的、 对于磁通、该值也是峰值。

    2.调制指数介于0.0和1.0之间,但最大调制指数取决于 器件上的 FCL 执行时间和 PWM 频率。 最大值等于(PWM 周期- FCL 执行 时间)/ PWM 周期。 详细说明可在相关应用中找到 、如下所示。

    使用快速电流环路对 PMSM 进行快速响应控制

    在 PMSM 上使用快速电流环路、基于 EtherCAT 的互联伺服驱动器

    [~ userid="520172" URL"/support/microrims/C2000-microset-group/C2000/f/C2000-microriers-forum/1113081/tms320f28379d-Understanding - some -fast-curry-loop-parameters"]最后、carrierMid 的值是什么、它做什么? 我的值计算为~2400万。[/报价]

    您无需更改公式、只需将 PWM_FREQUENCY 设置为所需的值即可。 该变量基于用于计算 PWM 输出 CMPA 值的 PWM 周期。

    问题2的答案。 如果可能、您可以尝试增加直流总线电压。

    或者、您可以尝试更改以下代码中的系数"0.5"和"0.8"、但必须保持 sqrt (a^2 + b^2)< 1.0

    pi_id.Umax = 0.5 * maxModIndex;        // a=0.5
    pi_id.Umin =-0.5 * maxModIndex;

    pi_iq.Umax = 0.8 * maxModIndex;       // b=0.8
    pi_iq.umin =-0.8 * maxModIndex;

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

    谢谢、这很有帮助。 一些后续问题:

    1)从上面的代码片段中、最大 mod 索引为 (PWM 周期- 2 * FCL 执行 时间)/ PWM 周期、而您共享的公式在 FCL 执行时间之前没有2个乘法器。 这2个来源是什么? 我觉得您共享的公式是正确的、因为每个 PWM 周期计算一次占空比、这会将最大 MOD 指数设置为~0.94。

    2) 2)此外、我是否应该根据 fclLatencyinMicrosec 值将我自己的 FCL_COMPUTATION_TIME 值放入到公式中? 我的当前为1.36us、但我想我可以稍微缩短 ADC 采样窗口、使其进一步降低。

    谢谢、我之前已经将 b 值从0.8更改为1.0、这似乎有助于解决这个问题。

    我刚刚从 这个线程中注意到 bemfk 值在.u.u 中、而在上面、我将 V 线插入中性 pk 值。 我将尝试将 bemfk 值增大到接近1、看看这是否也有助于我的问题。

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

    这取决于 PWM 计时器计数模式。 向上向下计数模式应使用示例项目中所示公式中的"2"。

    2.是的。

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

    谢谢、这有助于澄清一些参数的使用。