Leo's Garage

Calibration 이란 본문

자동차 및 자동차 SW/자동차 SW 개발 일반

Calibration 이란

LeoBehindK 2023. 7. 18. 00:38
728x90
반응형

Calibration은 ECU 개발에서 중요한 단계 중 하나인데 파라미터를 조정하는 것으로 생각하면 좋다. 

제어 알고리즘 파라미터, ADC, Sensor 등을 다뤄본 경험이 있다면 규모가 작더라도 Calibration을 해 본 경험이 있을 것이다. 

ECU의 경우, AUTOSAR 사양에 완벽하게 포함되지는 않지만 기본적으로 여러가지 Calibration 옵션이 있다. 이유는 기본적으로 Calibration은 HW에 따라 달라지기 때문이다.

ECU에서 Calibration은 SW 요구사항에 맞게 개발 중에 조정되는 Constant Parameter를 조정하는 것으로 정의할 수 있다. 과연 Constants는 Flash영역에 있는데 어떻게 변경한다는 걸까? 일시적으로 RAM으로 옮겨서 조정해야 할까? 아니면 메모리에서 위치를 변경하고 ECU에 재 Flashing을 해야할까? 결론은 둘 다 가능하다 이다. 이러한 개념은 offline Calibration과 online Calibration으로 나눠서 설명할 수 있다. 

 

offline Calibration : Binary에서 값을 변경하고, 재 Flashing하는 과정이다. 보통 개발 단계에서 hex를 까서 수정하는 것을 좋아할 사람은 없을 것이다. 보통은 디버거를 이용해서 작업하거나 하는 식으로 하는 것이 효율적이다. 또한 몇 몇 값 조정을 위해서 전체 코드를 재빌드하는건 너무 비효율적이다. 따라서 보통은 Flash에 접근 가능한 방법을 이용해서 작업한다. 

online calibration : 이 방법은 run time 중에 ECU에서 직접 parameter를 변경하는 방법이다. 이 방법을 구현하는 건 보통 offline calibration보다는 까다롭지만, 너무 편하기 때문에 대부분 이 방법을 사용한다. 이 방법을 사용하려면 A2L파일이 필요하다. 이 파일에 대한 설명은 다른 포스팅을 참고하기 바란다. 또한 ECU Calibration을 위한 특별한 프로토콜이 필요한데 보통은 XCP라는 프로토콜을 사용한다. 보통 XCP프로토콜을 이용한 MC(Measurement & Calibration)-Tool 들이 상용툴로 존재하는데 이 툴을 제공하는 회사로는 이타스와 벡터가 있다. 

Calibration Concept과 관련해서 참고할만한 내용을 정리해보겠다. 

Flash memory Parameter 사용 - 일반적으로 어려운 방법인데, Flash memory를 직접 쓰고 지우는 방법은 복잡하기도 하지만 일반적으로 해당 기능을 제공하지 않는 MCU들도 있기 때문에 적용하긴 쉽지 않다. 

RAM memory Parameter 사용 - 여기서 의미하는 메모리는 NvRAM이 아니다. RAM 변수를 사용하면, 초기에는 Flash에 저장된 초기값으로 초기화되지만 Runtime에 해당 값을 변경할 수 있다. RAM 변수를 parameter로 사용하면 편하기야 하겠지만, 다음날이 되면 값 세팅을 다시 해줘야 하는 번거로움이 있다. 이를 해결하기 위해서는 매번 시험 후에 해당 RAM변수의 값을 마지막 최종 값으로 변경하기 위해 hex 조작을 해야하는데 이 또한 일이다. 물론 아주 적은 수의 파라미터를 조정하는 정도라면 해볼 만 하다.

Flash memory Overlay 사용 - 일반적으로 현업에서 가장 많이 사용하는 방식이다. 대부분 메이져 상용 MCU에는 기본적으로 RAM - Flash가 서로 메모리 영역을 Overlay할 수 있는 기능이 있다. 이게 어떤 기능이냐면 특정 Flash 주소 영역를 특정 RAM 주소 영역으로 변경하는 것이다. 이렇게 하면 Program Counter에 의해 특정 Flash 주소를 접근할 때 하드웨어 적으로 RAM 주소 영역으로 접근하도록 강제하게 된다. 이 기능은 MC-Tool들과 아주 유연하게 호환되므로 원활하게 제어가 가능하다. 주의할 점은 구현 난이도가 어느정도 있고, AUTOSAR stack으로 제공되기보다는 직접 CDD로 구현해야 하는 부분이 많다. (실제로 직접 구현하여 사용하고 있다.) 어느정도 난이도가 있고, 해당 기능을 멀티 코어에서 동작하게 하려면 테스트도 필요하지만 이 작은 고생으로 얻을 수 있는 행복이 너무나 크기 때문에 반드시 이 방법을 사용하는 것을 강력히 추천한다. 

AUTOSAR RAM Pointer Calibration Concept - Overlay와 유사한 개념이기는 하나, 하드웨어를 사용하지 않고 Pointer Table을 사용하여 RAM Pointer로  Flash memory를 emulate하는 식으로 동작하게 하는 방법이다. 즉 Calibration 시, 항상 이 Pointer Table을 참조하게 만드는 것이다. 문제는 이건 100% SW로 구현해야하기 때문에 파라미터의 갯수가 너무 많으면 SW Over head가 심하다는 단점이 있다. 방법은 Single Pointer 방식과 Double Pointer 방식이 존재한다. Single Pointer 방식은 값이 RAM에 복사되고, 이 주소가 Pointer Table에 복사된다. Double Pointer 방식은 RAM Pointer Table과 함께 Flash에 Pointer Table을 도입하고, Table Pointer를 생성해서 이 둘 사이를 전환한다. 

Single (left) and double pointer (right) calibration concepts in Autosar

 

Flash Pinter Calibration Concept - 이 방벙은 Single Pointer Calibration과 동일한 방법으로 동작하는데, Table Pointer가 Flash memory에 있게 된다. 이렇게 되면 RAM은 절약할 수 있는데, Table 변경은 코드 수정을 통해서만 가능하다는 단점이 있다. 

728x90
반응형
Comments