在clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA) // Phase A curr.;
請問offsetA主要的作用是做什麼的?之前爬文說是偏移用的,請問為什麼要偏移?
不偏移會怎樣?
计算偏移电流传感器?它是如何计算出来的?
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.
在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的周期值