基于STM32的ADS1115-16位ADC电压读取


PS:截图源自立创商城,侵权必删


前言:本文主要介绍基于STM32HAL库的ADS1115使用方法,掘弃理论方面的介绍,同时给出该芯片的精简化驱动。


一、寄存器表解读

ADS111x系列芯片通过 I2C接口 提供了四个可访问的寄存器,它们通过地址指针寄存器(Address Pointer Register) 来选择访问目标。这些寄存器的功能分别是:

Conversion Register(转换寄存器):
保存最近一次模数转换(ADC)的结果。
用户可以通过读取该寄存器来获取数字化后的模拟信号值。

Config Register(配置寄存器):
用于更改ADS111x的工作模式。
可以查询设备的状态,比如是否完成转换等。
是设备操作的核心寄存器。

Lo_thresh Register(低阈值寄存器):
用于设置比较器的下限阈值。
当输入信号低于此值时,比较器会触发一个事件。

Hi_thresh Register(高阈值寄存器):
用于设置比较器的上限阈值。
当输入信号高于此值时,比较器会触发一个事件。

1. 地址指针寄存器(Address Pointer Register)

寄存器名称和作用:
地址指针寄存器 并不是一个实际存储数据的寄存器,而是一个控制机制,用于选择哪一个目标寄存器进行读写操作。通过向地址指针寄存器写入特定值,ADS111x芯片会将内部的读写焦点切换到指定的目标寄存器。

在这里插入图片描述

2.转换寄存器(Conversion Register)

Conversion Register(转换寄存器) 是一个 16位 的只读寄存器,用于存储最近一次完成的模数转换(ADC)结果。数据以二进制补码(Two’s Complement)格式存储。
在这里插入图片描述
电压跟读取到的数据的转换关系为:
V i n = O u t p u t   C o d e 2 15 × F . S . R . Vin = \frac{Output \ Code}{2^{15}} \times F.S.R. Vin=215Output Code×F.S.R.
F.S.R跟最小分辨率的对应关系是
在这里插入图片描述

3.配置寄存器(Config Register)

对于ADS1115有:
在这里插入图片描述
各个位的详细作用:

位段字段名称类型复位值功能描述具体值说明
15OSR/W1b操作状态或单次转换启动
- 写入时:
0b:无效果
1b:在掉电模式下启动一次单次转换
- 读取时:
0b:设备正在转换
1b:设备处于空闲状态
14:12MUX[2:0]R/W000b输入多路复用器配置(仅ADS1115支持)
- 配置输入通道对:
ADS1113/1114固定为AIN0 - AIN1
000b:AIN0 - AIN1(默认)
001b:AIN0 - AIN3
010b:AIN1 - AIN3
011b:AIN2 - AIN3
100b:AIN0 GND
101b:AIN1 GND
110b:AIN2 GND
111b:AIN3 GND
11:9PGA[2:0]R/W010b可编程增益放大器范围
- 设置全量程范围(FSR):
000b:±6.144V
001b:±4.096V
010b:±2.048V(默认)
011b:±1.024V
100b:±0.512V
101b ~ 111b:±0.256V
8MODER/W1b设备工作模式
- 控制设备转换模式:
0b:连续转换模式
1b:单次转换模式或掉电状态(默认)
7:5DR[2:0]R/W100b数据速率(SPS)
- 控制设备数据采样速率
000b:8SPS
001b:16SPS
010b:32SPS
011b:64SPS
100b:128SPS(默认)
101b:250SPS
110b:475SPS
111b:860SPS
4COMP_MODER/W0b比较器模式(仅ADS1114/1115支持)
- 控制比较器的工作模式
0b:传统比较器模式(默认)
1b:窗口比较器模式
3COMP_POLR/W0b比较器极性(仅ADS1114/1115支持)
- 控制ALERT/RDY引脚的极性
0b:低电平有效(默认)
1b:高电平有效
2COMP_LATR/W0b比较器锁存(仅ADS1114/1115支持)
- 控制ALERT/RDY引脚是否锁存
0b:非锁存模式(默认)
1b:锁存模式
1:0COMP_QUE[1:0]R/W11b比较器队列和禁用(仅ADS1114/1115支持)
- 控制比较器功能及ALERT/RDY引脚行为
00b:超过阈值1次触发
01b:超过阈值2次触发
10b:超过阈值4次触发
11b:禁用比较器(默认)

4.低阈值寄存器( Lo_thresh)和高阈值寄存器(Hi_thresh)

Lo_thresh 和 Hi_thresh 寄存器用于设置数字比较器的上下限阈值,阈值以16位二进制补码格式存储。为了确保比较器功能正确,必须在更改 PGA 设置时更新这些寄存器的值。通过设置 Hi_thresh 寄存器的最高位为 1b 和 Lo_thresh 寄存器的最高位为 0b,可以启用 ALERT/RDY 引脚的转换准备就绪功能。在单次转换模式下,ALERT/RDY 引脚输出 OS 位,而在连续转换模式下则提供连续的转换就绪脉冲。为了使比较器正常工作,Hi_thresh 寄存器的值必须大于 Lo_thresh 寄存器的值。
在这里插入图片描述

二、芯片使用配置流程

1.配置配置寄存器

根据配置寄存器各个位功能直接对配置寄存器进行配置即可
示例

  • 15位: 1b(启动一次单次传唤)
  • 14:12位: 100b (AIN0 - AGND)
  • 11:19位: 001b (±4.096V)
  • 8位: 1b (单次转换模式)
  • 7:5位: 111b (860SPS)
  • 4位: 0b(传统比较器模式)
  • 3位: 1b(低电平有效)
  • 2位: 0b(非锁存模式)
  • 1:0位 00b(超过一次阈值触发)
    综上:1000001111100000b = 0xC3E8

2.配置低阈值寄存器和高阈值寄存器

笔者在使用时使用到了多通道,因此将低阈值寄存器和高阈值寄存器两个寄存器配置成RDY引脚能在ADC电压转换结束后输出一个脉冲,检测脉冲的电平转换触发中断切换通道进行检测。要将ALERT/RDY引脚配置为转换完成就绪引脚,需要设置Hi_thresh寄存器的最高有效位(MSB)为1,并将Lo_thresh寄存器的最高有效位设置为0。这样设置启用引脚作为转换完成就绪信号的功能。
在这里插入图片描述
写入默认值即可
在这里插入图片描述

三、 硬件连线

按需选择地址引脚连接、电压采集输入引脚连接,添加IIC总线上拉电阻,电源去耦电容即可。
在这里插入图片描述

地址引脚选择在这里插入图片描述

四、代码编写(已验证可以正常使用)

1.初始化

/**
 * @brief   ad1115初始化
 * @param   无
 * @retval  无
 */
void Ads1115_Init(void)
{
    uint8_t txData[3];
    uint8_t rxData[2];
    txData[0] = 0xC3;
    txData[1] = 0xE8;
    txData[2] = HAL_I2C_Mem_Write(&ADS1115_IIC, ADS1115_ADDR, CONFIG_REGISTER, ADS1115_MEMADDSIZE, txData, 2, 0xFF); // 配置配置寄存器
    HAL_Delay(1);
    txData[0] = 0x80;
    txData[1] = 0x00;
    txData[2] = HAL_I2C_Mem_Write(&ADS1115_IIC, ADS1115_ADDR, HI_THRESH_REGISTER, ADS1115_MEMADDSIZE, txData, 2, 0xFF); // 配置高阈值寄存器
    HAL_Delay(1);
    txData[0] = 0x7F;
    txData[1] = 0xFF;
    txData[2] = HAL_I2C_Mem_Write(&ADS1115_IIC, ADS1115_ADDR, LO_THRESH_REGISTER, ADS1115_MEMADDSIZE, txData, 2, 0xFF); // 配置低阈值寄存器
}

2.电压读取

/**
 * @brief   ad1115电压读取
 * @param   无
 * @retval  电压值(单位V)
 */
float Ads1115_Voltage_Get(void)
{
    uint8_t rxData[2];
    float Voltage;
    HAL_I2C_Mem_Read(&ADS1115_IIC, ADS1115_ADDR, CONVERSION_REGISTER, ADS1115_MEMADDSIZE, rxData, 2, 0xff);
    Voltage = (((float)(rxData[0] << 8 | rxData[1])) / 32768.f) * 4.096f;
    return Voltage;
}

附录(ads1115.h文件)

#ifndef __ADS1115_H_
#define __ADS1115_H_

#include "i2c.h"

#define ADS1115_IIC hi2c1
#define ADS1115_ADDR 0x48
#define ADS1115_MEMADDSIZE I2C_MEMADD_SIZE_8BIT
#define CONVERSION_REGISTER 0x00 // 转换寄存器
#define CONFIG_REGISTER 0x01     // 配置寄存器
#define LO_THRESH_REGISTER 0x02  // 低阈值寄存器
#define HI_THRESH_REGISTER 0x03  // 高阈值寄存器

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值