quarta-feira, 11 de setembro de 2013

PADRÃO 485

A principal diferença entre RS-485 e RS-232 está no fato do RS-485 ser um padrão diferencial, enquanto que o RS-232 é referenciado ao comum (0V). No RS-232, o nível lógico 1 é interpretado como sendo qualquer tensão no intervalo [–15V;-3V], enquanto que tensões no intervalo [3V;15V] correspondem ao nível lógico 0. Tensões entre -3V e 3V não possuem nível lógico definido. Este tipo de interface é útil em comunicações ponto-a-ponto a baixas velocidades de transmissão. Entretanto, devido à grande faixa de variação dos sinais, faz-se necessário dispor de drivers de alto slewrate para se alcançar altas velocidades de comunicação. No mais, com o aumento do comprimento do cabo de comunicação, o padrão RS-232 se torna altamente susceptível a interferência eletromagnética e a retorno de sinal.
O RS-485 utiliza um princípio diferente. Um transceptor RS-485 traduz um sinal lógico TTL em dois sinais, denominados de A e B (ver Figura 1). O sinal A possui a mesma lógica do sinal TTL, enquanto que o sinal B é complementar. A informação do sinal de entrada está codificada na forma do sinal A-B, ou seja, da diferença entre os sinais A e B. Se esta diferença for superior a 200mV, então tem-se nível lógico 1. Caso a diferença seja inferior a -200mV, então considera-se nível lógico 0. No intervalo de -200mV a 200mV o nível lógico é indefinido, servindo também como meio de detecção de cabo solto, para alguns transceptores comerciais. Entretanto, deve-se ter algum cuidado com relação ao compartilhamento de referência de 0V entre dispositivos .

Uma das vantagens da transmissão diferencial é sua robustez a interferência eletromagnética. A conexão entre dispositivos RS-485 é feita por cabos de par trançado, com resistores de terminação para balanceamento. Dessa forma se um ruído é introduzido na linha, ele é induzido nos dois fios de modo que a diferença entre A e B é quase nula. Outra vantagem da transmissão diferencial é que diferentes potenciais de terra são, até certo ponto, ignorados pelos transmissores e receptores. Isso se torna importante quando tem-se que percorrer grandes distâncias ou mesmo em sistemas com diferentes fontes de alimentação. Cabos trançados com terminações corretas que minimizam reflexão do sinal permitem taxas de transferência de 10Mbps a distâncias de até 1 km.
O RS-485 é um padrão de comunicação multiponto, permitindo-se a conexão de até 32 dispositivos num simples cabo de par trançado. Dependendo do transceptor, pode-se conectar mais de 200 dispositivos, seguindo a topologia mostrada na Figura 2. Na verdade, a Figura 2 mostra a arquitetura mais comum de utilização do RS-485. A letras D e R indicam os drivers de transmissão e recepção de cada dispositivo, respectivamente. Uma observação a ser considerada é a impedância característica do cabo. Se o cabo for utilizado para transmissões com componentes espectrais a altas frequências, podem ocorrer reflexões do sinal em sua extremidade provocando inconsistência nos dados transmitidos. Para minimizar este efeito, deve-se adicionar resistores de terminação de valores iguais à impedância característica do cabo para que ele se comporte como um cabo infinito. Os valores típicos para essa resistência é de cerca de 120 Ω para cabos trançados, e de cerca de 54 Ω para cabos blindados. Apesar de típicos, estes valores podem ser diferentes pois dependem também dos requisitos de carga mínima dos transmissores. É importante também que existam apenas dois resistores, um em cada extremidade, que podem estar também dentro do último dispositivo conectado. Na prática, porém, para pequenas distâncias e baixas velocidades, a terminação não chega a ser algo crucial e a maioria dos circuitos funciona bem. Um outro artifício para minimizar a influência da reflexão dos sinais é por meio da redução forçada da banda passante. Isto já é feito em vários transceptores por meio de uma limitação do slew-rate.

A maioria dos sistemas com RS-485 utiliza uma arquitetura mestre/escravo para comunicação, onde apenas um único dispositivo (geralmente o PC), chamado mestre, envia periodicamente mensagens endereçadas aos escravos. Cada escravo por sua vez tem um único endereço e responde apenas a pacotes endereçados a ele. Além do mais, pode-se usar USARTS half-duplex ou full-duplex, como ilustrado pela Figura 3. Para tanto, as seguintes conexões físicas devem ser feitas:
§  Half-duplex: um único par trançado em que todos os dipositivos estão conectados no mesmo cabo trançado. Dessa forma, todos eles devem possuir transceptores com saídas tri-state, incluindo o mestre. A comunicação se dá em ambas direções e é importante evitar, por software, que mais de um dispositivo tenha o seu driver da transmissão habilitado ao mesmo tempo.
§  Full-duplex: usa-se dois pares trançados em que os escravos transmitem para o mestre através do segundo par trançado. Essa solução geralmente permite comunicação multiponto em sistemas que foram originalmente projetados para RS-232 com pequenas modificações no software mestre. Outro fato é que o mestre também não precisa colocar a saída do seu transceptor em estado de alta impedância.




TRASPECTORES RS-485
É possível encontrar no mercado vários transceptores de RS-485 e até circuitos prontos para determinadas aplicações. No LCVC(LARA) tem-se utilizado os integrados DS485 e ST485, da National Semiconductor e STMicroeletronics, respectivamente. Estes dispositivos são bastante populares devido principalmente ao baixo custo. Entretanto, dispositivos mais caros como o LTC485 (Linear Technology) e o MAX485(Maxim) possuem outras características, tais como maiores taxas de comunicação e número de dispositivos. Estes mesmos fabricantes possuem uma linha mais extensa de dispositivos, com características de full-duplex, opto-isolamento, conversão RS232/485, etc.
A Figura 1 mostra o diagrama dos circuitos integrados DS485 e ST485. A diferença básica entre eles está somente nas suas características elétricas, bem como nas taxas de velocidade máxima: até 2,5 Mbps para o DS485 e até 30 Mbps para o ST485. O pino RE habilita o driver de recepção R, sendo ativo no nível 0. O pino DE habilita o driver de transmissão D (ativo em 1). Normalmente esses dois pinos são conectados juntos de forma que o transceptor esteja apenas recebendo ou transmitindo. Os pinos RO e DI representam saída da recepção e driver de entrada respectivamente, e trabalham com níveis lógicos TTL (0 a 5V). Já as saídas A e B para o barramento operam com tensão diferencial entre seus terminais. O transceptor normalmente é alimentado com 5V CC.
Para que um dispositivo transmita um dado pelo barramento é necessário elevar para 5V o pino DE, fazendo com que RE seja desabilitado, para então transmitir a informação necessária pelo pino DI. Com o final da transmissão, deve-se desabilitar DE e reabilitar RE, de forma que o transceptor volte ao modo de recepção. Esta habilitação pode ser feita via software, controlando pinos de um microcontrolador ou de uma porta de comunicação de um microcomputador; ou mesmo através de um hardware construído especialmente para detectar início de transmissão para o formato de dados utilizado (e.g., UART).
Um problema que pode ocorrer com um barramento RS-485 que dispõe apenas de resistores determinação é que, quando todos os dispositivos estão em modo de recepção, o nível lógico do barramento pode ficar indefinido [2]. Para garantir que o barramento fique sempre em nível lógico 1, que corresponde ao estado default NRZ das USARTs conectadas ao barramento, deve-se adicionar um resistor pull-up ao pino A e um de pull-down no pino B, conforme ilustra a Figura 4. Esses resistores devem ter valores iguais para não alterar o balancemento da linha de transmissão.



UM SIMPLES CONVERSOR RS-232/RS-485 PARA PC

Em muitos casos, em uma rede RS-485, um dos dispositivos da rede pode ser um microcomputador PC. Vários projetos desenvolvidos no LCVC (LARA) fizeram uso de microcomputador PC como mestre do barramento RS-485. As razões para isto vão desde a necessidade de coleta de dados para análise no MATLAB [5] até o controle avançado em tempo real [6]. Para tanto, faz-se necessário dispor de um transceptor RS-232/RS-485, uma vez que as portas seriais de microcomputadores PC usam o padrão físico RS-232, inclusive para controle de fluxo. Este transceptor, cujo esquemático é mostrado na Figura 5, utiliza um circuito integrado DS485 (conversor RS-485/TTL) e um circuito integrado MAX232 (conversor RS-232/TTL). A habilitação de transmissão pelo barramento RS-485 seria feito por meio do sinal RTS da porta serial do PC, também utilizando o MAX232 como interface. Se o microcomputador ficar em uma das extremidades do barramento pode-se incluir, por meio de jumpers, o resistor de terminação, e também, se for o caso, os resistores de pull-up e pull-down. A seção seguinte discutirá um software para realizar esse controle de escrita e leitura no PC em Linux.



PROTOCOLOS E CONFIGURAÇÕES DE SOFTWARE

Pelo fato da grande maioria dos dipositivos possuírem UARTs e quando taxas de até 115200 bps são suficientes para a aplicação em questão, o formato de dados NRZ comum em UARTs é uma boa opção para sincronização de bits, quando da utilização de transmissão assíncrona (ver Figura 6). De acordo com o modelo OSI, este é ainda um aspecto da parte física de uma rede de comunicação, e que ainda não garante a idoneidade dos dados transmitidos. Para tanto, faz-se necessário empregar um protocolo de comunicação. Quando se refere a sistemas embarcados micro controlados, estes protocolos implementam em geral a camada de enlace. Um protocolo bastante empregado na indústria é o MODBUS. No LCVC (LARA), muitos trabalhos são realizados a partir do protocolo descrito em.



Considerações para o projeto de protocolos

Quando deseja implementar seu próprio protocolo, um projetista deve levar em conta alguns aspectos. Na verdade, a definição do protocolo depende fortemente da aplicação. Se for utilizada a arquitetura mestre/escravo, em que cada escravo tem um endereço único e responde apenas a pacotes endereçados a ele, o protocolo torna-se simplificado, visto que elimina a necessidade de algoritmos de detecção de colisão, re-transmissão e algoritmos complicados de controle de acesso ao meio presentes em alguns sistemas distribuídos. Mesmo assim, o formato das mensagens deve levar em conta a aplicação. Por exemplo, se as informações de interesse trafegam no sentido dos escravos para o mestre, o mestre pode apenas enviar um byte contendo o endereço e um comando para o escravo, e este poderá responder com um ou mais bytes. Uma sugestão quando se tem mensagens que variam de tamanho é a utilização de um cabeçalho de um ou dois bytes, por exemplo contendo, além do endereço e um comando, o tamanho da mensagem que está sendo transmitida. Um byte de CRC também pode ser anexado ao final da mensagem como medida da integridade da mensagem. Este é o formato usado no MODBUS.
Algumas precauções devem ser tomadas quando utliza-se a arquitetura mestre/escravo. Se for desejada a propriedade plug-and-play ao sistema, pode ser interessante que o mestre, quando não tiver solicitando informações dos escravos já detectados, possa varrer o barramento enviando mensagens de checagem para detectar (i) a retirada de um dispositivo da rede e (ii) a entrada de um novo dispositivo. Também pode-se definir mensagens de broadcast, para as quais todos os escravos recebem a mesma informação do mestre, que pode ser uma configuração geral ou sincronização de relógios. O mestre também deve sempre esperar a resposta do escravo antes de enviar outro pacote, afim de evitar colisões. O projetista deve também considerar alguma falha que possa ocorrer no sistema, seja na transmissão ou nos dispositivos da rede. Assim o mestre não pode ficar indefinidamente esperando uma resposta de um escravo, nem o escravo do mestre. Se isto ocorrer, tem-se uma situação de bloqueio do sistema. Ao invés disso, deve-se estipular um tempo de espera máximo para chegada de uma mensagem de retorno (se o mestre solicitou uma do escravo) ou de conclusão da mensagem (mestre ou escravo). Este cuidado deve ser levado em conta também caso uma mensagem chegue incompleta, devendo-se aguardar um tempo limitado por cada byte esperado. Em situações de falha na comunicação, sugere-se que o dispositivo descarte a mensagem parcialmente recebida ou com erro de CRC, sinalizando ao mestre esta situação. Em geral isto é feito por meio de uma mensagem de reconhecimento (ACK). Se tal mensagem não for enviada por quem recebeu a mensagem, então o dispositivo que a enviou pode concluir que houve falha de comunicação. Nestes casos, pode-se tentar retransmitir a mensagem até um certo número de vezes. Se a falha se mantiver, então conclui-se que o dispositivo está em falha permanente.

Controle de acesso por software ao barramento RS-485

No caso de microcontroladores ligados diretamente ao transceptor de 485 ou no caso de utilização do conversor RS-232/RS-485 com controle pelo RTS, o procedimento de acesso ao barramento para escrita é feito por software. Em ambos os casos é preciso setar o pino DE do transceptor antes da transmissão e mantê-lo em nível alto até o fim da mesma.
Em microcontroladores esse procedimento torna-se bem simples, dada a facilidade em se ativar e desativar uma das saídas digitais, e também porque a maioria dos microcontroladores com UART possuem interrupções para indicar o fim de uma transmissão, que ocorre quando o buffer de transmissão fica vazio.

Já em microcomputadores PC o procedimento é o mesmo, sendo que o controle é feito pelo pino RTS da porta serial. Se a aplicação for desenvolvida em linguagem C, por exemplo, o acesso a saída RTS pode ser feito utilizando a API do sistema operacional, inclusive para espera do fim da transmissão. Ao passar por APIs, o programa pode ter comportamento pouco determinístico, principalmente em se tratando de sistemas operacionais que não sejam tempo real. Isto ainda fica pior com o Windows, que com as versões 2000/XP impossibilitaram o acesso ao hardware por programas que se executam no modo usuário. O mesmo somente pode ser feito no modelo kernel via device drivers. Para tanto, existem alguns device drivers para acesso ao hardware tais como GiveIO1 ou PortTalk2. Entretanto, o tempo necessário para troca de informações do software do usuário com o device driver é ainda não determinístico, dificultando, por exemplo, o tempo máximo de espera por uma mensagem.

Nenhum comentário:

Postar um comentário