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.
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
1,offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); 可以按照低通滤波来理解,K1, K2是一阶低通滤波的两个系数,这个滤波器的带宽被设计的很低,来让进入主中断前采到的通道偏置稳定。
另外,ADC模块是一直在执行的,也就是说,不管进不进主中断,ADCRESULT寄存器的值都是在不断刷新的。
2,计算电压的offset,可以参考TI motorware InstaSpin FOC 算法对电压offset的处理。
思路是,在电机运转前,三相先发50%占空比pwm,这样,U/V/W三相输出电压约为 母线电压的一半,将这个值采进来作为电压offset,之后的电机运行中一直用这个值作为电压offset。
在线电压offset检测,比较难高精度实现,可以考虑近似的用母线电压一半作为在线的电压offset值来用。
非常感谢您的回复,可是我还有一个疑问,
原来的程序里是 20000之后 才进入mainISR,那么之前offset计算的时候 AD采样到的结果是什么 是0吗?
这时没有进入主中断,电机是不是并没有稳定运行,那么利用这时候采集的采样结果来算offset 算出来的意义是什么?
按我这样理解的:
电流有负值得,采样电流,最后都把电流转成电压采样,如何采样负的电流?电路会设置一个偏值电压,比如-10A对应-1V,电路设置一个1V的电压偏置电压.
我觉得offset是计算电路无电流的电压,也即偏置电压.最后在MainISR会减去这个偏置电压
感谢您的回复,
您的回复我能理解,可是在这个例程里面,是20000次之后,才进入mainISR 那么进入主中断之前采样的结果,并不是电流是0时候对应的数值的采样结果。而是完全就是0,因为没进入主中断,电流就没有按照那个周期来。 我认为这里offset得到的结果应该是0。 不知道我的表述是否清楚。
望您不吝赐教。
明白了,感谢您的回复。
那如果我们最近想要实时测量相电压,可以用这样的方法吗?
目前我的想法是:
由于中性点没有接地,所以相电压ad采出来的都是正值,硬件中有没有设置偏置电压,能让ad采出来的电压通过运算变为有正有负的实际值,或者说能不能测到中心点的电压是多少,这样采样值减去这个值不就可以得到有正有负的实际值了吗。
或者您有更好的实时采样相电压的思路也请您不吝赐教
我的回复是基于我的硬件电路回答的,TI的硬件如何,不清楚,大概也差不多把,也应该有个偏置电压
在进入MainISR之前,如果没有偏置电压,那么理论上此时AD口采样的数值应该是0.
但实际采样可能还有点很小的数值A----电路总难达到理想状态,没有偏置电压,用TI的程序也没错,更精确一些,把这个干扰数值A减去了-----但TI的程序应该是减去
偏置电压。你说的情况,我不太清楚。
刚才修改了程序做了测试,确实与您所说的相同,实际的采样值并不是0,得到的offset确实是在0.5附近的一个值。
应该就是硬件设计的问题使这个采样的结果不是0。
再次感谢您的回复。