【问题标题】:Using multiple hcsr04 sensors on Beaglebone Black在 Beaglebone Black 上使用多个 hcsr04 传感器
【发布时间】:2015-11-05 05:02:58
【问题描述】:

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

我让它分别为 4 组不同的传感器工作,现在不确定如何将它们组合到一个程序中。

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

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

【问题讨论】:

  • 如果您的标签更合适,您会获得更好的可见性。 beagleboneblackbeagleboard 都会让人们对作为解决方案根源的硬件感到满意。你所有的其他标签……嗯……太笼统了。
  • 但是,我假设要解决您的问题,您需要重写在 PRU 上运行的程序以监控多个传感器并将它们报告回 Cortex。如果您只做几个传感器并且每秒更新 5-10 次就可以了,那么您可以连续进行。如果没有,那么您将不得不并行执行它们。幸运的是,现在似乎有一个 C 编译器。并且核心中有 32 个寄存器,这意味着您可以将所有内容都保存在寄存器中
  • (而且我不会为对 Cortex 执行多个 ISR/事件而烦恼。将它们全部组合在一起并检查谁改变了更容易)
  • 我们会牢记这一点。我们是论坛的新手,beaglebone 标签不被接受。谢谢。
  • 请出示您目前的代码

标签: c assembly arm interrupt interfacing


【解决方案1】:

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数据RAM(常量c24设置为lines 39-41) 中数据 RAM 的开头,偏移量 0。因此,如果您在 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 位整数。

【讨论】:

  • 非常感谢。这正是我们所需要的。该程序正在运行。
猜你喜欢
  • 2016-06-23
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多