RS-485 통신이란?
RS-232는 전송 속도가 낮고 전송 거리가 짧으며 1대1 통신만 가능하다.
이를 보완하기 위해 개발된 RS-422는 한 개의 마스터 장치와 슬레이브 장치 간에 데이터를 주고 받는 방식으로 통신한다.
반면, RS-485는 모든 장치들이 같은 라인에서 데이터 전송 및 수신을 할 수 있다.
결선 방식
통상 2개의 선을 사용하여 반이중 통신 방식으로 사용하나 2개의 RS-485 통신망을 사용하면 전이중 통신도 가능하다.
참고로 그림1처럼 선이 2개라서 전이중 통신이 가능한 것 같지만, 2개의 선으로 한 신호를 만들어내는 차동신호 방식을 사용하므로 사실상 선이 1개라고 생각하면 된다.
전기적 특성: 차동신호 방식
RS-232 통신과 다르게 데이터가 한 선이 아니라 두 선이라서 차동으로 데이터를 송수신한다.
중요한 점은 이렇게 차동신호로 주고 받을 때 외부 노이즈 영향을 받지 않는다는 점이다.
자세한 내용은 아래와 같다.
예를 들어 그림2처럼 UART TXD로 5V, 5V, -5V로 신호를 보낸다면, RS-485 Transceiver는 그 신호를 받아서 TXD+와 TXD-로 나누어 차동신호로 내보낸다.
이때 TXD+는 그대로, TXD-는 반전해서 보내는데 그림2처럼 TXD+쪽은 5V, 5V, -5V가 나가고, TXD-쪽은 -5V, -5V, 5V가 나가게 된다.
그리고 그림2에서 내보낸 차동신호는 그림3의 초록색부분처럼 들어오게 되는데 아래와 같이 해석된다.
(DATA+) – (DATA-) >= 200 mV ex. (+5V) - (-5V) = +10V => Logic ‘1’
(DATA+) – (DATA-) =< -200 mV ex. (-5V) - (+5V) = -10V => Logic ‘0’
즉, 위의 식대로 계산하면 처음에 UART에서 보낸 신호 +5V, +5V, -5V가 +10V, +10V, -10V가 되어 Logic이 1, 1, 0으로 동일하다.
그리고 중요한 점은 만약 노이즈(Noise)가 들어온다고 해도 아래처럼 상쇄되어서 Logic 값에는 영향이 없다는 것이다.
(+5V + Noise) - (-5V + Noise) = +10V => Logic ‘1’
(-5V + Noise) - (+5V + Noise) = -10V => Logic ‘0’
통신 방법
RS-485 2선 방식에서 RE, DE 핀은 보통 하나로 묶어서 제어한다.
이 두 개의 핀을 하나로 묶은 핀을 RTS라고 부르고 이 RTS핀 제어에 따라 RS-485통신이 송신모드 혹은 수신모드로 선택되어 통신하게 된다.
대부분 RTS가 High일 때 송신모드로 Setting되고 Low일 때 수신모드로 Setting된다.
RS-485 2선 방식은 반 이중 방식이기 때문에 송수신이 동시에 되지 않는다.
따라서 송신 측에서 데이터를 보내고 응답을 받는 형식으로 사용해야 한다.
이 동작은 아래처럼 RTS 스위칭에 의해 구현할 수 있다.
순서적으로만 보면 정말 간단하게 표현할 수 있지만 여기에는 한 가지 문제가 있다.
바로 스위칭 타이밍으로, 만약 스위칭 타이밍이 맞지 않으면 데이터 송신에는 성공할 수 있지만 수신 시에는 원하는 데이터를 받지 못하고 데이터가 잘린다거나 깨지는 문제가 발생한다.
따라서 이를 해결하기 위해 송신버퍼의 상태를 체크하는 과정을 추가해야 하는데 RS-485 송신 버퍼가 비워졌는지를 확인한 뒤 전송이 완료되어 송신 버퍼가 비워지면 그와 동시에 RTS Low Setting을 통해 수신 모드로 변경하면 된다.
즉, 전송 뒤 수신모드로 바꾸는 타이밍 자체를 송신 버퍼가 비는 시점(데이터 전송이 완료된 바로 직후)에 스위칭하는 방식으로 사용하는 것이다.
최종적인 동작 순서는 아래와 같이 구현할 수 있다.
<참고 자료>
https://codinghero.tistory.com/19
'용어 정리' 카테고리의 다른 글
ADC (1) | 2023.11.18 |
---|---|
클럭과 주파수 (1) | 2023.11.18 |
동기(Synchronous)와 비동기(Asynchronous) 방식 (0) | 2023.11.17 |
Baud rate과 Bit rate (0) | 2023.11.16 |