Tengo un montaje, conectando un Navaja IMU tablero de sensores, con un RS-485 Breakout tablero, a un Interfaz serial USB-RS485 a través de un cable USB en mi portátil. Ejecuto un software en el portátil (Max/MSP) que envía mensajes de sondeo al sensor, espera los datos de respuesta, y al recibir la respuesta activa automáticamente un nuevo mensaje de sondeo. Es un bucle constante:
- enviar un mensaje electoral
- esperar una respuesta
- en respuesta ir a 1.
Quiero que este sondeo sea lo más rápido posible, ya que tendré que conectar 21 de estos sensores al mismo bus RS485. El firmware de la Navaja está programado con el Arduino IDE y de acuerdo con el código sólo debe haber un retraso de ~2ms entre el mensaje de la encuesta y la escritura de la respuesta. El firmware también gasta 12ms cada 20ms en la asignación y cálculo del sensor. Este cálculo a veces retrasa la respuesta al sondeo. Soy consciente de ello y todos los resultados son acordes.
Mi problema ahora mismo es que el sondeo del sensor está atascado a una velocidad de actualización de 15 milisegundos en promedio. Miré los datos con mi pequeño usb-oscilosope e hizo un diagrama (>PDF).
Mi osciloscopio se sienta directamente en la interfaz USB-RS485 y ve cómo se apagan los sondeos y llega el mensaje de respuesta. El retardo entre estos dos se encuentra entre 2 y 13 ms. Esta diferencia se explica por el hecho de que a veces la navaja está ocupada haciendo sus cálculos de sensor-matemáticas. El hecho extraño es que, aunque las respuestas llegan con diferentes demoras, el sondeo siempre parece salir en el mismo intervalo de unos 15 ms.
También implementamos la misma configuración con
- codificando el firmware en C y programando la Navaja con avr-dude
- haciendo el "software-polling" en código Python
- en Mac OSX y PC Windows 7
Todas las combinaciones posibles dieron como resultado el mismo intervalo de 15ms. Así que el problema no está ni en el código Arduino, ni en el Max/MSP. Tengo la sospecha de que el problema podría deberse a la Interfaz Serial USB-RS485 y/o al controlador FTDI necesario.
¿Este problema le suena familiar a alguien?