#define BASE_CURRENT 10 // Base peak phase current (amp), Max. measurable peak curr.
实际电流峰值为10A。
第一步:
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
}
上述代码为一数字低通滤波器,循环N次后求得采样通道的静态偏差(即实际电流为0时的DSC采样值)。
第二步:clarke变换模块的输入将ADC采样值(减掉静态偏差后)放大两倍。
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
以上是HVPM_Enhanced_Sensorless软件对相电流的采样标幺化全部过程。
由于实际电流大小是-10A~10A,标幺化后的变化范围应该是_IQ(-1)~_IQ(1),这一标幺化的过程由硬件与软件共同完成,而DSC采样范围为0~3.3V(对应ADC12位结果寄存器值为0~4096,12位数值定标范围为_IQ12(0)~_IQ12(1))。
按照我的理解,第二步中将ADC采样值放大两倍,使标幺化的结果为_IQ(-1)~_IQ(1),那么ADC采样值的范围就应该是_IQ(-0.5)~_IQ(0.5),这又与12位ADC采样范围_IQ12(0)~_IQ12(1)矛盾(即ADC采样结果不可能得到负值)。。。
问题:
1.HVPM_Enhanced_Sensorless工程对应的TI官方开发套件相电流调理采样到DSC时是什么范围(我使用的是其它硬件)?
2.何以ADC本来只能采样_IQ12(0)~_IQ12(1)的范围,软件中没有进行平移处理,而是直接放大两倍就得到标幺结果_IQ(-1)~_IQ(1)的范围,_IQ(-1)~_IQ(0)范围的结果是怎样得到的?
Chongming Ren:
顶一下、、、有人解答吗?
#define BASE_CURRENT 10 // Base peak phase current (amp), Max. measurable peak curr.
实际电流峰值为10A。
第一步:
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
}
上述代码为一数字低通滤波器,循环N次后求得采样通道的静态偏差(即实际电流为0时的DSC采样值)。
第二步:clarke变换模块的输入将ADC采样值(减掉静态偏差后)放大两倍。
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
以上是HVPM_Enhanced_Sensorless软件对相电流的采样标幺化全部过程。
由于实际电流大小是-10A~10A,标幺化后的变化范围应该是_IQ(-1)~_IQ(1),这一标幺化的过程由硬件与软件共同完成,而DSC采样范围为0~3.3V(对应ADC12位结果寄存器值为0~4096,12位数值定标范围为_IQ12(0)~_IQ12(1))。
按照我的理解,第二步中将ADC采样值放大两倍,使标幺化的结果为_IQ(-1)~_IQ(1),那么ADC采样值的范围就应该是_IQ(-0.5)~_IQ(0.5),这又与12位ADC采样范围_IQ12(0)~_IQ12(1)矛盾(即ADC采样结果不可能得到负值)。。。
问题:
1.HVPM_Enhanced_Sensorless工程对应的TI官方开发套件相电流调理采样到DSC时是什么范围(我使用的是其它硬件)?
2.何以ADC本来只能采样_IQ12(0)~_IQ12(1)的范围,软件中没有进行平移处理,而是直接放大两倍就得到标幺结果_IQ(-1)~_IQ(1)的范围,_IQ(-1)~_IQ(0)范围的结果是怎样得到的?
Chongming Ren:
回复 Eric Ma:
谢谢答疑!请问这个偏置值是固定的吗(不是采样通道不确定的静态偏差?)?那为什么还要通过AD采样再滤波来得到?为何要有以下代码而不是直接将采样值减去IQ0.5?
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
}
#define BASE_CURRENT 10 // Base peak phase current (amp), Max. measurable peak curr.
实际电流峰值为10A。
第一步:
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
}
上述代码为一数字低通滤波器,循环N次后求得采样通道的静态偏差(即实际电流为0时的DSC采样值)。
第二步:clarke变换模块的输入将ADC采样值(减掉静态偏差后)放大两倍。
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
以上是HVPM_Enhanced_Sensorless软件对相电流的采样标幺化全部过程。
由于实际电流大小是-10A~10A,标幺化后的变化范围应该是_IQ(-1)~_IQ(1),这一标幺化的过程由硬件与软件共同完成,而DSC采样范围为0~3.3V(对应ADC12位结果寄存器值为0~4096,12位数值定标范围为_IQ12(0)~_IQ12(1))。
按照我的理解,第二步中将ADC采样值放大两倍,使标幺化的结果为_IQ(-1)~_IQ(1),那么ADC采样值的范围就应该是_IQ(-0.5)~_IQ(0.5),这又与12位ADC采样范围_IQ12(0)~_IQ12(1)矛盾(即ADC采样结果不可能得到负值)。。。
问题:
1.HVPM_Enhanced_Sensorless工程对应的TI官方开发套件相电流调理采样到DSC时是什么范围(我使用的是其它硬件)?
2.何以ADC本来只能采样_IQ12(0)~_IQ12(1)的范围,软件中没有进行平移处理,而是直接放大两倍就得到标幺结果_IQ(-1)~_IQ(1)的范围,_IQ(-1)~_IQ(0)范围的结果是怎样得到的?
user1088122:
回复 Chongming Ren:
这段代码计算offset实际上是一个软件低通滤波器,截止频率3Hz左右,用于测量交流采样电路的直流偏置。
电路板设计的直流偏置是1.65V,但是实际应用中有可能出现偏差,比如你的3.3V电源实际输出是3.4V。所以对于不同的硬件电路,这个偏置值是不一样的,而这段代码则很好的解决了这一问题。
#define BASE_CURRENT 10 // Base peak phase current (amp), Max. measurable peak curr.
实际电流峰值为10A。
第一步:
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
}
上述代码为一数字低通滤波器,循环N次后求得采样通道的静态偏差(即实际电流为0时的DSC采样值)。
第二步:clarke变换模块的输入将ADC采样值(减掉静态偏差后)放大两倍。
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
以上是HVPM_Enhanced_Sensorless软件对相电流的采样标幺化全部过程。
由于实际电流大小是-10A~10A,标幺化后的变化范围应该是_IQ(-1)~_IQ(1),这一标幺化的过程由硬件与软件共同完成,而DSC采样范围为0~3.3V(对应ADC12位结果寄存器值为0~4096,12位数值定标范围为_IQ12(0)~_IQ12(1))。
按照我的理解,第二步中将ADC采样值放大两倍,使标幺化的结果为_IQ(-1)~_IQ(1),那么ADC采样值的范围就应该是_IQ(-0.5)~_IQ(0.5),这又与12位ADC采样范围_IQ12(0)~_IQ12(1)矛盾(即ADC采样结果不可能得到负值)。。。
问题:
1.HVPM_Enhanced_Sensorless工程对应的TI官方开发套件相电流调理采样到DSC时是什么范围(我使用的是其它硬件)?
2.何以ADC本来只能采样_IQ12(0)~_IQ12(1)的范围,软件中没有进行平移处理,而是直接放大两倍就得到标幺结果_IQ(-1)~_IQ(1)的范围,_IQ(-1)~_IQ(0)范围的结果是怎样得到的?
Chongming Ren:
回复 user1088122:
谢谢,明白了。