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.

[参考译文] TMS320F28062F:更改了 SVM 范围问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/861999/tms320f28062f-changed-svm-range-issue

器件型号:TMS320F28062F
主题中讨论的其他器件:MOTORWARE

大家好、e2e 团队、

在更改 SVM 范围之前、我们有自己的逆变器与之前版本的 Motorware 配合使用。 但是、这个之前的版本似乎与 Lab11a 不能很好地配合使用、这个实验似乎具有这个 SVM 变化的依赖性。 因为当我按照 LAB11的规定从使用 CTRL 模块对象迁移到没有 CTRL 对象结构时、我的电机开始以错误的方式旋转、它始终使用最大电机电流、并转至最大速度、但相反。

我注意到以下更改:

//******* //

HALL_WrtiePwmData 首先饱和至1.0

pwmData_sat =_IQsat (pPwmData->TBC.value[0]、_IQ (1.0)、_IQ (-1.0));
pwmData_sat_dc =_IQmpy (pwmData_sat +_IQ (1.0)、_IQ (0.5));

在新版本中更改为0.5

pwmData_neg =_IQmpy (pPwmData->TBC.value[0]、_IQ (-1.0));
pwmData_sat =_IQsat (pwmData_neg、_IQ (0.5)、_IQ (-0.5));
pwmData_sat_dc = pwmData_sat +_IQ (0.5);

/***** //

//******* //

之前的 SVGEN_RUN  

_iq Vmax、Vmin、Vcom;
_iq va、vb、vc;
//_IQ maxModulation = SVGEN_getMaxModulation (handle);
//_IQ maxModulationNeg =-maxModulation;
_iq va_tmp =-(pVab->value[0]>1);
_iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);

va = pVab->value[0];//alpha
vb = va_tmp + vb_tmp;//_IQmpy (SVGEN_SQRT3_over_2、vb_tmp);//-0.5* alpha + sqrt (3)/2 * beta;
vc = va_tmp - vb_tmp;//_IQmpy (SVGEN_SQRT3_over_2、vb_tmp);//-0.5*alpha - sqrt (3)/2 * beta;

////剪裁
// va=_IQsat (VA、SVGEN_4_over_3、-SVGEN_4_over_3);
// Vb=_IQsat (Vb、SVGEN_4_over_3、-SVGEN_4_over_3);
// vc_IQsat (vc、SVGEN_4_over_3、-SVGEN_4_over_3);

VMAX = 0;
Vmin=0;

//查找顺序 Vmin、vmid、Vmax
如果(VA > Vb)

VMAX = VA;
Vmin = Vb;

其他

VMAX = Vb;
Vmin = VA;

如果(VC > Vmax)

VMAX = VC;

否则、如果(Vc < Vmin)

Vmin = Vc;

VCOM =(Vmax+Vmin)>>1;//0.5*(Vmax+Vmin)

//减共模项以实现 SV 调制
PT->Value[0]=(Vcom - VA);
PT->Value[1]=(Vcom - Vb);
PT->Value[2]=(Vcom - VC);

返回;

和新版本中

_iq Vmax、Vmin、Vcom;
_iq va、vb、vc;
_iq va_tmp =-(pVab->value[0]>1);
_iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);

va = pVab->value[0];//alpha
vb = va_tmp + vb_tmp;//-0.5*alpha + sqrt (3)/2 * beta;
vc = va_tmp - vb_tmp;//-0.5*alpha - sqrt (3)/2 * beta;

VMAX = 0;
Vmin=0;

//查找顺序 Vmin、vmid、Vmax
如果(VA > Vb)

VMAX = VA;
Vmin = Vb;

其他

VMAX = Vb;
Vmin = VA;

如果(VC > Vmax)

VMAX = VC;

否则、如果(Vc < Vmin)

Vmin = Vc;

VCOM =_IQmpy (Vmax+Vmin、_IQ (0.5));

//减共模项以实现 SV 调制
PT->Value[0]=(VA - Vcom);
PT->Value[1]=(Vb - Vcom);
PT->Value[2]=(VC - Vcom);

返回;

/***** //

//******* //

User.h

 #define USER_MAX_VS_MAG_PU     (1.0)

最近的文件

#define USER_MAX_VS_MAG_PU     (0.5)

//***** //

我应该使用哪种实现来正确运行新实验室 Lab11 (a/e)?

我还需要考虑修改其他内容吗?

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

    这取决于 MotorWare 的版本。 第15个及后续版本使用"#define USER_MAX_VS_MAG_PU     (0.5)"。 如果您使用这些版本、则必须将变量设置为小于0.5作为 user.h 中的注释文本。 请下载并使用最新版本作为以下链接。

    http://www.ti.com/tool/motorware

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

    你好  

    当我使用最近的文件时:

    hal.h

    pwmData_neg =_IQmpy (pPwmData->TBC.value[0]、_IQ (-1.0));
    pwmData_sat =_IQsat (pwmData_neg、_IQ (0.5)、_IQ (-0.5));
    pwmData_sat_dc = pwmData_sat +_IQ (0.5);

    svgen.h

    _iq Vmax、Vmin、Vcom;
    _iq va、vb、vc;
    _iq va_tmp =-(pVab->value[0]>1);
    _iq vb_tmp =_IQmpy (SVGEN_SQRT3_over_2、pVab->value[1]);

    va = pVab->value[0];//alpha
    vb = va_tmp + vb_tmp;//-0.5*alpha + sqrt (3)/2 * beta;
    vc = va_tmp - vb_tmp;//-0.5*alpha - sqrt (3)/2 * beta;

    VMAX = 0;
    Vmin=0;

    //查找顺序 Vmin、vmid、Vmax
    如果(VA > Vb)

    VMAX = VA;
    Vmin = Vb;

    其他

    VMAX = Vb;
    Vmin = VA;

    如果(VC > Vmax)

    VMAX = VC;

    否则、如果(Vc < Vmin)

    Vmin = Vc;

    VCOM =_IQmpy (Vmax+Vmin、_IQ (0.5));

    //减共模项以实现 SV 调制
    PT->Value[0]=(VA - Vcom);
    PT->Value[1]=(Vb - Vcom);
    PT->Value[2]=(VC - Vcom);

    返回;

    和 user.h

     #define USER_MAX_VS_MAG_PU     (0.5)

    lab11a 不起作用。 但是、当我使用新的 HALL_WritePwmData、USER_MAX_VS_MAG_PU (0.5)和之前的 SVGEN_RUN 实现时、实验会工作、但电机会反向旋转。

    我的第二个问题是:这是这些行的区别

    //减共模项以实现 SV 调制
    PT->Value[0]=(VA - Vcom);
    PT->Value[1]=(Vb - Vcom);
    PT->Value[2]=(VC - Vcom);

    //减共模项以实现 SV 调制
    PT->Value[0]=(Vcom - VA);
    PT->Value[1]=(Vcom - Vb);
    PT->Value[2]=(Vcom - VC);

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

    SVGEN 的代码与 PWM 驱动模块相关、最终的 PWM 输出是一样的、但是计算过程与上面提到的不同。 您不能在两个版本之间混合文件、您只需使用最新的 motorWare 版本18、或者在不更改 PWM 和 SVGEN 函数的情况下保留原始版本、因为不同版本中的 FAST 算法是相同的。