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 sensorless ADC采样的问题

Other Parts Discussed in Thread: MOTORWARE

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。    不知道我的表述是否清楚。

    望您不吝赐教。

  • 是电流为0时的采样结果,但这个采样结果不是零,MCU AD口有电压的,因为有偏置电压----这是硬件决定的,为了采负电压----为了采负电流。

  • 明白了,感谢您的回复。

    那如果我们最近想要实时测量相电压,可以用这样的方法吗? 

    目前我的想法是:

    由于中性点没有接地,所以相电压ad采出来的都是正值,硬件中有没有设置偏置电压,能让ad采出来的电压通过运算变为有正有负的实际值,或者说能不能测到中心点的电压是多少,这样采样值减去这个值不就可以得到有正有负的实际值了吗。

    或者您有更好的实时采样相电压的思路也请您不吝赐教

  • 我的回复是基于我的硬件电路回答的,TI的硬件如何,不清楚,大概也差不多把,也应该有个偏置电压

    在进入MainISR之前,如果没有偏置电压,那么理论上此时AD口采样的数值应该是0.

    但实际采样可能还有点很小的数值A----电路总难达到理想状态,没有偏置电压,用TI的程序也没错,更精确一些,把这个干扰数值A减去了-----但TI的程序应该是减去

    偏置电压。你说的情况,我不太清楚。

  • 刚才修改了程序做了测试,确实与您所说的相同,实际的采样值并不是0,得到的offset确实是在0.5附近的一个值。

    应该就是硬件设计的问题使这个采样的结果不是0。

    再次感谢您的回复。

  • 针对这个硬件问题,您能跟我们分享一下硬件上这个偏置电压是怎么实现的吗?

    刚刚在硬件电路上找到了Vref,但是没太看懂原理,您看看能不能给我们讲解一下...

    这里的Vref是不是就是提供的偏置电压? 如果我没找对,您方便分享的话,能不能讲解一下您的硬件电路,这里是怎么实现的...

  • 相电压,TI的例子有计算

  • 放大器引进输入就是偏置电压  R57 R18 R35 R42有电压的,看放大器资料就知道了

  • 张聪师兄,那个是反向比例放大电路(带偏置)。:)SHANG FROM PEPSI