物联网AI MicroPython传感器学习 之 ADS1115 ADC转换器

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

ADS1115是德州仪器出品的一个超小,低功率,16位精度并带有内部参考电压的AD转换器(Analog to Digital Converter)。主要运用于高精度仪表,汽车电子,蓄电池电压采集等高精度采集场合。
ADS1115传感器外观及引脚功能说明如下:
image.png

引脚定义

名称说明
V电源正极
G地线
SCLI2C总线的时钟线
SDAI2C总线的数据线
ADDRI2C接口地址选择线
ALERT数字比较器输出或转换完成信号
A0ADC通道0
A1ADC通道1
A2ADC通道2
A2ADC通道3

二、技术参数

  • 供电电压:2.0V ~ 5.5V
  • 采用I2C通信协议,最高传输速率可到3.4MHz,I2C地址是0X48
  • ADC测量速率:8Bps~860Bps,可调节
  • 支持4个单通道输入或2路差分输入
  • 可采集电压范围:+/-6.144V
  • 支持单次测量和连续测量模式
  • 芯片封装:QFN-10封装或MSP-10,2mm × 1.5mm × 0.4mm
  • 传感器尺寸:26mm x 9.3mm

三、软件接口

ADS1115(i2cObj) - 创建ADS1115驱动对象

  • 函数原型:

adcObj = ADS1115(i2cObj)

  • 参数说明:
参数类型必选参数?说明
i2cObjI2CI2C对象创建
  • 返回值:
    执行成功,返回ADS1115对象;创建失败,抛出Exception
  • 示例代码:
from machine import I2C,Pin          # 驱动库
import ads1x15                       # ADS1x15系列ADC传感器驱动库

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)          
print("ADS1115 inited!")
adcDev = ads1x15.ADS1115(i2cObj)  # 初始化ADS1115传感器对象
  • 输出:
ADS1115 inited!

readVoltage - 读取ADC通道上的输入电压

  • 函数功能:
    量测ADC通道的输入电压
  • 函数原型:

ADS1115.readVoltage(channel)

  • 参数说明:
    | 参数 | 类型 | 必选参数? | 说明 |
    | — | — | — | — |
    | channel | int | 是 | 通道ID, 范围[0, 1, 2, 3],分别对应A0, A1, A2, A3通道 |

  • 返回值:
    返回目标通道的输入电压,单位:mV

  • 示例:

from machine import I2C,Pin          # 驱动库
import ads1x15                       # ADS1x15 ADC传感器驱动库

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)          
print("ADS1115 inited!")
adcDev = ads1x15.ADS1115(i2cObj)  # 初始化ADS1115传感器对象

temp = adcDev.readVoltage(0)      # 量测A0通道的输入电压值
print("A0 input voltage is ", temp, " mV")
  • 输出:
ADS1115 inited!
A0 input voltage is 1100 mV

setMaxVoltage - 设置量程

  • 函数功能:
    设置ADS1115传感器的最大量程
  • 函数原型:

ADS1115.setMaxVoltage(maxVoltage)

  • 参数说明:
参数类型必选参数?说明
maxVoltageint设置待量测电压最大电压,单位:mV
需小于ADS1115最大可测量电压(6144)

如果待量测电压的范围为[-vMin, +vMax],则maxVoltage取max(vMin, vMax), 即vMin和vMax中的最大值。

此API并非必须调用,但合理设置此量程可以获得更高的测量精度,ADS1115提供了+/-6144, +/-4096, +/-2048, +/-1024,+/-512,+/-256几个级别,如果maxVoltage非6144/4096/2048/1024/512/256里边的值,则此函数中会向上选取最接近的量程。

  • 返回值:
    成功返回0;失败抛出Exception
  • 示例:
from machine import I2C,Pin          # 驱动库
import ads1x15                       # ADS1x15 ADC传感器驱动库

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)          
print("ADS1115 inited!")
adcDev = ads1x15.ADS1115(i2cObj)  # 初始化ADS1115传感器对象

adcDev.setMaxVoltage(3300)           # 设置电压量测范围为+/-3300mV
print("setMaxVoltage done")
  • 输出:
ADS1115 inited!
setMaxVoltage done

四、接口案例

  • 案例代码:
from machine import I2C,Pin
import ads1x15                       # ADS1x15 ADC传感器驱动库
import utime

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)          
print("ADS1115 inited!")
adcDev = ads1x15.ADS1115(i2cObj)  # 初始化ADS1115传感器对象

while True:
    utime.sleep(1)
    temp = adcDev.readVoltage(0)      # 量测A0通道的输入电压值
    print("A0 input voltage is ", temp, " mV")
  • 输出:
ADS1115 inited!
...
A0 input voltage is 1100 mV
...
A0 input voltage is 1121 mV
...

五、通信协议

主控芯片和ADS1115传感器之间通信所用命令字如下表所示:

序号寄存器功能说明命令字宏定义
10x0读取ADC采样结果ADS1x15_POINTER_CONVERSION
20x1设定ADC采样设定(目标通道、增益、测量模式、单次/连续测量模式、测量速率等)ADS1x15_POINTER_CONFIG
30x2设定阈值的低8位ADS1x15_POINTER_LOW_THRESHOLD
40x3设定阈值的高8位ADS1x15_POINTER_HIGH_THRESHOLD

实际控制此传感器的流程可参考如下伪代码。

  • 设定ADC量测的参数并读取量测结果
    通过I2C向ADS1x15_POINTER_CONFIG寄存器写入ADC量测的参数(目标通道、增益、测量模式、测量速率)
    等待ADC采样结束(时间为一个采样周期(1/采样周期)+一个很小的偏差,如0.1ms)
    通过I2C发送读取ads1x15的ADS1x15_POINTER_CONVERSION寄存器值的指令
    将测量结果转换成实际电压

测量的数字结果转化为实际电压算法请参考驱动中的readVoltage函数的实现

六、工作原理

从下图可以看到th06-si7006内部集成了湿度传感器和温度传感器,通过ADC采样输入到校正储存器。通过数字接口IIC读取数据。
image.png
其中AI0, AI1, AI2, AI3为测量引脚,ALERT/RDY为中断引脚,ADDR为可变地址控制引脚,SCL/SDA为I2C总线引脚。
典型电路如下,由于SCL和SDA为开漏输出,驱动能力不足,需要接上拉电阻。VDD和VSS之间接一个小电容滤除高频杂波,GND引脚接地即可。
image.png

参考文献及购买链接

[1] ADS1115 ADC转换器参考手册
[2] ADS1115 购买链接

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值