Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/sensor/ads1115
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00
..

ADS1115 16位ADC传感器演示

一、功能模块介绍

1.1 核心主程序模块

  1. main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
  2. ads1115_demo.lua - ADS1115 功能演示模块,包含数据读取、多通道扫描、比较器中断、PGA 增益切换等所有功能的演示用例

1.2 扩展库模块

  1. exs_ads1115 - ADS1115 扩展库,提供初始化、电压读取、通道切换、PGA 增益配置、数据速率配置、比较器中断、校准等 API

1.3 I2C 模式说明

推荐使用硬件 I2C 模式Air780EPM 使用 I2C1PIN66=SDA, PIN67=SCL),占用 CPU 少、通信稳定。本 demo 默认使用硬件 I2C 模式演示,也支持软件 I2C 模式(任意 GPIO 接线,通过 ads1115_demo.luaMODE 变量切换)。

二、演示流程介绍

本 demo 按顺序演示 exs_ads1115 扩展库的 4 项功能:HELLO → [1/4] → [2/4] → [3/4] → [4/4] → End

2.1 功能演示项说明

  1. [1/4] 初始化与数据读取 - 初始化 ADS1115 传感器并读取 AIN0 电压数据(单位 V)
  2. [2/4] 多通道扫描 - 依次切换 AIN0~AIN3 四路单端通道读取电压
  3. [3/4] 比较器中断报警 - 窗口比较器(阈值 2.0V~3.0V),电压越界时 ALERT/RDY 引脚下降沿中断触发
  4. [4/4] PGA 增益切换 - 在 PGA=1(±4.096V)和 PGA=2(±2.048V)之间切换,观察分辨率与满量程变化

三、演示硬件环境

3.1 硬件清单

  • Air780EPM 核心板 × 1
  • ADS1115 16 位 I2C ADC 传感器模块 × 1
  • 母对母杜邦线 × 7根
  • TYPE-C 数据线 × 1
  • 直流稳压源 × 1

3.2 接线配置

3.2.1 ADS1115 模块接线

Air780EPM 核心板
ADS1115 模块
3.3VVDD_EXT
VCC
GND
GND
PIN67I2C1_SCL
SCL
PIN66I2C1_SDA
SDA
GND
ADDR(设备地址 0x48
GPIO22
ALERT/RDY(比较器中断,[3/4] 使用)
被测电压(0~3.3V
AIN0

说明:接线时注意杜邦线不宜过长,以免通信不稳定。被测电压超过 3.3V 时必须电阻分压后接入 AIN 引脚(芯片模拟输入上限为 VDD+0.3V)。

3.2.2 外部电源接线(AIN0 测试电压源)

使用可调直流电源给 AIN0 提供测试电压时,外部电源的负极(-)必须接到核心板 GND(共地),否则 AIN0 与 ADS1115 之间没有参考电位,读数会乱飘、无意义。

完整接线图(含外部电源):

外部电源(+) ────────────────→ ADS1115 模块: AIN0
外部电源(-) ────────────────→ Air780EPM 核心板: GND ← 共地!

核心板 3.3V (VDD_EXT) ──────→ ADS1115 模块: VCC
核心板 GND ─────────────────→ ADS1115 模块: GND
核心板 PIN67 (I2C1_SCL) ────→ ADS1115 模块: SCL
核心板 PIN66 (I2C1_SDA) ────→ ADS1115 模块: SDA
核心板 GND ─────────────────→ ADS1115 模块: ADDR(地址 0x48
核心板 GPIO22 ──────────────→ ADS1115 模块: ALERT/RDY(比较器中断)
接线对象 接到哪里 说明
外部电源正极(+ ADS1115 模块 AIN0 测试电压 0~3.3V(超出需分压)
外部电源负极(- 核心板 GND 必须共地,与模块 GND 同一点

共地关系:外部电源负极 → 核心板 GND → 模块 GND,三者是同一电位。若使用电池做测试源,电池负极同样要接到核心板 GND。

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  1. main.lua - 程序入口
  2. ads1115_demo.lua - ADS1115 功能演示模块
  3. exs_ads1115 - ADS1115 扩展库

五、演示核心步骤

5.1 硬件准备

  1. 按照接线表将 ADS1115 模块连接到核心板
  2. 确保电源连接正确,通过 TYPE-C USB 口供电
  3. 检查所有接线无误,避免短路

5.2 软件配置

main.lua 中加载对应的演示模块:

-- 加载 ads1115_demo.lua 演示模块
require "ads1115_demo"

5.3 软件烧录

  1. 使用 Luatools 选择最新内核固件
  2. 下载本项目所有脚本文件
  3. 将固件和脚本一起烧录到设备
  4. 烧录成功后设备自动重启后开始运行

5.4 功能测试

5.4.1 初始化与数据读取演示

  1. 设备启动后打印 "HELLO",随后自动进入 [1/4] 初始化与数据读取
  2. 观察日志输出,确认初始化成功
  3. 观察 AIN0 电压数据(单位 V)的连续读取

5.4.2 多通道扫描演示

  1. 自动进入 [2/4] 多通道扫描
  2. 依次观察 AIN0~AIN3 四路通道的电压数据
  3. 未接信号的通道读数接近 0V(悬空漂移属正常现象)

5.4.3 比较器中断报警演示

  1. 自动进入 [3/4] 比较器中断报警
  2. 先将输入电压调到 2.5V(阈值窗口内),观察日志提示
  3. 保持电源开启,调节电压越过 3.0V 或低于 2.0V,观察 ALERT 中断触发

5.4.4 PGA 增益切换演示

  1. 自动进入 [4/4] PGA 增益切换
  2. 观察 PGA=1(满量程 ±4.096V)下的电压读数
  3. 观察 PGA=2(满量程 ±2.048V)下的电压读数(若输入电压超过 ±2.048V,读数会钳位到满量程)

5.5 预期效果

  • 初始化与数据读取ADS1115 初始化成功,AIN0 电压数据正常输出
  • 多通道扫描4 路通道均能正常读取电压
  • 比较器中断报警:电压越过阈值(>3.0V 或 <2.0V)时 ALERT 中断触发
  • PGA 增益切换PGA 切换后分辨率与满量程随之变化
  • 日志如下:
[2026-08-24 15:39:43.507][000000000.216] I/user.main ADS1115_Demo 001.000.000
[2026-08-24 15:39:48.659][000000006.640] I/user.ads1115_demo ===== [1/4] 初始化与数据读取 =====
[2026-08-24 15:39:48.689][000000006.661] I/user.ads1115_demo ADS1115 初始化成功,版本: 202608241540
[2026-08-24 15:39:48.705][000000006.679] I/user.ads1115_demo AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:50.255][000000008.230] I/user.ads1115_demo 1次读取: AIN0 = 2.7828 V (raw=22262)
[2026-08-24 15:39:50.749][000000008.731] I/user.ads1115_demo 2次读取: AIN0 = 2.7819 V (raw=22255)
[2026-08-24 15:39:51.274][000000009.248] I/user.ads1115_demo 3次读取: AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:51.290][000000009.264] I/user.ads1115_demo ---- [1/4] 完成 ----
[2026-08-24 15:39:51.433][000000009.416] I/user.ads1115_demo ===== [2/4] 多通道扫描 =====
[2026-08-24 15:39:51.546][000000009.516] I/user.ads1115_demo AIN0 = 2.7828 V (raw=22262)
[2026-08-24 15:39:51.561][000000009.533] I/user.ads1115_demo AIN1 = 0.5946 V (raw=4757)
[2026-08-24 15:39:51.563][000000009.534] I/user.ads1115_demo AIN2 = 0.6086 V (raw=4869)
[2026-08-24 15:39:51.565][000000009.534] I/user.ads1115_demo AIN3 = 0.6180 V (raw=4944)
[2026-08-24 15:39:51.567][000000009.534] I/user.ads1115_demo ---- [2/4] 完成 ----
[2026-08-24 15:39:51.274][000000009.248] I/user.ads1115_demo ===== [3/4] 比较器中断报警 =====
[2026-08-24 15:39:51.290][000000009.264] I/user.ads1115_demo 电压 2.782 VALERT=1
[2026-08-24 15:39:51.433][000000009.416] I/user.ads1115_demo 收到 ALERT 中断:电压超阈值报警!
[2026-08-24 15:39:51.546][000000009.516] I/user.ads1115_demo 当前电压 = 3.077 V (raw=24618)
[2026-08-24 15:39:51.561][000000009.533] I/user.ads1115_demo ---- [3/4] 完成 ----
[2026-08-24 15:39:51.563][000000009.534] I/user.ads1115_demo ===== [4/4] PGA 增益切换 =====
[2026-08-24 15:39:51.565][000000009.534] I/user.ads1115_demo 切换 PGA  1(满量程 ±4.096V,分辨率 125μV
[2026-08-24 15:39:51.567][000000009.534] I/user.ads1115_demo PGA=1 : AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:51.574][000000009.534] I/user.ads1115_demo 切换 PGA  2(满量程 ±2.048V,分辨率 62.5μV,输入超过 ±2.048V 会钳位)
[2026-08-24 15:39:51.575][000000009.534] I/user.ads1115_demo PGA=2 : AIN0 = 2.0479 V (raw=32767)
[2026-08-24 15:39:51.577][000000009.534] I/user.ads1115_demo 恢复 PGA  1(满量程 ±4.096V
[2026-08-24 15:39:51.579][000000009.534] I/user.ads1115_demo ---- [4/4] 完成 ----
[2026-08-24 15:39:51.581][000000009.534] I/user.ads1115_demo ===== [演示完毕] =====
[2026-08-24 15:39:51.583][000000009.534] I/user.exs_ads1115 已关闭
[2026-08-24 15:39:51.585][000000009.534] I/user.ads1115_demo End

5.6 故障排除

  1. 传感器初始化失败

    • 检查 ADS1115 接线是否正确(SCL、SDA、VCC、GND
    • 确认 ADDR 引脚接 GND(地址 0x48),不能悬空
    • 确认 SCL/SDA 上拉电阻已接(4.7kΩ 到 3.3V)
    • 检查电源电压是否稳定(3.3V
  2. 读取数据始终为零

    • 检查输入信号是否接入(AIN 悬空时读数漂移,属正常现象)
    • 检查传感器供电是否正常
    • 确认接线无松动
  3. 比较器中断不触发

    • 确认 ALERT/RDY 引脚已接 GPIO22,并核对 ALERT_GPIO 常量
    • 确认电压真正越过阈值(先用万用表确认 AIN0 实际电压)
    • 若进入 [3/4] 时电压已在阈值外,先调回 2.5V 左右再越过阈值(下降沿触发)

5.7 扩展功能建议

exs_ads1115 更多接口的使用可以查看 exs_ads1115 扩展库说明