본문 바로가기

메이커 이야기/라즈베리파이

라즈베리파이를 활용한 CAN통신 - (1) : CAN-FD

반응형

자율주행자동차의 핵심은 실시간 데이터의 공유가 아닐까 싶습니다.

5G기술을 통해 끊킴없는 데이터를 전송하는 것, 자동차의 수많은 센서로부터 얻은 데이터를 함께 공유하는 것

 

이게 자율주행자동차를 위한 첫 걸음이겠죠?

 

미약하나마,

 

이에 발맞춰 오늘은 라즈베리파이와 OBD커넥터를 활용하여 자동차의 데이터를 읽어 오도록 하겠습니다.

이를 진행하기 위해서는 

 

우선 CAN통신에 대해 알아봐야겠죠?

역시... 대단한 글을 올리신 분이 있어서 정리 차원에서 퍼왔습니다.

 


<출처 : https://blog.naver.com/suresofttech/220793847337>

 

안녕하세요.
이번에 소개할 내용은 ‘CAN(Controller Area Network) 통신 소개 및 동작 방법’을 주제로 삼아 이야기해 보려고 합니다.

CAN이 뭘까요? 깡통 CAN을 생각하시는 분도 있을 테고 가수 CAN이 떠오르는 분도 있을 것 같네요. 하지만 우리 블로그(blog)를 보러 오셨다면, CAN 통신에 대해 궁금해서 오신 거겠죠? CAN은 자동차에서 각 ECU(Electronic Control Unit) 끼리 통신하는 기술 정도로만 알고 계셔도 CAN 통신의 절반은 알고 있다고 생각합니다. 그럼 이제부터 CAN 통신 기술에 대해 더 자세하게 알아보겠습니다.

<그림 1> 자동차의 수많은 선(Line)으로 연결된 ECU

<그림 1> 출처http://retis.sssup.it/~giorgio/CBSD.html

CAN 통신 등장 배경

과거 1980년대까지 자동차는 대부분 기계식이었습니다. 그러다 점차 기술의 발전으로 인하여 자동차에 다양한 모듈(ECU) 들이 생겨났고 이러한 모듈들이 서로 통신하기 위해 비동기 직렬 통신 방식인 UART(Universal Asynchronous Receiver/Transmitter)를 사용했습니다. 그러나 UART의 통신은 각 모듈이 1:1 통신을 해서 모듈이 추가될 때마다 더 많은 연결선이 필요했습니다. 수많은 연결선은 자동차의 공간을 점점 더 많이 차지하게 되었고 이는 자동차 무게를 증가시키고 원가를 상승시키는 결과를 초래하였습니다.

메르세데스-벤츠(Mercedes-Benz)는 이러한 문제점을 해결하기 위해서 보쉬(Bosch)에 차량용 네트워크를 만들어달라고 의뢰를 하였고 1985년에 보쉬는 CAN을 개발하였습니다. 여러 개의 CAN 장치(Device)가 서로 통신할 수 있으며, 하나의 CAN 인터페이스로 여러 개의 모듈을 제어할 수 있어서 연결선 수의 감소, 자동차 무게의 경감, 원가 하락뿐만 아니라 효율적으로 시스템 제어가 가능해졌습니다. 1993년에는 ISO가 국제 표준 규격으로 제정하였습니다. 이렇게 CAN은 자동차 통신의 필수불가결 요소가 되었고 현재 제2세대까지 나왔습니다.

 

CAN 표준 판(Version/Release)

1985년도에 CAN 제1.0판이 나왔으며, 이후 1987년도에 제1.1판 그리고 1990년도에 CAN 제1.2판이 나왔습니다. CAN 1.0 ~ 1.2판은 제1.0판의 안정화와 각종 장치(Device)들의 사용을 가능하게 하기 위해 내용을 보완한 판(release)입니다.
1991년도에 나온 제2.0판부터는 표준 CAN과 확장 CAN으로 구분되어 있습니다. 표준 CAN은 기존과 같지만, 확장 CAN은 확장 ID(Identification)를 추가해 많은 데이터를 사용할 수가 있습니다.

CAN 통신의 특징 및 장점

CAN 통신은 여러 개 ECU를 병렬로 연결하여 데이터를 주고받는 통신방법입니다. CAN 버스를 통해서 통신선 상에 데이터를 띄어놓고 필요한 데이터에 접근(Access) 합니다. 그럼 이제부터 어떠한 이유로 자동차에 CAN 통신을 두루 쓰게 되었는지 그 특징과 장점을 알아보겠습니다.

 다중 주인(Multi Master) 통신 방식:
 CAN 버스는 다중 주인(Multi Master) 방식으로 통신하므로 통신 버스를 여러 노드(node)들이 공유하면서 언제든지 버스를 사용할 수 있습니다.
 
간단한 구조:
CAN_High, CAN_Low 두 개의 신호로 통신하므로 단 2개의 선이 필요로 합니다. 그러므로 많은 모듈이 추가되더라도 추가되는 선의 양이 적습니다.
 
잡음에 매우 강함:
CAN BUS는 Twist Pair 2선으로 되어있어 전기적 잡음(noise)에 강해 메시지를 보호할 수 있습니다.
 
ID 값을 이용한 우선순위:
자동차의 ECU들은 고유한 ID 값을 가지고 있습니다. ID 값은 낮을수록 우선순위가 높은데, CAN에서는 여과 과정(filtering)을 통해 설정된 ID 값을 수신해 우선순위를 결정합니다. 주소가 아닌 ID 값으로 메시지 내용과 우선순위가 결정되며 이는 시스템 제어 속도와 안전성을 향상할 수 있습니다.
특히 BUS를 이용하므로 연결선 수를 대폭 줄일 수 있으며 이는 자동차의 무게와도 직결되므로 매우 중요합니다.
 
고속 및 원거리 통신:
CAN 통신은 최대 1M bps에 달하는 고속 통신을 제공하며, 보통 통신 속도가 500k~ 1M bps 속도로 CAN 통신이 가능합니다. 또한, 최대 1,000m까지 원거리 통신이 가능합니다.
 
PLUG & PLAY 기능:
PLUG & PLAY 기능을 제공해서 CAN 제어기(controller)를 버스에 간편하게 연결하고 끊을 수가 있어서, 여러 장치를 추가하고 제거하기가 매우 쉽습니다.

CAN 프레임 구조

CAN 통신이 무엇인지 이제 조금 감이 오시나요? CAN 통신이 뭔지 알았으니 이제 CAN이 어떻게 생겼는지도 궁금해하실 것 같아서 이번에는 CAN 프레임(frame)의 구조에 대해서 알아보려고 합니다.
CAN 통신은 프레임이라고 하는 패킷(packet)으로 데이터를 전송합니다. 프레임이란 하나의 메시지를 이루는 필드 또는 bit들의 집합을 말하며 CAN 프레임은 다음과 같은 분할 구역(section)으로 구성되어 있습니다.

 

 SOF(Start Of Frame) 비트: 메시지의 시작을 의미하는 주요한 비트로 버스의 노드(node)를 동기화하기 위해 사용됩니다.
 Identifier(ID): 식별자로서 메시지의 내용을 식별하고 메시지의 우선순위를 부여합니다. CAN 메시지에 있는 ID의 길이에 따라서 표준 CAN과 확장 CAN 두 가지 양식(mode)으로 구분됩니다. 표준 CAN은 11 비트 식별자이고, 확장 CAN은 29비트 식별자로 구분됩니다.
 Control: 데이터의 길이(DLC)를 의미합니다.
 Data: 전달하고자 하는 내용을 의미합니다.
 CRC: 프레임의 송신 오류 및 오류 검출에 사용됩니다.
 ACK 비트(Bit): 오류가 없는 메시지가 전송되었다는 것을 의미하는 비트로서, CAN 제어기는 메시지를 정확하게 수신했다면 ACK(Acknowledgement) 비트를 전송합니다. 전송 노드는 버스 상에서 ACK 비트의 유무를 확인하고 만약 ACK 비트가 발견되지 않는다면 재전송을 시도합니다.
 EOF(End of Frame) 비트: 프레임의 끝을 나타내고 종료를 의미합니다.

CAN 통신의 동작 방법

CAN 버스에는 전체 노드를 제어하는 주인(Master)이 없어서 CAN 버스에서 데이터를 쉽게 접근할 수 있습니다.
우선 CAN 제어기는 CAN 버스 선이 사용 다른 제어기에 의해서 사용 중인지 확인을 합니다. 만약 CAN 버스 선이 사용 중이지 않다면 모든 노드는 ID 값을 통해서 자신에게 필요한 메시지를 확인합니다. 이때 불필요한 메시지를 무시하게 되고 자신에게 필요한 메시지만 수신하게 됩니다. 앞에서 자동차의 ECU들은 고유한 ID 값을 가지고 있다고 했습니다. 다중 노드가 동시에 메시지를 CAN 버스에 전송하려는 경우에는 가장 낮은 ID 값을 가진 최우선 노드가 자동으로 버스에 접근하게 됩니다. (식별자 값이 1과 7일 경우 식별자 1의 우선순위가 더 높음) 우선순위가 높은 메시지가 CAN 버스의 사용 권한을 보장받을 수 있으며 낮은 순위의 다른 노드들은 대기해야 하며 자동으로 다음 버스 사이클에서 재전송을 수행합니다.

 

[출처] CAN (Controller Area Network) 통신 소개 및 동작 방법|작성자 슈어소프트테크

 

 

 


 

 

위의 내용과 

CAN 통신을 자동차에서 사용하고 있었지만, 현재 최근 자동차에 더많은 센서와 자율주행자동차를 위해는 ECU의 전력 감소가 생명이게 되었습니다. 그래서 결국 Partial Network 로써 전력을 최소화 시켜야할 필요가 있는 것이죠.

 

그래서 나온것이 "CAN-FD 통신 더 많은 데이터를 더 빠르게 보내는 것"

 

^^ 그래서 저는 CAN-FD를 공부해보도록 하겠습니다.

 

라즈베리파이는 기본적으로 CAN-FD 통신이 안됩니다 :)

그래서 CAN-FD통신을 위해 모듈을 사용할 것인데요. 아래 내용이며 향후에는 아래 보드를 사용하는 방법에 대해서 포스팅 해볼 것입니다.

 

혹시 구매가 필요하신 분들은 구매하세요 :) 

구매하기

 

 

반응형