Chapter 09

전력: 코인 전지로 몇 년

분실물 태그 상자에는 “배터리 1년”, 도어 센서에는 “3년”이라고 적혀 있다. 이 기기들의 전지는 500원짜리 동전만 한 CR2032 하나, 용량 약 220 mAh다. 무선부가 송신할 때 쓰는 전류는 수 mA이니, 계속 켜 두면 이틀도 못 간다. 그런데도 몇 년을 가는 이유는 단 하나, 거의 항상 자고 있기 때문이다. 이 장에서는 연결 이벤트 한 번에 전류가 어떻게 오르내리는지 그려 보고, 그것을 평균 내어 배터리 수명을 계산한다. 그리고 수명을 늘리는 손잡이(간격, 지연, PHY, 송신 전력)와, 간격을 무작정 늘릴 수 없게 만드는 숨은 비용(창 넓히기)을 찾는다.

전류 파형: 몇 µA로 자다가 몇 mA로 깨어나기

LE 칩의 전류를 오실로스코프로 보면 거의 평평한 바닥에 가끔 뾰족한 산이 솟는 모양이다. 바닥은 수면 전류다. 시계(32.768 kHz 수정 발진기)와 메모리 유지에만 1~3 µA 정도를 쓴다. 산은 연결 이벤트나 광고 이벤트다. 산 하나를 쪼개 보면 이렇다.

  1. 깨어나기: 고속 수정 발진기(32 MHz 등)를 켜고 안정되기를 기다린다. 수백 µs, 수 mA보다 작은 전류.
  2. 무선부 준비(ramp-up): 주파수 합성기를 채널에 맞춘다. 수십 µs.
  3. 수신 창: 상대의 패킷을 기다린다. 시계 오차만큼 일찍 열어야 하므로(아래 창 넓히기) 실제 패킷보다 길다. 약 5 mA.
  4. 송신: 패킷 길이만큼. 0 dBm에서 약 5 mA, +8 dBm이면 10 mA 넘게.
  5. 뒷정리: CPU가 받은 데이터를 처리하고 다시 잔다.

배터리에 중요한 것은 산의 넓이, 즉 전류 × 시간 = 전하량(µC = µA·s)이다. 평균 전류는 이 넓이를 간격으로 나누고 수면 전류를 더한 것이다.

평균 전류 ≈ I수면 + (이벤트 한 번의 전하량) ÷ (이벤트 간격)    수명 ≈ 전지 용량 ÷ 평균 전류
예: 이벤트 한 번에 15 µC, 간격 1 s → 15 µA, 수면 2 µA를 더해 17 µA. CR2032 220 mAh ÷ 0.017 mA ≈ 12,900시간 ≈ 1.5년. 간격을 100 ms로 줄이면 152 µA → 약 2개월.
약속 시간에만 깨는 손님

카페 구석의 손님이 대부분 졸다가, 약속한 시각에만 잠깐 깨서 친구와 몇 마디 나누고 다시 존다. 하루 피곤함은 깨어 있는 횟수와 시간이 거의 정한다. 블루투스 기기의 평균 전류도 같다. µA로 자다가 이벤트마다 몇 ms 동안 mA로 깬다. 그래서 간격과 깨어 있는 시간을 줄이는 것이 수명의 열쇠다.

SIMULATOR

연결 이벤트 한 번의 전류 파형 (페리페럴 쪽)

PHY (3장)
센트럴 수면 시계 정확도
깨어 있는 시간—
이벤트 한 번 전하량—
창 넓히기 (한쪽)—
그중 수신 대기 비율—
회색 = 발진기 기동, 청록 = 수신(대기 포함), 파랑 = 송신, 연한 회색 = CPU 처리. 해볼 것: ① “지난 동기 이후 시간”을 4 s 쪽으로 늘리고 시계를 ±500 ppm으로 바꿔 보자. 패킷은 그대로인데 수신 창이 2 ms 넘게 길어져 이벤트 전하량의 대부분을 차지한다. ② 같은 데이터를 2M으로 보내면 송·수신 시간이 반으로 줄지만, 고정 비용(기동, 처리) 때문에 전하량은 반까지 줄지 않는다. 모델 수치(3 V, 요즘 저전력 칩의 대표값을 단순화): 기동 150 µs × 2 mA, 수신 5.4 mA, 송신 −20/−8/−4/0/+4/+8 dBm에서 2.9/3.6/4.3/5.0/7.0/11 mA, T_IFS 150 µs 동안은 수신 전류, 처리 200 µs × 2.5 mA. 센트럴은 빈 PDU, 페리페럴이 데이터를 보낸다고 가정.

숨은 비용: 시계 오차와 창 넓히기

페리페럴은 다음 앵커 포인트에 맞춰 깨어나야 한다. 그런데 두 기기의 수면 시계는 조금씩 다르게 간다. 사양은 수면 시계의 오차를 ±500 ppm 이하(1초에 최대 0.5 ms), 무선 활동 중의 활성 시계를 ±50 ppm 이하로 정한다. 마지막으로 동기를 맞춘 뒤 시간이 오래 지날수록 상대가 언제 말할지 불확실해지므로, 수신기는 그만큼 일찍 깨어나 늦게까지 듣는다. 이것이 창 넓히기(window widening)다.

창 넓히기 = (상대 시계 오차 ppm ÷ 10⁶) × (마지막 동기 이후 시간) + 16 µs  (+ 내 시계 오차분)
사양의 예: 연결 간격 2 s, 센트럴 수면 시계 500 ppm이면 앵커 포인트 앞뒤로 각각 1 ms + 16 µs를 더 들어야 한다. 실제 패킷(빈 PDU 80 µs)보다 수신 대기가 25배 길다.
⚓ 마지막 동기 연결 간격 2 s (그림은 줄여 그림) 잠: 수면 시계로 시간을 잰다 (±500 ppm) 수신 창 = 2 × (1 ms + 16 µs) + 패킷 ⚓ 예상 앵커 포인트 1 ms + 16 µs 1 ms + 16 µs 실제 패킷 (빈 PDU 80 µs) 창 넓히기 = (상대 시계 오차 ppm ÷ 10⁶) × (마지막 동기 이후 시간) + 16 µs
그림 9-1. 창 넓히기. 페리페럴은 마지막으로 동기를 맞춘 뒤 수면 시계로 다음 앵커 포인트를 기다린다. 상대 시계가 500 ppm까지 틀릴 수 있으므로, 2초 뒤에는 상대가 앞뒤로 1 ms까지 어긋나 말할 수 있다. 그래서 그만큼 일찍 깨어나 늦게까지 듣는다. 실제 패킷은 80 µs인데 수신 창은 2 ms가 넘는다.

활성 시계 ±50 ppm, 수면 시계 ±500 ppm, 2 s·500 ppm 예: [Vol 6] Part B §4.2.1·§4.2.2 · 창 넓히기 식(J = 수면 시계 16 µs, 활성 시계 2 µs): §4.2.4 · 수면 시계 정확도 갱신 절차: §5.1.14

그래서 페리페럴 지연이나 연결 간격을 아주 크게 하면 이벤트 수는 줄지만, 이벤트마다 수신 창이 길어진다. 저렴한 RC 발진기(수백 ppm) 대신 32.768 kHz 수정 발진기(±20~50 ppm)를 다는 이유가 여기에 있다. 몇십 원짜리 부품 하나가 긴 간격에서 배터리 수명을 크게 바꾼다. CONNECT_IND의 SCA 필드와 5.1의 수면 시계 정확도 갱신 절차는 이 오차를 상대에게 알려 창을 필요한 만큼만 넓히게 하는 장치다.

배터리 수명 계산기: 광고와 연결

이제 이벤트 하나의 전하량을 시간에 대해 평균 내 보자. 기기의 일은 크게 둘이다. 연결 없이 광고만 하는 것(비콘, 태그), 그리고 연결을 유지하며 가끔 데이터를 보내는 것(센서, 시계).

CALCULATOR

CR2032 하나로 얼마나 갈까

모드
평균 전류—
그중 수면 몫—
추정 수명—
그래프: 간격(로그 눈금)에 따른 추정 수명. 점선은 수면 전류만 쓸 때의 한계다. 해볼 것: ① 광고 간격을 100 ms → 1 s로 늘리면 수명이 거의 10배가 되다가, 수 초를 넘으면 곡선이 눕는다. 이제 수면 전류가 지배하기 때문이다. 이 영역에서는 간격보다 수면 전류를 줄이는 것이 중요하다. ② 연결 모드에서 지연을 올리면 간격을 늘린 것과 비슷한 효과지만, 반응 속도(6장)는 유지된다. 가정: 광고는 레거시 연결 가능 광고(31바이트, 세 채널, 채널마다 송신 후 수신 대기), 연결은 매 깨어남마다 빈 PDU를 주고받음(20바이트 알림이 있을 때의 차이는 위 파형 계산기 참고), 시계 50 ppm. 전지 용량은 고부하 펄스와 온도, 자가 방전을 감안해 정격 220 mAh보다 낮게 잡았다. 실제 수명은 측정으로 확인해야 한다.
기기 (예)하는 일대표 설정평균 전류 감각
분실물 태그광고만광고 1~2 s, 0 dBm수 µA ~ 10 µA
문 열림 센서평소 잠, 이벤트 때 광고 또는 연결가끔 광고수 µA
심박계연결 + 1초마다 알림간격 수십~수백 ms수십 µA
무선 마우스움직일 때 짧은 간격간격 7.5~15 ms수백 µA (AAA 전지)
무선 이어폰연속 오디오 스트림10장수 mA (충전식)
예측해 보기

2초마다 광고하는 태그의 평균 전류가 약 7 µA이고 그중 수면 전류가 2 µA다. 광고 간격을 4초로 두 배 늘리면 수명은?

계산기에서 광고 모드, 간격 2 s와 4 s를 비교해 보자.

평균 = 2 + 5 = 7 µA → 2 + 2.5 = 4.5 µA. 수명은 7 / 4.5 ≈ 1.6배. 간격을 늘릴수록 수면 전류의 비중이 커져 효과가 줄어든다(수확 체감).

수명을 늘리는 손잡이들

LE 전력 제어 (5.2)

5.2의 LE 전력 제어(LE Power Control)는 연결된 두 기기가 서로의 송신 전력을 조절하게 한다. 수신 쪽이 RSSI를 보고 “신호가 충분히 세니 줄여도 된다” 또는 “더 올려 달라”고 요청한다(Power Control Request 절차). 가까이 있는 이어폰과 휴대폰은 송신 전력을 낮춰 배터리를 아끼고 주변 간섭도 줄인다. 반대로 너무 센 신호는 수신기를 포화시켜 오히려 연결을 깨뜨릴 수 있는데, 사양은 이 경우에도 전력 제어를 쓰라고 권한다. 경로 손실이 정해진 구간을 넘나들면 호스트에 알려 주는 경로 손실 모니터링도 함께 들어왔다.

LE 전력 제어와 수신기 포화 주의: [Vol 6] Part A §3 · Power Control Request / Power Change Indication 절차: [Vol 6] Part B §5.1.17·§5.1.18 · 5.2 새 기능: [Vol 1] Part C §11.1

코인 전지의 함정

CR2032 같은 리튬 코인 전지는 내부 저항이 커서, 송신 순간의 10 mA 펄스를 그대로 뽑으면 전압이 크게 떨어지고 쓸 수 있는 용량도 줄어든다. 그래서 전지 옆에 큰 커패시터를 달아 펄스를 받쳐 주고, 칩의 DC-DC 변환기를 켜서 같은 일에 드는 전류 자체를 줄인다. 상자의 “3년”은 이런 설계와 실제 측정에서 나온 숫자다.

핵심 정리

  1. LE 기기는 수 µA로 자다가 수 mA로 짧게 깨어난다. 배터리에 중요한 것은 이벤트 한 번의 전하량(전류 × 시간)이다.
  2. 평균 전류 ≈ 수면 전류 + 이벤트 전하 ÷ 간격, 수명 ≈ 용량 ÷ 평균 전류. 간격을 늘리면 수명이 늘지만 수면 전류가 바닥을 정한다(수확 체감).
  3. 사양의 시계 오차 한도: 활성 ±50 ppm, 수면 ±500 ppm. 마지막 동기 이후 시간이 길수록 창 넓히기로 수신 대기가 길어진다(2 s·500 ppm → 앞뒤 각 약 1 ms).
  4. 고정 비용(기동·창 넓히기·처리)이 이벤트마다 붙으므로 데이터는 묶어서 보내는 편이 싸다. 2M은 큰 데이터에서, Coded는 거리가 필요할 때만.
  5. 5.2의 LE 전력 제어는 RSSI를 보고 상대의 송신 전력을 조절해 배터리와 간섭, 수신기 포화를 함께 줄인다.

확인 퀴즈

이벤트 한 번에 30 µC를 쓰고 500 ms마다 깨어나며 수면 전류가 2 µA인 기기의 평균 전류는?

30 µC ÷ 0.5 s = 60 µA, 수면 2 µA를 더해 62 µA. 220 mAh라면 약 3,500시간, 5개월이다.

연결 간격 1 s, 페리페럴 지연 3, 센트럴 수면 시계 ±500 ppm일 때 페리페럴의 창 넓히기(센트럴 시계분, 한쪽)는 대략?

마지막 동기 이후 4 s(지연 3이면 네 번째 이벤트에 깨어남) × 500 ppm = 2 ms, 여기에 16 µs를 더한다.

수정 발진기 대신 정확도 ±500 ppm의 RC 발진기를 수면 시계로 쓰면 가장 손해를 보는 경우는?

창 넓히기는 마지막 동기 이후 시간에 비례한다. 짧은 간격에서는 µs 단위라 무시되지만, 수 초 간격에서는 ms 단위의 수신 대기가 된다.

1초마다 2바이트 측정값을 알림으로 보내던 센서를, 10초마다 20바이트를 한 번에 보내도록 바꿨다. 무엇이 줄어드나?

데이터 총량은 같지만 깨어나는 횟수가 1/10이다. 20바이트를 더 보내는 시간(1M에서 160 µs)은 고정 비용에 비해 작다. 다만 실시간성은 줄어든다.

5.2의 LE 전력 제어가 하는 일이 아닌 것은?

수면 시계 정확도는 하드웨어가 정하고, 그 값을 알리는 것은 수면 시계 정확도 갱신 절차(§5.1.14)다.