在 Beaglebone Black 上使用多个 hcsr04 传感器

Using multiple hcsr04 sensors on Beaglebone Black

我正在尝试在 Beaglebone black 上使用 hcsr04 传感器(改编自此代码 - https://github.com/luigif/hcsr04

我让它分别适用于 4 组不同的传感器,但现在不确定如何将它们组合成一个程序。

有没有办法同时发出触发和接收回声,这样中断就可以作为 C 程序的不同事件生成。

运行他们一个接一个是我们想到的最后一个选项。

Russ 是正确的 - 由于 BeagleBone 的 AM335x 处理器中有 2 个 PRU 内核,因此无法同时 运行 该 PRU 程序的 4 个实例。我想你可以加载一个为一组引脚编译的程序,进行测量,停止它,然后加载为不同引脚上的传感器编译的不同二进制文件,但这将是一种非常低效(而且丑陋,恕我直言)的方法.

如果您知道任何组件,更新该代码以驱动所有 4 个传感器 (PRU assembly instructions) 应该是非常直接的。或者,您可以从头开始使用 C 并按照 Russ 的建议使用 clpru PRU C 编译器,尽管 AFAIK 仍处于某种测试状态并且没有太多信息。无论哪种方式,我都建议并行或一个接一个地从 4 个传感器读取数据,以不同的偏移量将测量值加载到 PRU 内存中,然后将单个信号发送到 ARM。

在您链接的代码中,行:

SBCO roundtrip, c24, 0, 4

从寄存器 roundtrip(即寄存器 r4,根据文件顶部的 #define roundtrip r4)获取 4 字节,并将其加载到 PRU偏移量 0 处的数据 RAM(常量 c24 设置为 lines 39-41 中数据 RAM 的开头)。因此,如果您在 4 个寄存器中有 4 个不同的测量值,您可以抵消 RAM 中的数据,例如:

SBCO roundtrip1, c24, 0, 4
SBCO roundtrip2, c24, 4, 4
SBCO roundtrip3, c24, 8, 4
SBCO roundtrip4, c24, 12, 4

然后在你的C程序中读取这4个连续的32位整数。