28035的HVACI_sensorless例程中 关于相电流的偏置量的求法问题 程序截取如下:
interrupt void OffsetISR(void)
{
// Verifying the ISR
IsrTicker++;
// DC offset measurement for ADC
if (IsrTicker>=5000)
{
offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset
offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset
offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset
}
if (IsrTicker > 20000)
{
EALLOW;
PieVectTable.ADCINT1=&MainISR;
EDIS;
}
// Enable more interrupts from this timer
AdcRegs.ADCINTFLG.bit.ADCINT1=1;
// Acknowledge interrupt to recieve more interrupts from PIE group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
主中断中 对于A相电流标幺值是这么计算的
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
1、
这里的offset是在采样5000-20000次采样得到的,程序在20000次之后才进入mainISR,那么这里计算出来的offsetA 有什么实际意义呢 20000次之前没进主中断函数,那采样的结果是不是0,计算的offset 为什么是0.5呢。
个人的理解这个公式的含义是 offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); 利用加权的方法 讲整个相电流周期内的所有采样结果求和再求平均,得到的是相电流的中值,从而在主中断函数中 采样结果减去这个中值,才会得到有正有负的相电流结果。
不知道我的这个理解对不对。
2、
我们目前想采样得到相电压,但是采样得到的值肯定都是正值,而实际的相电压,应该是相对于电机中性点的 有正有负的值。 如果想要得到有正负的相电压值,是不是也可以用这种先测量offset的方法, 可是想要做到实时的变化,那么offset就不应该只是在进入主中断之前完成初始化,这里如何做到offset实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。