Power management - 省電力化 (LPC1768/LPC1769)

mbed LPC1768/LPC1769 の 省電力化

mbed LPC1768 は標準状態で約135mA、LANを使うと約200mAの電流が必要。
LANを使うシチュエーションでは、同時にACアダプター等で電源を取れるだろう。

独立してバッテリー駆動させたいとき、このままでは電流を食い過ぎる。
電流をおさえ、省電力化する方法を試す。
ソーラーパネル(太陽電池)やリチウムイオン電池などでの駆動も現実的。

全てやると全体の消費電流が 35mA になります。

LPC11U24 の場合はこちら

参考
http://mbed.org/cookbook/Power-Management

Import programPowerControl

see http://mbed.org/users/no2chem/notebook/mbed-power-controlconsumption/

sleep の利用

単純なCPUスリープ。
割込み等ですぐに復帰する。

省電力効果: - 6 mA

#include "mbed.h"
#include "PowerControl/PowerControl.h"

int main() {
    while (1) {

        Sleep();

    }
}

参考

CPUクロック周波数を下げる

クロックダウンして消費電力をおさえる。
それほどCPUパワーを使わないアプリケーション向け。

PLL0 の出力 Fcoo=288MHz になっているので、CPU Clock Divider によりCPUクロック(CCLK)を決定する。

//    LPC_SC->CCLKCFG = 2; // 96MHz
    LPC_SC->CCLKCFG = 5; // 48MHz
//    LPC_SC->CCLKCFG = 7; // 36MHz

    SystemCoreClockUpdate();
    printf("%d Hz\r\n", SystemCoreClock);
Main ClockMN
120MHz151
96MHz121
72MHz91
48MHz61

Information

クロックを変更すると、シリアル等のボーレート、タイマーのタイミングに影響する。
シリアルであれば、クロック変更後に baud() で同じボーレートを再設定すればよい。

タイマー関係は us_ticker ので使用されている値を再設定する。

    LPC_TIM3->PR = (SystemCoreClock / 4 / 1000000) - 1; // LPC1768

参考

CPU内蔵 周辺デバイスの停止

タイマーやシリアル、USB、LAN、CAN等のCPUに内蔵されている機能を個別に停止する。

省電力効果: - 5 mA (I/O以外全部停止)

#include "mbed.h"
#include "PowerControl.h"

int main() {

    Peripheral_PowerDown(0xFFFF7FFF);

    while (1);
}

参考

Ethernet PHY チップ停止

Ethernet (LAN) のハードウェア層の制御をするPHYチップ (DP83848C) を停止する。
ネットワークケーブルも接続しない。

省電力効果: - 40mA (ネットワークケーブル未接続の状態から)

#include "mbed.h"
#include "EthernetPowerControl.h"

int main() {

    PHY_PowerDown();

    while (1);
}

LPCXpresso LPC1769 CMSIS-DAP の場合

PHYが LAN8720A のとき

#include "ethernet_api.h"
  :
int eth_phy_write(unsigned int PhyReg, unsigned short Data) {
    unsigned int timeOut;

    LPC_EMAC->MADR = 0x0100 | PhyReg;
    LPC_EMAC->MWTD = Data;
    for(timeOut = 0; timeOut < 0x00050000; timeOut++) {
        if((LPC_EMAC->MIND & (1<<0)) == 0) { // busy?
            return 0;
        }
    }
    return -1;
}

int main () {
    :
    if (!ethernet_init()) {
        eth_phy_write(0x00, (1<<11)); // LAN8720A Power Down
        ethernet_free();
    }

参考

mbed interface を停止する

PCと接続してプログラミングするためのUSBポートを停止する。
「magic USB interface chip」「mbed interface」などと表記されている。 いわゆる裏側のチップ。

あらかじめファームウェアの変更が必要。(下記参照)
最新のファームウェア(rev 16457 以降)に変更が必要。(下記参照)

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

LEDを消灯する

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

省電力効果: - 2 mA

電源電圧を下げる

mbed は基板上のシリーズレギュレーター(3端子レギュレーター)で3.3Vを作って動いている。
VINに加える5Vとの差は熱に変わるだけでもったいない。

VINへ4Vを供給する。

省電力効果: - 4 mA (元の電流が低ければ差は小さくなる 0~-4mA)

よく考えると、シリーズレギュレーターは抵抗器とみなすことができるので、電流値がさほど変わるわけはない。。。
レギュレーターのドロップ電圧が1Vくらいあるので、CPUは3Vくらいで動いてるかも。

データ

電源5VをVINに加えた時のデータ。
LANのトランス内臓コネクタのみ接続。(ケーブル未接続)

状態電流 (mbed LPC1768)電流 (DDKARM10 LPC1769)
ノーマル134mA102mA
スリープ128mA81mA
CPUクロック 48MHz112mA
周辺デバイス停止129mA80mA
Ethernet PHY停止94mA62mA
mbed interface停止107mA-
PHYとmbed interface停止64mA-
48MHz、PHY・mbed interface・周辺デバイス停止・スリープ35mA27mA
電源電圧を下げる130mA-

※正確には、電流は流れるもので、消費するのは電力です・・・

※ LEDの電流もけっこうばかにならない。 Power LED 約2mA


戻る (back)


1 comment on Power management - 省電力化 (LPC1768/LPC1769):

27 May 2011

これはいいっす。mbedを使ってandroidアクセサリを作りたいので、省電力出来れば出来るほどうれしいっす。 情報ありがとうございます

Please log in to post comments.