CAN 통신

이찬영·2024년 3월 18일

1. CAN 통신 등장 배경 & 개요

제어 장치들마다 그것을 제어하기 위한 컴퓨터가 존재함
자동차 내부에는 조향, 현가, 구동 장치, 네비게이션 등이 있음

CAN 통신은 Controller Area Network의 약자이다.
"차량 내에서 호스트 컴퓨터 없이 ECU 장치들이 서로 통신하기 위해 설계된 메시지 기반의 네트워크 프로토콜"

독일의 자동차 부품회사 BOSCH가 제작함
대부분의 자동차 회사들이 사용하고 있음

[CAN의 특징]
= 높은 안전성
= 최대 1Mbps 데이터 전송 속도로 실시간 전송
= 장거리 통신
= 경제적이며 노드 증감 및 네트워크 구성에 유연
= 멀티 마스터 통신
= 메시지 우선 순위 지정으로 노드 간 통신 중재
= 탁월한 에러 처리와 제한 기능

자동차 내에는 3개의 분리된 네트워크가 존재한다.


2. CANoe, vector

CANoe는 CAN 통신을 테스팅하고 쓸 수 있는 tool이다.

vector은 Canoe를 만든 회사일 뿐만 아니라, 자동차 업계에서 쓰는 툴을 만드는 회사이다.

CAN-DB : CAN 통신의 요구사항이 담김


3. CAN 통신 등장 배경 및 특징

무선으로 연결되지 않으면 결국에 전선으로 연결해서 통신하게 될 것이다.
예를 들어, 조향 장치(MDPS)와 제동 장치(MEB)가 통신하기 위해서는 전선이 하나만 있으면 되지만, 연결되어야 할 부품이 더 많아지면 전선이 더 많아질 것이고, 이것은 비효율로 이어질 수 있다. (제어기마다 MCU가 들어가 있음)

CAN 통신은 이러한 관점을 해결하기 위해 '버스형 토폴로지'라는 특징을 가진다.

가운데 공통으로 두고 다같이 쓰는 선을 '버스'라고 부른다. 그래서 버스형 토폴로지라고 부른다. (모든 메시지는 브로드 캐스팅 방식으로 송신된다.)

한 제어기에서 보내도 모든 다른 제어기에 송신되는 특징을 가지고 있음


단점 : 만약 어떤 제어기가 잘못된 신호를 보낸다고 하면, 그 제어기의 잘못된 신호 때문에 다른 제어기들이 통신을 못하는 경우가 생긴다. 따라서, Bus off 라는 방식으로 고장난 제어기가 스스로 통신에 참여하지 않게 된다. 그러면 나머지는 문제 없이 잘 동작한다.

4. CAN 커넥터

실제 제어기들끼리 연결을 할 때는 커넥터를 사용해서 연결을 하게 된다.

공통된 모양의 D-Sub 9pin 라는 표준 커넥터를 사용한다.

CAN 통신은 실제로는 두 가닥의 전선을 사용함

CAN Low : 2번 핀에 연결
CAN High : 7번 핀에 연결


5. 120옴 저항

전기적인 신호가 전선을 타고 네트워크를 통해 정보를 전달하게 된다.
하지만 전선 끝단에서 전기적 신호가 반사될 수 있다.

이 때, 반사된 전기 신호와 기존의 전기 신호가 충돌하면 통신에 문제가 생기게 되고, 이것을 해결하기 위해 120옴 저항이 사용된다.


6. CAN High, Low 신호

통신에서 msg를 보낸다는 것은 전선에서 전기적인 신호를 발생시키는 것이다.

CAN high와 CAN low에 걸리는 전압의 차이를 이용해서 데이터를 표현한다.

CAN High - CAN Low = 0.9 ~ 5 볼트 = 0을 표현 ----- Dominant
CAN High - CAN Low = 0.1 ~ 0.5 볼트 = 1을 표현 ----- Recessive

-> Dominant가 Recessive 보다 우선순위가 높다.

전압 차를 이용한 방법의 강점 : Noise에 강하다!
꼬임 선을 사용하면 Noise가 상쇄됨


7. CAN Tranceiver & CAN Controller

Tranceiver = Transmit + Receiver

각각의 제어기 안에는 일종의 작은 컴퓨터인 MCU가 있다.
MCU는 작은 컴퓨터라고 생각하면 됨 ---> 내부에는 각종 peripheral 들이 있음
MCU 내에 CAN Contoller가 위치함 (데이터를 CAN 통신 프로토콜에 맞추어 보낼 수 있음)

아무도 현재 Bus를 사용하고 있지 않다고 판단되면 데이터를 내보냄

CAN Controller가 CAN Transceiver에게 보내는 것은 CAN_TX
CAN Transceiver가 CAN Controller에게 보내는 것은 CAN_RX

CAN Transceiver에 CAN_H와 CAN_L이 연결되어 있음
State machine이 있음

  • sleep mode (아예 통신이 안 될 수 있음)
  • normal mode (메시지를 밖으로 내보낼 수 있음)
  • listen only mode (받는 것만 할 수 있음)

8. 실제 CAN 트랜시버 데이터시트 살펴보기

CAN Transceiver는 MCU가 데이터를 읽기 위한 인터페이스라고 할 수 있음


9. 통신 속도 Baud Rate

단위 : bps (bit per second)

버스에 참여하고 있는 제어기들은 모두 같은 baud Rate로 통신해야 한다.

이 3가지가 거의 같다고 봐도 무방함

1 Mbps -> 최대 길이는 40m
500 kbps -> 최대 길이는 100m
125 kbps -> 최대 길이는 500m

1bps = 1초에 1bit를 보냄

[Sampling Point]

Sample Point : 하나의 비트 값이 0인지 1인지 판단하는 지점을 의미, 단위는 %이다.

CAN Simulation 장비를 사용할 때 Baud rate와 함께 Sample point도 지정해서 사용해야 함

  • CAN에서는 1bit를 아래 그림처럼 Sync, TSEG_1, TSEG2 3개의 구간으로 분류함

  • TSEG1, TSEG2의 길이를 세는 단위는 Time Qunta 이다. (0.01초)

  • CAN Clock의 속도를 얼마로 할 건지까지도 OEM에서 정해주기도 한다.

TSEG1, TSEG2 의 역할 설명 및 SJW에 대하여

(1) Tseg1. 클락 속도가 빠를 때

정상적인 애랑 속도를 맞춰주기 위해서 Tseg1의 길이를 늘인다.

(2) Tseg2. 클락 속도가 느릴 때

속도가 느릴 때 Tseg2의 길이를 줄인다.

SJW는 Synchronization Jump Width는 늘리고 줄이는 Tseg limit 이다.


10. BaudRate 관련 - MCU 데이터시트 살펴보기


11. 메세지 ID

CAN 통신 방식은 broadcast 방식이다.

CAN 메시지 내부에는 Transmitter, Receiver 정보가 따로 없음
(source Address 정보가 없음)

따라서 CAN에서는 이것을 대신해 ID를 사용함


ID 별로 메세지의 이름을 붙이고, 그 메세지를 누가 보낼 건지를 OEM에서 사전에 정의해 둠

이런 정보가 담겨있는 자료들을 CAN Db라고 함

메세지를 수신받으면 ID 영역의 값을 보고, 누가 보냈는지를 알 수 있음

실제로는 하나의 제어기가 다양한 ID의 메시지를 보냄

특정한 ID를 보내는 제어기는 하나여야 함
(예를 들어, Ox123이 하나만 존재해야 함)

수신 제어기는 콘셉일 뿐이다. (실제로는 모든 제어기에 메시지가 다 전달됨)

CAN 통신에서 메세지의 형태를 id의 길이에 따라서 메세지를 2가지 포맷으로 구분함

Standard format : 11 bit
Extended format : 29 bit

하나의 네트워크에서 혼용이 가능함


12. Bus load & 메시지 우선순위

ID 값이 작을수록 우선순위가 높다!

Data 0을 표현 = Dominant
Data 1을 표현 = Recessive
Dominant가 Recessive보다 우선순위가 높다.

순서를 중재해주기 때문에 Arbitration field 라고 함

제어기들은 네트워크에 메시지가 보내지는지 안 보내지는지 계속 체크함

CSMA/CA (Carrier Sense Multiple Access with Collision)

[Bus Load]

단위 : %
점유율과 같은 개념
네트워크에서 실제로 메시지가 왔다갔다 한 기간
Bus Load 측정은 Canoe 툴에서 계산할 수 있음

-> 데이터를 최대한 작게 보내고, 주기를 낮추면 Bus Load를 낮출 수 있음


13. 시그널

내가 메시지에서 보내려고 하는 정보 단위
ex) battery voltage, battery capacity, battery current ...

*DLC : Data Length Code
Data 영역의 길이가 얼마인지 알려주는 부분

CAN 메시지 하나에 담을 수 있는 메시지 최대 크기는 최대 8 byte 이다.
CAN DB 안에 각각의 메시지 안에 어떤 정보가 들어가 있는지도 들어가 있어야 함

(8 bit = 1 byte)
7 bit : 배터리 전압 (start bit = 0, length : 7, unit : V)
7 bit : 배터리 전류 (start bit = 7, length : 7, unit : A)
나머지 : 배터리 용량 (start bit = 14, length : 18, unit : W)

이걸 이용하면 제어기가 메시지를 받았을 때, CAN DB에 적혀져 있는 start bit와 length를 보고, 메시지 정보를 알 수 있게 됨

Factor와 offset을 이용해 bit를 절약해서 메시지를 보낼 수 있음


14. CAN 에러 처리

Bit error : 내가 보낸 bit를 바로 읽어 봤을 때, bit가 다르면 에러로 감지하는 것

Stuff error : 5개 연속 같은 에러가 나오는 것

CRC : CRC 값 이상일 때

  • CRC는 데이터 통신에서 다 사용되며, 이 메시지를 수신받은 자는 수신 데이터가 변조가 됐는지 안 됐는지를 판단할 수 있음 (checksum이 데이터를 다 더한 값으로 정하는 것처럼 CRC도 비슷하게 동작함)

Acknowledge error : sender가 1로 보냈는데 0으로 수신 안 되면 에러로 판단

Structure error : 데이터 양식이 어긋났을 때

CAN 프로토콜에서는 다음과 같은 상태가 존재한다.

Bus off 상태에서는 메시지 송/수신이 불가함

Bit Stuffing Rule : 버스 상에 같은 비트 값이 6개 이상 연속으로 출력될 수 없다.

000000을 보낼 때 0000010으로 보내야 함 (CAN Controller가 제어)

똑같은 신호가 연속으로 계속 나오면 error로 판단하게 됨


15. CAN FD

High speed CAN의 낮은 BaudRate과 작은 크기의 Data 영역 보완한 것이 핵심
-> Data 영역 속도 최대 8Mbps Data 영역 크기 최대 64 byte 가능

CAN FD는 크기에 따라 종단 저항 크기가 달라질 수 있음


16. CAN DB/DBC

CAN DB : CAN 네트워크에서 사용될 메시지, 시그널과 관련된 각종 사항들을 정리한 자료

CAN DBC : VECTOR 사에서 만든 CAN DB 작성 파일 타입

profile
E2E 자율주행, Vision AI, 클라우드

0개의 댓글