ADS1x15 Python 库

问题描述 投票:0回答:1

假设我有一个 ADS1015 ADC 转换器和一个 Raspberry Pi。在我的项目中,我只需要读取模拟传感器的值。

这是用 Python 编写的用于 Raspberry Pi 的 ADC 转换器的库:ADS1015 github 存储库

举个例子吧

sampletest.py
:

import time
import Adafruit_ADS1x15

adc = Adafruit_ADS1x15.ADS1115()

print('Reading ADS1x15 values, press Ctrl-C to quit...')

print('| {0:>6} | {1:>6} | {2:>6} | {3:>6} |'.format(*range(4)))
print('-' * 37)

while True:
    values = [0]*4
    for i in range(4):
        values[i] = adc.read_adc(i, gain=GAIN)
    print('| {0:>6} | {1:>6} | {2:>6} | {3:>6} |'.format(*values))
    time.sleep(0.5)

我需要非常准确地知道我的计算机上获得的采样率是多少。我知道我可以将 ADC 的采样率设置为 64 到 3200 之间的任意值,但每当我从计算机读取数据时,数据到来之前都会有轻微的延迟。

例如:如果我将芯片的采样率设置为 128,在 Python 中假设我将读取延迟 1/60 秒(因此我们的理论采样率为 60 sps),那么芯片上的实际采样率是多少?电脑是? (即 59、57 等)如果我选择更高的 ADC 采样率,等待时间是否会变短? (比如 256 sps)

目前我没有ADC转换器来进行测试,所以在这里向您请教。

python raspberry-pi sensors i2c adc
1个回答
0
投票

对于 ADS1015,它有 2 种不同的工作模式:

  • 单发
  • 继续-转换

单次拍摄模式

在单次模式下,ADC 处于断电状态,直到您要求它转换所施加的当前电压。然后,ADS1015 需要通电(大约需要 25μs)并对电压进行采样。

如果要确定此模式的采样率,则需要添加 ADS1015 执行转换所需的时间。

SR = 1 / (t_python + t_conversion)

如果我们现在减少 ADS1015 进行转换所需的时间,我们就可以提高 Python 程序的采样率。

继续-转换模式

在连续转换模式下,ADS1015 不断以指定的采样率采样数据。

确定此模式的采样率比单次情况稍微复杂一些。这是因为 python 程序和 ADS1015 现在真正异步运行。

现在有2个案例:

  1. 我们想知道哪里有转换准备好
  2. 我们想要读取ADS1015何时更新转换寄存器

情况 1 非常简单,因为这只是意味着我们不需要等待 ADC 的转换:

SR = 1 / (t_python)

情况 2 意味着我们需要等待转换完成,在最坏的情况下可能需要 t_conversion 时间

SR = 1 / (t_python + t_remainingConversion)

0 < t_remainingConversion < t_conversion

代码示例

您给出的示例基于 ADS1015 的 Adafruit 库。

adc_read
功能专门以单次模式操作 ADS1015,由于 25μs 启动,该模式相当慢。它还只是根据采样率等待指定的时间来获取转换结果。

可以实施的一项优化是使用 ALERT/RDY 引脚来通知转换已准备就绪。


有关 ADS1015 的所有信息都可以在数据表中找到,对于任何电气组件,强烈建议您阅读(或浏览一下,如果您想快速了解)。

© www.soinside.com 2019 - 2024. All rights reserved.