나만의 CAN 네트워크 구현(상)
2010년 02월호 지면기사  / 글│밥 보이스 (Bob Boys) bob.boys@arm.com Keil & RVDS Tools 프로덕트 매니저 ARM

CAN(Controller Area Network)은 자동차와 트럭에 광범위하게 사용되기는 하지만 어디에나 응용할 수 있다. CAN 기반의 상위 계층 프로토콜에는 국제적으로 표준화된 ISO 15765(자동차), J1939(트럭), CANopen(공장 자동화) 등이 있다. 최신 CAN 트랜시버는 비싼 동축 케이블을 사용하지 않고도 안정적이고 신뢰할 수 있는 CAN 물리 환경을 제공한다. 지난 몇 년 동안 대부분의 CAN 관련 불확실성은 해소되었다. 그리고 독자적인 CAN 기반 네트워크를 신속하게 개발할 수 있도록 지원하는 많은 예제 CAN 소프트웨어가 시판되고 있다.
CAN 컨트롤러는 정교한 장치이다. 다음 설명한 CAN 프로토콜 중 거의 대부분이 호스트 프로세서의 중재(intervention) 없이 컨트롤러에 의해 자동으로 처리된다. 레지스터에 작성하여 컨트롤러를 설정하고, 컨트롤러에 데이터를 쓰기만 하면 된다. 그러면 컨트롤러가 메시지를 버스에 올리는 데 필요한 모든 하우스키핑(housekeeping) 작업을 처리한다. 또한 컨트롤러는 버스 상에서 인지하는 모든 프레임을 읽을 것이며, 작은 FIFO 메모리에 보관할 것이다. 컨트롤러는 해당 데이터를 이용할 수 있다고 호스트 프로세서에 통보하게 될 것이며, 그렇게 되면 사용자는 컨트롤러에서 읽을 수가 있다. 또한 컨트롤러에 있는 하드웨어 필터 메커니즘을 이용하여 프로세서로 전달하지 않아도 되는 CAN 프레임은 무시하도록 프로그램 할 수 있다.
이 글의 목적에 맞게 우리는 CAN 네트워크가 물리 계층(전압 및 배선), ID와 다양한 수의 데이터 바이트로 구성된 프레임으로 구성되어 있다고 가정할 것이다. CAN은 다음과 같은 일반 속성이 있다.

1. 11 또는 29 bit ID와 0~8 data bytes
TIP: 이는 “작동 중에” 동적으로 변경될 수 있다.
2. P2P(Peer to Peer) 네트워크. 개별 노드는 나머지 모든 노드의 메시지를 모두 볼 수 있다. 노드는 자신의 메시지는 읽지 못한다. 다시 말해 개별 노드가 CAN 버스에서 데이터를 읽거나 쓰기 위해 액세스 할 때 제어하는 마스터가 없다.
3. 노드는 추가하기 아주 쉽다. 두 가닥의 전선과 접지가 있는 네트워크에 노드를 붙이기만 하면 된다.
4. ID 값에 따라 우선순위가 높은 메시지가 먼저 전송된다. 낮은 ID가 가장 높은 우선순위를 갖는다.
5. 결함 프레임(defective frames)의 자동 재송신. 너무 많은 오류를 일으킬 경우 노드가 “제외된다(buss-off)”
6. 대략 10 Kbps~1 Mbps의 속도
TIP: 모든 노드는 반드시 동일한 주파수에서 운영되어야 한다.
7. 차동 꼬임쌍선(twisted differential pair)은 뛰어난 노이즈 내성과 적절한 버스 결함 보호 기능을 제공한다.
8. CAN 시스템은 상이한 DC 레벨에서 접지 접속으로 작동할 것이다.
TIP: 혹은 접지가 전혀 사용되지 않을 수도 있다.

CAN 시스템 레이아웃:
그림 1에 제시된 것처럼, CAN 네트워크는 꼬임쌍선(twisted pair of wire)으로 연결된 적어도 2개의 노드로 구성된다. 접지선은 꼬임쌍선에 포함되거나, 아니면 따로 새시(chassis)의 일부로 구성될 수 있다. 인치 당 한 번의 꼬임(또는 그 이상)이면 충분할 것이며 일반적인 운영에는 접지 무결성이 중요하지 않다. 모든 차동 시스템과 마찬가지로, 접지에 대한 꼬임쌍선 값이 아니라 꼬임쌍선 간의 전압 레벨이 중요한 신호이다. CAN은 ISO 11898에 모두 설명되어 있다.
CAN 네트워크의 최대 길이는 주파수, 노드 수, 배선의 전파 속도에 따라 달라진다. 20개 노드(또는 그 이상)로 구성된 30~40 피트(feet) 길이의 시스템을 500 Kbps 속도로 운영하는 일은 비교적 쉽다.
TIP: 드롭(drops)은 3피트 미만이 되어야 하며 정재파(standing wave)를 줄이기 위해 임의적으로 거리를 두어야 한다. 이 모든 문제는 버스 속도가 높을수록 더 중요해진다.

꼬임쌍선이 송신 라인이기 때문에, 백본의 양 끝단에 120 Ω(ohm)의 종단 저항이 필요하다. 노드에는 저항을 두지 않는다.

TIP: 두 가닥의 전선을 서로 꼬아서 만든 꼬임쌍선 사이에서 측정된 총 저항값은 60 Ω이 될 것이다.
 
CAN은 브로드캐스트(broadcast) 시스템이다. 모든 노드는 대기 모드(idle mode)에 있는 버스 상에 있는 CAN 프레임을 사용해서 메시지를 “브로드캐스트” 할 수 있다. 모든 노드는 이 메시지를 보게 될 것이다. 긴 메시지를 전송하기 위하여 한 개 이상의 프레임을 사용하기 전까지 “메시지”는 CAN 프레임과 동일하게 간주될 수 있다.

TIP: CAN 프레임에 반응해야 하거나 무시해야 한다면, 그 결정은 개별 노드에 달려 있다.
노드 개략도:
그림 3은 Keil MCBSTM32E™ 평가 보드의 개략도이다. IC1은 텍사스 인스트루먼트(Texas Instruments) CAN 트랜시버로 CANH와 CANL(High & Low)라고 하는 CAN 버스의 양방향성 차동 꼬임쌍선(bidirectional differential pair)으로 신호 끝 CAN 컨트롤러 CAN Tx와 CAN Rx 신호 간에 전환을 실시한다. 이 개략도는 전체 모습을 보여준다.
STM32 CAN I/O는 TTL, CMOS, 5 V 입력 대응이며 모두 동시에 인터페이스 설계를 매우 쉽게 해준다.
트랜시버 IC1은 두 개의 핀, 즉 D(드라이버 입력)와 R(리시버 출력)을 통해 통합 CAN 컨트롤러를 포함하고 있는 STM32 마이크로프로세서 IC2에 연결된다. STM32에 해당되는 부분의 명칭은 CAN Rx와 CAN Tx이다. CAN Tx는 D에 연결되고 CAN Rx는 R에 연결된다. 어떤 프로세서는 여러 개의 CAN 컨트롤러를 갖추고 있다. 이러한 프로세서는 보통 라우터, 게이트웨이에 사용하거나 EMI 문제로 인하여 의도적으로 속도를 늦춘 CPU에 더 많은 리시버 FIFO 메모리를 만들기 위해 사용한다. 일반적인 용도로는 노드에 한 개의 컨트롤러만 있으면 된다. 만약 노드에 적어도 두 개의 컨트롤러가 있다면 서로 통신할 수 있다.
IC1에 있는 RS(slope control: 트리거 경사 조절)는 꼬임쌍선에서 나오는 EMI를 제한하기 위하여 출력 에지의 상승 시간과 하강 시간을 조절하기 위해 사용된다. R4, 120 Ω 종단 저항에 주목하자. 이 평가 보드는 소형 테스트 네트워크로 다른 보드 하나와 함께 사용하도록 만들어졌다. 만약, 이 보드가 노드로 사용되고 끝단에 위치하고 있지 않다면, 종단 저항은 제거하고 외부 저항을 사용해야 한다. P17은 DB9 커넥터에 있는 CAN의 경우 일반적으로 수용되는 표준에 해당한다. P17의 핀7은 CAN Hi 버스 라인이며, 핀 6은 CAN Lo이다.
TIP: CAN Hi와 CAN Lo가 반대로 되면, 네트워크는 적절하게 운영되지 않는다. 전혀 작동하지 않을 수도 있다.



AEM_Automotive Electronics Magazine


<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>


  • 100자평 쓰기
  • 로그인


  • 세미나/교육/전시

TOP