Chapter 13

전장과 차량 네트워크

가속 페달을 밟으면 엔진이 반응하지만, 요즘 차에서 페달과 스로틀 사이에는 케이블이 없다. 페달 센서의 전압을 컴퓨터가 읽고, 계산하고, 모터를 돌린다. 이런 컴퓨터가 차 한 대에 수십 개에서 백여 개 들어 있고, 서로 초당 수천 개의 메시지를 주고받는다. 이 장은 그 전기를 공급하는 12 V 전원계에서 시작해 제어기의 속, 차량 통신의 표준인 CAN, 그리고 차 전체를 다시 설계하고 있는 존 아키텍처까지 따라간다.

바퀴 달린 컴퓨터 네트워크

1970년대까지 자동차의 전기 장치는 점화, 시동, 등화, 와이퍼 정도였다. 배출가스 규제가 강화되면서 연료와 점화를 정밀하게 맞출 필요가 생겼고(4장), 그 일을 맡은 것이 마이크로컨트롤러를 넣은 전자 제어 장치(Electronic Control Unit, ECU)다. 이후 ABS, 에어백, 자동 변속기, 차체 자세 제어, 공조, 계기판이 차례로 자기 ECU를 갖게 되었다. 현재 양산 승용차에는 대표적으로 70~100개 이상의 ECU가 들어가고, 소프트웨어는 고급차 기준으로 1억 줄 수준이라고 알려져 있다.

ECU 하나가 하는 일은 단순한 반복이다. 센서로 물리량을 읽고, 정해진 주기로 계산하고, 액추에이터를 구동한다. 여기에 다른 ECU와 값을 주고받는 통신이 붙는다. 엔진 ECU가 계산한 회전수는 변속기 ECU, 계기판, ESC가 모두 필요로 하므로 한 번 측정해서 버스에 올려 두면 모두가 받아 쓴다.

센서 온도 · 압력 회전 · 위치 산소 농도 0.5~4.5 V, 펄스 ECU 입력회로 MCU1~10 ms 출력드라이버 액추에이터 인젝터 · 점화 코일 솔레노이드 밸브 모터 · 램프 PWM, 수 A~수십 A 변속기ESC계기판게이트웨이 CAN 버스 (전선 두 가닥을 모두가 공유)
그림 13-1. ECU의 기본 순환. 센서 신호를 읽어 계산하고 액추에이터를 구동하며, 다른 ECU와는 공유 버스로 값을 주고받는다.

이 구조가 가능하려면 세 가지가 필요하다. 모든 장치에 전기를 대 주는 전원계, 전기 신호를 다루는 ECU와 센서·액추에이터, 그리고 이들을 묶는 네트워크다. 이 순서대로 살펴본다. 고전압 구동 배터리와 모터는 15장과 16장에서 따로 다루고, 여기서는 내연기관차와 전기차가 공통으로 쓰는 저전압 계통에 집중한다.

12 V 전원계

승용차의 저전압 계통은 공칭 12 V다. 이 숫자는 납산 배터리(lead-acid battery)에서 왔다. 납산 셀 하나의 전압이 약 2.1 V이고 여섯 개를 직렬로 묶으면 완충 상태에서 약 12.6 V가 된다. 음극의 납(Pb)과 양극의 이산화납(PbO₂)이 묽은 황산과 반응해 양쪽 모두 황산납(PbSO₄)이 되면서 전기를 내고, 충전하면 반대로 돌아간다. 에너지 밀도는 리튬 이온 전지의 4분의 1 수준으로 낮지만, 값이 싸고 영하의 온도에서도 수백 암페어를 순간적으로 낼 수 있어 150년이 지난 지금도 시동용 배터리의 표준이다. 승용차용 용량은 대표적으로 45~90 Ah다.

시동 모터와 알터네이터

시동 모터(starter)는 차에서 가장 큰 전류를 쓰는 부하다. 출력 1~2 kW급 직류 모터가 피니언 기어로 플라이휠의 링 기어를 돌려 엔진을 200~300 rpm으로 회전시킨다. 멈춰 있는 모터에는 역기전력이 없으므로 처음 순간에는 배터리와 모터의 저항만이 전류를 제한해 500 A 이상이 흐르고, 회전이 붙으면 150~300 A로 줄어든다. 이때 배터리 내부 저항 때문에 단자 전압이 크게 떨어진다. 내부 저항이 5 mΩ인 배터리에서 600 A를 뽑으면 강하는 \(600 \times 0.005 = 3\) V다. ECU들은 이 순간에도 꺼지지 않도록 대략 6 V까지는 동작하게 설계한다.

시동이 걸리면 알터네이터(alternator)가 전기를 만든다. 벨트로 크랭크축에 연결된 3상 교류 발전기이고, 풀리 비는 대표적으로 2.5~3이라 엔진이 800 rpm일 때 알터네이터는 2,000 rpm 남짓으로 돈다. 회전자(로터)의 계자 코일에 전류를 흘려 자기장을 만들고, 이 자기장이 고정자 코일을 지나가며 교류를 유도한다. 다이오드 여섯 개로 된 정류기가 이를 직류로 바꾼다. 발전 전압은 회전수와 계자 전류에 비례하므로, 전압 조정기(voltage regulator)가 계자 전류를 조절해 회전수와 부하가 바뀌어도 출력 전압을 13.8~14.5 V 범위로 유지한다. 배터리 전압(12.6 V)보다 높아야 충전 전류가 배터리로 흘러 들어가기 때문이다.

B+GND 차체(접지)가 귀환 전선 역할을 한다 알터네이터3상 + 정류 전압 조정기 배터리12.6 V · 60 Ah 시동 모터150~600 A 퓨즈 · 릴레이 부하ECU · 램프 · 모터 13.8~14.5 V 굵은 선: 시동 전류
그림 13-2. 12 V 전원계. 알터네이터, 배터리, 부하가 모두 B+ 모선에 병렬로 물려 있다. 엔진이 돌 때는 알터네이터가 부하를 감당하고 남는 전류로 배터리를 충전한다.

세 요소가 병렬이므로 전류는 단순한 덧셈이다. 알터네이터 전류에서 부하 전류를 뺀 것이 배터리로 들어가는 전류다.

$$I_{bat} = I_{alt} - I_{load}, \qquad I_{alt} \le I_{max}(n)$$
여기서 \(I_{bat}\)는 배터리 충전 전류(음수면 방전), \(I_{max}(n)\)은 회전수 \(n\)에서 알터네이터가 낼 수 있는 최대 전류다.

문제는 \(I_{max}\)가 회전수에 따라 크게 달라진다는 점이다. 정격 130 A인 알터네이터도 공회전에서는 그 절반 정도만 낸다. 겨울밤 정체 구간에서 전조등, 열선, 블로어, 와이퍼를 모두 켜면 부하가 공회전 발전량을 넘고, 모자란 만큼은 배터리가 메운다. 이때 시스템 전압은 14 V대에서 12 V대로 내려간다. 아래에서 직접 확인해 보자.

SIMULATOR

충전 계통: 누가 전기를 대고 있는가

전기 부하
시스템 전압—
알터네이터 출력 / 최대—
부하 전류—
배터리 전류—
엔진이 내주는 동력—
시동 시 최저 전압—
방치 가능 일수—
모델: 정격 130 A 알터네이터(풀리 비 2.7, 조정 전압 14.2 V, 효율 60 %), 60 Ah 납산 배터리, 엔진 구동에 필요한 기본 부하 20 A(연료 펌프·점화·ECU). 500 rpm 미만은 엔진 정지로 본다. 화살표 굵기는 전류에 비례한다. 왼쪽 아래 그래프는 회전수에 따른 알터네이터 최대 전류와 현재 필요한 전류, 오른쪽 아래는 지금 상태의 배터리로 시동을 걸 때의 전압 파형이다. 방치 가능 일수는 충전 상태가 40 %로 떨어질 때까지 걸리는 시간이다. 해볼 것: 공회전에서 부하를 하나씩 켜 배터리 전류가 음수로 바뀌는 지점을 찾는다. 그 상태에서 회전수를 2,000 rpm으로 올려 본다. 기온을 영하 20도로, 충전 상태를 50 %로 내리면 시동 전압이 어디까지 떨어지는지 본다.
계산 예: 전기는 공짜가 아니다

열선과 블로어를 켜서 알터네이터가 14.2 V에서 70 A를 낸다면 전기 출력은 \(14.2 \times 70 \approx 994\) W다. 알터네이터 효율을 60 %로 보면 엔진이 벨트로 내주는 동력은 \(994 / 0.6 \approx 1.66\) kW다. 시속 60 km로 정속 주행할 때 필요한 구동 출력이 6~8 kW 수준이므로(2장), 전기 부하만으로 연료 소비가 눈에 띄게 늘어난다.

암전류와 전력 예산

시동을 끄고 문을 잠가도 전류는 완전히 0이 되지 않는다. 스마트키 수신기, 도난 경보, 시계, 각 ECU의 대기 회로가 조금씩 쓴다. 이것이 암전류(quiescent current, dark current)이고, 설계 목표는 대표적으로 수십 mA 이하다. ECU들은 버스에 통신이 없어지면 차례로 잠들어(sleep) 수십 µA~수 mA만 쓰다가, 문 손잡이 신호나 특정 CAN 메시지를 받으면 깨어난다. ECU 하나가 잠들지 못하고 버스를 계속 깨워 두면 암전류가 수백 mA로 늘어 며칠 만에 배터리가 방전된다.

계산 예: 공항 주차장에 3주

60 Ah 배터리가 90 % 충전 상태이고 시동에는 최소 40 %가 필요하다고 하자. 쓸 수 있는 전하는 \(60 \times (0.9 - 0.4) = 30\) Ah다. 암전류가 30 mA면 \(30 / 0.03 = 1{,}000\) 시간, 약 42일을 버틴다. 블랙박스의 주차 녹화처럼 300 mA를 쓰는 장치가 붙으면 100시간, 약 4일로 줄어든다.

48 V와 전기차의 DC-DC 컨버터

같은 전력을 보낼 때 전압이 낮으면 전류가 커진다. \(P = VI\)이고 전선의 손실은 \(I^2R\)이므로, 12 V에서 3 kW를 보내려면 250 A가 필요하고 전선이 굵어진다. 전동 컴프레서, 능동 롤 제어, 전기 가열 촉매처럼 수 kW를 쓰는 장치가 늘면서 48 V 계통이 추가되었다. 48 V인 이유는 충전 중 최대 전압까지 포함해도 직류 60 V 미만이어서 감전 보호를 위한 고전압 안전 설계가 필요 없는 상한이기 때문이다. 48 V 마일드 하이브리드는 알터네이터 자리에 10~15 kW급 벨트 구동 시동 발전기를 달아 회생 제동과 가속 보조를 한다(14장).

전기차에는 알터네이터가 없다. 대신 400 V 또는 800 V 구동 배터리의 전압을 12 V대로 내리는 DC-DC 컨버터(대표적으로 1.5~3 kW)가 그 역할을 한다. 그래도 12 V 배터리는 남아 있다. 구동 배터리의 접촉기(컨택터)를 닫으려면 먼저 12 V로 제어기가 깨어나야 하고, 고전압이 차단된 사고 상황에서도 비상등, 도어 잠금 해제, 에어백 제어기는 동작해야 하기 때문이다.

와이어링 하네스, 퓨즈, 릴레이

전기를 나르는 전선 다발이 와이어링 하네스(wiring harness)다. 중형 승용차 한 대에 전선 총 길이가 대표적으로 1.5~4 km, 무게가 30~60 kg이며 엔진과 차체 다음으로 무겁고 비싼 부품에 속한다. 전선 굵기는 흐르는 전류와 허용 전압 강하로 정한다.

$$R = \rho \frac{L}{A}, \qquad \Delta V = I R, \qquad P_{loss} = I^2 R$$
여기서 \(\rho\)는 구리의 비저항(약 \(1.72 \times 10^{-8}\ \Omega\cdot\text{m}\)), \(L\)은 전선 길이, \(A\)는 단면적이다.
계산 예: 뒷유리 열선까지 5 m

단면적 0.5 mm²인 전선 5 m의 저항은 \(1.72\times10^{-8} \times 5 / (0.5\times10^{-6}) = 0.172\ \Omega\)다. 여기에 16 A를 흘리면 전압 강하가 2.75 V, 발열이 44 W다. 전선이 뜨거워지고 열선에는 11 V 남짓만 걸린다. 3 mm² 전선으로 바꾸면 저항 0.029 Ω, 강하 0.46 V, 발열 7 W가 된다. 대신 구리가 여섯 배 든다. 하네스 설계는 이런 타협의 연속이다.

퓨즈(fuse)는 장치가 아니라 전선을 지킨다. 전선이 차체에 닿아 단락되면 배터리는 수백 암페어를 흘릴 수 있고 전선 피복이 녹아 불이 난다. 퓨즈는 그 회로의 전선이 견디는 전류보다 조금 낮은 값에서 먼저 녹아 끊어진다. 릴레이(relay)는 작은 전류로 큰 전류를 여닫는 전자석 스위치다. 코일에 0.15 A 정도를 흘리면 접점이 붙어 30 A를 흘릴 수 있으므로, 스위치와 ECU 출력은 가는 전선으로도 충분하다. 최근에는 릴레이와 퓨즈를 반도체 스위치로 합친 지능형 전력 스위치(smart FET, eFuse)가 늘고 있다. 전류를 스스로 측정해 과전류를 수 ms 안에 차단하고, 고장을 진단해 보고하며, 소프트웨어로 복구할 수 있다.

ECU, 센서, 액추에이터

ECU의 뚜껑을 열면 기판 위에 다섯 가지 영역이 보인다.

MCU CPU · 플래시 · RAM ADC · 타이머 · CAN 32비트, 수백 MHz 입력 회로 풀업 · 분압필터 · 보호비교기 출력 드라이버 로우/하이 사이드H-브리지전류 감지 전원부12 V → 5 V / 3.3 V, 서지 보호 워치독응답 없으면 MCU 리셋 통신 트랜시버CAN · LIN · 이더넷 PHY 센서액추에이터
그림 13-3. ECU 내부. 차의 12 V는 시동 때 6 V까지 떨어지고 부하가 끊길 때는 수십 V의 서지가 생기므로, 전원부와 입출력 보호 회로가 기판의 상당 부분을 차지한다.

엔진룸에 놓이는 ECU는 영하 40도에서 125도까지의 온도, 진동, 수분을 15년 넘게 견뎌야 한다. 차량용 반도체가 따로 인증되는 이유다.

센서: 물리량을 전압으로

센서원리신호쓰이는 곳
온도 (NTC 서미스터)온도가 오르면 저항이 지수적으로 감소풀업 저항과 분압한 전압냉각수, 흡기, 오일, 실내
압력실리콘 다이어프램 위의 압저항 브리지0.5~4.5 V, 전원에 비례흡기 매니폴드, 연료 레일, 브레이크, 타이어
회전 (홀 효과)자석 또는 톱니가 지나갈 때 자속 변화구형파 펄스크랭크·캠 각도, 휠 속도, 변속기
위치전위차계 또는 홀 소자 각도 센서아날로그 전압 2채널가속 페달, 스로틀, 조향각
산소 (지르코니아)배기와 대기의 산소 농도 차로 기전력0.1~0.9 V 또는 펌핑 전류공연비 피드백 (4장)

NTC(Negative Temperature Coefficient) 서미스터의 저항은 \(R(T) = R_0 \exp\!\left[B\left(\tfrac{1}{T} - \tfrac{1}{T_0}\right)\right]\)을 따른다. ECU는 이를 풀업 저항과 직렬로 연결해 가운데 전압을 ADC로 읽고, 표를 찾아 온도로 바꾼다.

계산 예: 냉각수 온도 센서

20 °C에서 2.5 kΩ, \(B = 3500\) K인 서미스터를 5 V, 2.49 kΩ 풀업에 연결한다. 20 °C에서 전압은 \(5 \times 2500/(2500+2490) \approx 2.51\) V다. 90 °C(363 K)에서는 \(R = 2500 \times \exp[3500 \times (1/363.15 - 1/293.15)] \approx 250\ \Omega\)이고 전압은 \(5 \times 250/2740 \approx 0.46\) V다. 전선이 끊어지면 5 V, 접지에 단락되면 0 V가 읽히므로, ECU는 양 끝 값을 고장으로 판정한다. 정상 신호 범위를 0.5~4.5 V로 잡는 이유가 여기에 있다.

회전 센서는 톱니를 센다. 크랭크축에는 보통 60개 자리 중 2개를 비운 톱니바퀴(60−2)가 달려 있어, 이 빠진 자리로 기준 위치를 찾고 톱니 간격으로 6도 단위의 각도를 안다. 3,000 rpm이면 초당 50회전이므로 펄스가 초당 약 3,000개 들어온다. 휠 속도 센서도 같은 원리이고 ABS와 ESC의 기본 입력이다(8장).

가속 페달 위치 센서는 이중화의 좋은 예다. 페달과 스로틀 사이에 기계적 연결이 없으므로(전자식 스로틀), 센서가 잘못된 값을 내면 의도하지 않은 가속이 일어날 수 있다. 그래서 독립된 센서 두 개를 넣고 출력 기울기를 다르게 한다. 예를 들어 채널 1이 0.8~4.0 V로 움직일 때 채널 2는 그 절반인 0.4~2.0 V로 움직인다. 두 전선이 서로 단락되면 두 값이 같아져서 1:2 관계가 깨지고, ECU는 이를 감지해 출력을 제한하는 비상 주행 모드(limp-home)로 들어간다.

액추에이터와 PWM

출력 쪽의 대표는 솔레노이드와 모터다. 솔레노이드는 코일에 전류를 흘려 철심을 당기는 전자석으로, 연료 인젝터, 변속기 유압 밸브, 가변 밸브 타이밍 제어 밸브에 쓰인다. 힘은 전류에 따라 정해지므로 전류를 연속적으로 조절하고 싶지만, 트랜지스터를 반쯤 켜 두면 트랜지스터가 열로 타 버린다. 그래서 완전히 켜고 완전히 끄기를 빠르게 반복하면서 켜진 시간의 비율을 바꾼다. 이것이 펄스 폭 변조(Pulse Width Modulation, PWM)이고, 켜진 시간의 비율이 듀티(duty)다.

코일은 인덕턴스 \(L\)을 가지므로 전류가 전압처럼 계단으로 변하지 못하고 시상수 \(\tau = L/R\)로 완만하게 따라간다. 스위치가 꺼진 동안에는 환류 다이오드(freewheeling diode)를 통해 전류가 계속 돈다. PWM 주기가 \(\tau\)보다 충분히 짧으면 전류는 거의 일정해지고 그 평균은 듀티에 비례한다.

$$\bar{I} = D\,\frac{V}{R}, \qquad \Delta I \approx \frac{V}{L}\,D(1-D)\,T \quad (T \ll \tau)$$
여기서 \(D\)는 듀티(0~1), \(T\)는 PWM 주기, \(\Delta I\)는 전류 리플의 폭이다. 리플은 듀티 50 %에서 가장 크다.
SIMULATOR

PWM과 인덕턴스 부하, H-브리지

H-브리지 모드
평균 전압—
평균 전류—
전류 리플—
시상수 τ / 주기 T—
부하 평균 전력—
모터 단자 평균 전압—
모델: 전원 13.5 V, 코일 저항 4 Ω, 이상적인 스위치와 환류 다이오드. 위 그래프는 세 주기 동안의 코일 전압과 정상 상태 전류(지수 곡선을 해석적으로 계산)다. 아래 그림은 모터를 양방향으로 돌리는 H-브리지로, 스위치 네 개 중 대각선 한 쌍을 켜면 전류 방향이 정해진다. 위쪽 스위치에 같은 듀티의 PWM을 건다. 해볼 것: 듀티 50 %에서 주파수를 100 Hz부터 올려 리플이 줄어드는 것을 본다. 인덕턴스를 줄이면 같은 리플을 위해 주파수가 얼마나 더 필요한가? H-브리지에서 왼쪽 위·아래 스위치를 동시에 켜면 어떻게 될지도 생각해 보자(전원이 단락된다. 그래서 전환 사이에 둘 다 꺼 두는 짧은 데드 타임을 둔다).

모터를 한 방향으로만 돌린다면 스위치 하나로 충분하지만, 전자식 스로틀, 파워 윈도, 시트, 전동 주차 브레이크처럼 정·역회전이 모두 필요하면 스위치 네 개를 H 모양으로 배치한 H-브리지를 쓴다. 아래쪽 두 스위치를 함께 켜면 모터 단자가 단락되어, 돌고 있는 모터가 자기 역기전력으로 전류를 흘리며 빠르게 멈춘다(발전 제동). 3상 모터를 돌리는 인버터는 이 구조에 다리를 하나 더 붙인 것이다(15장).

제어 루프: 목표와 현실의 차이를 줄이기

ECU 소프트웨어의 핵심은 피드백 제어다. 목표값과 측정값의 차이인 오차 \(e\)를 계산하고, 오차가 줄어드는 방향으로 액추에이터를 움직인다. 가장 널리 쓰이는 형태가 PID 제어기다.

$$u(t) = K_p\,e(t) + K_i \int_0^t e(\tau)\,d\tau + K_d\,\frac{de(t)}{dt}$$
여기서 \(u\)는 제어 출력, \(e\)는 목표값에서 측정값을 뺀 오차, \(K_p, K_i, K_d\)는 비례·적분·미분 게인이다.

MCU는 연속 시간으로 계산하지 못하므로 일정한 샘플링 주기 \(T_s\)마다 한 번씩 계산한다. 적분은 덧셈으로, 미분은 뺄셈으로 바뀐다.

$$u_k = K_p e_k + K_i T_s \sum_{j=0}^{k} e_j + K_d \frac{e_k - e_{k-1}}{T_s}$$

샘플링 주기는 제어 대상의 빠르기에 맞춘다. 대표적으로 섀시 제어(ESC, EPS)는 1~10 ms, 엔진의 공기·연료 제어는 10 ms와 크랭크 각도 동기 작업, 공조와 차체 제어는 20~100 ms다. 주기가 길면 그만큼 지연이 더해져 같은 게인에서도 불안정해진다.

공회전 속도 제어를 예로 보자. 에어컨 컴프레서가 켜지면 엔진에 갑자기 부하가 걸려 회전수가 떨어진다. ECU는 회전수를 읽어 목표(약 800 rpm)와 비교하고 스로틀을 더 열어 토크를 보충한다. 스로틀을 열어도 공기가 흡기 매니폴드를 채우고 실린더에서 연소되기까지 시간이 걸리므로, 이 지연이 제어를 어렵게 만든다.

SIMULATOR

PID 공회전 속도 제어

엔진 회전수—
오차—
스로틀 명령—
적분 항—
외란 후 최대 편차—
상태—
모델: 스로틀 1 %당 정상 상태 40 rpm, 엔진 회전 시상수 0.5 s, 흡기 지연 0.15 s와 전달 지연 0.08 s, 에어컨 부하는 250 rpm에 해당하는 토크, 회전수 측정 잡음 약 ±4 rpm. 회전수가 300 rpm 아래로 떨어지면 시동이 꺼진다. 위 그래프는 회전수와 목표, 아래 그래프는 스로틀 명령이고 색칠된 구간이 에어컨이 켜진 시간이다. 해볼 것: "제어 끄기"로 게인을 모두 0으로 두고 에어컨을 켠다. Kp만 올려 남는 오차를 본 뒤 Ki를 더한다. Kp를 0.25 이상으로 올리면 어떻게 되는가? 샘플링 주기를 150 ms로 늘리면 같은 게인이 여전히 안정한가? Kd를 크게 하면 스로틀 명령이 왜 거칠어지는가?

실제 ECU는 PID만으로 제어하지 않는다. 에어컨이 켜진다는 사실은 스위치 신호로 미리 알 수 있으므로, 컴프레서 클러치를 붙이기 전에 스로틀을 미리 여는 피드포워드를 더한다. 피드백은 그래도 남는 오차만 처리한다. 또 출력이 한계(스로틀 0 %나 100 %)에 붙어 있는 동안 적분이 계속 쌓이지 않게 막는 안티 와인드업도 필수다. 같은 구조가 차간 거리 제어와 조향 제어에도 쓰인다(17장, 20장).

CAN: 전선 두 가닥으로 모두가 말하기

ECU가 몇 개뿐일 때는 필요한 신호마다 전선을 하나씩 이으면 되었다. 그러나 ECU \(n\)개가 서로 직접 연결되려면 \(n(n-1)/2\)개의 연결이 필요하다. 10개면 45개, 30개면 435개다. 신호 종류까지 곱하면 하네스가 감당할 수 없게 커진다. 1980년대 보쉬가 이 문제를 풀기 위해 개발해 1986년에 발표한 것이 CAN(Controller Area Network)이고, 1991년 양산차에 처음 실린 뒤 사실상 모든 자동차의 기본 통신이 되었다(ISO 11898).

점대점 6노드 → 연결 15개 120Ω120Ω 버스 6노드 → 꼬임쌍선 1조
그림 13-4. 점대점 배선은 노드 수의 제곱에 비례해 늘어난다. 버스는 꼬인 전선 한 쌍을 모두가 공유하고, 양 끝에 120 Ω 종단 저항을 달아 신호 반사를 막는다.

차동 신호와 우성·열성

CAN은 CAN_H와 CAN_L 두 선의 전압 차로 비트를 나타낸다. 아무도 구동하지 않으면 두 선이 모두 약 2.5 V여서 차이가 0 V다. 이 상태가 열성(recessive)이고 논리 1이다. 어느 한 노드가 CAN_H를 약 3.5 V로 올리고 CAN_L을 약 1.5 V로 내리면 차이가 약 2 V가 된다. 이 상태가 우성(dominant)이고 논리 0이다. 두 선을 꼬아 두면 외부 잡음이 양쪽에 똑같이 실려서 차를 구할 때 상쇄된다. 점화 코일과 모터가 내는 잡음 속에서도 CAN이 견디는 이유다.

이름이 중요하다. 한 노드라도 우성을 내면 버스는 우성이 된다. 열성은 모두가 열성을 낼 때만 유지된다. 즉 버스는 모든 노드 출력의 논리곱(AND)이다. 0이 1을 이긴다. 이 단순한 전기적 성질 위에 CAN의 중재 방식이 세워져 있다.

프레임 구조

CAN에는 주소가 없다. 프레임에는 "누구에게"가 아니라 "무슨 내용인지"를 뜻하는 식별자(identifier, ID)가 붙고, 모든 노드가 모든 프레임을 받아서 자기에게 필요한 ID만 골라 쓴다. 표준 데이터 프레임의 구성은 다음과 같다.

필드비트 수내용
SOF1프레임 시작. 우성 1비트. 모든 노드가 이 하강 에지에 시계를 맞춘다
ID11메시지 식별자이자 우선순위. 값이 작을수록 우선 (확장 프레임은 29비트)
RTR · IDE · r03원격 요청 여부, 확장 ID 여부, 예약 비트
DLC4데이터 길이(바이트 수, 0~8)
데이터0~64신호들. 예: 엔진 회전수 16비트, 냉각수 온도 8비트
CRC15 + 1오류 검출 부호와 구분 비트
ACK1 + 1송신자는 열성을 내고, 정상 수신한 노드가 우성으로 덮어쓴다
EOF · IFS7 + 3프레임 끝(열성 7비트)과 프레임 간 간격

CAN에는 별도의 클록 선이 없어서, 수신 노드는 비트가 바뀌는 에지를 보고 자기 시계를 다시 맞춘다. 같은 값이 오래 이어지면 에지가 없어 시계가 어긋난다. 그래서 송신 노드는 같은 비트가 다섯 번 연속되면 반대 값의 비트를 하나 끼워 넣고, 수신 노드는 그것을 빼낸다. 이것이 비트 스터핑(bit stuffing)이다. SOF부터 CRC까지 적용된다. 8바이트 프레임은 스터핑 전 111비트(프레임 간 간격 포함)이고 최악의 경우 24비트가 더 붙어 135비트가 된다. 500 kbps에서 비트 하나는 2 µs이므로 프레임 하나에 0.22~0.27 ms가 걸린다.

CRC는 SOF부터 데이터까지의 비트열을 생성 다항식 \(x^{15}+x^{14}+x^{10}+x^{8}+x^{7}+x^{4}+x^{3}+1\) (16진 0x4599)로 나눈 나머지다. 수신 노드가 같은 계산을 해서 값이 다르면 프레임을 버린다.

SIMULATOR

CAN 프레임 해부

프레임 길이—
스터프 비트—
CRC-15—
전송 시간 (500 kbps)—
데이터 비율—
각 칸이 비트 하나이고 색이 필드를 구분한다. 빗금 친 칸은 송신기가 끼워 넣은 스터프 비트다. 아래 두 줄은 CAN_H(위로 올라감)와 CAN_L(아래로 내려감)의 전압으로, 벌어진 곳이 우성(0), 붙은 곳이 열성(1)이다. 칸을 가리키거나 누르면 그 필드의 설명이 나온다. CRC는 표준 다항식으로 실제 계산한 값이다. 해볼 것: ID를 000, 데이터를 모두 00으로 두고 스터프 비트가 얼마나 늘어나는지 본다. 데이터를 55나 AA로 바꾸면 스터프가 사라지는 이유는 무엇인가? 데이터 한 비트만 바꿔 CRC가 얼마나 달라지는지 본다.

비트 단위 중재

버스가 비어 있을 때 두 노드가 동시에 보내기 시작하면 어떻게 될까. 이더넷의 초기 방식은 충돌을 감지하면 둘 다 멈추고 임의의 시간 뒤에 다시 시도했다. 그러면 지연을 보장할 수 없다. CAN은 다르게 푼다. 모든 송신 노드는 자기가 낸 비트와 버스에서 읽은 비트를 매번 비교한다. 자기는 열성(1)을 냈는데 버스가 우성(0)이면, 더 우선순위가 높은 누군가가 보내고 있다는 뜻이므로 즉시 송신을 멈추고 수신자로 돌아선다. 우성을 낸 쪽은 자기 비트가 그대로 읽히므로 아무 일도 없었던 것처럼 계속 보낸다.

ID는 상위 비트부터 전송되므로, 처음으로 다른 비트에서 0을 가진 쪽, 즉 ID 값이 작은 쪽이 이긴다. 이긴 프레임은 손상되지 않았고 시간도 낭비되지 않았다. 그래서 이 방식을 비파괴 중재(non-destructive arbitration)라 부른다. 진 노드는 버스가 비면 자동으로 다시 시도한다.

SIMULATOR

버스 중재: 낮은 ID가 이긴다

노드 ID (16진 000~7FF)
진행—
아직 송신 중—
버스를 얻은 노드—
세 노드가 같은 순간에 SOF를 내고 ID를 상위 비트부터 보낸다. 맨 아래 줄은 버스에 실제로 나타나는 값(모든 송신 비트의 AND)과 차동 파형이다. 열성(1)을 냈는데 버스가 우성(0)인 노드는 그 비트에서 탈락하고 이후로는 듣기만 한다. 해볼 것: "다음 비트"를 눌러 가며 각 노드가 어느 비트에서 탈락하는지 미리 맞혀 본다. ID를 바꿔 마지막 비트에서 승부가 나게 만들어 본다. 두 노드에 같은 ID를 주면 중재가 끝나지 않는다. 그래서 한 버스에서 같은 ID를 두 노드가 송신하도록 설계하면 안 된다.

오류 처리

CAN의 오류 검출은 다섯 겹이다. 송신 노드는 자기가 낸 비트와 버스 값이 다른지(비트 오류), 아무도 ACK를 내지 않았는지(ACK 오류) 본다. 수신 노드는 여섯 비트 연속 같은 값이 왔는지(스터프 오류), CRC가 맞는지(CRC 오류), 구분 비트와 EOF가 열성인지(형식 오류) 본다. 누구든 오류를 발견하면 우성 6비트로 된 오류 프레임을 낸다. 이것은 일부러 스터프 규칙을 깨는 신호라서 다른 모든 노드도 오류를 알게 되고, 프레임은 폐기된 뒤 자동으로 재전송된다.

고장 난 노드가 버스를 계속 방해하면 안 되므로 각 노드는 송신 오류 카운터와 수신 오류 카운터를 가진다. 오류가 나면 올라가고 성공하면 내려간다. 카운터가 127을 넘으면 오류 프레임을 우성으로 내지 못하는 수동 상태가 되고, 송신 카운터가 255를 넘으면 버스에서 스스로 떨어져 나간다(bus off). 한 노드의 고장이 전체 통신을 멈추지 못하게 하는 장치다.

버스 부하와 여러 가지 네트워크

CAN 메시지 대부분은 주기적으로 보낸다. 엔진 회전수는 10 ms마다, 냉각수 온도는 100 ms마다, 도어 상태는 변할 때와 1초마다 보내는 식이다. 버스가 프레임 전송에 쓰이는 시간의 비율이 버스 부하율이다.

$$U = \sum_i \frac{C_i}{T_i}, \qquad C_i = \frac{N_{bits,i}}{f_{bit}}$$
여기서 \(C_i\)는 메시지 \(i\)의 전송 시간, \(T_i\)는 주기, \(N_{bits}\)는 프레임 비트 수, \(f_{bit}\)는 비트레이트다.

부하율이 100 %보다 낮다고 안심할 수는 없다. 우선순위가 낮은 메시지는 자기보다 높은 메시지가 모두 지나갈 때까지 기다려야 하고, 이미 전송이 시작된 프레임은 우선순위가 낮아도 끝날 때까지 끼어들 수 없다. 메시지 \(m\)이 겪는 최악의 대기 시간 \(w_m\)은 다음 식을 반복해서 풀어 구한다.

$$w_m = B_m + \sum_{k \in hp(m)} \left\lceil \frac{w_m + \tau_{bit}}{T_k} \right\rceil C_k, \qquad R_m = w_m + C_m$$
여기서 \(B_m\)은 이미 전송 중인 낮은 우선순위 프레임에 막히는 시간(최대 한 프레임), \(hp(m)\)은 \(m\)보다 우선순위가 높은 메시지의 집합, \(R_m\)은 최악 응답 시간이다.

\(R_m\)이 그 메시지의 주기(마감)보다 짧아야 한다. 실무에서는 재전송과 향후 확장을 위한 여유를 두어 평균 부하율을 대표적으로 30~50 % 이하로 설계한다.

SIMULATOR

버스 부하와 최악 지연

비트레이트 (kbps)
버스 부하율—
프레임 전송 시간—
최우선 메시지 최악 지연—
10 ms 그룹 최악 지연—
최하위 메시지 최악 지연—
판정—
모델: 10 ms 메시지에 낮은 ID(높은 우선순위)를, 100 ms 메시지에 높은 ID를 주었다. 프레임 길이는 스터핑이 최악인 경우로 계산한다. 위 타임라인은 모든 메시지가 t = 0에 동시에 대기열에 들어온 가장 불리한 순간부터 20 ms 동안 버스에 프레임이 줄 서서 나가는 모습이다(주황: 10 ms 그룹, 파랑: 100 ms 그룹, 빈 곳: 버스 유휴). 아래 그래프는 우선순위 순서대로 본 최악 응답 시간이고 점선이 각 그룹의 마감이다. 해볼 것: 10 ms 메시지를 늘려 100 ms 그룹의 지연이 급격히 늘어나는 지점을 찾는다. 비트레이트를 125 kbps로 낮추면 같은 메시지 집합이 버스에 들어가는가? 부하율이 100 %에 가까워지면 최하위 메시지는 어떻게 되는가?

CAN FD와 그 밖의 버스

CAN의 한계는 8바이트와 1 Mbps다. 비트 단위 중재가 성립하려면 가장 먼 노드까지 신호가 갔다가 돌아오는 시간이 비트 하나보다 짧아야 하므로, 버스 길이가 40 m면 1 Mbps가 상한이다. CAN FD(Flexible Data-rate)는 이 제약을 피해 간다. 중재 구간은 기존 속도로 보내고, 승자가 정해져 송신자가 하나뿐인 데이터 구간에서는 비트레이트를 2~5 Mbps로 올린다. 데이터도 최대 64바이트까지 싣는다. ECU 소프트웨어를 다시 쓰는 리프로그래밍 시간이 크게 줄어들고, 메시지 인증 부호를 붙일 자리가 생긴다.

모든 통신에 CAN이 필요한 것은 아니다. 용도에 따라 값과 성능이 다른 버스를 섞어 쓴다.

네트워크속도배선방식주 용도
LIN최대 20 kbps단선 + 차체 접지주 노드 하나가 순서대로 호출윈도, 시트, 와이퍼, 우적 센서
CAN125 kbps~1 Mbps꼬임쌍선ID 우선순위 중재파워트레인, 섀시, 차체
CAN FD데이터 구간 2~5 Mbps꼬임쌍선CAN과 같은 중재, 최대 64바이트신형 차량의 기본 버스
FlexRay10 Mbps꼬임쌍선 1~2채널시분할, 정해진 시각에 송신섀시 제어, 바이 와이어
차량용 이더넷100 Mbps~수 Gbps꼬임쌍선 1조, 점대점 + 스위치전이중 패킷 교환카메라, 레이더, 백본, 진단

성격이 다른 버스들을 잇는 것이 게이트웨이다. 파워트레인 CAN의 차속 신호를 차체 CAN과 인포테인먼트 이더넷으로 옮겨 주고, 반대로 외부와 연결된 인포테인먼트 쪽에서 제동·조향 버스로 임의의 메시지가 넘어가지 못하게 걸러 낸다.

진단: 차가 스스로 고장을 말하게 하기

ECU는 제어만큼이나 많은 코드를 자기 감시에 쓴다. 센서 전압이 범위를 벗어났는지, 두 센서의 값이 서로 모순되지 않는지, 액추에이터 전류가 명령대로 흐르는지, 다른 ECU의 메시지가 제때 오는지를 계속 확인한다. 이상이 일정 조건 이상 지속되면 고장 코드(Diagnostic Trouble Code, DTC)를 비휘발성 메모리에 기록하고, 그 순간의 회전수와 온도 같은 상태(프리즈 프레임)를 함께 남긴다.

P0301 계통P 파워트레인C 섀시 · B 차체U 네트워크 정의 주체0 공통 규격1 제조사 고유 하위 계통3 점화 · 실화1, 2 연료 · 공기4 배출가스 보조 세부 고장01 = 1번 실린더 1번 실린더실화 감지
그림 13-5. 고장 코드의 구조. 다섯 자리 가운데 첫 글자가 계통을, 나머지가 세부 내용을 나타낸다. P0420은 촉매 효율 저하, U0100은 엔진 ECU와의 통신 두절이다.

배출가스와 관련된 진단은 법으로 표준화되어 있다. 이것이 OBD-II(On-Board Diagnostics)다. 미국은 1996년형부터, 유럽은 2001년(가솔린)부터 의무화했다. 운전석 아래의 16핀 커넥터에 스캐너를 꽂으면 제조사와 관계없이 같은 방식으로 고장 코드와 실시간 데이터를 읽을 수 있다. 6번과 14번 핀이 CAN_H와 CAN_L이다. 스캐너가 ID 0x7DF로 요청을 보내면 엔진 ECU가 0x7E8로 답한다.

계산 예: OBD-II로 엔진 회전수 읽기

스캐너가 데이터 02 01 0C를 보낸다. 2바이트짜리 요청이고, 서비스 01(현재 데이터)의 항목 0C(엔진 회전수)를 달라는 뜻이다. ECU가 04 41 0C 1A F8로 답한다. 41은 서비스 01에 대한 응답, 뒤의 두 바이트 A = 0x1A = 26, B = 0xF8 = 248이 값이다. 규격의 환산식은 \((256A + B)/4\)이므로 \((6656 + 248)/4 = 1{,}726\) rpm이다. 위 프레임 해부 시뮬레이터의 기본 데이터가 바로 이 값이다.

OBD-II가 다루지 않는 나머지, 즉 모든 ECU의 고장 코드 읽기, 액추에이터 강제 구동, 설정 값 쓰기, 소프트웨어 다시 쓰기는 UDS(Unified Diagnostic Services, ISO 14229)로 한다. 요청과 응답으로 이루어진 서비스 목록이고, 각 서비스는 1바이트 번호로 구분된다. 0x10은 진단 세션 전환, 0x19는 고장 코드 읽기, 0x22는 식별자로 데이터 읽기, 0x27은 보안 접근(시드와 키 교환), 0x2E는 데이터 쓰기, 0x31은 루틴 실행, 0x34~0x37은 소프트웨어 다운로드다. CAN 프레임의 8바이트를 넘는 긴 메시지는 전송 계층(ISO-TP)이 여러 프레임으로 쪼개 보내고, 이더넷에서는 DoIP가 같은 서비스를 IP 위에서 나른다. 정비소의 진단기와 공장의 최종 검사 장비, 그리고 뒤에 나올 무선 업데이트가 모두 이 서비스를 쓴다.

E/E 아키텍처: 분산에서 존으로

차의 전기·전자 장치를 어떤 제어기에 나눠 담고 어떻게 연결할지를 정한 큰 그림이 E/E 아키텍처(Electrical/Electronic architecture)다. 지난 30년 동안은 기능이 하나 늘 때마다 ECU가 하나 느는 분산 구조였다. 부품 회사가 센서, 액추에이터, ECU, 소프트웨어를 한 상자로 납품하고 완성차 회사는 그것을 CAN에 연결했다. 개발은 편했지만 ECU가 100개에 이르면서 한계가 드러났다. 하네스가 무겁고 비싸졌으며, 수십 개 회사가 만든 소프트웨어가 얽혀 있어 기능 하나를 바꾸려면 여러 ECU를 동시에 고쳐야 했다.

SIMULATOR

E/E 아키텍처 비교

아키텍처
말단 입출력 전원 공급 CAN / 이더넷
그림 속 제어기 수—
모델 배선 길이—
분산 구조 대비—
실차 환산 길이 (개략)—
실차 환산 무게 (개략)—
실차의 제어기 수—
위에서 본 차(오른쪽이 앞)에 센서·액추에이터 50여 개를 점으로, 제어기를 사각형으로 놓았다. 점의 색은 기능 영역(파워트레인, 섀시, 차체, 인포테인먼트, ADAS)이다. 배선 길이는 각 점에서 담당 제어기까지 직각 경로로 잰 거리에 가닥 수를 곱하고, 제어기마다 필요한 전원선과 통신선을 더한 값이다. 실차 환산은 분산 구조를 전선 3 km, 45 kg으로 놓고 같은 비율로 줄인 개략값이다. 해볼 것: 분산에서 도메인으로 바꾸면 제어기 수와 배선 길이가 각각 어떻게 변하는가? 존으로 바꾸면 말단 배선이 왜 짧아지는가? 간선만 남기고 보면 세 구조의 뼈대가 어떻게 다른가?

모델에서 확인할 수 있듯이 도메인 구조는 제어기 수를 크게 줄이지만 배선은 줄지 않는다. 기능별로 묶다 보니 뒤 범퍼의 센서 전선이 앞쪽 제어기까지 와야 하기 때문이다. 존 구조는 말단 전선을 가까운 존 컨트롤러에서 끊고, 그 사이를 전원 간선과 이더넷 한 쌍으로 잇는다. 실제 차에서는 스마트 센서와 일부 전용 ECU가 남으므로 변화가 이 모델만큼 깔끔하지는 않지만 방향은 같다.

소프트웨어 정의 차량과 OTA

연산이 중앙으로 모이면 하드웨어와 소프트웨어를 따로 개발할 수 있다. 차를 출고한 뒤에도 기능을 추가하고 성능을 바꿀 수 있는 차를 소프트웨어 정의 차량(Software-Defined Vehicle, SDV)이라 부른다. 이를 가능하게 하는 수단이 무선 업데이트(Over-The-Air, OTA)다. 통신 모듈이 서버에서 업데이트 꾸러미를 받아 전자 서명을 검증하고, 대상 ECU에 UDS 다운로드 서비스로 써 넣는다. 쓰는 도중 전원이 끊겨도 차가 먹통이 되지 않도록 메모리를 두 구역(A/B)으로 나눠 새 소프트웨어를 비활성 구역에 쓰고, 검증이 끝난 뒤에 전환한다. 문제가 생기면 이전 구역으로 되돌아간다.

소프트웨어를 여러 회사가 나눠 만들려면 공통 구조가 필요하다. AUTOSAR(AUTomotive Open System ARchitecture)는 그 표준이다. 클래식 플랫폼은 MCU 기반의 실시간 ECU용으로, 응용 소프트웨어 컴포넌트가 하드웨어를 직접 건드리지 않고 런타임 환경(RTE)을 통해 신호를 주고받는다. CAN 드라이버, 진단, 메모리 관리 같은 기본 소프트웨어는 표준 모듈로 제공된다. 어댑티브 플랫폼은 고성능 프로세서와 POSIX 운영체제 위에서 서비스 지향 통신을 하는 중앙 컴퓨터용이다.

사이버 보안과 기능 안전

CAN은 닫힌 네트워크를 전제로 설계되어서 송신자를 확인하는 수단이 없다. 버스에 접속한 누구든 어떤 ID로든 프레임을 보낼 수 있고, 수신 노드는 그것을 믿는다. 차가 이동통신과 와이파이에 연결되면서 이 전제가 깨졌다. 2015년에는 연구자들이 인포테인먼트 장치의 취약점을 통해 원격으로 차량 내부 버스에 메시지를 주입해 주행 중인 차의 제동과 변속을 조작할 수 있음을 보였고, 약 140만 대가 리콜되었다.

대응은 여러 겹으로 이루어진다. 게이트웨이가 외부와 연결된 영역과 주행 관련 영역을 분리하고, 중요한 메시지에는 암호 키로 계산한 인증 부호와 재전송 방지 카운터를 붙인다(SecOC). 키는 MCU 안의 하드웨어 보안 모듈에 보관한다. 부팅할 때 소프트웨어의 서명을 검증하고(보안 부팅), 버스의 이상 트래픽을 감시한다. 유엔 규정 R155와 R156은 제조사에 사이버 보안과 소프트웨어 업데이트의 관리 체계를 요구한다.

보안이 악의적인 공격으로부터 차를 지키는 것이라면, 기능 안전은 고장과 설계 결함으로부터 사람을 지키는 것이다. 이 장에서 본 이중 페달 센서, 락스텝 MCU, 워치독, 메시지 감시는 모두 기능 안전 규격 ISO 26262가 요구하는 안전 메커니즘의 예다. 위험도에 따라 등급(ASIL A~D)을 매기고 그에 맞는 개발 절차와 진단 범위를 요구하는 이 체계는 21장에서 자율주행 시스템과 함께 다룬다.

핵심 정리

  1. 12 V 계통에서 알터네이터, 배터리, 부하는 병렬이다. 알터네이터의 최대 전류는 회전수에 따라 달라지고, 부하가 이를 넘으면 배터리가 방전하며 전압이 내려간다. 전기차는 DC-DC 컨버터가 알터네이터를 대신한다.
  2. 시동 순간 수백 암페어가 흐르며 전압이 크게 떨어진다. 주차 중의 암전류는 수십 mA 이하로 관리하고, 그 값과 배터리 용량이 방치 가능 일수를 정한다.
  3. ECU는 입력 회로, MCU, 출력 드라이버, 전원부, 워치독, 통신 트랜시버로 이루어진다. 센서는 물리량을 0.5~4.5 V 전압이나 펄스로 바꾸고, 안전에 중요한 센서는 이중화한다.
  4. PWM은 스위치를 완전히 켜고 끄는 비율로 평균 전류를 조절한다. 인덕턴스가 전류를 매끄럽게 하고 평균 전류는 듀티에 비례한다. H-브리지는 스위치 네 개로 모터의 방향을 바꾼다.
  5. PID 제어에서 P는 현재 오차, I는 누적 오차, D는 오차의 변화율에 반응한다. I가 정상 상태 오차를 없애고, 지연과 긴 샘플링 주기는 안정 여유를 줄인다.
  6. CAN은 차동 신호로 우성(0)과 열성(1)을 나타내며 버스는 모든 송신의 AND다. 송신 비트와 버스 값을 비교하는 비트 단위 중재에서 ID가 작은 프레임이 손상 없이 이긴다.
  7. CAN 프레임은 SOF, ID, 제어, 데이터, CRC, ACK, EOF로 이루어지고 같은 비트 5개 뒤에 스터프 비트가 들어간다. 버스 부하율과 우선순위가 메시지의 최악 지연을 정한다.
  8. E/E 아키텍처는 분산 ECU에서 도메인 컨트롤러를 거쳐 존 컨트롤러와 중앙 컴퓨터로 옮겨 가고 있다. 이더넷 백본, OTA, 보안, 기능 안전이 함께 설계된다.

확인 퀴즈

공회전 중 알터네이터가 낼 수 있는 최대 전류가 55 A인데 전기 부하가 70 A다. 어떤 일이 일어나는가?

알터네이터, 배터리, 부하는 병렬이므로 전류는 합이 맞아야 한다. 알터네이터가 포화되면 전압 조정기는 더 이상 14 V대를 유지하지 못하고, 전압이 배터리의 개방 전압 아래로 내려가면서 배터리가 나머지를 공급한다. 전압이 내려가면 저항성 부하의 전류도 조금 줄어들므로 실제 방전 전류는 15 A보다 약간 작다. 회전수를 올리면 다시 충전으로 돌아선다.

가속 페달 위치 센서를 두 개 넣고 두 채널의 출력 기울기를 서로 다르게 만드는 이유는?

두 채널이 같은 전압을 내도록 만들면, 두 선이 서로 붙었을 때 값이 일치하므로 고장을 알 수 없다. 기울기를 1:2로 두면 정상일 때만 그 비가 유지된다. 비가 깨지면 ECU는 페달 값을 신뢰하지 않고 출력을 제한한다.

ID 0x1A4, 0x1A0, 0x2F0인 세 프레임이 동시에 송신을 시작했다. 어느 프레임이 버스를 얻는가?

0x2F0(010 1111 0000)은 두 번째 비트에서 1을 내는데 다른 둘이 0을 내므로 먼저 탈락한다. 0x1A4(001 1010 0100)와 0x1A0(001 1010 0000)은 아홉 번째 비트에서 갈리고, 1을 낸 0x1A4가 탈락한다. 우성(0)이 열성(1)을 덮으므로 항상 값이 가장 작은 ID가 이기며, 이긴 프레임은 손상 없이 계속 전송된다.

CAN에서 비트 스터핑이 필요한 근본 이유는?

수신 노드는 비트가 바뀌는 순간에 자기 비트 타이밍을 다시 맞춘다. 같은 값이 길게 이어지면 각 노드의 발진기 오차가 누적되어 샘플 위치가 어긋난다. 같은 값 5비트 뒤에 반대 비트를 넣으면 최소한 10비트 안에 에지가 하나는 생긴다. 덤으로, 같은 값 6비트 연속은 정상 프레임에 나올 수 없게 되므로 오류 프레임의 표지로 쓸 수 있다.

P 제어만으로 공회전 속도를 제어할 때 에어컨을 켜면 회전수가 목표보다 낮은 값에서 머문다. 그 이유는?

P 제어의 출력은 오차에 비례한다. 오차가 0이 되면 추가 출력도 0이 되어 부하를 감당할 수 없다. 그래서 부하와 추가 출력이 균형을 이루는 0이 아닌 오차에서 멈춘다. 게인을 키우면 이 오차가 줄지만 불안정해진다. 적분 항은 오차가 남아 있는 한 출력을 계속 키우므로 오차를 0으로 만든다.

존 아키텍처에서 존 컨트롤러에 연결할 장치를 정하는 기준은?

도메인 아키텍처는 기능으로, 존 아키텍처는 위치로 묶는다. 근처의 센서와 액추에이터를 종류에 상관없이 가까운 존 컨트롤러에 연결하므로 말단 배선이 짧아진다. 기능의 판단은 이더넷 백본으로 연결된 중앙 컴퓨터가 맡는다.