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.