본문 바로가기

CAN

2. CAN 통신 흐름 (1) CAN 컨트롤러 - CAN 트랜시버 - 버스

CAN 통신에서 어플리케이션의 구성과 신호의 흐름을 간단하게 설명하겠습니다.

can protocol node bus terminal resistor 100 ohm

CAN 통신의 회로 구성입니다. STM32F091RC는 MCU 내부에 CAN 컨트롤러는 포함하고 있지만, CAN 트랜시버는 따로 구성해야 하고 대부분의 MCU가 그런 것으로 알고 있습니다. 먼저 CAN 통신은 Logic Low(0V)와 Logic High(3.3V) 신호를 사용하는 UART나 SPI와는 다릅니다. CAN RX는 송신에 전혀 관여하지 않으며, CAN 컨트롤러가 CAN 트랜시버에 Logic Low 신호와 Logic High 신호를 전송할 때는 UART, SPI와 동일하게 0V, 3.3V를 사용하지만, CAN 트랜시버가 버스에 데이터를 보낼 때, CAN Low와 CAN High 신호선은 다음과 같은 상태가 됩니다.


 

 CAN TX

 0 V

3.3 V 

 CAN High

 5 V

2.5 V

 CAN Low

 1.1 V

2.5 V



CAN TX가 High여서 CAN Low와 CAN High의 출력 전압이 같아진 상태를 리세시브 상태(버스상 Logic High)이라고 하고, CAN TX가 Low여서 CAN Low와 CAN High의 출력 전압이 달라진 상태를 도미넌트 상태(버스상 Logic Low)이라고 합니다.


CAN TX에 의해 변하는 CAN Low와 CAN High는 다시 CAN 트랜시버 내부에서 CAN RX(RXD)로 다시 전송되어 CAN 컨트롤러가 CAN 버스의 상태를 모니터링하게 됩니다. CAN 트랜시버 내부 기능 다이어그램은 다음과 같습니다.

can transceiver diagram

CAN High, CAN Low에서 되돌아 오는 신호는 AND 연산되어 RXD(CAN RX)로 출력됩니다. 즉, 자신이 CAN 버스를 사용하여 무언가를 전송중일 때는 CAN TX와 CAN RX의 신호를 오실로스코프로 관찰해보면 동일한 파형이 관찰됩니다. 그리고 CAN 버스의 신호 상태는 리세시브와 도미넌트가 있습니다. 도미넌트 신호는 리세시브 신호에 우선합니다. CAN 트랜시버 내부의 출력 드라이버는 CAN TX(TXD) 신호가 1일 때 VCC와 GND가 연결된 트랜지스터의 게이트를 조절해서 CANH, CANL 신호가 모두 2.5V가 되게 하고, CAN TX(TXD) 신호가 0일 때 CANH는 5V CANL는 1.2V가 되게 합니다. 임베디드 프로그래밍을 위주로 공부해서 회로에 관해서는 필요한 부분만 찾아 공부하는 식이어서 모르는게 많지만, 내부의 다이오드는 CAN TX(TXD) 신호가 1일 때 다른 노드에서 출력되는 더 높은 CANH 전압과 더 낮은 CANL 전압이 출력 드라이버에 영향을 미치는 것을 방지하고, 리세시브를 출력하는 노드의 출력 드라이버가 CAN 버스에 영향을 미치지 못하게 되는 것 같습니다. 하지만 입력 드라이버는 CAN 버스에 그대로 연결되어 있기 때문에 두개 이상의 노드가 리세시브와 도미넌트를 동시에 출력했을 경우, 버스 상태는 도미넌트가 되고, 버스에 있는 모든 노드는 CAN 버스가 도미넌트라고 인식하게 된다고 생각하는데, 제가 잘못 이해하고 있는 부분이 있다면 알려주세요.