terça-feira, setembro 08, 2015

Rádio nRF24L01+: Introdução

Comunicação via rádio é sempre uma coisa complicada, a começar pelo hardware. Isto vem continuamente melhorando, graças a componentes que requerem cada vez menos componentes adicionais (e menos críticos). Um deles é o nRF24L01+, que é usado em diversas placas de baixo custo.



A placa retratada acima foi comprada na Tato, mas placas iguais ou semelhante são facilmente encontradas.


O  nRF24L01+ trabalha na faixa de 2.4GHz (a mesma que WiFi, Bluetooth e fornos de micro-onda). Ele suporta taxas de 250Kbps, 1Mbps e até 2Mbps e possui modos de operação de baixíssimo consumo. Trabalha com alimentação de 1.9 a 3.6V e tolera 5V nos pinos de entrada. A interface com um microcontrolador é SPI. A página do chip no fabricante está aqui; o link direto para a especificação é este.

O  nRF24L01+ é um transceiver (transmissor e receptor). Várias funções de protocolo são realizadas internamente ao chip, reduzindo o esforço do microcontrolador. A figura abaixo mostra o diagrama de blocos:


O bloco "RF Synthesiser"  faz a mágica de gerar com precisão as frequências necessárias a partir de um cristal de 16MHz.

Na parte do transmissor RF, o que nos interessa é que é possível programar a frequência central de comunicação e a potência de saída. Existem 126 frequências possíveis, espaçadas de 1MHz. Entretanto, para comunicar a 2Mbps é necessário espaçar os canais de 2MHz portanto só devem ser usadas metade destas frequências quando se seleciona esta taxa. Para o receptor escutar a transmissão ele precisa estar programado para a mesma frequência. Existem quatro opções para a potência de saída, permitindo um certo compromisso entre alcance e consumo.

O nRF24L01+ possui cinco modos de operação:
  • Power Down: consumo mínimo, só SPI esta ativo, tempos maiores para iniciar recepção ou transmissão.
  • Standby-I: consumo baixo, mas com tempos menores para iniciar a comunicação.
  • Standby-II: reduz um pouco mais os tempos com um aumento de consumo
  • RX: ativo e recebendo. Os pacotes recebidos são validados e colocados na fila de recepção.
  • TX: ativo e transmitindo. Os pacotes na fila de transmissão são enviados. Cuidado deve ser tomado para não transmitir continuamente por mais de 4ms, pois durante a transmissão o PLL que gera as frequências opera em open-loop (ou seja, sem corrigir desvios). Este é o modo de maior consumo,
O módulo baseband é  onde está a inteligência do chip. O nRF24L01+ implementa um protocolo de enlace (o Enhanced ShockBurst) que pode tratar da confirmação e retransmissão automática de pacotes. O número de retransmissões e o intervalo entre elas é programável. Um pacote é composto por:
  • Preâmbulo (1 byte): usado para indicar o início de um pacote e sincronizar o receptor.
  • Endereço (3 a 5 bytes - tamanho configurável ): o receptor ignora automaticamente pacotes para outro endereço.
  • Campo de controle (9 bits): este campo contém o tamanho dos dados, a identificação do pacote (para desprezar pacotes duplicados quando um ACK é perdido) e um flag para desligar o envio automático de ACK.
  • Os bytes de dados (0 a 32) 
  • CRC (1 ou 2 bytes): usado para detectar erros de comunicação.
A montagem e desmontagem dos pacotes é feita pelo nRF24L01+, o microcontrolador trabalha apenas com os bytes de dados.

Um modo especial é o MultiCeiver, onde o receptor aceita até seis endereços diferentes, movendo os pacotes de cada um para uma fila separada.

Além dos sinais do SPI o nRF24L01+ possui um sinal CE para ativar o chip (e usar os modos Rx e Tx) e um sinal IRQ (para sinalizar eventos como a recepção de um pacote).

No próximo post vamos começara a fazer experiências com o nRF24L01+, usando um Arduino.

Nenhum comentário: