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.

TMDSHVMTRPFCKIT 讀電流的問題



在clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA)     // Phase A curr.;

請問offsetA主要的作用是做什麼的?之前爬文說是偏移用的,請問為什麼要偏移?

不偏移會怎樣?

计算偏移电流传感器?它是如何计算出来的?

  • 因为电流信号在进入AD转换之前的处理电路中有个电位搬移,也就是把交流量的零点搬移到了AD转换(0-3.3V)中的1。65V,所以这个OFFSET就是1.65V对应的AD转换值,电流的变化量当然要减去这个数值。(程序中对偏移量做了几万次运算的平均。)

  • 謝謝這邊我大致上了解,那想再請教您一個問題,為什麼整個做完還要在乘上2呢?

    我看程式有說是從(-0.5,+0.5) to (-1,+1)做normalize

    請問這指的是哪個值?

  • -0.5至+0.5变换成 -1至+1的目的是为了与PWM程序对接。

    PWM采用UPDOWN结构,并在初始化的时候有这么一句话:

      pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2;  // Prescaler X1 (T1), ISR period = T x 1
      pwm1.HalfPerMax=pwm1.PeriodMax/2;    //20K开关周期下周期为3750,此时半周期为1875

    下面宏调用时用到了传递过来的 -1 ----  +1

    #define PWM_MACRO(ch1,ch2,ch3,v)             \
                         \
    /*  Mfuncx range is (-1,1)              */ \
    /*  The code below changes PeriodMax*Mfuncx range ....        */ \
    /*  from (-PeriodMax,PeriodMax) to (0,PeriodMax) where HalfPerMax=PeriodMax/2 */ \
                         \
     (*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax;  \
     (*ePWM[ch2]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC2)+ v.HalfPerMax;  \
     (*ePWM[ch3]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC3)+ v.HalfPerMax;  \

    相当于 1875 + 1875*(-1,....+1)以便得到0----3750的周期值