자동차의 기본 구조

CAN 통신 (Controller Area Network) 소개

Choi John 2020. 12. 4. 08:15
반응형

CAN (Controller Area Network) 소개

 

CAN이란?

CAN (Controller Area Network)은 열악한 환경, 특히 산업 및 자동차 애플리케이션에서 견고하고 유연한 성능을 위해 설계된 직렬 통신 버스입니다.

원래 Bosch에서 발명하고 나중에 ISO11898-1 표준으로 코드화한 CAN은 OSI (Open Systems Interconnection) 모델의 데이터 링크 및 물리 계층을 정의하여 고속 차량 내 통신을 위한 저수준 네트워킹 솔루션을 제공합니다. 특히 CAN은 케이블 배선을 줄이기 위해 개발 되었기 때문에 차량 내부의 개별 전자 제어 장치 (ECU)는 한 쌍의 와이어로만 통신할 수 있습니다. 다음은 CAN 버스에 연결된 자동차의 ECU를 보여줍니다.

 

 

 

 

온보드 진단 (OBD)은 사용자 또는 기술자가 진단 문제 코드 (DTC)를 통해 문제를 해결할 수 있도록 차량의 진단 및 보고 시스템입니다. "엔진 점검"표시등이 켜지면 기술자는 종종 핸드 헬드 장치를 사용하여 차량에서 엔진 코드를 읽습니다. 가장 낮은 수준에서이 데이터는 대부분의 경우 CAN 인 신호 프로토콜을 통해 전송됩니다.

DeviceNet은 산업용 애플리케이션에 사용되는 고급 네트워킹 프로토콜입니다. 제어 시스템과 I / O 장치 사이에 필요한 배선을 크게 줄입니다. 각 장치를 PLC의 I / O 모듈에 있는 별도의 입력 / 출력에 연결하는 대신 4 선 커넥터를 통해 장치를 함께 연결하고 PLC의 네트워크 스캐너에 연결할 수 있습니다. 가장 낮은 수준에서 우리는 CAN이 DeviceNet 프로토콜 내에서 작동하는 것을 발견합니다. 아래는 DeviceNet을 통해 통신하는 산업용 장치 네트워크를 스캔하는 PLC를 보여줍니다.

 

 

데이터 링크 및 물리 계층에 CAN을 사용하는 DeviceNet 네트워크에 연결된 PLC.

 

CAN 메시지 프레임

그렇다면 CAN 메시지는 실제로 어떤 모습일까요? 원래 ISO 표준은 표준 CAN이라고 하는 것을 제시했습니다. 표준 CAN은 서로 다른 메시지에 대해 11 비트 식별자를 사용하며 총 2 11 개 즉, 2048 개의 서로 다른 메시지 ID가 있습니다. CAN은 나중에 수정되었습니다. 식별자는 2주는 29 비트로 확장 된 29 식별자. 이를 확장 CAN이라고 합니다. CAN은 모든 메시지가 전체 네트워크에서 브로드 캐스트되는 다중 마스터 버스를 사용합니다. 식별자는 중재를 위한 메시지 우선 순위를 제공합니다.

CAN은 열성 및 우성이라고 하는 두 가지 논리 상태의 차동 신호를 사용합니다. 열성은 차동 전압이 최소 임계 전압보다 낮음을 나타냅니다. Dominant는 차동 전압이 최소 임계 값보다 크다는 것을 나타냅니다. 흥미롭게도 우성 상태는 논리 '0'을 버스로 구동하여 달성되는 반면 열성 상태는 논리 '1'에 의해 달성됩니다. 이것은 대부분의 시스템에서 사용되는 기존의 높음 및 낮음과 반대입니다. 이 두 상태는 기사의 뒷부분에서 자세히 설명합니다. 중요한 것은 지배적 상태가 중재 중에 열성보다 우선한다는 것입니다.

표준 CAN

표준 CAN 메시지 프레임은 여러 비트 필드로 구성됩니다. 이는 다음에 나와 있습니다.

 

 

표준 CAN 메시지 프레임

 

 

첫 번째 비트는 프레임 시작 (SOF)입니다. 이 지배적인 비트는 CAN 메시지의 시작을 나타냅니다. 다음은 CAN 메시지의 우선 순위를 설정하는 11 비트 식별자입니다. 식별자가 작을수록 메시지의 우선 순위가 높아집니다.

원격 전송 요청 (RTR) 비트는 일반적으로 우세하지만 한 노드가 다른 노드에서 데이터를 요청할 때 열성 상태가 됩니다. 식별자 확장 (IDE) 비트는 표준 CAN 프레임이 전송 될 때 우세하며 확장 된 프레임이 아닙니다. r0 비트는 예약되어 있으며 현재 사용되지 않습니다. 데이터 길이 코드 (DLC) 니블은이 메시지에 있는 데이터 바이트 수를 나타냅니다.

다음은 데이터 자체이며 DLC 비트에 표시되는 바이트 수입니다. CRC (Cyclic Redundancy Check)는 전송 된 데이터에서 오류를 감지하기 위한 16 비트 체크섬입니다. 메시지가 제대로 수신되면 수신 노드는 우성 비트로 열성 확인 비트 (ACK)를 덮어 씁니다. ACK에는 동기화를 유지하기 위한 구분 기호도 포함되어 있습니다. 프레임 끝 (EOF)은 CAN 메시지의 끝을 나타내며 비트 스터핑 오류를 감지하기 위해 폭이 7 비트입니다. CAN 메시지의 마지막 부분은 시간 지연으로 사용되는 프레임 간 공간 (IFS)입니다. 이 시간 지연은 CAN 컨트롤러가 수신 된 메시지를 추가 처리를 위해 버퍼로 이동하는 데 필요한 시간입니다.

확장 CAN

확장 CAN은 몇 가지 추가 비트와 함께 29 비트 식별자를 사용합니다. 확장 메시지에는 11 비트 식별자 뒤에 SRR (대체 원격 요청) 비트가 있으며, 이는 표준 CAN과 동일한 구조를 유지하기 위한 자리 표시자 역할을합니다. 이번에는 IDE (식별자 확장)가 열성이어야 하며 확장 된 식별자가 뒤에 옴을 나타냅니다. RTR 비트는 18 비트 ID 뒤에 있으며 두 번째 예비 비트 r1이 이어집니다. 나머지 메시지는 동일하게 유지됩니다.

 

 

확장 CAN 메시지 프레임CAN 메시지 유형

 

 

이제 CAN 메시지가 어떻게 생겼는지 알았으므로 버스를 통해 어떤 종류의 메시지가 전달되는지 궁금할 것입니다. CAN은 네 가지 메시지 유형을 허용합니다. 데이터 프레임, 원격 프레임, 과부하 프레임 및 오류 프레임입니다.

표준 CAN 데이터 프레임은 식별자, 데이터 및 데이터 길이 코드, 순환 중복 검사 및 승인 비트를 사용합니다. RTR 및 IDE 비트는 모두 데이터 프레임에서 지배적입니다. 수신단의 열성 확인 비트가 우성 비트로 덮어 쓰여지면 송신기와 수신기 모두 이를 성공적인 전송으로 인식합니다.

CAN 원격 프레임은 데이터가 포함되어 있지 않다는 점을 제외하고는 데이터 프레임과 유사합니다. 열성 상태의 RTR 비트와 함께 전송됩니다. 이것은 원격 프레임임을 나타냅니다. 원격 프레임은 노드에서 데이터를 요청하는 데 사용됩니다.

노드가 CAN 버스의 메시지에서 오류를 감지하면 오류 프레임을 전송합니다. 이로 인해 다른 모든 노드가 오류 프레임을 보냅니다. 이어서 오류가 발생한 노드가 메시지를 재전송합니다. 오버로드 프레임은 비슷하게 작동하지만 노드가 프레임을 처리 할 수있는 것보다 더 빨리 수신할 때 사용됩니다. 이 프레임은 노드가 따라 잡을 수 있도록 시간 버퍼를 제공합니다.

버스 중재 및 신호

CAN은 CSMA / CD 프로토콜입니다. 즉, 버스의 각 노드가 충돌을 감지하고 재전송을 시도하기 전에 일정 시간 동안 백 오프 할 수 있습니다. 이 충돌 감지는 메시지 식별자를 기반으로 한 우선 순위 중재를 통해 이루어집니다. 중재에 대해 논의하기 전에 CAN 버스에서 사용되는 우성 및 열성 비트를 자세히 살펴보겠습니다.

반전 된 논리

CAN 버스의 흥미로운 점은 두 가지 상태 (우성 및 열성)가있는 반전 된 형태의 논리를 사용한다는 것입니다. 아래는 CAN 트랜시버의 출력 및 입력의 단순화 된 버전을 보여줍니다. '101'비트 스트림은 CAN 컨트롤러 및 / 또는 마이크로 컨트롤러에서 들어오고 나갑니다. 컨트롤러가 비트 스트림을 보낼 때 이들은 보완되어 CANH 라인에 배치됩니다. CANL 라인은 항상 CANH를 보완합니다. 중재가 작동하려면 CAN 장치는 자신이 보내는 것과 현재 버스에 있는 것, 즉 수신중인 것을 모두 모니터링 해야 합니다.

 

 

CAN 출력 / 입력

 

 

CANH 및 CANL 신호를 동시에 보여 주므로 작동중인 CAN 버스를 볼 수 있습니다. 버스 신호 아래에는 CAN 신호의 우세 및 열성 상태에 해당하는 차동 전압이 표시됩니다. 시간의 처음 세 세그먼트 인 t1–t3은 위에 표시된 세 비트와 일치하도록 그려집니다. 출력 드라이버의 관점에서 이를 살펴 보겠습니다. 운전자의 입력은 처음에 '1'을보고이를 CANH에 배치 된 0으로 보완합니다. CANL은 CANH의 보완을 보고 높이 올라갑니다. 이것은 아래에서 t1로 표시됩니다. CANH 및 CANL 전압은 서로 오프셋되어 있습니다. 시간 t1 동안 CANH – CANL은 거의 0에 가깝습니다. CANH와 CANL은 거의 동일한 전압이기 때문입니다. 드라이버가 로직 '1'을 보내는 이 기간 전송 된 다음 비트는 '0'입니다. CANH는 보완을 얻고 CANL은 다시 CANH의 보완을 얻습니다. 이번에는 CANH 및 CANL 전압이 서로 가깝지 않습니다. 따라서 차동 전압 (VDIFF)이 더 큽니다. 이것은 CAN 지배적 상태입니다. '1'은 버스를 로우로, '0'은 버스를 하이로 만들기 때문에 로직이 반전되었다고 말합니다. 입력 수신기는 비슷한 방식으로 작동합니다.

 

 

차동 전압이 표시된 CAN 열성 및 우성 상태 우선 중재

 

앞서 언급했듯이 11 비트 식별자가 작을수록 메시지의 우선 순위가 높아집니다. 노드가 전송하는 모든 비트는 모니터링합니다. 이것이 노드가 더 높은 우선 순위 메시지가 버스에 배치되고 있음을 감지하는 방법입니다. 노드가 열성 비트를 전송하지만 버스에서 지배적 비트를 감지하는 순간 백 오프됩니다. 이기는 메시지가 문제없이 계속 전송되기 때문에 이를 비파괴 중재라고 합니다. 열성 논리 '1'은 지배적 인 논리 '0'으로 패합니다. 낮은 식별자 값이 더 높은 우선 순위를 나타내므로 이는 의미가 있습니다. 이것이 무엇을 의미하는지 더 잘 이해하려면 아래를 참조하십시오. 제어를 시도하는 CAN 버스의 3 개 노드를 보여줍니다. 열성 비트가 표시될 때마다 컨트롤러가 '1'을 보내고 있음을 기억하는 것이 중요합니다.

노드 1–3은 모두 비트 스트림을 전송합니다. 이 비트 스트림은 메시지 식별자와 우선 순위를 나타냅니다. 우선, 세 노드 모두 '1'을 전송하며 이는 CAN 버스에서 열성 비트로 표시됩니다. 다음으로 각 노드는 '0'또는 지배적인 비트를 보냅니다. 버스에 배치된 세 번째 비트는 또 다른 '1'또는 열성 비트입니다. 이 시점에서 어떤 노드도 버스의 다른 노드와의 충돌을 감지하지 않았으므로 계속 전송합니다.

네 번째 비트의 경우 노드 1은 '0'또는 지배적 비트를 보냅니다. 노드 2는 열성 비트를 전송하지만 버스에서 우성 비트를 감지합니다. 우선 순위가 더 높은 메시지가 현재 전송되고 있음을 알고 즉시 백 오프됩니다. 노드 3은 자신이 전송한 것과 동일한 지배적 비트를 다시 읽으므로 계속 전송합니다. 다섯 번째 비트가 버스에 배치되면 노드 3은 우선 순위가 더 낮음을 인식하고 전송을 중지합니다. 노드 2와 노드 3은 다시 시도하기 전에 일정 시간 동안 대기합니다. 이것은 노드 3이 중재에서 승리한 다음의 오른쪽 절반에 나와 있습니다. 보시다시피 하위 메시지 식별자에 해당하는 논리 '0'지배적 비트는 중재가 발생하도록 합니다.

 

 

차동 전압을 사용한 CAN 버스 중재

 

 

결론

이 기사에서는 컨트롤러 영역 네트워크 또는 CAN을 소개했습니다. CAN은 주로 자동차 및 산업 환경에서 사용되는 강력한 직렬 통신 버스입니다. CAN은 비파괴 메시지 전송을 위한 우선 중재 체계와 함께 노이즈에 대한 내성을 강화하는 차동 신호를 사용합니다. CAN은 위험한 환경이나 전자기 간섭이 많은 영역에있는 임베디드 애플리케이션에 적합합니다. 원격 제어 잠수함을 만들거나 펌프와 센서가 있는 소규모 양조장을 설정하거나 자동차의 컴퓨터를 해킹할 때 CAN은 다음 설계 프로젝트를 강화하면서 임베디드 지식을 향상시킬 수 있는 좋은 방법입니다.

반응형