我正在从在 Netduino 上运行的 .NET Micro Framework 转换一些代码。该代码测量最大频率约为 1000 Hz 或周期约为 1 毫秒的方波振荡器的频率。该应用程序是一个雨量检测器,它根据潮湿程度改变其电容。电容随着湿度的增加而增加,从而降低了振荡器频率。
在 Netduino 上,我使用了InterruptPin
. 这不是真正的中断,而是安排 .NET 事件,其中EventArgs
包含引脚值更改时的时间戳。在 Netduino 上,我还可以配置触发事件的是上升沿还是下降沿。我设法让它工作得相当好,并且 1 KHz 接近 Netduino 可以可靠测量的最大吞吐量。
在 Raspberry Pi 上,事情并不顺利。它运行的是 Windows 10 IoT Core,可以肯定的是与 Netduino 完全不同的环境。我有一个ValueChanged
可以利用的事件,但没有时间戳,它发生的速度是原来的两倍,因为它是由波形的两半触发的。我希望,凭借其更快的四核 CPU,Raspberry Pi 可能能够应对这个问题,但实际上我能获得的最佳吞吐量似乎是每 30 毫秒 1 个事件的数量级 - 一个数量级更差这至少是我在 Netduino 上得到的,这意味着我距离 1 KHz 方波的计时还有很长的路要走。
所以我正在寻找想法。我考虑过减慢振荡器的速度。原始电路的运行频率约为 1 MHz,我添加了许多电阻器来增加时间常数,使其降至 1 KHz 左右。我可以继续添加电阻器,但有一点它开始变得愚蠢,我担心组件公差会使东西难以校准。
Raspberry Pi 暴露了一些计数器/计时器功能会很方便,但出于某种深不可测的原因,这些“制造商”板似乎都没有这样做。
一种方法可能是使用 A-D 转换器以某种方式获得直接读数,但电子设备有点超出我的能力(嘿,我是软件专家!)。
Raspberry Pi 中有足够的咕噜声,我应该能够让它工作!有没有人找到一种方法来提高 GPIO 引脚的吞吐量?