Chapter 8. Low Power Optimization
이 chapter에서 우리는 MCU의 저전력 동작을 위한 방법론과 ARM에서 제공하는 동작모드에 대해서 배운다.
8.1. 저전력 동작을 위한 방법론
1. HW 설계
- Active low 회로와 풀업 저항을 사용해서 전력 낭비를 막는다.
- 누설전류를 최소화 하는 회로를 설계한다.
2.Clock 낮추기
- (대충 지금 고성능 MCU는 70년대 컴퓨터보다 성능 좋다는 이야기.)
따라서 우리가 제작하는 대부분의 펌웨어는 고clock이 필요하지 않은 경우가 많음.
- 미사용 중인 내부 모듈과 인터페이스를 끄는 것이 좋다.
- PLL은 전력을 크게 소모하는 대표적인 모듈이다. PLL을 조절해 CPU clock을 낮추면 전력 소모를 줄이는 데 큰 도움이 된다.
- 애플리케이션의 동작을 세부동작들로 구분한 뒤, 각 동작마다 적정한 clock을 사용하는 것도 방법이다.
3. 전압 제어
- 시스템의 operation voltage의 하한에 가까운 낮은 전압을 인가한다.
- 슈미트 트리거 (Schmitt Trigger)가 작동하지 않도록 확실한 Vdd와 GND를 인가한다.
4. Busy waiting loop를 인터럽트 기반의 sleep mode로 교체
- 무한 루프를 돌면서 특정 조건이 활성화되길 기다리는 것은 CPU time과 전력 면에서 정말 큰 손해다.
- Sleep mode와 인터럽트 트리거를 활용하면 특정 조건이 활성화될 때까지 전력 소모를 매우 크게 줄일 수 있다.
- 정 어쩔 수 없다면 타이머를 사용해서 폴링 주기라도 느리게 하는 것도 한 가지 방법이다.
8.2. ARM Cortex-M의 저전력 운영 모드
1. Normal mode
- 말그대로 일반 작동 모드다. MCU의 기본 클럭 주파수로 동작한다.
2. Sleep mode
- CPU의 clock이 비활성화되며, 주변 장치는 일반적으로 작동한다.
낮은 clock의 코프로세서가 있다면 이때 동작한다.
- CPU가 실행되지 않기 때문에 전력 상당량이 절약된다.
- 인터럽트를 통해 wake-up 된다.
3. Stop mode (=Deep Sleep mode)
- CPU와 Bus의 clock이 비활성화되며, 주변 장치도 모두 꺼진다.
- 주 전압 레귤레이터는 켜져있어서 CPU register와 RAM은 정보를 계속 유지한다.
- 인터럽트를 통해 wake-up 된다.
4. Standby mode
- CPU와 Bus 그리고 주 전압 레귤레이터가 비활성화된다.
- CPU register와 RAM 모두 정보를 잃어버린다.
- μAh 급의 아주 낮은 전력만 사용한다.
- 외부 RTC 또는 하드웨어의 신호를 통해 wake-up 된다.
- Wake-up 됐을 때 IVT의 부팅 과정부터 새롭게 시작한다.
8.3. Wake-up 간격
- 저전력 모드에서 wake-up 돼 실행을 재개하기 까지 걸리는 시간을 말한다.
- sleep mode < deep sleep mode < standby mode 순으로 길어진다.
- 이 시간은 길어도 몇 ms 정도의 짧은 시간이지만, 만약 시스템이 자주 wake-up 된다면 무시할 수 없는 수준이다.