我有一个设置,将Razor IMU传感器板和RS-485分支板通过USB电缆连接到笔记本电脑中的USB-RS485串行接口。我在便携式计算机上运行软件(Max / MSP),该软件将轮询消息发送到传感器,等待响应数据,并在收到响应后自动触发新的轮询消息。这是一个恒定的循环:
- 发送轮询消息
- 等待回应
- 响应时转到1。
我希望此轮询速度尽可能快,因为我必须将这些传感器中的21个连接到同一RS485总线。Razor上的固件是使用Arduino IDE编程的,根据代码,在轮询消息和响应编写之间应该只有约2ms的延迟。固件还每20ms花费12ms进行传感器分配和计算。此计算有时会延迟对轮询的响应。我知道这一点,所有结果都是相应的。
我现在的问题是传感器的轮询停留在平均15毫秒的更新速率。我用小型USB示波器查看了数据并制作了图表(> PDF)。
我的示波器直接位于USB-RS485接口上,看到轮询已消失,并且出现响应消息。这两者之间的延迟在2到13毫秒之间。这种差异可以用以下事实来解释:有时剃刀正忙于进行其感应器数学计算。奇怪的事实是,即使响应以不同的延迟进入,轮询似乎总是以大约15ms的相同间隔消失。
我们还实现了与
- 使用C对固件进行编码并使用avr-dude对Razor进行编程
- 用Python代码进行软件轮询
- 在Mac OSX和PC Windows 7上
所有可能的组合导致相同的15ms间隔。因此,问题既不在Arduino代码中,也不在Max / MSP中。我怀疑问题可能是由于USB-RS485串行接口和/或必需的FTDI驱动程序引起的。
这个问题听起来对任何人都熟悉吗?