28035电机套件中有offset的补偿程序
offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414; //Phase A offset
offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414; //Phase B offset
offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; //Phase C offset
运行时显示的是offsetA=0.5,我想问一下这个0.5是怎么计算得到的,为什么我把这段程序移植到别的地方,offsetA=0
Susan Yang:请您参考下面帖子的回复
e2echina.ti.com/…/120682
offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); 可以按照低通滤波来理解,K1, K2是一阶低通滤波的两个系数,这个滤波器的带宽被设计的很低,来让进入主中断前采到的通道偏置稳定。
另外,ADC模块是一直在执行的,也就是说,不管进不进主中断,ADCRESULT寄存器的值都是在不断刷新的。
计算电压的offset,可以参考TI motorware InstaSpin FOC 算法对电压offset的处理。
思路是,在电机运转前,三相先发50%占空比pwm,这样,U/V/W三相输出电压约为 母线电压的一半,将这个值采进来作为电压offset,之后的电机运行中一直用这个值作为电压offset。
在线电压offset检测,比较难高精度实现,可以考虑近似的用母线电压一半作为在线的电压offset值来用。