저는 스마트 포투 전기차를 운전합니다. 구동 배터리의 건강 상태는 배터리 관리 시스템(BMS)이 유지하며, 충방전 중 93개 모든 셀을 모니터링하고 전압 균형을 맞춥니다. 보통 서비스 툴만 이 ECU에서 정보를 읽을 수 있습니다.
차량에는 GSM 모뎀이 장착되어 충전 상태(SOC), 주행 가능 거리 등 기본 정보를 제공합니다. 일정 기간 동안 모뎀이 확장 모드로 작동하며 진단 정보를 수집했는데, 그 내용이 궁금해 CAN 버스를 스니핑해 보기로 했습니다.
닛산 리프 등 다른 전기차 프로젝트에서 영감을 받아 주행 및 충전 중 CAN 버스 트래픽을 모두 기록했습니다. 처음 스니핑한 스트림에는 진단 데이터가 포함되어 있었지만, 이를 어떻게 디코딩할지가 문제였습니다.
CAN 버스 스니핑 및 리버스 엔지니어링에 대한 자세한 내용은 별도 문서를 참고하세요.
필요한 것
필수 하드웨어를 준비하세요. 최신 차량의 물리 계층은 CAN 버스로 구현됩니다. 최소 두 종류의 CAN 버스 쉴드를 사용할 수 있습니다(부품 목록 참조). 차량의 진단 포트인 OBD 커넥터에 연결해야 하므로 케이블을 구매하거나 직접 제작하세요. 주의: OBD to DSUB-9 케이블에는 두 가지 표준이 있습니다. 올바른 것을 선택하세요! 아래 사진을 참조하세요.
직접 케이블을 만들 때는 오래된 트위스트 페어 랜케이블을 활용하는 것이 좋습니다. 꼬인 선 한 쌍을 CAN-H와 CAN-L에 사용하면 신호 무결성이 향상됩니다. 또한 길이는 1미터를 넘지 않게 하여 신호 반사를 최소화하세요.
시작하기
1단계: 하드웨어 준비 및 케이스 장착
2단계: 소프트웨어 설치
내 깃허브 저장소에서 프로젝트를 다운로드하세요. 설치 방법은 저장소에 자세히 나와 있습니다. 코드를 컴파일하여 아두이노에 업로드하세요.
3단계: 차량 연결 및 진단 시작
차량에 연결하고 전원을 켭니다. 진단 세션을 시작하면 배터리 팩에 대한 유용한 정보를 얻을 수 있습니다.
4단계: 데이터 분석
스프레드시트 프로그램을 사용하여 상관관계를 분석하세요. 예를 들어 대시보드의 SOC(충전 상태)와 BMS의 실제 SOC를 비교하거나, 셀 전압을 플로팅하여 충전 시 어떤 셀이 먼저 컷오프 한계에 도달하여 팩을 제한하는지 확인할 수 있습니다.
5단계: 확장 및 개선
원하는 대로 코드를 개선하세요. SparkFun 쉴드에는 SD 카드 리더가 있어 자체 CAN 버스 로거를 만들 수 있습니다. 또는 데이터를 표시하는 멋진 프론트엔드/앱을 개발할 수도 있습니다.