sampling - 提高 Beaglebone Black ADC 采样率?

标签 sampling beagleboneblack cloud9-ide adc

我正在开发一个需要使用微 Controller 的项目,因此,我决定使用 Beaglebone Black。我对 Beaglebone 世界还是个新手,我遇到了一些问题,希望你们能帮助我。

在我的项目中,我必须连续读取所有 7 个模拟读取引脚并进行相应的处理。我的问题是,最快的编程语言是什么(我必须在很短的时间内读取尽可能多的样本!)以及如何将采样率从 KHz 提高到 MHz?

我尝试了以下代码:

Javascript代码:

var b = require('bonescript');//this variable is to refer to my beaglebone
time = new Date();
b.analogRead("P9_39");
console.log(new Date() - time);

此代码将仅执行一次模拟读取,并打印出执行读取所需的时间。令人惊讶的是,结果是111ms!如果我没记错的话,这意味着我的采样率为 10。

另一种方法是使用 pyhton:

import Adafruit_BBIO.ADC as ADC
import time

ADC.setup()
millis = int(round(time.time() * 1000))
ADC.read_raw("P9_39")
millis = millis = int(round(time.time() * 1000)) - millis
print millis

此代码花费的时间较少(4ms),但如果我想从 7 个模拟输入引脚读取数据,我将只能从每个引脚读取大约 35 个样本。

使用终端:

echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots
time cat /sys/devices/ocp.3/helper.15/AIN0
############OR############
time cat /sys/devices/ocp.3/44e0d000.tscadc/tiadc/iio\:device0/in_voltage0_raw 

这花了 50 毫秒。

我希望采样率以 MHz 为单位。我怎样才能这样做呢?我知道 Beaglebone Black 能够做到这一点,但我找不到明确的方法来做到这一点。任何帮助表示赞赏。 提前致谢。

最佳答案

AM335x ADC 的采样率为 200K (link)。这意味着您不会使用库存 BeagleBone Black ADC 进入 MHz 范围。

要在 Linux 这样的非实时操作系统中实现 5 µs 延迟的工作是不可能的。您将受操作系统的支配来安排您的执行线程。其他内核线程将获得优先级并抢占您的线程,即使您为其分配了最高的调度优先级。

根据我在 BeagleBone Black 上使用数字 IO 的经验,我表示在每秒 1K 样本左右时会看到丢失的帧。现在,这取决于您对丢失样本的容忍程度 - 如果您只需要半可靠地工作,您可以通过切换到 C/C++ 并使用 nice 提高进程的优先级来每秒挤出 10 K 样本--10 ... 命令。但是,如果您不能容忍丢失帧,则必须执行以下操作之一:

  1. 完全绕过操作系统并为裸 AM335x 处理器(无操作系统)编写 C 程序。
  2. 使用另一个硬件——带有缓冲区的 ADC,在程序被抢占时累积样本。
  3. 在 BBB 上使用 PRUSS 处理器。它们以 200 MHz 运行,因此如果您有一个紧密的循环,例如20 条汇编指令您将获得 10 MHz 的可靠采样率。也就是说,如果您一开始就拥有更快的 ADC,那么它当然可以轻松处理库存 200 KHz ADC。

我个人选择了选项#3,并很高兴看到我的设备极其可靠地执行亚毫秒级 GPIO 操作。

关于sampling - 提高 Beaglebone Black ADC 采样率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796901/

相关文章:

java - 从大型数组中采样数据

linux - 部署设备树覆盖时出错

gcc - openwrt中的工具链?

google-chrome - Cloud9 IDE中Vim模式的Chrome Hijack逸出键

angularjs - 通过 Cloud9 从 WordPress 获取 JSON 文件会返回 Cloud9 html 文件

signal-processing - 线性量化和非线性量化有什么区别?

arrays - MATLAB:比较两个不同长度的数组

image-processing - 对图像进行分层采样

c - Beagle Bone Black 的 float 与 double 性能测试

java - 如何在 Cloud9 中运行 Maven 构建