Power management - 省電力化 (LPC11U24)

mbed LPC11U24 の 省電力化

mbed LPC11U24 は標準状態で約56mAの電流が必要。
5mAくらいまでは抑えられそう。

カタログによるとCPUのみであれば以下の通り。
実際には、色々な回路がついているため、全体の電流をほぼゼロにすることはできない。

48MHz24MHz
Active約7mA約3mA
Sleep約2.5mA約1mA
Deep Sleep約356uA
Deep Power Down約2.5~0.2uA

LPC1768 の場合はこちら

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 ClockMP
48MHz31
36MHz22
24MHz12

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, &amp;arg);
}

int main() {

    semihost_powerdown();

    while (1);
}

参考

  1. 上記ページのファームウェア mbedMicrocontroller_21164.if を書き込む。
  2. いったんmbedの電源を切り、再度電源を入れる(power-cycle)とファームウェアが書き換えられる。
  3. 念のため、もう一度電源をoff/onする。
  4. プログラムを書き込む。
  5. いったんUSBを停止すると、PCへ接続しても認識しなくなる。 そのときは電源を切り、リセットボタンを押したままPCとUSBを接続し、電源を入れる。

LEDを消灯する

LED点けっぱなしは、けっこうばかにならない。
PWMで減光や、間欠点灯にすることを検討する。

省電力効果: - 2 mA

データ

電源5VをVINに加えた時のデータ。

状態電流 (mbed LPC11U24)
ノーマル56mA
スリープ51mA
ディープスリープ45mA
CPUクロック 24MHz52mA
mbed interface停止24mA
ディープスリープ+CPU24MHz+mbed interface停止18mA

電源3.3VをVBに加えた時のデータ。

状態電流 (mbed LPC11U24)電流 (LPC11U24のみ)
ノーマル18.3mA14.9mA
スリープ9.8mA4.1mA
ディープスリープ6.3mA0.8mA
パワーダウン5.9mA0.3mA
CPUクロック 24MHz13.4mA8.3mA

※ mbed LPC11U24 はVBを電源にすると、mbed interfaceは停止し、Power LEDは点灯しない。
※ プルアップ・プルダウン抵抗器があるため完全には0にならず。(10kΩだと0.33mA)


戻る (back)


Please log in to post comments.