打印
[数据转换器-信号链]

AD7730高精度AD转换遇到的问题

[复制链接]
1040|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huzb11|  楼主 | 2016-12-7 07:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用AD7730做24位高精度转换,按理来说,AD采样,采到多少?就显示AD多少?可是转换出来始终显示是:16777215  这是什么意思?这不是长整型最大值吗?而且这个8位数一直跳动,不知让它如何稳定?这是程序的问题,还是电路上的问题?求大虾们指导一下?


这是程序:
这是程序:
void writebytetoAD7730(u8 writedata)
{
u8 i;
AD7730_CS=0;
for(i=0;i<8;i++)
{
  AD7730_SCLK=0;
  if(writedata&0x80)
  AD7730_DATAIN=1;
  else
  AD7730_DATAIN=0;
  writedata=writedata<<1;
  AD7730_SCLK=1;
  //Delay4us();   //延时4us
   //AD7730_SCLK=0;
}
AD7730_DATAIN=0;
AD7730_CS=1;
}

u8 readbyteAD7730(void)
{
u8 i;
u8 readData;

AD7730_CS=0;
AD7730_DATAIN=0;
readData=0;
for(i=0;i<8;i++)
{
   AD7730_SCLK=0;
   readData= readData<<1;
   if(AD7730_DOUT)
  readData+=1;
  AD7730_SCLK=1;
  //Delay4us();
   //AD7730_SCLK=0;
}
AD7730_CS=1;
return (readData);
}

void AD7730_Init(void)
{
u8 i;
writebytetoAD7730(0x03);         //写通讯寄存器,下一次对滤波寄存器进行操作,
writebytetoAD7730(0x80);         //设置滤波寄存器,50hz输出速率
writebytetoAD7730(0x00);         //设置滤波寄存器
writebytetoAD7730(0x10);         //50hz输出转换值,chop模式

writebytetoAD7730(0x04);         //写通讯寄存器,下一次对DAC寄存器进行操作,
writebytetoAD7730(0x20);         //2.5V基准电压输入
writebytetoAD7730(0x14);         //read from DAC
i=readbyteAD7730();
writebytetoAD7730(0x02);         //写通讯寄存器,下一次对模式寄存器进行操作,
writebytetoAD7730(0xb1);          //internal fullscale calibration,unipolar input
//writebytetoAD7730(0x10);         //2.5V基准电压输入,写模式寄存器0-20mV
writebytetoAD7730(0x02);          //2.5V基准电压输入,写模式寄存器0-10mV
//while(AD7730_RDY) rst_wdt();
  //delay_1ms(50);
writebytetoAD7730(0x02);         //写通讯寄存器,下一次对模式寄存器进行操作,
writebytetoAD7730(0x91);
writebytetoAD7730(0x10);         //进行零刻度校准,
//while(AD7730_RDY) rst_wdt();
//delay_1ms(50);
writebytetoAD7730(0x02);          //写通讯寄存器,下一次对模式寄存器进行操作,
writebytetoAD7730(0x31);          //continuous conversion mode,unipolar
writebytetoAD7730(0x10);          //read from status
// while(AD7730_RDY) rst_wdt();
  //delay_1ms(50);

}

long readAD7730ConversionData(void)
{
long sum=0;
u8 count;

long Converdata;
writebytetoAD7730(0x21);
AD7730_DATAIN=0;
//while(AD7730_RDY);

//delay_1ms(50);
if(!AD7730_RDY)
Converdata=0;
Converdata=readbyteAD7730();
Converdata=Converdata<<8;
Converdata=readbyteAD7730()+Converdata;
Converdata=Converdata<<8;
Converdata=readbyteAD7730()+Converdata;
writebytetoAD7730(0x30);

  for(count=0;count<N;count++)                                   //算术平均滤波运算
            {
          sum+=Converdata;
           delay_1ms(2);
           }

return(sum/N);

//return (Converdata);
}

相关帖子

沙发
huzb11|  楼主 | 2016-12-7 08:44 | 只看该作者
后来查了一下论坛说是以补码的形式输出的,但如何计算AD值呢?不停地的跳又是怎么回事?请哪位用过的大虾指点一下。小弟第一次用24位AD,不知如何用?之前只用过12位的,比这个简单,直接输出AD值,没那么复杂。

使用特权

评论回复
板凳
airwill| | 2016-12-7 20:53 | 只看该作者
16777215 也就是 7FFFFF, 是最大值了, 输入信号大于测量的最大范围了.
跳动也是正常的, 因为有噪声和纹波的影响, 信号不可能总是一致的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

55

帖子

1

粉丝