terça-feira, 2 de maio de 2017

Expansão quer trazer ADC de 20Msps ou mais ao Raspberry Pi

expansão adc 20msps raspberry pi

Um dos problemas quando se aumenta a velocidade dos ADCs é o aumento proporcional de banda.

Só como exemplo, a banda necessária para o ADC do meu osciloscópio, um AD9288 com 40Msps por canal e 8 bits é de 384Mbps por canal (ou 40MB/s).  A velocidade do USB 2.0 é de 480 Mbps. Ainda como exemplo, há versões de 100Msps desse mesmo ADC, seria necessário processar 800Mbps (ou 100MB/s) de dados. Por fim, em um osciloscópio de 1GS/s (até comum hoje em dia nos de 100Mhz) são 8Gbps (ou 1GB/s) de dados para processar, entenderam o problema?

Geralmente osciloscópios ou sistemas que utilizam ADCs com mais de 20Msps utilizam um chip FPGA ou ASIC para processar toda essa banda. É por esse motivo que vocês dificilmente irão ver expansões com ADCs muito maiores do que essa faixa no Raspberry Pi a não ser que tenha outro chip para processar e repassar os dados mastigados.

Lidando com o problema de banda no Raspberry Pi


Grande parte dos que só querem ler alguns sinais analógicos, sensores, utilizam o MCP3008 ou algum ADC similar de baixo custo.

Uma das opções mais rápidas de banda no Raspberry Pi por meio do GPIO é o SPI, utilizado por uma variedade de ADCs. O SPI no Raspberry Pi também tem suas limitações, embora seja possível ir até 125Mhz (no core clock padrão, das primeiras versões) os chips dificilmente processarão 1 bit por clock (ao menos o MCP3008 não o faz). Mesmo se o fizessem, seria limitado a teóricos 12,5MB/s. Um ADC à 20Msps em 8 bits já ultrapassa isso.

A solução é utilizar ADCs com interface paralela, que são até muito comuns. A interface é conectada bit a bit para cada GPIO. Um antigo projeto já de meu conhecimento, levou o antigo Raspberry Pi Modelo B a capturar dados com um ADC de 10Msps. Embora fosse um antigo ADC de 6 bits foi uma ótima prova de conceito, que envolveu inclusive um driver à nível de kernel para lidar melhor com a falta de realtime.

A expansão


O projeto de expansão de kelu124 utilizou primeiramente o mesmo ADC do antigo projeto (CA3306). Chamado de Bomanz, ele tem como meta testar as capacidades dos Raspberry Pi's para saber até onde eles vão em velocidades de amostragem mais altas. Posteriormente ele escolheu algo mais moderno (embora não seja também tão novo), o AD08200 de 8 bits que vai de 20Msps até 200Msps. Na imagem que ilustra o post temos 2 versões da placa, uma com cada ADC a ser testado.

Na imagem abaixo temos a captura com sinal de 2Mhz de um ultrassom (outro projeto dele) e na imagem logo depois de um osciloscópio real.

expansão adc 20msps raspberry pi
Sinal capturado com AD08200 e Raspberry Pi

Sinal capturado com um osciloscópio comum

expansão adc 20msps raspberry pi
PCB para o CA3306

expansão adc 20msps raspberry pi
PCB para o AD08200

Embora não esteja claro se há a pretensão de fabricar a expansão em larga escala, ela é open hardware portanto poderá ser fabricada e modificada por outros.

Os arquivos e andamento do projeto podem ser acompanhados no seu post do hackaday.io e no seu github.

No arquivo TODO parece haver a ideia de migrar para um ADC de 10 ou 12 bits. Na descrição há uma base de valor (embora não sei se está correta) de $40 (R$126,56).

Vamos aguardar para ver o que sairá dessa "brincadeira" :)

Fonte: https://hackaday.io/project/20455-20msps-adc-raspberrypi-hat

Nenhum comentário:

Postar um comentário