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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
congcong zhang1:
回复 Igor An:
非常感谢您的回复,可是我还有一个疑问,
原来的程序里是 20000之后 才进入mainISR,那么之前offset计算的时候 AD采样到的结果是什么 是0吗?
这时没有进入主中断,电机是不是并没有稳定运行,那么利用这时候采集的采样结果来算offset 算出来的意义是什么?
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
user4729463:
回复 congcong zhang1:
按我这样理解的:
电流有负值得,采样电流,最后都把电流转成电压采样,如何采样负的电流?电路会设置一个偏值电压,比如-10A对应-1V,电路设置一个1V的电压偏置电压.
我觉得offset是计算电路无电流的电压,也即偏置电压.最后在MainISR会减去这个偏置电压
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
congcong zhang1:
回复 user4729463:
感谢您的回复,
您的回复我能理解,可是在这个例程里面,是20000次之后,才进入mainISR 那么进入主中断之前采样的结果,并不是电流是0时候对应的数值的采样结果。而是完全就是0,因为没进入主中断,电流就没有按照那个周期来。 我认为这里offset得到的结果应该是0。 不知道我的表述是否清楚。
望您不吝赐教。
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
congcong zhang1:
回复 user4729463:
明白了,感谢您的回复。
那如果我们最近想要实时测量相电压,可以用这样的方法吗?
目前我的想法是:
由于中性点没有接地,所以相电压ad采出来的都是正值,硬件中有没有设置偏置电压,能让ad采出来的电压通过运算变为有正有负的实际值,或者说能不能测到中心点的电压是多少,这样采样值减去这个值不就可以得到有正有负的实际值了吗。
或者您有更好的实时采样相电压的思路也请您不吝赐教
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
congcong zhang1:
回复 user4729463:
刚才修改了程序做了测试,确实与您所说的相同,实际的采样值并不是0,得到的offset确实是在0.5附近的一个值。
应该就是硬件设计的问题使这个采样的结果不是0。
再次感谢您的回复。
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
congcong zhang1:
回复 user4729463:
针对这个硬件问题,您能跟我们分享一下硬件上这个偏置电压是怎么实现的吗?
刚刚在硬件电路上找到了Vref,但是没太看懂原理,您看看能不能给我们讲解一下…
这里的Vref是不是就是提供的偏置电压? 如果我没找对,您方便分享的话,能不能讲解一下您的硬件电路,这里是怎么实现的…
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实时变化 希望大神能指出一些思路。
当然,如果我的上述理解有偏差,那么想要得到有正负的相电压值,还可以用什么样的方法?
期盼各位的回复,望各位不吝赐教。
user4729463:
回复 congcong zhang1:
相电压,TI的例子有计算