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.

ADS1230的DRDY/DOUT输出跳变厉害

Other Parts Discussed in Thread: ADS1230

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;

}