전장과 차량 네트워크
가속 페달을 밟으면 엔진이 반응하지만, 요즘 차에서 페달과 스로틀 사이에는 케이블이 없다. 페달 센서의 전압을 컴퓨터가 읽고, 계산하고, 모터를 돌린다. 이런 컴퓨터가 차 한 대에 수십 개에서 백여 개 들어 있고, 서로 초당 수천 개의 메시지를 주고받는다. 이 장은 그 전기를 공급하는 12 V 전원계에서 시작해 제어기의 속, 차량 통신의 표준인 CAN, 그리고 차 전체를 다시 설계하고 있는 존 아키텍처까지 따라간다.
- 배터리·알터네이터·부하 사이의 전류 균형과 시동 시 전압 강하, 암전류 방전을 계산한다.
- ECU의 구성과 대표적인 센서·액추에이터의 동작 원리, PWM 구동을 설명한다.
- PID 제어기의 세 항과 샘플링 주기가 응답에 미치는 영향을 이해한다.
- CAN 프레임의 각 필드, 비트 스터핑, CRC, 비트 단위 중재를 비트 수준에서 읽는다.
- 버스 부하율과 최악 응답 시간을 구하고 CAN FD·LIN·FlexRay·이더넷의 쓰임새를 구분한다.
- 분산·도메인·존 아키텍처의 차이와 SDV, OTA, 보안이 왜 함께 논의되는지 설명한다.
바퀴 달린 컴퓨터 네트워크
1970년대까지 자동차의 전기 장치는 점화, 시동, 등화, 와이퍼 정도였다. 배출가스 규제가 강화되면서 연료와 점화를 정밀하게 맞출 필요가 생겼고(4장), 그 일을 맡은 것이 마이크로컨트롤러를 넣은 전자 제어 장치(Electronic Control Unit, ECU)다. 이후 ABS, 에어백, 자동 변속기, 차체 자세 제어, 공조, 계기판이 차례로 자기 ECU를 갖게 되었다. 현재 양산 승용차에는 대표적으로 70~100개 이상의 ECU가 들어가고, 소프트웨어는 고급차 기준으로 1억 줄 수준이라고 알려져 있다.
ECU 하나가 하는 일은 단순한 반복이다. 센서로 물리량을 읽고, 정해진 주기로 계산하고, 액추에이터를 구동한다. 여기에 다른 ECU와 값을 주고받는 통신이 붙는다. 엔진 ECU가 계산한 회전수는 변속기 ECU, 계기판, ESC가 모두 필요로 하므로 한 번 측정해서 버스에 올려 두면 모두가 받아 쓴다.
이 구조가 가능하려면 세 가지가 필요하다. 모든 장치에 전기를 대 주는 전원계, 전기 신호를 다루는 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)보다 높아야 충전 전류가 배터리로 흘러 들어가기 때문이다.
세 요소가 병렬이므로 전류는 단순한 덧셈이다. 알터네이터 전류에서 부하 전류를 뺀 것이 배터리로 들어가는 전류다.
문제는 \(I_{max}\)가 회전수에 따라 크게 달라진다는 점이다. 정격 130 A인 알터네이터도 공회전에서는 그 절반 정도만 낸다. 겨울밤 정체 구간에서 전조등, 열선, 블로어, 와이퍼를 모두 켜면 부하가 공회전 발전량을 넘고, 모자란 만큼은 배터리가 메운다. 이때 시스템 전압은 14 V대에서 12 V대로 내려간다. 아래에서 직접 확인해 보자.
충전 계통: 누가 전기를 대고 있는가
열선과 블로어를 켜서 알터네이터가 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로 늘어 며칠 만에 배터리가 방전된다.
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이며 엔진과 차체 다음으로 무겁고 비싼 부품에 속한다. 전선 굵기는 흐르는 전류와 허용 전압 강하로 정한다.
단면적 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(microcontroller): CPU, 플래시 메모리, RAM, 아날로그-디지털 변환기(ADC), 타이머, 통신 컨트롤러가 칩 하나에 들어 있다. 안전이 중요한 ECU는 같은 연산을 두 코어가 동시에 수행해 결과를 비교하는 락스텝(lockstep) 구조를 쓴다.
- 입력 회로: 센서 신호를 MCU가 읽을 수 있는 0~5 V 범위로 맞추고, 잡음을 거르고, 정전기와 단락으로부터 보호한다.
- 출력 드라이버: MCU 핀은 수 mA만 낼 수 있으므로 MOSFET으로 수 A~수십 A를 여닫는다. 부하의 단선과 단락을 감지하는 진단 기능이 붙는다.
- 전원부: 요동치는 차량 전원에서 안정된 5 V와 3.3 V를 만든다.
- 워치독(watchdog): MCU가 정해진 시간 안에 "살아 있다"는 신호를 보내지 않으면 강제로 리셋한다. 소프트웨어가 무한 루프에 빠져도 밸브가 열린 채 멈춰 있지 않게 하는 마지막 방어선이다.
엔진룸에 놓이는 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\)보다 충분히 짧으면 전류는 거의 일정해지고 그 평균은 듀티에 비례한다.
PWM과 인덕턴스 부하, H-브리지
모터를 한 방향으로만 돌린다면 스위치 하나로 충분하지만, 전자식 스로틀, 파워 윈도, 시트, 전동 주차 브레이크처럼 정·역회전이 모두 필요하면 스위치 네 개를 H 모양으로 배치한 H-브리지를 쓴다. 아래쪽 두 스위치를 함께 켜면 모터 단자가 단락되어, 돌고 있는 모터가 자기 역기전력으로 전류를 흘리며 빠르게 멈춘다(발전 제동). 3상 모터를 돌리는 인버터는 이 구조에 다리를 하나 더 붙인 것이다(15장).
제어 루프: 목표와 현실의 차이를 줄이기
ECU 소프트웨어의 핵심은 피드백 제어다. 목표값과 측정값의 차이인 오차 \(e\)를 계산하고, 오차가 줄어드는 방향으로 액추에이터를 움직인다. 가장 널리 쓰이는 형태가 PID 제어기다.
- 비례(P): 오차에 비례해 민다. 단순하지만 외란이 계속 걸리면 오차가 0이 되지 않는다. 오차가 0이면 출력도 0이 되어 외란을 버틸 힘이 사라지기 때문이다.
- 적분(I): 오차를 누적한다. 작은 오차라도 남아 있으면 출력이 계속 커지므로 정상 상태 오차를 없앤다. 너무 크면 지나쳐서 출렁인다.
- 미분(D): 오차가 변하는 속도에 반응해 미리 제동을 건다. 오버슈트를 줄이지만 센서 잡음도 함께 증폭한다.
MCU는 연속 시간으로 계산하지 못하므로 일정한 샘플링 주기 \(T_s\)마다 한 번씩 계산한다. 적분은 덧셈으로, 미분은 뺄셈으로 바뀐다.
샘플링 주기는 제어 대상의 빠르기에 맞춘다. 대표적으로 섀시 제어(ESC, EPS)는 1~10 ms, 엔진의 공기·연료 제어는 10 ms와 크랭크 각도 동기 작업, 공조와 차체 제어는 20~100 ms다. 주기가 길면 그만큼 지연이 더해져 같은 게인에서도 불안정해진다.
공회전 속도 제어를 예로 보자. 에어컨 컴프레서가 켜지면 엔진에 갑자기 부하가 걸려 회전수가 떨어진다. ECU는 회전수를 읽어 목표(약 800 rpm)와 비교하고 스로틀을 더 열어 토크를 보충한다. 스로틀을 열어도 공기가 흡기 매니폴드를 채우고 실린더에서 연소되기까지 시간이 걸리므로, 이 지연이 제어를 어렵게 만든다.
PID 공회전 속도 제어
실제 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).
차동 신호와 우성·열성
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만 골라 쓴다. 표준 데이터 프레임의 구성은 다음과 같다.
| 필드 | 비트 수 | 내용 |
|---|---|---|
| SOF | 1 | 프레임 시작. 우성 1비트. 모든 노드가 이 하강 에지에 시계를 맞춘다 |
| ID | 11 | 메시지 식별자이자 우선순위. 값이 작을수록 우선 (확장 프레임은 29비트) |
| RTR · IDE · r0 | 3 | 원격 요청 여부, 확장 ID 여부, 예약 비트 |
| DLC | 4 | 데이터 길이(바이트 수, 0~8) |
| 데이터 | 0~64 | 신호들. 예: 엔진 회전수 16비트, 냉각수 온도 8비트 |
| CRC | 15 + 1 | 오류 검출 부호와 구분 비트 |
| ACK | 1 + 1 | 송신자는 열성을 내고, 정상 수신한 노드가 우성으로 덮어쓴다 |
| EOF · IFS | 7 + 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)로 나눈 나머지다. 수신 노드가 같은 계산을 해서 값이 다르면 프레임을 버린다.
CAN 프레임 해부
비트 단위 중재
버스가 비어 있을 때 두 노드가 동시에 보내기 시작하면 어떻게 될까. 이더넷의 초기 방식은 충돌을 감지하면 둘 다 멈추고 임의의 시간 뒤에 다시 시도했다. 그러면 지연을 보장할 수 없다. CAN은 다르게 푼다. 모든 송신 노드는 자기가 낸 비트와 버스에서 읽은 비트를 매번 비교한다. 자기는 열성(1)을 냈는데 버스가 우성(0)이면, 더 우선순위가 높은 누군가가 보내고 있다는 뜻이므로 즉시 송신을 멈추고 수신자로 돌아선다. 우성을 낸 쪽은 자기 비트가 그대로 읽히므로 아무 일도 없었던 것처럼 계속 보낸다.
ID는 상위 비트부터 전송되므로, 처음으로 다른 비트에서 0을 가진 쪽, 즉 ID 값이 작은 쪽이 이긴다. 이긴 프레임은 손상되지 않았고 시간도 낭비되지 않았다. 그래서 이 방식을 비파괴 중재(non-destructive arbitration)라 부른다. 진 노드는 버스가 비면 자동으로 다시 시도한다.
버스 중재: 낮은 ID가 이긴다
오류 처리
CAN의 오류 검출은 다섯 겹이다. 송신 노드는 자기가 낸 비트와 버스 값이 다른지(비트 오류), 아무도 ACK를 내지 않았는지(ACK 오류) 본다. 수신 노드는 여섯 비트 연속 같은 값이 왔는지(스터프 오류), CRC가 맞는지(CRC 오류), 구분 비트와 EOF가 열성인지(형식 오류) 본다. 누구든 오류를 발견하면 우성 6비트로 된 오류 프레임을 낸다. 이것은 일부러 스터프 규칙을 깨는 신호라서 다른 모든 노드도 오류를 알게 되고, 프레임은 폐기된 뒤 자동으로 재전송된다.
고장 난 노드가 버스를 계속 방해하면 안 되므로 각 노드는 송신 오류 카운터와 수신 오류 카운터를 가진다. 오류가 나면 올라가고 성공하면 내려간다. 카운터가 127을 넘으면 오류 프레임을 우성으로 내지 못하는 수동 상태가 되고, 송신 카운터가 255를 넘으면 버스에서 스스로 떨어져 나간다(bus off). 한 노드의 고장이 전체 통신을 멈추지 못하게 하는 장치다.
버스 부하와 여러 가지 네트워크
CAN 메시지 대부분은 주기적으로 보낸다. 엔진 회전수는 10 ms마다, 냉각수 온도는 100 ms마다, 도어 상태는 변할 때와 1초마다 보내는 식이다. 버스가 프레임 전송에 쓰이는 시간의 비율이 버스 부하율이다.
부하율이 100 %보다 낮다고 안심할 수는 없다. 우선순위가 낮은 메시지는 자기보다 높은 메시지가 모두 지나갈 때까지 기다려야 하고, 이미 전송이 시작된 프레임은 우선순위가 낮아도 끝날 때까지 끼어들 수 없다. 메시지 \(m\)이 겪는 최악의 대기 시간 \(w_m\)은 다음 식을 반복해서 풀어 구한다.
\(R_m\)이 그 메시지의 주기(마감)보다 짧아야 한다. 실무에서는 재전송과 향후 확장을 위한 여유를 두어 평균 부하율을 대표적으로 30~50 % 이하로 설계한다.
버스 부하와 최악 지연
CAN FD와 그 밖의 버스
CAN의 한계는 8바이트와 1 Mbps다. 비트 단위 중재가 성립하려면 가장 먼 노드까지 신호가 갔다가 돌아오는 시간이 비트 하나보다 짧아야 하므로, 버스 길이가 40 m면 1 Mbps가 상한이다. CAN FD(Flexible Data-rate)는 이 제약을 피해 간다. 중재 구간은 기존 속도로 보내고, 승자가 정해져 송신자가 하나뿐인 데이터 구간에서는 비트레이트를 2~5 Mbps로 올린다. 데이터도 최대 64바이트까지 싣는다. ECU 소프트웨어를 다시 쓰는 리프로그래밍 시간이 크게 줄어들고, 메시지 인증 부호를 붙일 자리가 생긴다.
모든 통신에 CAN이 필요한 것은 아니다. 용도에 따라 값과 성능이 다른 버스를 섞어 쓴다.
| 네트워크 | 속도 | 배선 | 방식 | 주 용도 |
|---|---|---|---|---|
| LIN | 최대 20 kbps | 단선 + 차체 접지 | 주 노드 하나가 순서대로 호출 | 윈도, 시트, 와이퍼, 우적 센서 |
| CAN | 125 kbps~1 Mbps | 꼬임쌍선 | ID 우선순위 중재 | 파워트레인, 섀시, 차체 |
| CAN FD | 데이터 구간 2~5 Mbps | 꼬임쌍선 | CAN과 같은 중재, 최대 64바이트 | 신형 차량의 기본 버스 |
| FlexRay | 10 Mbps | 꼬임쌍선 1~2채널 | 시분할, 정해진 시각에 송신 | 섀시 제어, 바이 와이어 |
| 차량용 이더넷 | 100 Mbps~수 Gbps | 꼬임쌍선 1조, 점대점 + 스위치 | 전이중 패킷 교환 | 카메라, 레이더, 백본, 진단 |
- LIN(Local Interconnect Network): 전선 한 가닥과 저렴한 MCU로 구현한다. 주 노드가 정해진 순서표에 따라 헤더를 보내면 해당 종 노드가 응답한다. 도어 안의 스위치와 모터처럼 느려도 되는 말단 장치를 CAN ECU 아래에 매단다.
- FlexRay: 시간을 슬롯으로 나누어 각 노드가 정해진 시각에만 보낸다. 지연이 완전히 예측 가능하고 두 채널로 이중화할 수 있어 능동 서스펜션과 조향에 쓰였다. 비용이 높아 신규 설계에서는 CAN FD와 이더넷으로 대체되는 추세다.
- 차량용 이더넷: 사무실 이더넷과 달리 차폐 없는 꼬임쌍선 한 쌍으로 양방향 통신을 한다. 100BASE-T1은 100 Mbps, 1000BASE-T1은 1 Gbps이고 링크 길이는 15 m까지다. 버스가 아니라 스위치를 거치는 점대점 연결이다. 카메라와 라이다가 내는 대용량 데이터(18장), 소프트웨어 업데이트, 제어기 사이의 백본에 쓰인다. 시간 민감 네트워킹(TSN) 표준이 지연 상한을 보장한다.
성격이 다른 버스들을 잇는 것이 게이트웨이다. 파워트레인 CAN의 차속 신호를 차체 CAN과 인포테인먼트 이더넷으로 옮겨 주고, 반대로 외부와 연결된 인포테인먼트 쪽에서 제동·조향 버스로 임의의 메시지가 넘어가지 못하게 걸러 낸다.
진단: 차가 스스로 고장을 말하게 하기
ECU는 제어만큼이나 많은 코드를 자기 감시에 쓴다. 센서 전압이 범위를 벗어났는지, 두 센서의 값이 서로 모순되지 않는지, 액추에이터 전류가 명령대로 흐르는지, 다른 ECU의 메시지가 제때 오는지를 계속 확인한다. 이상이 일정 조건 이상 지속되면 고장 코드(Diagnostic Trouble Code, DTC)를 비휘발성 메모리에 기록하고, 그 순간의 회전수와 온도 같은 상태(프리즈 프레임)를 함께 남긴다.
배출가스와 관련된 진단은 법으로 표준화되어 있다. 이것이 OBD-II(On-Board Diagnostics)다. 미국은 1996년형부터, 유럽은 2001년(가솔린)부터 의무화했다. 운전석 아래의 16핀 커넥터에 스캐너를 꽂으면 제조사와 관계없이 같은 방식으로 고장 코드와 실시간 데이터를 읽을 수 있다. 6번과 14번 핀이 CAN_H와 CAN_L이다. 스캐너가 ID 0x7DF로 요청을 보내면 엔진 ECU가 0x7E8로 답한다.
스캐너가 데이터 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를 동시에 고쳐야 했다.
- 도메인 아키텍처: 파워트레인, 섀시, 차체, 인포테인먼트, ADAS처럼 기능 영역별로 강력한 도메인 컨트롤러를 두고 연산을 모은다. 나머지 ECU는 단순한 입출력 장치가 된다. 소프트웨어 통합은 쉬워지지만, 같은 도메인의 부품이 차 전체에 흩어져 있으면 전선을 멀리 끌어와야 한다.
- 존 아키텍처(zonal architecture): 기능이 아니라 위치로 묶는다. 차를 서너 구역으로 나눠 구역마다 존 컨트롤러를 두고, 근처의 센서와 액추에이터를 종류에 상관없이 거기에 연결한다. 존 컨트롤러는 전원 분배와 입출력만 맡고, 판단은 이더넷 백본으로 연결된 중앙 컴퓨터(High-Performance Computer, HPC)가 한다. 말단 전선이 짧아지고 하네스가 단순해져 조립 자동화에도 유리하다.
E/E 아키텍처 비교
모델에서 확인할 수 있듯이 도메인 구조는 제어기 수를 크게 줄이지만 배선은 줄지 않는다. 기능별로 묶다 보니 뒤 범퍼의 센서 전선이 앞쪽 제어기까지 와야 하기 때문이다. 존 구조는 말단 전선을 가까운 존 컨트롤러에서 끊고, 그 사이를 전원 간선과 이더넷 한 쌍으로 잇는다. 실제 차에서는 스마트 센서와 일부 전용 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장에서 자율주행 시스템과 함께 다룬다.
핵심 정리
- 12 V 계통에서 알터네이터, 배터리, 부하는 병렬이다. 알터네이터의 최대 전류는 회전수에 따라 달라지고, 부하가 이를 넘으면 배터리가 방전하며 전압이 내려간다. 전기차는 DC-DC 컨버터가 알터네이터를 대신한다.
- 시동 순간 수백 암페어가 흐르며 전압이 크게 떨어진다. 주차 중의 암전류는 수십 mA 이하로 관리하고, 그 값과 배터리 용량이 방치 가능 일수를 정한다.
- ECU는 입력 회로, MCU, 출력 드라이버, 전원부, 워치독, 통신 트랜시버로 이루어진다. 센서는 물리량을 0.5~4.5 V 전압이나 펄스로 바꾸고, 안전에 중요한 센서는 이중화한다.
- PWM은 스위치를 완전히 켜고 끄는 비율로 평균 전류를 조절한다. 인덕턴스가 전류를 매끄럽게 하고 평균 전류는 듀티에 비례한다. H-브리지는 스위치 네 개로 모터의 방향을 바꾼다.
- PID 제어에서 P는 현재 오차, I는 누적 오차, D는 오차의 변화율에 반응한다. I가 정상 상태 오차를 없애고, 지연과 긴 샘플링 주기는 안정 여유를 줄인다.
- CAN은 차동 신호로 우성(0)과 열성(1)을 나타내며 버스는 모든 송신의 AND다. 송신 비트와 버스 값을 비교하는 비트 단위 중재에서 ID가 작은 프레임이 손상 없이 이긴다.
- CAN 프레임은 SOF, ID, 제어, 데이터, CRC, ACK, EOF로 이루어지고 같은 비트 5개 뒤에 스터프 비트가 들어간다. 버스 부하율과 우선순위가 메시지의 최악 지연을 정한다.
- E/E 아키텍처는 분산 ECU에서 도메인 컨트롤러를 거쳐 존 컨트롤러와 중앙 컴퓨터로 옮겨 가고 있다. 이더넷 백본, OTA, 보안, 기능 안전이 함께 설계된다.
확인 퀴즈
공회전 중 알터네이터가 낼 수 있는 최대 전류가 55 A인데 전기 부하가 70 A다. 어떤 일이 일어나는가?
가속 페달 위치 센서를 두 개 넣고 두 채널의 출력 기울기를 서로 다르게 만드는 이유는?
ID 0x1A4, 0x1A0, 0x2F0인 세 프레임이 동시에 송신을 시작했다. 어느 프레임이 버스를 얻는가?
CAN에서 비트 스터핑이 필요한 근본 이유는?
P 제어만으로 공회전 속도를 제어할 때 에어컨을 켜면 회전수가 목표보다 낮은 값에서 머문다. 그 이유는?
존 아키텍처에서 존 컨트롤러에 연결할 장치를 정하는 기준은?