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.

TI官方例程phase-volt-calc头文件(PM-Sensorless中的相电压重构)中的疑问



在svgen_dq.h文件中特意把Ta,Tb,Tc(低电平占空比)三个输出量从(0,1)的范围变成(-1,1)的范围

(不知道(-1,1)的范围在数据处理的时候有什么优势。)
/* Convert the unsigned GLOBAL_Q format (ranged (0,1)) ->.. */
/* ..signed GLOBAL_Q format (ranged (-1,1))*/
v.Ta = _IQmpy2(v.Ta-_IQ(0.5));
v.Tb = _IQmpy2(v.Tb-_IQ(0.5));
v.Tc = _IQmpy2(v.Tc-_IQ(0.5));

不理解的地方就是:Ta,Tb,Tc在传递到volt_calc.h中 没有变换到(0,1)的范围,而是取反之后直接带入到公式里

#define VOLT_MACRO(v) \
\
if (v.OutOfPhase > 0) \
{ v.MfuncV1 = -v.MfuncV1; \
v.MfuncV2 = -v.MfuncV2; \
v.MfuncV3 = -v.MfuncV3; \
} \
\
/* Scale the incomming Modulation functions with the DC bus voltage value*/ \
v.MfuncV1 = _IQmpy(v.DcBusVolt,v.MfuncV1); \
v.MfuncV2 = _IQmpy(v.DcBusVolt,v.MfuncV2); \
v.MfuncV3 = _IQmpy(v.DcBusVolt,v.MfuncV3); \
\
/* Calculate the 3 Phase voltages */ \
\
/* Phase A */ \
v.VphaseA = _IQmpy(TWO_THIRD,v.MfuncV1); \
v.VphaseA -= _IQmpy(ONE_THIRD,v.MfuncV2); \
v.VphaseA -= _IQmpy(ONE_THIRD,v.MfuncV3);

理论上不是应该先转换成(0,1)的范围数,再算出对应上桥臂占空比,最后乘以v.DcBusVolt吗?请求懂专家帮忙解答。谢谢啦

用(-1,1)计算相电压和用(0,1)计算出的相电压结果不一样。

  • 请求懂专家帮忙解答。谢谢啦

  • 请求懂专家帮忙解答。谢谢啦

  • 请求懂专家帮忙解答。谢谢啦。

  • yuanhang wu 说:

    在svgen_dq.h文件中特意把Ta,Tb,Tc(低电平占空比)三个输出量从(0,1)的范围变成(-1,1)的范围

    (不知道(-1,1)的范围在数据处理的时候有什么优势。)
    /* Convert the unsigned GLOBAL_Q format (ranged (0,1)) ->.. */
    /* ..signed GLOBAL_Q format (ranged (-1,1))*/
    v.Ta = _IQmpy2(v.Ta-_IQ(0.5));
    v.Tb = _IQmpy2(v.Tb-_IQ(0.5));
    v.Tc = _IQmpy2(v.Tc-_IQ(0.5));

    不理解的地方就是:Ta,Tb,Tc在传递到volt_calc.h中 没有变换到(0,1)的范围,而是取反之后直接带入到公式里

    #define VOLT_MACRO(v) \
    \
    if (v.OutOfPhase > 0) \
    { v.MfuncV1 = -v.MfuncV1; \
    v.MfuncV2 = -v.MfuncV2; \
    v.MfuncV3 = -v.MfuncV3; \
    } \
    \
    /* Scale the incomming Modulation functions with the DC bus voltage value*/ \
    v.MfuncV1 = _IQmpy(v.DcBusVolt,v.MfuncV1); \
    v.MfuncV2 = _IQmpy(v.DcBusVolt,v.MfuncV2); \
    v.MfuncV3 = _IQmpy(v.DcBusVolt,v.MfuncV3); \
    \
    /* Calculate the 3 Phase voltages */ \
    \
    /* Phase A */ \
    v.VphaseA = _IQmpy(TWO_THIRD,v.MfuncV1); \
    v.VphaseA -= _IQmpy(ONE_THIRD,v.MfuncV2); \
    v.VphaseA -= _IQmpy(ONE_THIRD,v.MfuncV3);

    理论上不是应该先转换成(0,1)的范围数,再算出对应上桥臂占空比,最后乘以v.DcBusVolt吗?请求懂专家帮忙解答。谢谢啦

    用(-1,1)计算相电压和用(0,1)计算出的相电压结果不一样。

    标定为(-1,1)主要是和环路计算中所使用的电流交流信号对应。

    因为对于环路中使用到的电流信号是以零轴为中心的,正负对称的信号,所以标幺话后就是对应这(-1,1)。

    当然,我们可以将这个信号加上一个直流偏量,从而表示为0~正向最大的数值,也就标幺话后的(0,1)。

    其实对于表示物理意义是一样的,如果在计算中所有信号全都是带着这个直流偏量进行推导和计算的,那么就都可以全用(0,1)来表示。

    TI的各种库函数,都是把信号表示为以零轴对称的正负对称信号的。

    对于Volt_Calc也是一样,通过占空比反推出来的端口电压,也是一个以零轴为中心,正负对称的信号,所以也表示为(-1,1)。

    我想你的疑惑应该是占空比应该是没有负值的,应该都是(0,1)才对,这样的定义其实是针对给PWM寄存器幅值的环节而言的,对于算法模型,具体是否有负占空比,是取决于数学模型的零点选择。

  • 你好,按照附件中的文档,根据伏秒平衡法,Va = U向上桥开通时间 / PWM时间 × Udc,用(0,1)才能解释的通,况且我现在用(0,1)已经把电机转起来了。

    phase_voltage_calc.pdf
  • 您好,前辈能不能解释一下SVGENDQ_MACRO(v)这段代码,看了好久了还是没有看懂,谢谢了