Nesta nova versão temos um monitor serial (para comunicar o Arduino com o PC através da porta USB do PC) cuja velocidade máxima chega a 250.000 bps (ou seja, 250 mil bits por segundo).
Isso já foi um avanço, porque em versões mais antigas da Plataforma Arduino, a máxima velocidade de comunicação serial era de 115200 bps apenas.
Pode parecer muito, mas dependendo da quantidade de dados que precisam ser transferidos do Arduino para o computador PC, esta velocidade de 250 000 bps pode não ser suficiente.
A Texas escreveu um excelente artigo aqui: Texas USB CDC Benchmarking, justamente abordando quais seriam as máximas velocidades que podem ser alcançadas na comunicação serial USB (usando o sistema CDC) com as suas placas Launchpad Tiva (Tiva TM4C123G Link) e com o microcontrolador Concerto (F28M35H52C1).
Baseado neste artigo, resolvi fazer meu próprio script para um rápido Benchmarking envolvendo Comunicação Serial em Linguagem Python com o PC, e uma placa Arduino Mega2560 (Arduino Mega).
O resultado serve também como um exemplo para quem quiser trabalhar com Comunicação Serial em Linguagem Python. O código em Python, que deve ser executado no computador PC, faz uso da biblioteca pySerial (você terá que instalar esta biblioteca antes de rodar este código, ela não faz parte do Python 2.7) e é mostrado na figura 1 abaixo:
Figura 1- Código em Python para receber dados do Arduino através da Porta Serial.
Serão gerados então 1000 blocos contendo 1024 bytes em cada bloco.
Figura 2- Script que deve ser gravado na Placa Arduino Mega2560 e que gera 1024000 bytes pela porta serial USB COM3
PROCEDIMENTO
1- Gravar o Script da Figura 2 na placa Arduino Mega;
2- Abrir o Script em Python na tela do PC e executar o código em Python, dando "RUN";
3- Verifique se a porta USB onde você conectou o Arduino é realmente a COM3 no seu caso. Pode ser que seu PC tenha dado a ela outro número (COM5 por exemplo) e você terá que alterar isto no software em Python.
Para quem quiser experimentar, deixei aqui os códigos utilizados:Arquivos Python e Arduino
RESULTADOS
Para uma velocidade ajustada no software de 250000 bps, transmitir 1024000 bytes demorou cerca de 42 segundos, produzindo uma velocidade calculada pelo script da Figura 1 de 24485 Bytes por segundo (ou 24485 x 10 = 244850 bits por segundo). A figura 3 mostra o "log" que é gravado pelo script de benchmarking da Figura 1.
Figura 3- Resultados do teste de desempenho da Comunicação Serial.
Observe que para calcular o valor em bps (bits por segundo) temos que multiplicar por 10 e não por 8. Embora cada byte contenha 8 bits, na transmissão serial ASCii são transmitidos 10 bits para representar cada byte, pois o primeiro é o start-bit e o último é o stop-bit, que indica que aquele byte encerrou sua transmissão.
Desta forma, a velocidade efetiva de 250 000 bits por segundo nunca é atingida, o melhor valor foi de 244850 bps.
Isso pode não ser importante dependendo da aplicação. Mas em algumas outras aplicações (Por exemplo: deseja-se construir um Osciloscópio no PC, para visualizar formas de onda em tempo real) a velocidade da Comunicação Serial se torna muito importante e altas taxas de transferência são necessárias. A velocidade com que o Arduino é capaz de se comunicar com o PC pode ser lenta e ineficiente, dependendo da aplicação.
Este é o caso do meu trabalho de Doutorado, onde eu precisarei registrar 60 canais de conversor AD, com taxa de captura de 5kHz (5000 amostras por segundo em cada canal) e transmitir todos estes dados ao computador PC no menor tempo possível.
No caso da minha Tese de Doutorado, eu necessitarei transmitir 675 000 Bytes por segundo se desejar amostrar os canais em tempo real porque são 60 canais, 5000 amostras por segundo em cada canal e o conversor AD tem resolução de 16 bits, transmitindo efetivamente 18 bits em cada word:
60 x 5000 x 18 = 5400 000 bps (bits por segundo)
Esta taxa de 675 KB/s talvez só possa ser atingida por outras técnicas, como a Comunicação "Bulk" entre o microcontrolador e o computador USB e usando-se DMA (Direct Memory Acess) para que o processador não gaste tempo durante uma aquisição e outra. A técnica de comunicação serial tipo CDC se mostra lenta para esta tarefa.
Agradeço ao professor Lucas Vinicius Hartmann e aos colegas da PicList (piclistbr@googlegroups.com) pela revisão efetuada neste texto.
Nenhum comentário:
Postar um comentário