셀 전압이 읽히긴 하는데, IC가 제대로 동작하는 건지 확인이 필요했다.
AD7280A에 Self-test 기능이 있다.
Self-test란
내부 기준 전압으로 ADC를 테스트한다.
- 셀 입력을 내부 기준 전압에 연결
- 변환 실행
- 결과가 예상 범위 내인지 확인
외부 연결 상태와 무관하게 ADC 자체가 정상인지 확인할 수 있다.
Self-test 실행
CTRL_HB에서 Self-test 모드 설정:
void AD7280A_SelfTest(uint16_t *results) {
// Self-test 모드 설정 + 변환 시작
uint32_t frame = AD7280A_BuildWriteFrame(
0x1F, // 브로드캐스트
AD7280A_CTRL_HB,
0x23 // Self-test 모드 + 변환 시작
);
AD7280A_Transfer(frame);
HAL_Delay(2); // 변환 대기
// 결과 읽기
for (int i = 0; i < 6; i++) {
results[i] = AD7280A_ReadCellVoltage(0, i);
}
}
예상 결과
Self-test 시 내부 기준 전압 값이 읽혀야 한다.
데이터시트에 따르면:
Self-test 1: 약 1V
Self-test 2: 약 2V
Self-test 3: 약 3V
Self-test 4: 약 4V
각 셀 채널마다 다른 기준 전압이 연결된다.
테스트 결과 검증
bool AD7280A_VerifySelfTest(uint16_t *results) {
// 예상 범위 (±100mV 허용)
const uint16_t expected[] = {
102, // ~1V → raw 약 0
1126, // ~2.1V → raw 약 1126
2150, // ~3.1V → raw 약 2150
3174, // ~4.1V → raw 약 3174
3174, // Cell 5도 4V 근처
3174 // Cell 6도 4V 근처
};
for (int i = 0; i < 6; i++) {
int diff = abs(results[i] - expected[i]);
if (diff > 100) { // 100 LSB 허용
return false;
}
}
return true;
}
실제로 돌려보니까 조금씩 다르더라. IC 개체 차이가 있는 것 같다.
Open Wire 검출
Self-test 외에 Open Wire 검출 기능도 있다.
셀 연결선이 끊어졌는지 확인하는 기능. 풀업/풀다운 전류를 흘려서 비정상적인 전압이 읽히면 단선.
bool AD7280A_CheckOpenWire(uint8_t device) {
// Pull-up 테스트
AD7280A_Write(device, AD7280A_CTRL_HB, 0x43); // Open wire detect
HAL_Delay(1);
uint16_t pu_result = AD7280A_ReadCellVoltage(device, 0);
// Pull-down 테스트
AD7280A_Write(device, AD7280A_CTRL_HB, 0x63);
HAL_Delay(1);
uint16_t pd_result = AD7280A_ReadCellVoltage(device, 0);
// 비정상적인 차이가 있으면 단선
if (abs(pu_result - pd_result) > 500) {
return true; // Open wire detected
}
return false;
}
이건 현장에서 유용했다. 셀 탭 연결 불량 찾을 때.
부팅 시 진단
시스템 부팅할 때 Self-test 돌려서 IC 상태 확인:
void BMS_Init(void) {
AD7280A_Init();
// Self-test
uint16_t test_results[6];
AD7280A_SelfTest(test_results);
if (!AD7280A_VerifySelfTest(test_results)) {
Error_Handler(); // IC 이상
}
// 정상이면 계속
printf("AD7280A Self-test OK\n");
}
정리
- Self-test: 내부 기준 전압으로 ADC 확인
- Open Wire: 셀 연결선 단선 검출
- 부팅 시 한 번씩 돌려주면 좋다
IC가 살아있는지 확인하는 용도. 실제 셀 전압 정확도는 캘리브레이션이 필요하다.
다음은 온도 측정. AUX ADC로 NTC 읽기.