【发布时间】:2020-03-19 17:24:04
【问题描述】:
我有一个项目,我需要在计算机(Windows + Linux + MacOSX)和微控制器(arduino 或 stm32 或其他任何东西)之间进行通信的尽可能低的延迟(最好在 1-100 微秒范围内) )。
我强调它不仅要快,而且要低延迟(例如,与月球的快速通信将具有低延迟)。
目前我尝试的方法是通过 USB 串行或通过 USB 进行 HID 数据包。我得到的结果大约不到一毫秒。我的测量方法是往返通信,然后除以二。这没关系,但我会更高兴有更快的东西。
编辑:
这个问题似乎很难回答。我发现最好的解决方法是同步计算机和微控制器的时钟。同步确实需要通信。通过下面的过程,dt 是半个往返,sync 是时钟之间的差。
t = time()
write(ACK);
read(remotet)
dt = (time() - t) / 2
sync = time() - remotet - dt
请注意,此同步的不精确性最多为dt。最快的通信渠道很重要,但我对精度有一个估计。
还要注意与不同系统上时间戳差异相关的技术细节(基于 Linux 上的 epoch 的 us/ms,自 Arduino 上启动 MCU 以来的 ms/us)。
注意 Arduino 上的时钟偏移。经常同步会更安全(在我的例子中是每项措施)。
标签: arduino microcontroller stm32