ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [전자공학] CAN
    공학/전자공학 2023. 8. 3. 02:17

    글의 참고

    - https://m.blog.naver.com/suresofttech/220793847337

    - https://ko.wikipedia.org/wiki/CAN_%EB%B2%84%EC%8A%A4

    - https://blog.naver.com/windowsub0406

    - https://kennyshin.tistory.com/56


    글의 전제

    - 밑줄로 작성된 글은 강조 표시를 의미한다.

    - 그림 출처는 항시 그림 아래에 표시했다.

    - 이 글은 Classic CAN & CAN 2.0A (Standard CAN)을 기준으로 설명.


    글의 내용

    - CAN 구조

    " CAN은 아래와 같이 `MCU <-> CAN 트랜시버 <-> CAN 버스` 로 되어 있다. MCU에서 직접적으로 CAN_H, CAN_L 파형을 만들 수 없기 때문에 CAN 트랜시버를 이용하여 CAN 버스와 통신하는 구조이다. 사실, 일반적으로 전장용으로 양산된 MCU 내부에는 CAN 컨트롤러가 내장되어 있다.

     

     

     

    " CAN을 처음 공부할 때, 반드시 라인들을 잘 구분해야 한다.

    - MCU <-> CAN 트랜시버 : TX, RX
    - CAN 트랜시버 <-> CAN 버스 : CAN_H, CAH_L

     

    : CAN 물리적 특성

    " 2가닥 꼬임선(Twist pair wire)

    " 반이중 통신

     

    : CAN 역사

    • 1983년 - Bosch사에 차량용 네트워크 프로토콜 개발 프로젝트 시작.
    • 1986년 - CAN 프로토콜이 Society of Automotive Engineers (SAE)에 공식적으로 소개됨.
    • 1991년 - Bosch사에서 CAN 2.0 사양 발표.
    • 1993년 - ISO11898 (data link and high-speed physical layer) 사양 제정
    • 2006년 - ISO 11898-3 (low-power, low-speed physical layer) 사양 제정
    • 2007년 - ISO 11898-5 (low-power, high-speed physical layer) 사양 제정
    • 2011년 - CAN FD 프로토콜 개발 착수
    • 2015년 - ISO 11898-1 (Classical CAN and CAN FD) 사양 발표

     

     

     

    - CAN 통신 전압

    • CAN은 차동 신호를 사용한다. CAN_L 라인을 기준으로 전압을 측정한다.
      • Recessive 상태 - CAN_L = 2.5V이고 CAN_H = 2.5V로 동일하다. 이것은 디지털 `1`로 표시되며, recessive 비트로 알려져 있다.
      • Dominant 상태 - CAN_H = 3.5V이고 CAN_L = 1.5V 이다. 디지털 `0`으로 표시되며 dominant 비트로 알려져 있다.

     

    • 위 말을 내 기준에서 쉽게 설명하면, MCU에서 CAN 트랜시버로 1을 보내면 CAN 트랜시버가 CAN_H = 2.5V , CAN_L = 2.5V를 CAN 버스에 출력하고, 0을 보내면 CAN 트랜시버가 CAN_H = 3.5V , CAN_L = 1.5V를 CAN 버스에 출력한다는 뜻이다. 여기서는 도미넌트면 디지털 값으로 0, 리세시브면 디지털 값이 1인 것만 알면된다.

     

     


     

     

    - CAN 통신 방식

    • CAN은 데이터 전송 시, 0이 1을 이기는 구조로 회로가 설계되어 있다. 즉, 회로적으로 ID가 낮을 수록 먼저 버스를 장악하도록 설계되어 있다는 말이다. 이게 무슨 말인지를 알려면 먼저 CAN 스펙을 조금 공부해야 한다. CAN 스펙에는 우성(dominant) 비트와 열성(recessive) 비트라는 것이 있다.
      • 우성 비트는 논리적인 비트값 0을 가지며, 예를 들어 전기적으로 신호값을 강제로 low로 내린다.
      • 열성 비트는 논리적인 비트값 1을 가지며, 예를 들어 전기적으로 high 상태에 머물러 있는다.
    • 결론적으로 두 노드가 서로 동시에 0을 보내면 네트워크상에서 0이 지나가며, 둘 다 1이면 1이 지나간다.
    • 그러나, 하나는 0이고 다른 하나는 1이라면 네트워크 상에는 0이 지나가게 된다. 우성 비트가 경쟁에서 이긴다는 뜻이다. 즉 CAN 네트워크는 낮은 CAN ID를 갖는 프레임에게 오류나 지연없이 데이터를 전송할 수 있는 기법을 제공한다.
    • 경쟁에서 진 높은 CAN ID를 갖는 프레임은 우성 메시지의 전송이 끝난 후 6 비트를 전송할 수 있는 시간을 추가로 기다린 후 재전송을 자동으로 시작한다. 이러한 충돌 해결 방식 때문에, 자동화 시스템에서 CAN 버스는 실시간 우선순위 기반 통신 시스템으로 사랑받고 있다.
    • 예를 들어, 11 비트 ID CAN 네트워크에 노드 ID 15(00000001111b)와 16(00000010000)이 동작하고 있다고 하자. 두 노드가 동시에 메시지를 전송한다고 할 때, 각각은 먼저 시작 비트를 전송한 후, 노드 ID의 첫 번째 0 여섯 개를 충돌없이 전송한다.

     

     

     

    • 7번째 비트를 전송할 때, 노드 16은 열성 비트 1을 전송하고 노드 15는 우성 비트 0을 전송한다. 이 때 노드 16은 자신이 1을 전송한 것을 알고 있으나, 자신이 CAN 네트워크에서 읽은 값은 0이 된다. 그러므로 충돌을 감지하고 노드 16은 나머지 메시지들을 더 이상 전송하지 않는다. 반면 노드 15는 아무런 문제없이 다음 비트들을 전송할 수 있다.
    • CAN 버스는 40m 이하의 네트워크 길이에서 1Mbps까지 전송할 수 있다. 거리가 멀어지면 전송률은 낮아져서, 500m에서는 125kbps로 전송할 수 있다. 향상된 CAN FD 표준에서는 충돌 해결 이후 즉 노드 ID를 전송한 이후에 데이터 부분은 노드 ID 전송 속도의 10배정도까지 빠르게 전송할 수 있다.

     

    - CAN 프레임

    • 아래 표를 보면 설명이 너무 잘 되어 있다. 참고로 CAN 통신은 비동기 통신이기 때문에 비트 스터핑이 필요하다.

     

    • SOC : 여기가 데이터의 시작임을 알리는 신호. 반드시 0 이여야 한다.
    • Arbitration 
      • Identifier : CAN 버스에서 메시지 우선순위를 결정. 작을수록 강한 우선순위가 강하다.
      • RTR : 리모트 프레임으로 할지, 데이터 프레임으로 할지 구분하는 빌드. 1이면 리모트 프레임, 0이면 데이터 프레임.
    • Control
      • IDE : 구별자를 11비트를 할것이냐 29비트로 할것이냐를 구분. 표준 프레임이면 0, 확장이면 1.
      • DLC : Data filed의 길이
    • Data : 0 ~ 8 바이트 저장 가능
    • CRC
      • CRC : 15 비트의 체크섬
      • 반드시 1.
    • ACK
      • Ack : 수신기에서 데이터 잘 받았으면 1을 보냄.
      • Delimeter : 반드시 1.
    • EOF : 여기가 데이터의 끝임을 알리는 신호. 반드시 0 이여야 한다.

    '공학 > 전자공학' 카테고리의 다른 글

    [전자공학] 리튬 배터리 CC/CV 충전  (0) 2023.08.03
    [전자공학] 기전력  (0) 2023.08.03
    [전자공학] 신호 전송  (0) 2023.08.03
    [전자공학] 레벨 시프트  (0) 2023.08.03
    [전자공학] LIN  (0) 2023.08.03
Designed by Tistory.