A plataforma Arduino proporciona uma ótima experiência com conectividade USB já integrada. Com ela, facilmente pode-se conectar a placa a um PC e fazer o upload do programa para a placa. Além disso é possível fazer aplicações que interagem com o PC enviando e recebendo dados, conforme foi apresentado nesse artigo sobre comunicação serial.

Porém em algumas situações há a necessidade de fazer interface serial com dispositivos que possuem o padrão RS-232 ou RS-485. Esses padrões são muito utilizados em ambientes industriais, onde é possível fazer interface entre computadores, inversores de frequência e até mesmos CLPs ou IHM’s.

Para facilitar a conexão do Arduino a esses dispositivos foram desenvolvidos shields que convertem os sinais do microcontrolador em níveis compatíveis com tais padrões. Nesse artigo vamos explorar o hardware do RS-232/RS-485 Shield para Arduino.

Comunicação Serial

A comunicação serial é muito utilizada em sistemas embarcados para transferência de dados entre dispositivos, seja entre um dispositivo e um computador ou até mesmo entre periféricos na mesma placa. Um dos benefícios da comunicação serial é a utilização de poucos pinos para transferência de dados. Pode-se utilizar apenas um pino de I/O do microcontrolador, o que reduz muito, se comparado a 8 ou mais pinos em uma comunicação paralela.

Em uma comunicação serial os bits são transmitidos um após o outro respeitando um tempo limite para cada bit. A transferência de bits pode ser half ou full duplex. Na half duplex apenas um dispositivo envia informação por vez, enquanto o outro recebe. Já na full duplex o dois lados podem enviar e receber informações ao mesmo tempo.

Uma transmissão serial pode ser síncrona ou assíncrona. Na transmissão síncrona tanto o transmissor quanto o receptor utilizam o mesmo sinal de clock. O clock é gerado pelo master da comunicação e necessita de uma via para envio do mesmo.

Já em uma comunicação assíncrona, o sinal de clock não é enviado junto aos dados, ou seja, tanto o emissor quanto o receptor geram esse clock para envio (transmissor) e recepção da informação (receptor). Porém para que ambos os lados gerem o mesmo clock a taxa de transferência (baud rate) deve ser configurada igualmente. O sinal clock, em cada lado, pode apresentar um pequeno desvio em relação um ao outro, que mesmo assim os bits serão corretamente transmitidos e lidos. Os dados são enviados em bytes com mais 2 ou 3 bits de controle. A figura 1 exibe o envio de um byte pelo canal serial de forma assíncrona:

figura 1

Figura 1 – Envio de byte

O bit de start pode ocorrer a qualquer momento iniciando a transmissão/recepção do byte. O bit de paridade é utilizado para verificação de erro no dado transmitido. O bit de stop indica o fim do dado e é necessário para que se possa iniciar uma nova transmissão. Note que quando não há dado sendo transmitido a linha permanece em nível alto.

A SPI e a I2C são exemplos de comunicações síncronas, já a UART (Universal Asynchronous Receiver/Transmitter), como próprio nome diz, é um exemplo de comunicação assíncrona.

A SPI e I2C são utilizadas para comunicação entre CIs em uma placa, para troca de dados, por exemplo, entre um microcontrolador e uma memória externa. Já a UART é muito utilizada para comunicação entre dispositivos externos à placa, como por exemplo um PC.

A UART proveniente do microcontrolador apresenta níveis de tensão entre 0 e VCC como foi apresentado na figura 1. Os níveis podem apresentar valores entre 0 e 1,8V, 0 e 3,3V ou 0 e 5V, conforme a tensão de alimentação do microcontrolador utilizado. Tais níveis de tensão, quando transmitidos em cabos por alguns metros, são suscetíveis a interferências externas ou queda de tensão no próprio cabo. Esse fatores acabam atrapalhando na transmissão e recepção dos dados. Para reduzir esses efeitos foram criados padrões de comunicação que definem o meio de comunicação e os sinais elétricos utilizados. O padrões mais conhecidos e utilizados para essa finalidade foram o RS-232 e RS-485. A seguir vamos entender como funcionam esses padrões e qual a aplicação de cada um.

RS-232

A RS-232 foi criada por volta dos anos 60 pela EIA (Electronic Industries Association). O prefixo RS vem do inglês, Recommended Standard. Trata-se de um padrão que define as características elétricas e físicas, como conexões de hardware, pinagem e nomenclatura de sinais.

A RS-232 é utilizada ponto a ponto, podendo trabalhar em full duplex. Cada ponto recebe um nome, um lado é chamado de DTE (Data Terminal Equipment) e o outro DCE (Data Communication Equipment). Essa nomeclatura remete à ligação entre o PC e modem, conforme exibido na figura 2:

figura 2

 Figura 2 – DTE e DCE

Cada transmissor envia dados através da variação de tensão na linha. Uma tensão maior que 3 V é considerada o valor binário zero, enquanto uma tensão menor que – 3V é considerado o valor binário um. Entre essas tensões, o valor é indefinido. Para garantir o envio e recepção dos dados o transmissor deve operar com +/- 12V e o receptor identificar valores de +/- (3V a 15V).

Para converter o sinal lógico (0 e 5V) para o padrão RS-232 é utilizado um circuito conversor ou mais facilmente um CI como o caso do MAX232. A figura 3 exibe os níveis de tensões para envio de um byte através do padrão RS-232:

figura 3

Figura 3 – Sinais TTL e RS-232

O padrão define velocidade de até 20Mbps e geralmente são utilizados alguns valores comuns: 300, 1200, 2400, 4800, 9600 e 19200 bps. Velocidades maiores são possíveis desde que utilizados bons cabos em pequenas distâncias. A RS-232 não atinge grandes distâncias de transmissão geralmente sendo utilizada em poucos metros sem que haja interferência externa.

O padrão define os conectores e sinais. A figura 4 exibe os conectores e sinais para ligação do padrão RS-232:

figura 4 - conectores rs232

Figura 4 – Conectores e sinais RS-232

Na maioria das aplicações utiliza-se o conector DB9 e apenas os sinais TX, RX e GND.

RS-485

O padrão RS-485, também criado pela EIA, é uma comunicação balanceada. Normalmente utiliza-se par trançado para ligação entre os dispositivos podendo chegar em até 10Mbps e alcançando distâncias de até 1200 m, dependendo do cabo e blindagem. Por ser uma comunicação balanceada e utilizar cabos em par trançado, apresenta uma grande imunidade a ruídos.

É uma comunicação multi ponto podendo conectar até 32 dispositivos na rede. O sinal TTL é convertido em um sinal diferencial e transmitido através de duas vias. Geralmente a rede é composta de um mestre e os demais são escravos. A figura 5 exibe um exemplo de ligação típica da rede RS-485:

RS-232

Figura 5 – Ligação rede RS-485


A RS-485 não define conector padrão, dessa forma pode-se utilizar variados tipos de conectores ou até mesmo o DB9 utilizado na RS-232.

Hardware

O shield utilizado nesse artigo apresenta ambos os padrões RS-232 e RS-485 com fácil conexão ao Arduino. Facilmente pode-se converter a UART para um desses padrões. O shield apresenta um conector DB9 (fêmea) para conexão com dispositivos com padrão RS-232. Para comunicação RS-485 está disponível um borne. Além disso possui uma área para prototipagem. A figura 6 exibe estes detalhes da placa.

RS-232

Figura 6 – Conexões e área de prototipagem.

Com este shield é possível trabalhar com UART por hardware ou através da biblioteca softserial. Além disso é possível escolher entre o padrão RS232 ou RS485. A seleção é feita através das chaves exibidas na figura 7.

RS-232

Figura 7 – Chaves de seleção

O circuito é composto basicamente por 2 CI’s, responsáveis pela conversão entre o TTL e os padrões RS232 e RS485. Antes de explorarmos estes CIs vamos verificar quais pinos do Arduino estão sendo utilizados e como é feita a seleção dos modos de operações através das chaves de seleção. A figura 8 exibe a pinagem dos conectores headers do shield.

RS-232

Figura 8 – Ligações do Shield aos pinos do Arduino

Note que este shield é compatível com a REV3 do Arduino UNO. São utilizados apenas 5 pinos do Arduino para conexão com o shield além dos pinos de alimentação: 5V e GND. Dessa forma é possível conectar shields ou módulos para utilizar os outros pinos.

O circuito de seleção é apresentado na Figura 9 a seguir:

RS-232

Figura 9 – Circuito para seleção de modos de operação

Como se pode observar é possível trabalhar em 4 modos diferentes, através da seleção das chaves:

O circuito também apresenta dois LEDs para indicação de status das linhas TX e RX. A figura 10 exibe o circuito de acionamento desses LEDs. Note que são acionados através de transistores MOSFET, FDN340P:

RS-232

Figura 10 – LEDs de status

O circuito para conversão do sinal TTL no padrão RS-232 é apresentado na figura 11 a seguir:

RS-232

Figura 11 – circuito conversor TTL para RS-232

O CI responsável para conversão entre os padrões é o SP3232EA. Este CI é pino a pino compatível com o famoso MAX3232. Este CI faz a inversão dos sinais TTL, no pino de transmissão a tensão é convertida para  aproximadamente +10V /-10 V que estão dentro dos níveis estabelecidos pelo padrão RS-232. No pino de recepção que recebe o padrão RS-232, a tensão é convertida para 0 e 5V para leitura do microcontrolador.

O circuito para conversão do sinal TTL no padrão RS485 é apresentado na figura 12 a seguir:

RS-232

Figura 12 – circuito conversor TTL para RS485

O circuito é baseado no MAX481CSA, responsável por converter o sinal TTL em um sinal diferencial. Note que o circuito possui jumpers para ligar os resistores de pull-up e pull-down além de jumper para ligar resistor de terminação de linha. Também é possível selecionar o controle da transmissão para automático ou manual através do jumpers SJ1. Esse jumper já vem selecionado para o modo automático.

Confira na figura 13 um resumo de todas as funcionalidades do shield RS232/RS485:

RS-232

Figura 13 – Resumo de recursos do shield

Saiba mais

Arduino – Primeiros Passos

Comunicação SPI

Comunicação Serial com Microcontroladores: USART, I2C, SPI e Outros

Referências

RS232/RS485 Shield para Arduino

Tutorial Sparkfun – Serial Communication

Biblioteca softserial

https://www.mouser.com/ds/2/149/FDN340P-103694.pdf

SP3232EA

MAX3232