ADS1115使用之电路与程序

本文详细介绍了利用ADS1115芯片进行电桥输出电压测量,从而实现温度监测的过程。电路设计包括电阻、电容的配置,并提供了焊接示例。程序设计部分涉及IIC通信协议,展示了ADS1115初始化和数据读取的函数实现。通过串口助手和逻辑分析仪验证了系统的正确运行。
摘要由CSDN通过智能技术生成

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

应用电路

ADS1115的应用电路参考其数据手册,电路图如下。
在这里插入图片描述
差分输入的前级电路如下。
在这里插入图片描述
电路图中的电阻、电容的具体参数以及作用可参考亚德诺半导体官网的一篇文章,链接如下:https://www.analog.com/cn/analog-dialogue/articles/afe-design-considerations-rtd-ratiometric.html

电路焊接后如下:
在这里插入图片描述
在这里插入图片描述

如上电路图片所示,笔者是在背面焊接的贴片电阻以及电容。电桥处的电阻分别取的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_Init()函数中,笔者一共向ADS1115发送了四个8位数据,第一个就地址数据,第二个数据用于指定后续操作的寄存器。函数中的0x01代表,后面数据将对Config register操作,其他情况如下图:
在这里插入图片描述
在这里插入图片描述
第三、四个数据即是分别写入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,其他功能以后再慢慢探索。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值