一、前言
在嵌入式系统中,精确模拟信号采集是常见需求。ADS1115是一款高精度16位ADC,具备低功耗和内置PGA等优点,常用于电压、电流、温度等信号采集。本文将结合STM32,通过软件I2C和硬件I2C两种方式,实现ADS1115数据的读取,并给出详细解析与驱动代码,适合工程实战参考。
二、ADS1115芯片简介
芯片型号:ADS1115
制造商:Texas Instruments(TI)
主要特性:
- 16位分辨率
- 可配置4路单端输入或2路差分输入
- 内置PGA(可编程增益放大器)
- I2C接口(支持100kHz和400kHz)
- 支持单次转换和连续转换模式
- 内置比较器功能(可用于过压保护)
引脚定义:
引脚 | 名称 |
---|---|
VDD | 电源输入 |
GND | 地 |
SCL | I2C时钟线 |
SDA | I2C数据线 |
ADDR | 地址选择 |
ALERT/RDY | 比较器输出或数据准备指示 |
器件地址:
ADDR
引脚可通过接GND、VDD、SDA、SCL改变地址,共支持4个地址:
ADDR 连接 | 地址(7位) |
---|---|
GND | 0x48 |
VDD | 0x49 |
SDA | 0x4A |
SCL | 0x4B |
三、寄存器解析
ADS1115主要有四个寄存器:
地址 | 名称 | 功能说明 |
---|---|---|
0x00 | 转换寄存器 | 存储转换结果 |
0x01 | 配置寄存器 | 控制输入通道、PGA、采样率等 |
0x02 | 低阈值寄存器 | 比较器使用 |
0x03 | 高阈值寄存器 | 比较器使用 |
配置寄存器(0x01)格式:
高8位(MSB):
- [15] OS:写1启动转换
- [14:12] MUX:输入通道选择(如0x04为 AIN0-GND)
- [11:9] PGA:满量程范围(FSR)
- [8] MODE:模式选择(0=连续,1=单次)
低8位(LSB):
- [7:5] DR:数据速率(最高860SPS)
- [4] COMP_MODE:比较器模式
- [3] COMP_POL:比较器极性
- [2] COMP_LAT:锁存比较器
- [1:0] COMP_QUE:比较器队列(0x03=禁用)
四、STM32驱动实现
1. 软件I2C方式(使用GPIO模拟)
// 示例:基于GPIO模拟I2C读ADS1115数据
uint16_t ads1115_read_register(uint8_t dev_addr, uint8_t reg)
{
uint8_t high, low;
soft_i2c_start();
soft_i2c_send_byte(dev_addr << 1); // 写地址
if (!soft_i2c_wait_ack()) return 0xFFFF;
soft_i2c_send_byte(reg);