ADS1115使用之电路与程序

本文介绍使用ADS1115进行电桥输出电压的测量,进而实现温度测量。

应用电路

ADS1115的应用电路参考其数据手册,电路图如下。

差分输入的前级电路如下。
ADS1115使用之电路与程序_第1张图片
电路图中的电阻、电容的具体参数以及作用可参考亚德诺半导体官网的一篇文章,链接如下:https://www.analog.com/cn/analog-dialogue/articles/afe-design-considerations-rtd-ratiometric.html

电路焊接后如下:
ADS1115使用之电路与程序_第2张图片
ADS1115使用之电路与程序_第3张图片

如上电路图片所示,笔者是在背面焊接的贴片电阻以及电容。电桥处的电阻分别取的2k、2k、1k、PT1000,电桥的激励电压由REF3025参考电压芯片产生。电桥输出差分信号给后级的ADS1115,读取ADS1115的测量值即可计算出温度。

程序设计

首先笔者是基于正点原子的myiic.c、myiic.h开发的。
ADS1115相关程序如下:

u8 ADS1115_Init()
{
	 IIC_Start();
	 IIC_Send_Byte(WRITE_ADDR);   
     if(IIC_Wait_Ack())return 0;
     IIC_Send_Byte(0x01);    
	 if(IIC_Wait_Ack())return 0;        
     IIC_Send_Byte(0x8B);
     if(IIC_Wait_Ack())return 0;        
     IIC_Send_Byte(0x83);
     if(IIC_Wait_Ack())return 0;                 
     IIC_Stop();
	 delay_us(20);//写配置寄存器	
	 return 1;
}

u16 ADS1115_Read_Data()
{
	 u16 reg_data=0;
	 u16 temp=0; 
	 ADS1115_Init();
	 delay_us(200);
	
	 IIC_Start();
	 IIC_Send_Byte(WRITE_ADDR);   
     if(IIC_Wait_Ack())return 0;
     IIC_Send_Byte(0x00);    
	 if(IIC_Wait_Ack())return 0;                            
     IIC_Stop();
	 delay_us(5);
	 IIC_Start();
	 IIC_Send_Byte(READ_ADDR);   
     if(IIC_Wait_Ack())return 0;
	 reg_data= IIC_Read_Byte(1);
	 reg_data=(reg_data<<8)&0xFF00;
	 temp=IIC_Read_Byte(0);
	 IIC_Stop();
	 reg_data|=temp;
	 return reg_data;
	 delay_ms(5);//读转换寄存器
}

首先需要确定的是WRITE_ADDR、READ_ADDR,该数据为8位。首先根据手册中的表格确定前7位,再根据写为0,读为1确定第8位。笔者选用的是WRITE_ADDR = 0x90、READ_ADDR=0x91。表格如下:
ADS1115使用之电路与程序_第4张图片
在ADS1115_Init()函数中,笔者一共向ADS1115发送了四个8位数据,第一个就地址数据,第二个数据用于指定后续操作的寄存器。函数中的0x01代表,后面数据将对Config register操作,其他情况如下图:
ADS1115使用之电路与程序_第5张图片

第三、四个数据即是分别写入Config Register的高8位和低8位数据。
笔者写入的是0x8B、0x83,根据数据手册中的Config Register的定义可知,ADS1115被配置为AIN0、AIN1通道作为差分输入,量程为0.256V,单次转换模式,数据速率为128SPS。16位寄存器的低5位是有关ALERT/RDY引脚的配置,若无特殊需求,可直接设置为默认值。

在ADS1115_Read_Data()函数中,再次调用ADS1115_Init()函数。后面的操作为先发送WRITE_ADDR,再发送0x00,使操作寄存器变为Conversion Register,然后发送READ_ADDR,即可调用IIC_Read_Byte()函数进行数据的读取。注意前后两次调用IIC_Read_Byte()函数的参数不同。最后即可返回16位数据。

最后电压值=(读取到的数据)乘FSR除以(1<<15)。

使用过程中需要注意的是,因为ADS1115被设置为差分输入,且电桥的电阻配置使输出电压由正有负,所以需要对读取到的数据处理一下,以便能识别负电压。
具体看下图:
ADS1115使用之电路与程序_第6张图片

结果验证

使用串口助手打印输出数据如下:
ADS1115使用之电路与程序_第7张图片
使用逻辑分析仪分析时序如下:
在这里插入图片描述
在这里插入图片描述
到这里,算是成功使用上了ADS1115,其他功能以后再慢慢探索。

你可能感兴趣的:(电路,stm32,单片机,硬件)