ADC 模块 PCB 设计

ADC 模块 PCB 设计

本文介绍了基于 ADS1115 芯片的 ADC 模数转换模块的 PCB 设计,包括主控参数、资源特点、原理图、工程测试等。

介绍

ADS1115 是由德州仪器制造的 16 位模拟转数字(ADC)转换器集成电路。

  • IC 可通过使用 I2C 协议轻松与微控制器/微处理器接口传输数据和命令。
  • 集成电路支持四个单端输入和两个差分输入。
  • 差分输入有助于减少模拟读数中的噪声。
  • ADC 支持广泛的电源电压范围,且电流消耗极低。

特点

  • ADC输入范围:±256 mV至±6.144 V
  • 供电电压范围:2.0 V至5.5 V
  • 电流消耗:连续转换模式下150微安
  • 可编程数据速率:每秒8采样(SPS)至860采样率
  • 内置可编程增益放大器(PGA)和数字比较器
  • 4个复用输入
  • 可选择单次或连续转换模式

系统框图

ADS1115的功能框图展示了IC不同部件如何协同工作以提供16位数字数据。ADS1115包括:

  • 一个德尔塔-西格玛 ADC
  • 可编程增益放大器(PGA)
  • 内部电压参考
  • 用于同步的内部振荡器
  • 用于通信的I2C接口
  • 内置比较器可用于过压或低压检测。

ADS1115的输入会通过输入复用器(MUX)复用,然后再送入PGA。该设备可以测量四个单端输入或两个差分输入。在测量单端输入时,ADC的负输入通过多路复用器内的开关内部连接到GND。

差分输入对为:

  • AIN0 和 AIN1
  • AIN0和AIN3
  • AIN1和AIN3
  • AIN2 和 AIN3

详见:ADS1115多路模数转换器 .

地址

I2C 设备拥有唯一的地址。

  • MCU 可以使用相同的 I2C 总线与不同地址的设备通信。

  • 通过更改与 ADDR 引脚的连接,ADS1115 可以配置为不同的 I2C 地址。

  • ADS1115 的默认 I2C 地址为十六进制 0x48。

下表展示了 ADS1115 的 I2C 地址如何根据 ADDR 引脚连接而变化

I2C 地址(十六进制)ADDR引脚连接
0x49VDD
0x4ASDA
0x48GND
0x4BSCL

因此,可以通过为每个模块设置不同的地址,将四个ADS1115模块连接到同一条 I2C 总线。

详见:ADS1115 ADC 搭配树莓派 Pico 和 MicroPython 代码 .

PCB 设计

为了方便连接测试和模块化连接,基于 ADS1115 设计 ADC 模块,其设计方案包括原理图、PCB、物料焊接等。

3D 图

原理图

焊接效果

Bottom view

特点

  • 宽电压支持:2.0V 至 5.5V;

  • 低功耗:连续转换模式下 150 微安;

  • 可编程数据速率:每秒 8 - 860 采样率;

  • 内置可编程增益放大器(PGA)和数字比较器;

  • 4个复用输入;

  • 可选择单次或连续转换模式;

  • 板载 STEMMA QT 接口,可实现快速模块化连接;

  • 接口与 Qwiic 连接器兼容;

  • 可采用 2.54mm 杜邦线连接;

  • 可选 0x48 至 0x4B 间的 I2C 7 位地址;

详见:ADC模数转换器模块 .

硬件连接

使用杜邦线连接 ADS1115 模块和树莓派 Pico 开发板

ADS1115 模块树莓派 PicoNote
SCLSCL (GPIO5)Serial Clock
SDASDA (GPIO4)Serial Data
VCC3V3Power
GNDGNDGround

使用杜邦线连接 TEMT6000 光照度模块和 ADS1115 模块

TEMT6000 模块ADS1115 模块Note
SA0Signal
GA-Ground
VA+Power

实物图

  • TEMT6000 模块采集环境光照度模拟信号,通过 ADS1115 模块转换为数字信号,经过 IIC 通信协议,由单片机解析并读取电压和光照度数据。

  • 扫描 IIC 总线,获得 ADS1115 模块地址 0x48

驱动库

使用 MicroPython 库实现发送命令和读取 ADS1115 集成电路的数据。

  • 将驱动代码保存为ads1x15.py上传至树莓派 Pico 根目录;
  • 驱动库代码见:GitHub .

代码

  • 库上传到 Pico 并按照电路图布线后,可以上传代码读取 ADS1115 的 ADC 值。

  • 下面 MicroPython 代码实现了终端打印输入 A0 引脚的模拟电压。

frommachineimportI2C,Pinimporttimefromads1x15importADS1115 i2c=I2C(0,sda=Pin(16),scl=Pin(17))adc=ADS1115(i2c,address=72,gain=0)whileTrue:value=adc.read(4,0)print("ADC Value:",value)voltage=adc.raw_to_v(value)print("Voltage",voltage)time.sleep(0.5)
  • 代码保存到 Raspberry Pi Pico 并运行。若需要上电运行,则保存为 main.py ;

效果演示

  • 运行代码时,Shell 终端显示以下输出

  • 通过手电筒光照、用手遮挡 TEMT6000 模块,模拟白天和黑夜环境,输出不同电压;

树莓派

若使用树莓派读取 ADS1115 模块数据,可通过 adafruit 提供的标准库快速实现。

硬件连接

ADS1115Raspberry PiNote
SDAGPIO3Serial Data
SCLGPIO5Serial Clock
GNDGNDGround
VCC3V3Power

实物图

驱动库

终端执行如下指令

python3-mvenv .venvsource.venv/bin/activate pipinstalladafruit-circuitpython-ads1x15 pipinstall"setuptools<82.0.0"--force-reinstall

扫描 IIC 设备地址

代码

终端执行touch ads1115_print.py新建代码文件,并添加如下代码

importtimeimportbusiofromadafruit_ads1x15importADS1115,AnalogIn,ads1x15# Create the I2C bus (SCL=BCM3, SDA=BCM2)i2c=busio.I2C(scl=3,sda=2)# Create the ADC object using the I2C bus, confirm address (0x48 default)ads=ADS1115(i2c,address=0x48)# Create single-ended input on channel 0 (A0)chan=AnalogIn(ads,ads1x15.Pin.A0)# Create differential input between channel 0 and 1 (uncomment to use)# chan = AnalogIn(ads, ads1x15.Pin.A0, ads1x15.Pin.A1)print("{:>5}\t{:>5}".format("raw","v"))whileTrue:print("{:>5}\t{:>5.3f}".format(chan.value,chan.voltage))time.sleep(0.5)

保存代码。

效果

终端执行python ads1115_print.py指令,连续打印 ADC 原始值和电压值

总结

本文介绍了基于 ADS1115 芯片的 ADC 模数转换模块的 PCB 设计,包括主控参数、资源特点、原理图、工程测试等,为相关产品的快速开发和应用设计提供了参考。