各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
Young Hu:
没必要把外围电路的放大系数加进去,ADC通道最大电压为3.3V或者3V的,直接把采样值与4096标幺即可了。
在设计外围电路的时候,要把信号调理为0~3V范围内。
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
haha haha1:
回复 Young Hu:
多谢你的回答,但是不是我想要的,我也知道这系数不用加进去,但是我想知道为什么,因为我的思路是这样:比如现在我实际相电流是5A,那么对应的标幺值其实就是5A/10A(比如系统是10A)=0.5pu 那么我如果用AD采样的话就应该是先将5A通过外围电路转化为0-3V之间,此时这个就应该有一个对应关系(就是一个系数)。那么比如是2V,那么相当于2V对应5A,那就应该在AD采样后在程序中换算这个结果得到5A,然后再将5A/电流基准值10A=0.5啊。这是我的思路。但就是不知道TI这个程序的公式是如何做的?不知道您能不能帮我详细的解答一下!!
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
lili liao:
回复 Young Hu:
你好:
我是用的2808,做三相的PFC整流,需要采集电网电压,电网电流,母线电压,三相电网电压的调理电路是一样的,三相电网电流的调理电路也是一样的,母线电压因为是直流,所以和三相电网电压的调理电路略微不同,请问在标幺化系统中,是不是要使电网电压和母线电压的参考值选取为一样,也就是说,三相电网电压的调理电路对应为3V的时候,假设电网电压为380,那么直流母线电压的调理电路最终结果是3V的时候,对应的母线电压值也是380V,也就是说所有的电压要选取的基准值是一样的,但是电压和电流可以选取不同的基准,我是否可以以ADC输入为3V的时候,对应的电网参数为基准?
同时在控制算法中的系数,如阻抗wL是否也要进行标幺化,如果是的话应该怎样进行标幺化?
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
fred cong:
回复 Johnson Chen1:
chen工 你好:
我遇到了和楼主一样的问题,通过您的讲解我还是有一个地方不太明白,因为我的采样元件0A的电压输出的是2.5V, 范围是0.625V 那么是不是不能直接套用这个程序了呢?
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
fred cong:
回复 Johnson Chen1:
陈工 :
虽然我的霍尔元件是2.5V 为中心 上下幅值是0.625的范围,但是实际输出没那么大,是不会超过3V的!
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
user5229665:
回复 Young Hu:
你好,我在设计外围电路的时候,把信号调理为0~3V(用的28335),把电流基准值定义成霍尔电流传感器的最大采样值,这时程序中clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2,是不是这时候就不用乘以0.909了
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
user5229665:
回复 user5229665:
补充一下,也就是说我现在不用像例程中考虑28035与28335的兼容什么的,我就定义了一个电流基准量,也就一个芯片,而且我的外围硬件电路还是专门为了3V设计的。
各位:
在TI例程中有一个控制永磁同步电机的代码,看到AD采样中采集相电流是如何进行换算的。我的疑问如下:
#ifdef DSP2833x_DEVICE_H
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
#endif // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) #ifdef DSP2803x_DEVICE_H
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr. #endif // (ADCmeas(q12->q24)-offset)*2 CLARKE_MACRO(clarke1)
这段代码在28335中为什么是((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3) ,因为程序中都进行了标幺化,那么我采集的AD值是此时相电流的值也就需要进行标幺化,那为什么没有将实际值除以我程序选的电流基准值10A。还有就是AD电压范围是0~3v,所以如果采集的电流时5A的话,那5A需要转化到0-3V之间,这个是通过外围电路确定的,那这个之间关系式什么呢,如果不知道这关系的话,那采集到1V怎么知道是5A呢?同理28035也是一样疑问,而且他们为什么有这样计算区别呢?
user5956715:
回复 Johnson Chen1:
你好,请问offset的值为什么约为0.5,这个和硬件有关码