微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1248的IDAC问题

ADS1248的IDAC问题

时间:10-02 整理:3721RD 点击:

我按照http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/t/2907.aspx该帖子中的接法,使用IDAC产生恒流源,读出的数值不正确,乱跳动。接法如下图

我使用的是1k提供基准,100用的是120的,两个10.04E用的300的,因为是实验所以只采用手头有的电阻试试。我的电路原理图如下图

我的配置为

ADS1248WREG(ADS1248_REG_MUX0,0x01); 

ADS1248WREG(ADS1248_REG_MUX1,0x30);   

ADS1248WREG(ADS1248_REG_VBIAS,0);  

ADS1248WREG(ADS1248_REG_IDAC1,0x01;

ADS1248WREG(ADS1248_REG_IDAC0,0x04);

 ADS1248WREG(ADS1248_REG_SYS0,0x43);

具体的现象为返回的值是乱的,0,7ffff,或者其他的值乱跳,ref的电压有时有事2.048,有时比2.048小,有时为0.

最新进展,当AIN0处连接一个2k的电阻,电阻另一端接地,AIN1处直接接地,电流源的设置是打开AIN0和AIN1的恒流源,横流大小为250uA。可以收到正确的电压值,计算出来大概为0.49V,此值是正确的。但是只要是在AIN1处接入个电阻,返回的数据就是不对了,这是为什么呢?

有没有让降功耗的考虑,而让这个芯片一段时间工作,一段时间power down?如果有,注意一下29页表10,从芯片关断到芯片重新启动,Vref需要一定的时间建立,建立时间随vrefout capacitor的增大而增大。如果Vref没有建立好时就启动转换,就有可能出问题。

另外,也可以用示波器抓一下Vrefout引脚的电压,或许能得到一些启发。

你好,我并没有考虑功耗的问题。请看下我的第这个问题:我采用的模拟输入端是AIN0和AIN1,接法同最开始的问题中的第一个图,我出现的问题是当把AIN1的那个10.03E直接换成导线时恒流源正常工作,读出的电压也是正常的,我个人感觉这应该相当于单端输入,不知道对不对?但是当我在AIN1处接上任意电阻的时候返回的数据就是很随意的乱值,而且开始串口返回乱值,到最后停到摸个数据不再返回值,满烦你帮忙分析下。

Best Regards!

问题已经找到,是dout和din两根线的干扰问题,用手抓住两根线的时候数据就是正确的,手一离开就变了。

DOUT和DIN是两根数字线,走的也是比较低频的信号,如果是有干扰,检查一下是不是有虚焊。另外,也可以用示波器看看实际波形,如果在上升/下降过程中有尖峰,也可以考虑在DOUT/DIN和处理器的连接线上串联一个50欧姆以内的小电阻。

感谢回答,当时说的太草率了,后来仔细的研究了下问题的原因,最后确定的是,当手按到电路图中的C10以及123456引脚时数据时正常的,我怀疑是图中的数字地直接和模拟地接在一起导致的,正准备重新做块板子把地线分离试试。

你好,我也在调试ADS1248,使用的是51单片机模拟的spi接口,现在出现的问题比较奇怪,我往芯片写的数据读出来以后就发现写入的数据与读出来的有的一样有的不一样,这是我的初始化函数:

void InitADS1248(void) {

 ADS_Start = 0;

 ADS_CS = 0;

ADS_RESET = 0;

 Delay(DELAY_10ms);

 ADS_RESET = 1;

 Delay(DELAY_10ms);  

ADS1248SPI(ADS1248_CMD_RESET);

ADS1248WREG(ADS1248_REG_MUX0,0x07);

  Delay(1000);

ADS1248WREG(ADS1248_REG_MUX1,0x30);

 ADS1248WREG(ADS1248_REG_VBIAS,0x00);

 Delay(1000);

(ADS1248_REG_IDAC1,0xFF);

 Delay(1000);

ADS1248WREG(ADS1248_REG_IDAC0,0x00);

 Delay(1000); 

 ADS1248WREG(ADS1248_REG_SYS0,0x07); 

 Delay(1000); 

}

但是数据读出来以后就变成了:0x07 0x30 0x00 0xff 0x90 0x07

我的程序在附件里面,请你看一看找一下是那个地方出了问题,还请楼主也分享以下你的程序,本人不胜感激,我的邮箱是:ivohxw@126.com

另外还出现的问题是:我的上位机收到的采集到的数据是很不稳定的,可以是简直就是乱码,连8位的精度都达不到,还请您仔细看一看。

我们好像是用的同一个电路啊,求你的调试程序及调试经验啊,我的qq1178446099,希望我么可以讨论讨论!

不好意思啊,好久没上论坛了。问题解决了吗?

你好,请问下,给AIN0和AIN1 加恒流源,怎么加啊?直接设置寄存器就可以了吗?

配置IDAC1寄存器

你好,那请问IDAC1寄存器的作用是什么呢?它不是用来开启恒流源吗?

IDAC1用来选择把恒流源配置到哪一个引脚上,系统默认是没有连接的,因此首先需要配置IDAC1,选择输出通道

是这样啊。但我还有一个疑问,看下面的电路图不是给AIN0和AIN1加1.5mA的电流吗?但恒流源最大输出也只有10μA。

不好意思,仔细看了一下,原来是这样的:恒流源输出可以配置为:50μA、 100μA、 250μA、500μA、 750μA、1000μA、1500μA,通过配置IDAC0选择。IDAC1选择配置恒流源输出引脚。

BCS为:Burnout current source,这个恒流源是用来检测传感器是否正常的,或者说用来探测是否有传感器正常连接到引脚。

我按上面一样配置了寄存器,而且也写进去了,但为什么没有电流输出,请问是什么原因?

请给出你电路连接,以及判断没有电流流出的结论是怎么得出。(串联了电流表?)

这样大家容易群策群力。

看了下你的程序:

unsigned char ADS1248SPI(unsigned char m)
{
//SPI速度最高2MHz,用于命令发送等操作
unsigned char i,r=0;
for(i=0;i<8;i++)
{
ADS_SCLK = 1;
r=r<<1;
m = m<<1;
ADS_Din = CY;
ADS_SCLK = 0;
if(ADS_Dout == 1)
{
r++;
}
}
return r;

SPI读写感觉有问题,没有判断高位的值,那样写进去会出问题

Hi chen huiyang,

      电流源没电流,请确定ADS1248内部的参考基准是否打开。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top