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:使用 ADS1248读取 RTD 传感器温度时出现问题

Guru**** 2538910 points
Other Parts Discussed in Thread: ADS1248

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/874628/ads1248-problem-while-reading-rtd-sensor-temparature-using-ads1248

器件型号:ADS1248

尊敬的先生:

请帮助我解决这个问题。

现在、我将处理 ADS1248、以便使用 RTD 传感器读取温度、我将使用以下 随附的代码和 ADS1248驱动程序头文件。  

我的原理图详细信息:-

原理图具有以下内容:-
--------------------------

AVDD = 5V (通过10uF 电容器证明输入电压为5V)
AVSS = GND
DVDD = 3.3V
DGND = GND
CURRNET Sources = IEXC1和 IEXC2
模拟输入= AIN0和 AIN1
基准电阻= 1.2k Ω

我将 Rref 更改为1.2k Ω、因为在 ADS1248数据表 中、Vref 应低于 AVDD 的1/2 Vs (第10.2.4.4节)。

电压和电流、我将获得:-
----------------------------------------------------
连接 RTD 传感器之前(三个端子(A、B、C)为开路):-

点"A"处的电压和电流= 5.031v 和0.992mAmp
点"B"处的电压和电流= 5.030v 和0.993mAmp
点"C"处的电压和电流= 0v 和0mAmp
Rref = 0.0v 时的电压

用100欧姆连接 RTD 传感器后(意味着 B 和 C 端子短接且端子 A 开路、然后连接 RTD 传感器):-

点"A"处的电压和电流= 2.401v 和1.827mAmp
点"B"处的电压和电流= 2.398v 和1.827mAmp
点"C"处的电压和电流= 2.398v 和1.833mAmp
Rref = 2.398v 时的电压(Vref = AVDD/2=>5/2=>2.5V)

按照如下代码设置 ADS1248的所有寄存器后、我将读取输出代码、如下所示

output_code = ADS1248_RDATA ();

但是、每次我获得相同的值(output_code = 16777215)时、手动将 RTD 传感器从100欧姆更改为150欧姆。 输出无变化。

如果更改 RTD 传感器电阻值,则在 A 点、B 点、C 点处不影响电压。  

源代码:-

----------------------------------------------------------------------

main.c:-

------

VOLTAGE_REFEND();
Data_RATE ();
SetChannel();//AIN0用于+VE (AINP);/AINP1用于-VE (AINN)
SetGain ();
SetDRDYMode ();
SetIntRef ();
Test_WRITE_IDAC0 ();
Test_WRITE_EXAC1_EXC1_IDEXC2 ();


/*------------------ */
void volte_reference (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_2_MUX1);//0x42;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_INT_REF0;//0x20;//选择内部基准并在内部连接到 REFP0和 REFN0输入引脚
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

}
/*-->------------------- //
void Data_Rate (void)
{
CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_3_SYS0);// 0x43;/////txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_DR_20;//0x22;// 增益= 4,数据速率= 20sps
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;


}

/*--------------- */
void SetChannel (void)
{
CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_0_MUX0);//0x40;//// txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_AINP0;//0x01;// AIN0
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

DelayMicroSeconds (10000);

CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_0_MUX0);//txdata;
while (TXBSY);
TXBSY |= 0;

SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_AINN1;//AIN1
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

}

/*-->------------------- */
void SetGain (void)
{
CHIPSELECT = 0;
DelayMicroSeconds (1);



TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_3_SYS0);//txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_GAIN_4;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

}

/*-->------------------- //
void SetDRDYMode (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);

SPIEN = 1;

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_10_IDAC0);//0x4A;//// txdata; IDAC 寄存器
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_DRDY_OFF;//0x06;// DRDY/OUT 引脚充当输出引脚和1000RO MICRO AMP 电流
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;


}
/*-->------------------- //
void SetIntRef (void)
{
CHIPSELECT = 0;
DelayMicroSeconds (1);



TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_2_MUX1);//txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_INT_VREF_ON;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

}

/*-->------------------- //

void Test_write_IDAC0 (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);



TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_10_IDAC0);//txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_IDAC_1000;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

}
/*-->------------------- //
void Test_write_IDAC1_EXC1 (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);



TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_11_IDAC1);//txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_IDAC1_EXT1;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;


}

/*-->------------------- //
void Test_write_IDAC1_EXC2 (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);



TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_WREG | ADS1248_11_IDAC1);//txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = ADS1248_IDAC1_EXT2;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;


}
/*-->------------------- */


void ADS1248_Reset (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT = ADS1248_CMD_RESET;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;

// RESET_PIN = 0;
//DelayMicroSeconds (1);
//reset_PIN = 1;
// DelayMicroSeconds (1);

}/*---------------
//
void Test_write_IDAC1_EXC1_EXC2 (void)
{


CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT = 0x4B;//(ADS1248_CMD_WREG | ADS1248_11_IDAC1);
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x89;对于 EXC1和 EXC2为/0x89、对于 AIN3和 AIN2为0x32
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;
}


/*--------- */
void interrupts_Init (void)
{
EA = 1; //启用全局中断
EIE1 |= 0x01;//启用串行外设接口(SPI0)中断。启用由 SPIF 标志(SPI0CN.7)生成的中断请求
// EIP1 |= 0x01;// SPI0中断设置为高优先
级 Ex0 = 1;//启用外部中断0 =
1;//触发中断 PXINT0 =
1;//下降沿 //INT0为高优先

级}/*-------------------------------------------------------

//
void ADS1248_SYNC (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT = ADS1248_CMD_SYNC;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;
}

/*--------------- //
void ADS1248_SDATAC (void)
{

CHIPSELECT = 0;
DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT = ADS1248_CMD_SDATAC;
while (TXBSY);
TXBSY |= 0;

DelayMicroSeconds (1);
CHIPSELECT = 1;
}

/*--------------- //
unsigned char ADS1248ReceiveByte (void)
{
unsigned char result = 0;
while (TXBSY);//确保 TX 缓冲区
TXBSY 中没有任何内容|=0;
SPI0DAT = 0xFF;//发送 NOP 来启动 SCLK
while (TXBSY);//等待直到所有数据被发送(接收)
TXBSY |=0;
结果= SPI0DAT;//捕获接收缓冲区并返回结果
返回结果;
}-->-----------------

//
unsigned char ADS1248_RREG (void)
{
CHIPSELECT = 0;
//DelayMicroSeconds (1);

TXBSY |= 0;
SPI0DAT =(ADS1248_CMD_RREG | ADS1248_10_IDAC0);// txdata;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0x01;
while (TXBSY);
TXBSY |= 0;


SPI0DAT = 0xFF;
while (TXBSY);
TXBSY |= 0;

//DelayMicroSeconds (1);
CHIPSELECT = 1;

返回 SPI0DAT;
}
/*------------------ */

unsigned long int ADS1248_RDATA (void)
{


unsigned char var;
unsigned long int result;
char res[3];

CHIPSELECT = 0;
Delayms (1);//DelayMicroSeconds (1);

VAR = SPI0_Write (ADS1248_CMD_RDATA);
//读取数据(一旦 res[0]= ADS1248ReceiveByte ();
res[1]= ADS1248ReceiveByte ();
res[2]= ADS1248ReceiveByte ();
var = ADS1248ReceiveByte (); 如果

没有其他命令等待 Delayms (1)、可发送//A NOP 以强制 DOUT/DRDY 处于高电平;// DelayMicroSeconds (1);
CHIPSELECT = 1;


结果= 0x00;
结果=(res[0]& 0xFF);//must & 0xFF 否则随机错误发生
结果=(结果<< 8);
结果=结果|(res[1]& 0xFF);
结果=(结果<< 8);
结果=结果|(res[2]& 0xFF);

return( result );}


------------------------------------------------------------------------
ADS1248.h:-
--------

#ifndef __ADS1248_H
#define __ADS1248_H

//#define USE_INTER_VREF
/*错误返回值*/
#define ADS1248_NO_ERROR 0
#define ADS1248_ERROR -1

/*命令定义*/
//系统控制
#define ADS1248_CMD_WAKEUP 0x00
#define ADS1248_CMD_SLEEP 0x03
#define ADS1248_CMD_SYNC 0x05
#define ADS1248_CMD_RESET 0x07
#define ADS1248_CMD_NOP 0xFF
//数据读取
#define ADS1248_CMD_RDATA 0x13
#define ADS1248_CMD_RDATAC 0x15
#define ADS1248_CMD_SDATAC 0x17
//读取寄存器
#define ADS1248_CMD_RREG 0x20
//写入寄存器
#define ADS1248_CMD_WREG 0x40
//校准
#define ADS1248_CMD_SYSOCAL 0x60
#define ADS1248_CMD_SYSGCAL 0x61
#define ADS1248_CMD_SELFOCAL 0x62


/* ADS1248寄存器定义*/
#define ADS1248_0_MUX0 0x00
#define ADS1248_1_VBIAS 0x01
#define ADS1248_2_MUX1 0x02
#define ADS1248_3_SYS0 0x03
#define ADS1248_4_OFC0 0x04
#define ADS1248_5_OFC1 0x05
#define ADS1248_6_OFC2 0x06
#define ADS1248_7_FSC0 0x07
#define ADS1248_8_FSC1 0x08
#define ADS1248_9_FSC2 0x09
#define ADS1248_10_IDAC0 0x0A
#define ADS1248_11_IDAC1 0x0B
#define ADS1248_12_GPIOCFG 0x0C
#define ADS1248_13_GPIODIR 0x0D
#define ADS1248_14_GPIODAT 0x0E


/* ADS1248寄存器0 (MUX0)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// BCS[1:0]| MUX_SP[2:0]| MUX_SN[2:0]
//
//定义 BCS (烧毁电流源)
#define ADS1248_BCS_OFF 0x00
#define ADS1248_BCS_500nA 0x40
#define ADS1248_BCS_2uA 0x80
#define ADS1248_BCS_10uA 0xC0
//定义正多路复用器输入通道
#define ADS1248_AINP0 0x00
#define ADS1248_AINP1 0x08
#define ADS1248_AINP2 0x10
#define ADS1248_AINP3 0x18
#define ADS1248_AINP4 0x20
#define ADS1248_AINP5 0x28
#define ADS1248_AINP6 0x30
#define ADS1248_AINP7 0x38
//定义负多路复用器输入通道
#define ADS1248_AINN0 0x00
#define ADS1248_AINN1 0x01
#define ADS1248_AINN2 0x02
#define ADS1248_AINN3 0x03
#define ADS1248_AINN4 0x04
#define ADS1248_AINN5 0x05
#define ADS1248_AINN6 0x06
#define ADS1248_AINN7 0x07

/* ADS1248寄存器1 (VBIAS)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// VBIAS[7:0]
//
#define ADS1248_VBIAS_OFF 0x00
#define ADS1248_VBIAS0 0x01
#define ADS1248_VBIAS1 0x02
#define ADS1248_VBIAS2 0x04
#define ADS1248_VBIAS3 0x08
#define ADS1248_VBIAS4 0x10
#define ADS1248_VBIAS5 0x20
#define ADS1248_VBIAS6 0x40
#define ADS1248_VBIAS7 0x80


/* ADS1248寄存器2 (MUX1)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// CLKSTAT | VREFCON[1:0]| REFSELT[1:0]| MUXCAL_[2:0]
//
//定义内部基准
#define ADS1248_INT_VREF_OFF 0x00
#define ADS1248_INT_VREF_ON 0x20
#define ADS1248_INT_VREF_CONV 0x40
//定义参考选择
#define ADS1248_REF0 0x00
#define ADS1248_REF1 0x08
#define ADS1248_INT 0x10
#define ADS1248_INT_REF0 0x18
//定义系统监视器
#define ADS1248_MEAS_NORM 0x00
#define ADS1248_MEAS_OFFSET 0x01
#define ADS1248_MEAS_GAIN 0x02
#define ADS1248_MEAS_TEMP 0x03
#define ADS1248_MEAS_REF1 0x04
#define ADS1248_MEAS_REF0 0x05
#define ADS1248_MEAS_AVDD 0x06
#define ADS1248_MEAS_DVDD 0x07

/* ADS1248寄存器3 (SYS0)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// 0 | PGA[2:0]| DOOR[3:0]
//
//定义增益
#define ADS1248_GAIN_1 0x00
#define ADS1248_GAIN_2 0x10
#define ADS1248_GAIN_4 0x20
#define ADS1248_GAIN_8 0x30
#define ADS1248_GAIN_16 0x40
#define ADS1248_GAIN_32 0x50
#define ADS1248_GAIN_64 0x60
#define ADS1248_GAIN_128 0x70
//定义数据速率
#define ADS1248_DR_5 0x00
#define ADS1248_DR_10 0x01
#define ADS1248_DR_20 0x02
#define ADS1248_DR_40 0x03
#define ADS1248_DR_80 0x04
#define ADS1248_DR_160 0x05
#define ADS1248_DR_320 0x06
#define ADS1248_DR_640 0x07
#define ADS1248_DR_1000 0x08
#define ADS1248_DR_2000 0x09

/* ADS1248寄存器4 (OFC0)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// OFC0[7:0]
//

/* ADS1248寄存器5 (OFC1)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// OFC1[7:0]
//

/* ADS1248寄存器6 (OFC2)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// OFC2[7:0]
//

/* ADS1248寄存器7 (FSC0)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// FSC0[7:0]
//

/* ADS1248寄存器8 (FSC1)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// FSC1[7:0]
//

/* ADS1248寄存器9 (FSC2)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// FSC2[7:0]
//

/* ADS1248寄存器 A (IDAC0)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// ID[3:0]| DRDY_MODE | IMAG[2:0]
//
//在 DOUT 上定义 DRDY 模式
#define ADS1248_DRDY_OFF 0x00
#define ADS1248_DRDY_ON 0x08
//定义 IDAC 幅度
#define ADS1248_IDAC_OFF 0x00
#define ADS1248_IDAC_50 0x01
#define ADS1248_IDAC_100 0x02
#define ADS1248_IDAC_250 0x03
#define ADS1248_IDAC_500 0x04
#define ADS1248_IDAC_750 0x05
#define ADS1248_IDAC_1000 0x06
#define ADS1248_IDAC_1500 0x07

/* ADS1248寄存器 B (IDAC1)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// I1DIR[3:0]| I2DIR[3:0]
//
//定义 IDAC1输出
#define ADS1248_IDAC1_A0 0x00
#define ADS1248_IDAC1_A1 0x10
#define ADS1248_IDAC1_A2 0x20
#define ADS1248_IDAC1_A3 0x30
#define ADS1248_IDAC1_A4 0x40
#define ADS1248_IDAC1_A5 0x50
#define ADS1248_IDAC1_A6 0x60
#define ADS1248_IDAC1_A7 0x70
#define ADS1248_IDAC1_EXT1 0x80
#define ADS1248_IDAC1_EXT2 0x90
#define ADS1248_IDAC1_OFF 0xF0
//定义 IDAC2输出
#define ADS1248_IDAC2_A0 0x00
#define ADS1248_IDAC2_A1 0x01
#define ADS1248_IDAC2_A2 0x02
#define ADS1248_IDAC2_A3 0x03
#define ADS1248_IDAC2_A4 0x04
#define ADS1248_IDAC2_A5 0x05
#define ADS1248_IDAC2_A6 0x06
#define ADS1248_IDAC2_A7 0x07
#define ADS1248_IDAC2_EXT1 0x08
#define ADS1248_IDAC2_EXT2 0x09
#define ADS1248_IDAC2_OFF 0x0F

/* ADS1248寄存器 C (GPIOCFG)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// IOCFG[7:0]
//
//定义 GPIO (0模拟;1 GPIO)
#define ADS1248_GPIO_0 0x01
#define ADS1248_GPIO_1 0x02
#define ADS1248_GPIO_2 0x04
#define ADS1248_GPIO_3 0x08
#define ADS1248_GPIO_4 0x10
#define ADS1248_GPIO_5 0x20
#define ADS1248_GPIO_6 0x40
#define ADS1248_GPIO_7 0x80

/* ADS1248寄存器 D (GPIODIR)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// IODIR.[7:0]
//
//定义 GPIO 方向(0输出;1输入)
#define ADS1248_IO_0 0x01
#define ADS1248_IO_1 0x02
#define ADS1248_IO_2 0x04
#define ADS1248_IO_3 0x08
#define ADS1248_IO_4 0x10
#define ADS1248_IO_5 0x20
#define ADS1248_IO_6 0x40
#define ADS1248_IO_7 0x80

/* ADS1248寄存器 E (GPIODAT)定义*/
//位7 |位6 |位5 |位4 |位3 |位2 |位1 |位0
///----------------------------------------------
// IOIDAT[7:0]
//
#define ADS1248_OUT_0 0x01
#define ADS1248_OUT_1 0x02
#define ADS1248_OUT_2 0x04
#define ADS1248_OUT_3 0x08
#define ADS1248_OUT_4 0x10
#define ADS1248_OUT_5 0x20
#define ADS1248_OUT_6 0x40
#define ADS1248_OUT_7 0x80


typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;


void ADS1248_GPIO_Init (void);
void ADS1248_SPI_Init (void);
静态 unsigned char ADS1248_SPI_SendByte (unsigned char outByte);
int ADS1248WaitForDataReady (int Timeout);

void ADS1248ReadRegister (int StartAddress、int NumRegs、unsigned * pData);//读取寄存器(NumReg 是读取的寄存器总数)
void ADS1248WriteRegister (int StartAddress、int NumReg、unsigned * pData);//对寄存器进行写操作(NumReg 是写入的寄存器总数)
//void ADS1248WriteSequence (int StartAddress、int NumReg、unsigned * pData);//写入寄存器(NumReg 是写入的寄存器总数)
void ADS1248SendRDATAC (void);//连续读取数据模式
void ADS1248SendSDATAC (void);//停止连续读取数据模式
void ADS1248SendSYSOCAL (void);//系统偏移校准
void ADS1248SendSYSGCAL (void);//系统增益校准
void ADS1248SendSELFOCAL (void);//自偏移校准

/*寄存器设置值命令*/
//与 MUX0相关
int ADS1248SetBurnOutSource (int Burnout);
内部 ADS1248SetChannel (内部 PMUX、内部 vMux);// PMUX (0=AINP。 1=AINN);vMux (多路复用器通道选择值)
//与 VBIAS 相关
int ADS1248SetBias (unsigned char vBias);
//与 MUX1相关
int ADS1248SetIntRef (int sRef);
int ADS1248SetVoltageReference (int VoltageRef);
int ADS1248SetSystemMonitor (int Monitor);
//与 SYS0相关
int ADS1248SetGain (int gain);
int ADS1248SetDataRate (int datarate);
//与 OFC 相关(3个寄存器)
int ADS1248SetOFC (long RegOffset);
//与 FSC 相关(3个寄存器)
INT ADS1248SetFSC (Long RegGain);
//与 IDAC0相关
INT ADS1248SetDRDYMode (int DRDYMode);
int ADS1248SetCurrentDACOutput (int CurrentOutput);
//与 IDAC1相关
int ADS1248SetIDACRouting (int IDACroute、int IDACdir);// IDACRoute (0 = I1DIR、1 = I2DIR)
//与 GPIOCFG 相关
int ADS1248SetGPIOConfig (unsigned char cData);
//与 GPIODIR 相关
int ADS1248SetGPIODir (unsigned char cData);
//与 GPIODAT 相关
int ADS1248SetGPIO (unsigned char cData);

/*寄存器获取值命令*/
//与 MUX0相关
int ADS1248GetBurnOutSource (void);
int ADS1248GetChannel (int cMux);
//与 VBIAS 相关
unsigned char ADS1248GetBias (void);
//与 MUX1相关
int ADS1248GetCLKSTAT (void);
int ADS1248GetIntRef (void);
int ADS1248GetVoltageReference (void);
int ADS1248GetSystemMonitor (void);
//与 SYS0相关
int ADS1248GetGain (void);
int ADS1248GetDataRate (void);
//与 OFC 相关(3个寄存器)
long ADS1248GetOFC (void);
//与 FSC 相关(3个寄存器)
长 ADS1248GetFSC (空);
//与 IDAC0相关
//int ADS1248GetID (void);
int ADS1248GetDRDYMode (void);
int ADS1248GetCurrentDACOutput (void);
//与 IDAC1相关
INT ADS1248GetIDACRouting (int WhichOne);// IDACRoute (0 = I1DIR、1 = I2DIR)
//与 GPIOCFG 相关
unsigned char ADS1248GetGPIOConfig (void);
//与 GPIODIR 相关
unsigned char ADS1248GetGPIODir (void);
//与 GPIODAT 相关
unsigned char ADS1248GetGPIO (void);

/*其他命令*/
INT ADS1248RDATACRead (void);//直接根据 RDATAC 模式(写入 NOP)和32个 SCLK 读取数据
int ADS1248RDATARead (void);

void Delay1us (void);
void Delay10us (void);
void Delay200us (void);
void Delay10ms (void);
void Delay20ms (void);

void ADS1248SendSYSNC (void);
void ADS1248SendRDATA (void);
void ADS1248_Reset (void);

unsigned char Ads_Calibrate (unsigned int gain);

#endif

原理图:-

--------------

因此、请参阅我的问题向我提供 建议我使用数据表添加了 ADS1248数据表、使用数据表添加了基本 RTD 传感器、我获得了将输出代码转换为电阻器、然后将电阻器转换为温度的公式。

1) 1) ADS1248如何在内部将模拟数据转换为数字形式?

2) 2)是否必须校准数字数据才能获得正确的输出代码?

请帮帮我。 我自一个月以来一直在挣扎。

提前感谢、

此致、

黄色

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Amarr、

    ADS1248将模拟数据转换为数字数据、以便使用 Δ-Σ 调制器。 调制器将模拟输入与基准电压进行比较、并输出与基准电压相比模拟输入成比例的代码。  

    可能需要校准数字数据、具体取决于您的设计尝试满足的失调电压和增益误差规格类型。  目前我不建议写入任何校准寄存器。  

    您当前正在接收满量程输出读数、这意味着模拟输入电压乘以增益和校准寄存器的值大于基准电压。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Smith 、这意味着我将根据上述源代码获得正确的值。 对吧? 但为什么原始值不会根据 RTD 传感器电阻值进行充电。 我的原理图是否需要进行任何更改? 谢谢 、Amarr
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Smith、

    在 ADS1248中、

    1) 1)它将如何获取基准电压(这意味着我将 ADS1248寄存器配置为启用内部电压基准并在内部连接到 REFN0和 REFP0。 那么、我仍然应该为 REFN0提供外部电压

      REFP0引脚或电压由 ADS1248 IC 供电? 如果由 ADS1248提供电压、REFNP0上会显示多少电压?

    2) 2)如果 AVDD = 5V、那么 Rref 值是多少? 或者、如果 AVDD = 3.3V、那么 RREF 值是多少?  适用于三线制 RTD 测量、低侧参考设计?

    3) 3)是否可以通过将 RTD 传感器连接到 ADS1248来共享 ME 寄存器设置以使用 RTD 传感器读取温度?

    4) 4)如果我更改 RTD 传感器电阻值、它是否会反映到模拟引脚(AINp、AINn)电压?我们是否可以使用万用表观察它?

    5) 5)如何使用 Vref 计算 ADS1248中的 ADC 数据?

    6) ADS1248如何获取模拟数据(电压)、如何获取它们之间的差分电压?  

    7) 7) 7)您能否在 ADS1248中共享一个 ADC 到数字转换结果的流程? 这意味着在 DR = 20、增益= 4、默认值数字滤波器设置时、它将如何实现?

    谢谢、

    AMARR

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Amarr、

    我认为本培训系列将有助于回答您的一些问题: https://training.ti.com/introduction-designing-delta-sigma-adcs-training-series

    有关典型内部基准电压幅度、请参阅 ADS1248数据表特性表。