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.

ADS1248 读出的AD值 一直在跳变 而且跳变的范围很大

Other Parts Discussed in Thread: ADS1248

最近在调ADS1248 读取K型热电偶的板子 寄存器都能配置, 就是读取的AD值一直在调 而且调的范围很大 不知道什么原因?还有 如何把AD值转换成温度值 有没有什么计算公式啊? 

  • 您好,这里有个参考代码,您参考一下,谢谢!

  • 你好,这个转换值和外部的电路、电源等均有一定关系,你可以上传你的电路以便更好分析。另外AD值转换温度值跟你的参考电压及采样得到的电压值有关

  • 你好 我用的是stm32片上的SPI  按照现象寄存器是可以正常配置的 就是读取的AD值在跳变。附上程序

    /*******************************************************************************
    * Function Name : ADS1248SPI
    * Description : SPI读写一个字节(发送完成后返回本次通讯读取的数据)
    * Input : u8 TxData 待发送的数
    * Output : None
    * Return : u8 RxData 收到的数
    *******************************************************************************/
    u8 ADS1248SPI(u8 TxData)
    {
    //等待发送缓冲区空
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){;}
    //发一个字节
    SPI_I2S_SendData(SPI1, TxData);
    //等待数据接收
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;}
    //取数据
    return SPI_I2S_ReceiveData(SPI1);
    }
    /**************************************************************************
    * Function Name :ADS1248 写数据
    * Description :
    * Input :
    * Output: :
    * Return :
    * 备 注 : 向ADS1248中地址为regaddr的寄存器写入一个字节databyte
    ***************************************************************************/
    void ADS1248WREG(unsigned char regaddr,unsigned char databyte)
    {
    //向寄存器写入数据地址
    ADS1248SPI(ADS1248_CMD_WREG+(regaddr & 0xF));
    //写入数据的个数n-1
    ADS1248SPI(0X00);
    //向regaddr地址指向的寄存器写入数据databyte
    ADS1248SPI(databyte);
    }
    /**************************************************************************
    * Function Name :ADS1248 读数据
    * Description :
    * Input :
    * Output: :
    * Return :
    * 备 注 : 向ADS1248中地址为regaddr的寄存器读一个字节databyte
    ***************************************************************************/
    unsigned char ADS1248RREG(unsigned char regaddr)
    {
    //从ADS1248中地址为regaddr的寄存器读出一个字节
    unsigned char r=0;
    //写入地址
    ADS1248SPI(ADS1248_CMD_RREG+(regaddr & 0xF));
    //写入读取数据的个数n-1
    ADS1248SPI(0X00);
    //读出regaddr地址指向的寄存器的数据
    r=ADS1248SPI(ADS1248_CMD_NOP);
    return r;//返回数据
    }
    /*******************************************************************************
    * Function Name : ADS1248ReadData
    * Description : 读adc转换数据
    * Input :
    * Output : 24位 3个字节
    * Return :
    *******************************************************************************/
    u32 ADS1248ReadData(void)
    {
    unsigned long r=0,ls=0;
    ls=ADS1248SPI(0xff);
    r=ls<<8;
    ls=ADS1248SPI(0xff);
    r=r+ls;
    r=r<<8;
    ls=ADS1248SPI(0xff);
    r=r+ls;
    return r;
    }
    /**************************************************************************
    * Function Name :
    * Description :
    * Input :
    * Output: :
    * Return :
    ***************************************************************************/
    void Ads1248_Result(void)
    {
    //发送单次读数据命令
    ADS1248SPI(ADS1248_CMD_RDATA);
    //读取ADC转换完成的数据
    ads1248_results=ADS1248ReadData();
    //发送空操作指令,强迫D_OUT变高
    ADS1248SPI(ADS1248_CMD_NOP);
    // CS_TEMP_REF1_HIGH;
    }
    /**************************************************************************
    * Function Name :ADS1248 初始化程序1
    * Description :
    * Input :
    * Output: :
    * Return :
    ***************************************************************************/
    void InitADS1248(void)
    {
    CS_TEMP_REF1_HIGH;

    SPI2_NSS_LOW; //所有芯片复位 复位引脚
    ddelay(90000);
    SPI2_NSS_HIGH;
    ddelay(ddelay_10ms);

    cTEMP_REF_START1_LOW;
    CS_TEMP_REF1_LOW; //片选1
    ddelay(20);

    ddelay(ddelay_10ms);

    // 初始化MUX0多路复用控制寄存器
    // 00 000 001 AIN0+ AIN1- 0x01
    // 00 010 011 AIN2+ AIN3- 0x13
    // 00 100 101 AIN4+ AIN5- 0x25
    // 00 110 111 AIN6+ AIN7- 0x37
    // Bit7-6:传感器电流源检测不使用 Bit5-3:正输入为AIN0 Bit2-0:负输入为AIN1
    ADS1248WREG(ADS1248_REG_MUX0,0x01);
    This_text[0] = ADS1248RREG(ADS1248_REG_MUX0);
    if(This_text[0]==0x01) {GPIO_ResetBits(GPIOF,GPIO_Pin_6);} else{GPIO_SetBits(GPIOF,GPIO_Pin_6);}

    // ddelay(600);
    // 初始化MUX1多路复用控制寄存器
    // 0 01 00 000
    // Bit7:启用内部晶振 Bit6-5:内部基准一直打开 Bit4-3:输入基准为片上基准 00:REF0输入 01:REF1输入 Bit2-0:000普通模式 011 温控二极管
    ADS1248WREG(ADS1248_REG_MUX1,0x30);
    This_text[1] = ADS1248RREG(ADS1248_REG_MUX1);
    if(This_text[1]==0x30) {GPIO_ResetBits(GPIOF,GPIO_Pin_7);} else{GPIO_SetBits(GPIOF,GPIO_Pin_7);}

    // 延时等待10ms,等待内部基准稳定
    ddelay(6*ddelay_10ms);

    // 初始化VBIAS偏压寄存器
    // 00000000
    // Bit7-0:偏置电压选择关闭(默认)
    ADS1248WREG(ADS1248_REG_VBIAS,0x00);
    This_text[2] = ADS1248RREG(ADS1248_REG_VBIAS);
    if(This_text[2]==0x00) {GPIO_ResetBits(GPIOF,GPIO_Pin_8);} else{GPIO_SetBits(GPIOF,GPIO_Pin_8);}

    // ddelay(600);
    // 初始化IDAC0控制寄存器
    // 0000 0000
    // Bit7-4:只读 Bit3:DRDY/DOUT功能复用Dout线 Bit2-0:关闭内部恒流源
    ADS1248WREG(ADS1248_REG_IDAC0,0x00);
    This_text[3] = ADS1248RREG(ADS1248_REG_IDAC0);
    if(This_text[3]==0x90) {GPIO_ResetBits(GPIOF,GPIO_Pin_9);} else{GPIO_SetBits(GPIOF,GPIO_Pin_9);}

    // ddelay(600);
    // 初始化IDAC1控制寄存器
    // 0000 0000
    // Bit7-4:断开内部第一恒流源的连接 Bit3-0:断开内部第二恒流源的连接
    ADS1248WREG(ADS1248_REG_IDAC1,0xff);
    This_text[4] = ADS1248RREG(ADS1248_REG_IDAC1);
    if(This_text[4]==0xff) {GPIO_ResetBits(GPIOF,GPIO_Pin_10);} else{GPIO_SetBits(GPIOF,GPIO_Pin_10);}

    // ddelay(600);
    // 初始化SYS0系统控制寄存器
    // 0 000 1000
    // Bit7:必须设置为0 Bit6-4:选择1倍增益 Bit3-0:1000: 1000SPS测量速度 1001-1111: 2000SPS测量速度
    ADS1248WREG(ADS1248_REG_SYS0,0x08);
    This_text[5] = ADS1248RREG(ADS1248_REG_SYS0);

    ddelay(600);
    CS_TEMP_REF1_HIGH; //芯片1失能
    // cTEMP_REF_START1_LOW;
    }

  • 供电采用的 ACDD+5V  AVSS 0V  DVDD3.3V, 参考电压 为REFP0 +2.048  REFN0 0 (程序中用的内部参考)  AIN0 AIN1 接热电偶正负两端。