我通过示波器读取传感器输出为方波(0-5伏)。现在我想用 Beaglebone 来衡量一个时期的频率。所以我应该测量两个上升沿之间的时间。但是,我没有任何工作Beaglebone的经验。你能提供一些关于测量上升沿之间时间的建议或示例代码吗?
答案 0 :(得分:0)
你需要这个确定性吗?如果你可以容忍一些不准确,你可以在主Linux操作系统上做到这一点;如果你想成为花哨的裤子,这似乎是BBB的PRU的一个潜在用例(我很遗憾没有使用它,因此需要大量的盐)。我希望你能够编写只有无限外环的PRU代码然后在该循环内部,开始循环直到看到引脚显示为0,然后开始循环直到引脚显示为1(这是第一个)上升沿),然后开始计数,直到引脚再次显示0(这将是下降沿)或另一个循环到下一个上升沿...无论哪种方式,你可以采取计数器值,你应该能够直接将其转换为时间(PRU表示每条指令具有固定频率,并且是200Mhz(50ns /指令)。假设您的循环类似于
#starting with pin low
inner loop 1:
registerX = loadPin
increment counter
jump if zero registerX to inner loop 1
# pin is now high
inner loop 2:
registerX = loadPin
increment counter
jump if one registerX to inner loop 2
# pin is now low again
每个计数器增量应该有3个指令,所以你可以得到3 *计数器* 50 ns的时间。
答案 1 :(得分:0)
正如Foon在他的回答中所建议的那样,PRU非常适合这项任务(尽管根据您的要求,使用ARM处理器和标准GPIO可能会很好)。请注意(据我所知)常规GPIO和PRU输入都基于3.3V逻辑,连接5V信号可能会炸掉你的电路板!您需要一个额外的组件或电路才能从5V转换为3.3V。
我已经写了一个basic example来测量标头针脚P8.15上升边缘之间的时间,这是为了我自己测量发动机转速的目的。如果您决定使用它,则应根据已知参考检查计时结果。这是关于的权利,但我还没有仔细检查过。它是使用PRU程序集实现的,并使用pypruss python模块来简化接口。