Eu tenho uma configuração, conectando uma placa do sensor Razor IMU , com uma placa RS-485 Breakout , a uma interface serial USB-RS485 via cabo USB no meu laptop. Eu executo um software no laptop (Max / MSP) que envia mensagens de pesquisa ao sensor, aguarda os dados de resposta e, ao receber a resposta, dispara automaticamente uma nova mensagem de pesquisa. É um loop constante:
- envie uma mensagem de pesquisa
- aguarde uma resposta
- em resposta, vá para 1.
Quero que essa pesquisa seja o mais rápida possível, pois terei de conectar 21 desses sensores ao mesmo barramento RS485. O firmware do Razor é programado com o Arduino IDE e, de acordo com o código, deve haver apenas um atraso de ~ 2ms entre a mensagem de pesquisa e a gravação da resposta. O firmware também gasta 12ms a cada 20ms em alocação e cálculo de sensores. Às vezes, esse cálculo atrasa a resposta à pesquisa. Estou ciente disso e todos os resultados estão em conformidade.
Meu problema agora é que a pesquisa do sensor está travada a uma taxa de atualização de 15 milissegundos em média. Olhei para os dados com meu pequeno osciloscópio usb e fiz um diagrama (> PDF).
Meu osciloscópio fica diretamente na interface USB-RS485 e vê o polling sair, e a mensagem de resposta é recebida. O atraso entre esses dois fica entre 2 e 13 ms. Essa diferença é explicável pelo fato de que, às vezes, a máquina de barbear está ocupada fazendo seus cálculos de matemática-sensor. O fato estranho é que, embora as respostas cheguem com atrasos diferentes, a pesquisa sempre sai no mesmo intervalo de cerca de 15ms.
Também implementamos a mesma configuração com
- codificando o firmware em C e programando o Razor com avr-dude
- fazendo a pesquisa de software no código Python
- no Mac OSX e PC Windows 7
Todas as combinações possíveis resultaram no mesmo intervalo de 15 ms. Portanto, o problema não está no código do Arduino, nem no Max / MSP. Suspeito que o problema possa estar relacionado à interface serial USB-RS485 e / ou ao driver FTDI necessário.
Esse problema parece familiar para alguém?