通过USB-RS485串行接口进行的传感器轮询停留在16ms,即使它应该更快


8

我有一个设置,将Razor IMU传感器板和RS-485分支板通过USB电缆连接到笔记本电脑中的USB-RS485串行接口。我在便携式计算机上运行软件(Max / MSP),该软件将轮询消息发送到传感器,等待响应数据,并在收到响应后自动触发新的轮询消息。这是一个恒定的循环:

  1. 发送轮询消息
  2. 等待回应
  3. 响应时转到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驱动程序引起的。

这个问题听起来对任何人都熟悉吗?


因此,轮询始终是在运行OSX或Windows 7的计算机上进行的吗?无论您使用哪种编程语言,USB上的延迟都可能很大。
Kellenjb 2012年

现在,我们正在Windows 7和OSX上进行测试。到底它会在Windows上运行7
evsc

2
您可以回答自己的问题,而无需编辑问题。这将使您选择它作为答案,甚至获得投票!
Kellenjb 2012年

我会在7个小时内!:) <....声誉低于100的用户在询问后8个小时内无法回答自己的问题。您可以在7小时内自行回答。在此之前,请使用注释,或编辑您的问题。>
evsc 2012年

Answers:


5

这是由于FTDI驱动程序具有16毫秒的延迟计时器,以及我的轮询响应时间不足以填满64字节缓冲区以自动触发缓冲区清空的事实。如果您有兴趣,请阅读AN232B-04_DataLatencyFlow.pdf,或者直接转到设备管理器,然后更改USB串行端口属性中的设置。


2

不知道很多细节(我真的不想知道),我会怪罪于USB转RS-485适配器。我们在运行带有这些适配器之一的Linux的Intel Q7处理器上遇到了类似的问题。

我们一直在临时使用适配器,直到准备好自定义硬件为止。我们的定制硬件使用PCIe链接和FPGA来执行相同的RS-485接口(以及更多)。该适配器和我们的自定义硬件的软件保持不变。当我们切换到自定义硬件时,问题就消失了。


是!刚刚发现我可以更改USB串行端口设置中的一堆东西(尤其是延迟计时器),然后一切都会加快……
evsc 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.