初级会员

- 积分
- 171
- 金钱
- 171
- 注册时间
- 2019-2-7
- 在线时间
- 29 小时
|
本帖最后由 XiaoXueDi 于 2019-2-7 19:32 编辑
电路板是根据以上原理图来做的,能读取电压,读取电压用差分方式的配置读取冷端和热端电压差,电压能随温度变化而变化,但误差较大。用内部高精度温度传感器读取温度时出现了问题,同样是采用差分方式的配置输入,内部温度传感器不随温度变化而变化,在36度左右 和 10度左右的以及其它温度的环境下读出的数据始终在 17.937500 左右,并且不接热电偶也是前面这个值的左右,下面是串口打印的温度值,调了好几天了,一直没找到问题,不知道是不是寄存器配置错误,感觉内部温度传感器没起作用,下面有ADS1118部分驱动代码,求大神指点,谢谢!!!
*******************************
串口打印温度:
*******************************
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.906250
vol = 17.937500
vol = 17.937500
vol = 17.937500
vol = 17.937500
************************
/*******************************************************************************
* 函 数 名 : ADS1118_Start
* 功 能 : ADS1118启动信号
* 函数说明 : 初始化I/O口之后调用
* 创建日期 :2018.5.12
********************************************************************************/
u16 ADS1118_Start(u8 CS)
{
u16 dat;
u16 temp;
dat = 0x0E9B; //0X0E8B;
delay_ms(1); //等待启动
if(CS==CS1) ADS1118_CS1 = 0;
else ADS1118_CS2 = 0;
delay_us(1);
temp = ADS1118_ReadWriteByte(dat>>8); //MSB
temp<<=8;
temp |= ADS1118_ReadWriteByte(dat); //LSB
if(CS==CS1) ADS1118_CS1 = 1;
else ADS1118_CS2 = 1;
return temp;
}
/*******************************************************************************
* 函 数 名 : ADS1118_ReadValue
* 功 能 : 读取ADS1118给定通道值
* 输入参数 : ch,通道号,0x00和0x03
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_ReadValue(u8 ch,u8 CS)
{
u8 k,i;
u16 temp;
u16 dat;
double voltage;
k=ch;
if(ch==1) dat = 0X0E8B; //0.256V
else if(ch==2) dat = 0X3E8B;
else return;
temp = ADS1118_ReadWrite2Byte(dat,CS);
temp = ADS1118_ReadWrite2Byte(dat,CS);
if(temp>=0x8000)
{
temp = 0xFFFF-temp;
voltage = (-1.0)*(((double)temp)*256/32768);//mv
}
else
{
voltage = (1.0)*((double) temp)*256/32768;
}
ads.ad[k-1] = temp;
ads.vol = voltage;
}
/*******************************************************************************
* 函 数 名 : ADS1118_ReadValue
* 功 能 : 读取ADS1118给定通道值
* 输入参数 : ch,通道号,0x00和0x03
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_ReadTemperature(u8 ch,u8 CS)
{
u8 k,i;
u16 temp;
u16 dat;
double voltage;
k=ch;
if(ch==1) dat = 0x0E9B; //0.256V
else if(ch==2) dat = 0X3E9B;
else return;
temp = ADS1118_ReadWrite2Byte(dat,CS);
temp = ADS1118_ReadWrite2Byte(0x0000,CS);
if(temp>=0x8000)
{
temp = (~((temp>>2)-1))&0x3FFF;
voltage = (-1.0)*(((double)temp)*0.03125);//mv
}
else
{
temp>>=2;
voltage = (1.0)*(((double)temp)*0.03125);
}
ads.ad[k-1] = temp;
ads.vol = voltage;
}
/*******************************************************************************
* 函 数 名 : ADS1118_Test_ReadValue
* 功 能 : ADS1118数据读取测试
* 函数说明 : 将读取到的数据发送至上位机
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_Test_ReadValue(u8 CS)
{
ADS1118_GPIO_Init();
ADS1118_Start(CS);
while(1)
{
// ADS1118_ReadValue(2,CS); //读取电压值
ADS1118_ReadTemperature(1,CS); //读取温度
printf("vol = %f\r\n",ads.vol);
printf("\r\n");
delay_ms(3000);
}
}
|
|