본문 바로가기
임베디드

[임베디드] RS485 통신이란?

by 코딩히어로 2021. 8. 26.
728x90

RS485란 공장 설비 등에서 많이 사용되는 반이중(Half-duplex) 통신방식을 말합니다.

 

즉 송신과 수신을 동시에 진행하지 못하고 Max485 Transceiver 등을 이용하여 송, 수신 모드를

 

선택하여 사용하는 방식의 통신입니다.

 

RS485를 공장 설비 등에 많이 사용하는 이유중 하나는 데이터 전송 거리가 길다는 점과

 

1:N의 통신이 가능하다는 점에서 예전부터 많이 사용되고 있습니다.

 

485 통신은 2선 방식과 4선 방식으로 나뉘지만 해당 글에서는 2선 방식에 대해 알아보겠습니다.

 

2선 방식에서 중요한 건 RE, DE 핀으로 대게는 이 두 개의 핀을 하나로 묶어서 제어합니다.

 

이 두개의 핀을 하나로 묶은 핀을 RTS라고 부르고 이 RTS핀 제어에 따라 485 통신이 송신 모드 or 수신 모드

 

로 선택되어 통신하게 됩니다.

 

대부분 RTS가 High일 때 송신 모드로 Setting 되고 Low일 때 수신 모드로 Setting 됩니다.

 

 

 

1. 485 통신 송. 수신 스위칭 문제점


485 통신은 위에서 언급한 대로 송수신이 동시에 되지 않는 반 이중 방식입니다.

 

그렇기 때문에 송신 측에서 데이터를 보내고 응답을 받는 형식으로 사용해야 합니다.

 

이 동작은 RTS 스위칭에 의해 구현할 수 있습니다.

 

1. RTS High Setting

2. RS485 Data Put

3. RTS Low Setting

4. RS485 Data Get

 

순서적으로만 보면 정말 간단하게 표현할 수 있지만 여기에서는 한 가지 문제가 있습니다.

 

바로 스위칭 타이밍으로, 만약 스위칭 타이밍이 맞지 않으면 데이터 송신에는 성공할 수 있지만

 

수신 시에는 원하는 데이터를 받지 못하고 데이터가 잘린다거나 깨지는 문제가 발생합니다.

 

구글 여러 군대에서 찾아본 결과 Data Put 이후에 Delay를 사용하라는 등의 내용을 참고해서 구현했지만

 

단거리나 중거리에서는 Delay 사용만으로도 통신에 성공했지만 거리가 멀어질수록 예를 들어 10m 이상 통신 시에는

 

Data가 잘리거나 깨지는 문제가 발생하였습니다.

 

또한 RS485 통신에 사용되는 케이블 종류 또한 중요했는데 485 전용 니드선을 사용하지 않을 경우

 

통신 노이즈에 더 취약하다는 점과 종단 저항을 연결해도 데이터가 깨지는 등의 문제가 발생하였습니다.

 

 

 

2. 스위칭 타이밍


그렇다면 하나의 RS485 칩으로 송 수신 구현 자체가 불가능할까??

 

결론은 아닙니다 그 어떤 Delay도 사용하지 않고 손쉽게 송. 수신 스위칭이 가능합니다.

 

바로 RS485 송신 버퍼가 비워졌는지를 확인 한 뒤 전송이 완료되어 송신 버퍼가 비어지면

 

그와 동시에 RTS Low Setting을 통해 수신 모드로 변경해주면 됩니다.

 

즉 전송 뒤 수신모드로 바꾸는 타이밍 자체를 송신 버퍼가 비는 시점 즉 데이터 전송이 완료된 바로 직후에

 

스위칭하는 방식으로 사용한다는 것입니다.

 

해당 글에서 사용된 MCU는 PIC18F66K80입니다.

 

 

레지스터 상에서 보면 TXSTA2의 1번이 바로 TX Buffer is Empty로

 

TX Buffer가 비는 시점 즉 데이터 전송이 끝나거나 없는 시점을 말합니다.

 

자 그럼 프로그램 순서는 간단하게 아래와 같이 만들 수 있습니다.

 

1. RTS High Setting

2. RS485 Data Put

3. RS485_TX_STATE is Set 1?

4. RS485 Low Setting

3. RS485 Data Get

728x90
반응형

댓글