배터리 셀은 개체 차이가 있다. 같은 배치에서 나온 셀도 용량이 조금씩 다르다.

그래서 충방전 반복하면 셀 간 전압 편차가 벌어진다. 이걸 맞춰주는 게 밸런싱.


패시브 vs 액티브

밸런싱 방식은 두 가지:

패시브: 높은 셀을 저항으로 방전 (에너지 버림) 액티브: 높은 셀 에너지를 낮은 셀로 이동 (효율적)

AD7280A는 패시브 방식 지원. 셀당 내부 스위치가 있다.

액티브는 외부 회로가 복잡하고 비싸서, 보통 패시브로 충분하다.


내부 구조

Cell+  ──┬──────────────── Cell Voltage Input
         │
         ├──[내부 스위치]──┬── CB 핀 (밸런싱 출력)
         │                │
Cell-  ──┴────────────────┴── 

CB 핀에 외부 저항 연결하면 된다. 스위치 ON 하면 셀이 저항으로 방전.

Cell  ──┬──[33Ω]──┐
        │         │
       [SW]       │
        │         │
        └─────────┘

방전 전류 계산

저항값으로 방전 전류 결정:

I = V / R
3.3V / 33Ω = 100mA

100mA면 무난하다. 너무 크면 발열, 너무 작으면 밸런싱 느림.

전력도 계산:

P = V² / R = 3.3² / 33 = 0.33W

저항 정격이 0.5W 이상이어야 안전하다. 나는 1W짜리 사용.


밸런싱 ON/OFF

CELL_BALANCE 레지스터(0x14)로 제어:

void AD7280A_SetBalance(uint8_t device, uint8_t cell_mask) {
    AD7280A_Write(device, AD7280A_CELL_BAL, cell_mask);
}

// Cell 1, 3 밸런싱 ON
AD7280A_SetBalance(0, 0x05);  // 0b00000101

// 밸런싱 OFF
AD7280A_SetBalance(0, 0x00);

비트 0이 Cell 1, 비트 5가 Cell 6.


밸런싱 타이밍

계속 밸런싱하면 안 된다. 셀 전압 측정이 부정확해진다.

방전 전류 때문에 전압 강하가 생겨서 실제보다 낮게 읽힌다.

밸런싱 ON 상태에서 측정:
실제 전압: 3.350V
측정 전압: 3.320V (30mV 낮음)

밸런싱 OFF → 안정화 대기 → 측정 → 밸런싱 ON

void BMS_MeasureAndBalance(void) {
    // 밸런싱 OFF
    for (int i = 0; i < 4; i++) {
        AD7280A_SetBalance(i, 0x00);
    }
    
    HAL_Delay(100);  // 안정화 대기
    
    // 전압 측정
    BMS_ReadAllCellVoltages();
    
    // 밸런싱 결정 및 ON
    BMS_UpdateBalancing();
}

첫 테스트

12셀 연결

12셀 연결해서 테스트.

측정 결과:
Cell 0: 3.351V (max)
Cell 1: 3.320V
Cell 2: 3.315V
Cell 3: 3.348V
Cell 4: 3.312V (min)
Cell 5: 3.325V

Cell 0이 제일 높으니까 Cell 0만 밸런싱.

AD7280A_SetBalance(0, 0x01);  // Cell 1(index 0) ON

30분 후:

Cell 0: 3.325V (39mV 감소)
Cell 1: 3.320V
...

동작한다!


발열 문제

33Ω에서 0.33W 발열. 저항이 뜨거워진다.

24셀 전부 밸런싱하면 0.33W × 24 = 8W. 보드가 뜨거워진다.

체커보드 패턴으로 분산:

// 홀수 셀만 먼저
AD7280A_SetBalance(0, 0x15);  // Cell 1, 3, 5

// 1초 후 짝수 셀
AD7280A_SetBalance(0, 0x2A);  // Cell 2, 4, 6

동시에 전부 켜지 않고 번갈아가며. 발열 분산.


정리

  • 패시브 밸런싱: 저항으로 방전
  • 33Ω → 100mA, 0.33W
  • 밸런싱 OFF 후 측정 (전압 강하 방지)
  • 발열 관리: 체커보드 패턴

다음은 밸런싱 알고리즘. 언제 어떤 셀을 밸런싱할지 결정하는 로직.

#11 - 밸런싱 알고리즘