微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1248,怎么使用内部参考,使用后怎么确定它使用成功了?

ADS1248,怎么使用内部参考,使用后怎么确定它使用成功了?

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

我用一个120欧姆的电阻来测试ADS1248模块,打算选用内部参考,但是不知道怎么用,求指导。下面给出我的原理图

Hi

   采用内部参考电压可以用ADC寄存器设置:

  

      可以VREFCON设置为01,内部参考电压总开启; REFSELT设置为10,内部参考电压选择。当寄存器设置好启动后可以在REFOUT测试到参考电压(REFOUT上需要bypass电容的)。

按照你指示的做了,REFOUT能量到2.048V的电压。在此,我还有一个问题,我使用内部参考的话,PREFP0、PREFN0、PREFP1、PREFN1、这些引脚该怎么处理,需要接什么东西吗?

我的寄存器配置如下:

ADS1248WREG(ADS1248_REG_MUX0,0x01); //00000001,Bit7-6:传感器电流源检测不使用,Bit5-3:正输入为AIN0,Bit2-0:负输入为AIN1
//初始化MUX1多路复用控制寄存器
ADS1248WREG(ADS1248_REG_MUX1,0x30); //00110000,Bit7:启用内部晶振,Bit6-5:内部基准一直打开,Bit4-3:输入基准以板上为准,Bit2-0:普通模式
//延时等待10ms,等待内部基准稳定
Delay(6*DELAY_10ms);
//初始化VBIAS偏压寄存器
ADS1248WREG(ADS1248_REG_VBIAS,0x00); //00000000,Bit7-0:偏置电压选择关闭
//初始化IDAC1控制寄存器
ADS1248WREG(ADS1248_REG_IDAC1,0x8F);//10001111,Bit7-4:内部第一恒流源的连接ANO,Bit3-0:内部第二恒流源的关闭
//初始化IDAC0控制寄存器
ADS1248WREG(ADS1248_REG_IDAC0,0x06); //00000111,Bit7-4:只读,Bit3:DOUT功能 ,Bit2-0:1.5mA内部恒流源
//初始化SYS0系统控制寄存器
ADS1248WREG(ADS1248_REG_SYS0,0x7F); //01111111,Bit7:必须设置为0,Bit6-41:选择128倍增益,Bit3-0:选择2000SPS测量速度

ADS1248WREG(ADS1248_REG_GPIOCFG,0x09);

电阻通过AN0,AN1接入电路,如图所示,请看看有没有什么问题?我这样,读出来的数据完全不对

手册上没有所谓的PREFP0和PREFP1这些东西,外部参考输入引脚是REFP0/N0和REFP1/N1,如果启用内部基准,这些引脚可以悬空。

至于配置,没看懂。手册上一共有11个寄存器,地址从0x00到0x0A。从你的配置上,看不出来地址,寄存器的数目也不对。

所有的寄存器都要配置吗?感觉GPIO相关的寄存器不需要配置啊

你好,请我打开内部恒流源 IDAC,是不是只要配置寄存器就好了?硬件上还需要做什么吗?

内部恒流源可以通过写0x0A地址的[2:0]实现。启动这个功能,输入口会向前端电路注入电流,通过前端的电阻性负载转换成电压,详见手册图85。这个功能一般是用在温度检测的应用。

我的寄存器配置为: IDAC0:0x07,MUX0:0x01,MUX1:0x38,IDAC1:0x01,SYS0:0x5F,但是没有电流输出,请问是什么原因?接线图如下,我在J3元件的1、2脚接入了一个120欧姆的电阻,把寄存器配置写进去以后,电阻2端没有电压。确定配置已经写进去了

你好,可以帮我解决这个问题吗?谢谢

寄存器配置写进去了,但恒流源没有输出,电阻两端量不到电压,是什么情况?

配置没错,你的电路图错了。手册上的电路图是这样的,AIN0和AIN1都有让电流流到地的通路。你的电路图里,AIN0和AIN1通过一个120欧姆电阻连接到一起,但是没有电流流到地的通路,那么你想让电流怎么流?你再仔细看一下下面这个电路,然后修改一下你的电路图。

可以有电流输出了,谢谢

帮帮忙吧,看看我哪里错了,没有参考电压输出,指令发出去好像没什么作用,也不知道发出去了没,读就更不用说了

 

 

#include "Ads1248.h"
//单片机是MSP430F1611  主时钟是 1M

/********************************************************************
函数名称:SPI1初始化
功    能:初始化SPI1
参    数:无      
返回值  :无
********************************************************************/
void Init_Spi1(void)
{  
    unsigned int i;
    P4OUT |=  BIT6 + BIT4 + BIT1 + BIT0;
    P4DIR |=  BIT6 + BIT4 + BIT1 + BIT0;
    P4DIR &= ~BIT5 ;
   
    P5OUT |=  BIT1 + BIT3;                            
    P5DIR |=  BIT1 + BIT3;
    P5DIR &= ~BIT2 ;
    for (i = 0xFF; i > 0; i--);   
}

/********************************************************************
函数名称:发送数据
功    能:
参    数:     
返回值  :
*********************************************************************/
void Spi3WriteByte(unsigned char Byte)
{
    unsigned char i;
    ADC_SPI_CLK_CLR ;
    ADC_SPI_CLK_CLR ;
    for(i=0;i<8;i++) 
    {
      ADC_SPI_CLK_SET;
      ADC_SPI_CLK_SET;
      if(Byte&0x80)
        {ADC_SPI_DIN_SET;}
      else 
        {ADC_SPI_DIN_CLR;}
     
      Byte=Byte<<1;
     
      ADC_SPI_CLK_CLR;
      ADC_SPI_CLK_CLR;     
    }
}
/********************************************************************
函数名称:读接收的数据
功    能:
参    数:     
返回值  :接收数据
*********************************************************************/
unsigned char Spi3ReadByte(void)
{
    unsigned char i,Byte=0;
    ADC_SPI_CLK_CLR ;
    ADC_SPI_CLK_CLR ;
    for(i=0;i<8;i++) 
    {
      ADC_SPI_CLK_SET;
      ADC_SPI_CLK_SET;
      Byte = (Byte<<1)|ADC_SPI_OUT;
      ADC_SPI_CLK_CLR ;
      ADC_SPI_CLK_CLR ;
    }
    return Byte; 
}

/********************************************************************
函数名称:读接收的数据 long
功    能:
参    数:     
返回值  :接收数据
*********************************************************************/
unsigned long int Spi3Read3Byte(void)
{
    unsigned char i;
    unsigned long int Byte3;
    ADC_SPI_CLK_CLR;
    ADC_SPI_CLK_CLR;
    for(i=0;i<24;i++) 
    {
      ADC_SPI_CLK_SET;
      ADC_SPI_CLK_SET;
      Byte3 = (Byte3<<1)|ADC_SPI_OUT;
      ADC_SPI_CLK_CLR;
      ADC_SPI_CLK_CLR;
    }
    return Byte3; 
}

/********************************************************************
函数名称:读寄存器
功    能:
参    数:     
返回值  :
*********************************************************************/
unsigned char ADS1248_ReadReg(unsigned char RegAddr) 
{   
     unsigned char Readregs;
     Spi3WriteByte(ADC_CMD_RREG + (RegAddr&0X0f));
     Spi3WriteByte(0);
     Readregs=Spi3ReadByte();
     Spi3WriteByte(ADC_CMD_NOP);
     return Readregs;

 
/********************************************************************
函数名称:写寄存器
功    能:
参    数:     
返回值  :
*********************************************************************/
void ADS1248_WriteReg(unsigned char RegAddr,unsigned char Buffer) 
{       
    Spi3WriteByte(ADC_CMD_WREG + (RegAddr&0x0f));
    Spi3WriteByte(0);
    Spi3WriteByte(Buffer);

void ADS1248_Init(void) 

    ADC_START_CLR;
    ADC_SPI_CS_CLR;
   
    ADC_RESET_CLR;
    delay_ms(20);
    ADC_RESET_SET;
    delay_ms(20);   
    Spi3WriteByte(ADC_CMD_RESET);    //初始化所有寄存器
    delay_ms(5);
   
    ADS1248_WriteReg(ADC_REG_MUX0,0x01);delay_ms(10);
    ADS1248_WriteReg(ADC_REG_MUX1,0x30);delay_ms(1000);
    ADS1248_WriteReg(ADC_REG_VBIAS,0x00);delay_ms(10);
    ADS1248_WriteReg(ADC_REG_IDAC1,0xff);delay_ms(10);
    ADS1248_WriteReg(ADC_REG_IDAC0,0x08);delay_ms(10);
    ADS1248_WriteReg(ADC_REG_SYS0,0x0f);delay_ms(10);
 

/*---------------------------------------------------------
 数据读取
---------------------------------------------------------*/ 
unsigned long int ADS1248_Read(void) 
{  
    unsigned long int DataS;
    Spi3WriteByte(ADC_CMD_RDATA);
    DataS=Spi3Read3Byte();
    Spi3WriteByte(ADC_CMD_NOP);
    return DataS; 

你先测试下,把数据写到寄存器里,然后读回来,看看SPI读写有没有问题。SPI通讯的原理你要好好看看

这是我的SPI程序:

unsigned char ADS1248SPI(unsigned char m)
{
       unsigned char i,r=0;
     unsigned short* pState0;//出口
    unsigned short* pState1;//出口反校
    pState0=(unsigned short*)0x202E0004;
    pState1=(unsigned short*)0x202E0008;
    for(i=0;i<8;i++)
    {
      sck_set(1);
          r=r<<1;
      Delay(100);
      if(m & 0x80)
   {
     sdin_set(1);
       }  
   else
   { 
    sdin_set(0);
       }
   m = m<<1;
        sck_set(0);
         if(!(*pState1==0xbf))
   {
    r++;
   }
    Delay(100);
   
    }
      return r;
    
}

多谢了!还在挣

还没有参电输

发写入这寄存器,30,用还是没输,能帮我这个spi读写程不,模尼的

终有参考电压了,内的,但是1.86v,不是2.048v,这是什问题

您好:

        我把该寄存器设置成0x30 还是测不到REFOUT端的参考电压,您说的设置好还要启动,这个启动怎么启动?谢谢

 

您好:

        我把该寄存器设置成0x30 还是测不到REFOUT端的参考电压,您说的设置好还要启动,这个启动怎么启动?谢谢

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

网站地图

Top