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引脚连接 |
|---|---|
| 0x49 | VDD |
| 0x4A | SDA |
| 0x48 | GND |
| 0x4B | SCL |
因此,可以通过为每个模块设置不同的地址,将四个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 模块 | 树莓派 Pico | Note |
|---|---|---|
| SCL | SCL (GPIO5) | Serial Clock |
| SDA | SDA (GPIO4) | Serial Data |
| VCC | 3V3 | Power |
| GND | GND | Ground |
使用杜邦线连接 TEMT6000 光照度模块和 ADS1115 模块
| TEMT6000 模块 | ADS1115 模块 | Note |
|---|---|---|
| S | A0 | Signal |
| G | A- | Ground |
| V | A+ | 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 提供的标准库快速实现。
硬件连接
| ADS1115 | Raspberry Pi | Note |
|---|---|---|
| SDA | GPIO3 | Serial Data |
| SCL | GPIO5 | Serial Clock |
| GND | GND | Ground |
| VCC | 3V3 | Power |
实物图
驱动库
终端执行如下指令
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 设计,包括主控参数、资源特点、原理图、工程测试等,为相关产品的快速开发和应用设计提供了参考。