Power management - 省電力化 (LPC11U24)
mbed LPC11U24 の 省電力化
mbed LPC11U24 は標準状態で約56mAの電流が必要。
5mAくらいまでは抑えられそう。
カタログによるとCPUのみであれば以下の通り。
実際には、色々な回路がついているため、全体の電流をほぼゼロにすることはできない。
| 48MHz | 24MHz | ||
|---|---|---|---|
| Active | 約7mA | 約3mA | |
| Sleep | 約2.5mA | 約1mA | |
| Deep Sleep | 約356uA | ||
| Deep Power Down | 約2.5~0.2uA |
sleep の利用
単純なCPUスリープ。
割込み等ですぐに復帰する。
省電力効果: - 5 mA
#include "mbed.h"
void Sleep () {
LPC_PMU->PCON &= ~(7<<0);
SCB->SCR &= ~(1<<2);
__WFI();
}
int main() {
while (1) {
Sleep();
}
}
deepsleep の利用
ADC、USBなどのペリフェラルがOFFする。
省電力効果: - 11 mA
#include "mbed.h"
void DeepSleep () {
LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG;
LPC_PMU->PCON &= ~(7<<0);
LPC_PMU->PCON |= (1<<0);
SCB->SCR |= (1<<2);
__WFI();
}
int main() {
while (1) {
DeepSleep();
}
}
deepsleep サンプル
group GPIO interrupt, start logic
LPC11U24 ネイティブな deep sleep と wake up のサンプル。
内蔵CRクロックへ切り替え、システムOSC、PLLを停止してスリープする。
group GPIO interrupt を start logic として、スリープから目覚める。
Import programDeepSleep-m0
deep sleep and wake-up. GPIO group interrupt, start logic sample see: http://mbed.org/users/okini3939/notebook/low-power-m0/
WDT interrupt
Watch Dog Timer による wake up のサンプル。
Import programDeepSleep-m0-wdt
deep sleep and wake-up. WDT interrupt sample. see: http://mbed.org/users/okini3939/notebook/low-power-m0/
CPUクロック周波数を下げる
クロックダウンして消費電力をおさえる。
それほどCPUパワーを使わないアプリケーション向け。
省電力効果: - 4 mA (クロック 24MHz のとき(通常48MHz))
#include "mbed.h"
unsigned int setSystemFrequency(unsigned short M, unsigned short P) {
LPC_SYSCON->SYSPLLCTRL = ((P & 0x03)<<5) | (M & 0x1f);
while (!(LPC_SYSCON->SYSPLLSTAT & 0x01)); // Wait Until PLL Locked
SystemCoreClockUpdate();
return SystemCoreClock;
}
int main() {
setSystemFrequency(1, 2); // M=2, P=4, 24MHz
while(1);
}
| Main Clock | M | P |
|---|---|---|
| 48MHz | 3 | 1 |
| 36MHz | 2 | 2 |
| 24MHz | 1 | 2 |
Information
クロックを変更すると、シリアル等のボーレート、タイマーのタイミングに影響する。
シリアルであれば、クロック変更後に baud() で同じボーレートを再設定すればよい。
タイマーは attach() で指定する時間をクロックを変えた割合に合わせて変更する。
mbed interface を停止する
PCと接続してプログラミングするためのUSBポートを停止する。
「magic USB interface chip」「mbed interface」などと表記されている。
いわゆる裏側のチップ。
最新のファームウェア(rev 21164 以降)に変更が必要。(下記参照)
省電力効果: - 32 mA
#include "mbed.h"
#define USR_POWERDOWN (0x104)
int semihost_powerdown() {
uint32_t arg;
return __semihost(USR_POWERDOWN, &arg);
}
int main() {
semihost_powerdown();
while (1);
}
参考
- 上記ページのファームウェア mbedMicrocontroller_21164.if を書き込む。
- いったんmbedの電源を切り、再度電源を入れる(power-cycle)とファームウェアが書き換えられる。
- 念のため、もう一度電源をoff/onする。
- プログラムを書き込む。
- いったんUSBを停止すると、PCへ接続しても認識しなくなる。 そのときは電源を切り、リセットボタンを押したままPCとUSBを接続し、電源を入れる。
LEDを消灯する
LED点けっぱなしは、けっこうばかにならない。
PWMで減光や、間欠点灯にすることを検討する。
省電力効果: - 2 mA
データ
電源5VをVINに加えた時のデータ。
| 状態 | 電流 (mbed LPC11U24) |
|---|---|
| ノーマル | 56mA |
| スリープ | 51mA |
| ディープスリープ | 45mA |
| CPUクロック 24MHz | 52mA |
| mbed interface停止 | 24mA |
| ディープスリープ+CPU24MHz+mbed interface停止 | 18mA |
電源3.3VをVBに加えた時のデータ。
| 状態 | 電流 (mbed LPC11U24) | 電流 (LPC11U24のみ) |
|---|---|---|
| ノーマル | 18.3mA | 14.9mA |
| スリープ | 9.8mA | 4.1mA |
| ディープスリープ | 6.3mA | 0.8mA |
| パワーダウン | 5.9mA | 0.3mA |
| CPUクロック 24MHz | 13.4mA | 8.3mA |
※ mbed LPC11U24 はVBを電源にすると、mbed interfaceは停止し、Power LEDは点灯しない。
※ プルアップ・プルダウン抵抗器があるため完全には0にならず。(10kΩだと0.33mA)
Please log in to post comments.
