TI专家,
你们好。
我是刚涉及数模转换器的软件工程师,使用了ADS1230作为AD转换芯片来写测重仪的程序(采用5v外部电压为传感器供电)。由于该传感器是TI07年的产品,从论坛中没有足够的资料能比对问题,我了解到该传感器为20位精度传感器(有效精度在17.3位以上),可以把模拟电路输入的毫伏级电压通过增益转换成数字输出(我采用64倍增益),在未接上电路模拟器时,ADS1230读到的数据始终为最大值524287(bit:01111111111111111111),但一旦接上模拟器,0毫伏输入的情况下,DOUT的数据变成20000(bit:1111101XXXXXXXXXXXXX)左右,但只有前7位保持稳定,后面13位一直反复跳变,逐渐加大电压输入,DOUT数字也在逐渐增加,当模拟器逐渐输入到40毫伏时,传感器读数变为44000(bit:1111010XXXXXXXXXXXXX)左右,同样只有7位稳定。
现在有几个问题想请教:
1.初值524287是否正确?
2.40毫伏的变化范围从理论上应该是多少?44000-20000约为24000应该不对。
3.仅有7位数字有效,观察每个电压值变化范围在2000左右,能否估计是何原因导致该问题产生?(由于我不是硬件工程师,先将我的程序发上来,请帮助确认程序本身是否有问题,然后帮助分析硬件可能会存在什么问题?)
程序如下,采用powerdown模式和offset模式都试过,结果都一样。
void OffsetAD(void)
{
unsigned char i=0;
for(i=0;i<26;i++)
{
ADS_CLK1=1;;;
ADS_CLK1=0;;;
}
}
void initads(void)
{
ADS_SPEED = 1;
ADS_PDWN1 = 0;
ADS_CLK1=0;
delay30u();
delay30u();
ADS_PDWN1 = 1;;;;;;;;;
}
long read_ADS1230(void)
{
unsigned char i=0;
long ADresult=0;
char* hzcode;
// powerdown-mode:
initads();
//offset-mode:
/*
while(ADS_DOUT1)
{
OffsetAD();
}
*/
while(ADS_DOUT1);
for(i=0;i<20;i++)
{
ADS_CLK1=1;;
ADS_CLK1=0;;
ADresult=ADresult<<1;
if(ADS_DOUT1)
{
ADresult++;
}
}
ADS_CLK1=1;;
ADS_CLK1=0;;
ADresult&=0xfffff;
if(ADresult>524287)
{
ADresult=1048576-ADresult;
}
return ADresult;
}
