Ho una configurazione, collegando una scheda sensore IMU Razor , con una scheda Breakout RS-485 , a un'interfaccia seriale USB-RS485 tramite cavo USB nel mio laptop. Eseguo un software sul laptop (Max / MSP) che invia messaggi di polling al sensore, attende i dati di risposta e alla ricezione della risposta attiva automaticamente un nuovo messaggio di polling. È un ciclo costante:
- invia un messaggio di polling
- attendere una risposta
- in risposta vai a 1.
Voglio che questo polling sia il più veloce possibile, poiché dovrò collegare 21 di questi sensori allo stesso bus RS485. Il firmware sul rasoio è programmato con l' IDE di Arduino e secondo il codice dovrebbe esserci solo un ritardo di ~ 2ms tra il messaggio di polling e la scrittura della risposta. Il firmware spende anche 12 ms ogni 20 ms in allocazione e calcolo del sensore. Questo calcolo a volte ritarda la risposta al polling. Ne sono consapevole e tutti i risultati sono di conseguenza.
Il mio problema in questo momento è che il polling del sensore è bloccato a una frequenza di aggiornamento di media 15 millisecondi. Ho guardato i dati con il mio piccolo oscilloscopio USB e ho creato un diagramma (> PDF).
Il mio oscilloscopio si trova direttamente sull'interfaccia USB-RS485 e vede uscire il polling e arriva il messaggio di risposta. Il ritardo tra questi due valori è compreso tra 2 e 13 ms. Questa differenza è spiegabile con il fatto che a volte il rasoio è impegnato a fare i suoi calcoli di matematica dei sensori. Il fatto strano è che, anche se le risposte arrivano con ritardi diversi, il polling sembra sempre uscire allo stesso intervallo di circa 15 ms.
Abbiamo anche implementato la stessa configurazione con
- codificare il firmware in C e programmare il rasoio con avr-dude
- eseguendo il polling software nel codice Python
- su Mac OSX e PC Windows 7
Tutte le possibili combinazioni hanno prodotto lo stesso intervallo di 15 ms. Quindi il problema non è né nel codice Arduino, né all'interno di Max / MSP. Ho il sospetto che il problema potrebbe essere dovuto all'interfaccia seriale USB-RS485 e / o al driver FTDI necessario.
Questo problema sembra familiare a nessuno ??