省電力メモ
スリープ中のモジュール停止について
sd_app_evt_wait()でスリープ状態になっても、約1.4mA程度の平均電流が常時流れてしまう。Beaconのようなスリープ時にUARTを受信する必要がない場合は、UARTモジュールの電力を0になるように、次の1行をmain関数に加える。 NRF_UART0->POWER = 0; ただし、宣言するとUARTが停止するので、TeraTermなどのターミナルからログが出なくなりますので注意が必要です。
※開発ボードを使えば接続しているUSBケーブル1本のみでUARTが出力できます。
内部発振と外部発振
nRF51822には、32kHz(LFCLK)と16MHz(HFCLK)の発振回路が内臓されている。スリープ時には遅い32KHzが使われ省電力になる。内部の発振回路(RC)は、コンデンサと抵抗で構成され、温度に影響されやすく精度が落ちる。モジュール品は、16MHzor32MHzの外部発振子が装備され、オプションとして32kHzの発振子が設ける事ができる。外部発振子はどちらも精度が高い。それゆえ、部品点数が増えコストは高くなる。
内部発振使用(RC)の場合は、いずれも精度は250ppmとなる。キャリブレーションが行われ外部発振と比べて消費電力がわずかに高くなる。また、温度によるドリフト対策(ズレ)されたものが選べる。温度変化があると補正が行われる。一方、外部発振(XTAL)を使用する場合は、実装されている水晶発振子のデータシートを元に選択する。精度が最大で20ppmとなりますが、非常に精度が高くなりわずかにRCと比べ省電力となる。また、水晶発振子16MHzのみでの実行でき部品が節約できるが(水晶発振子32KHzをカット)非常に消費電力が高くなる(約2から3倍)。
よって1.4.10SoftDevice,1.4.11iBeaconのコードをボードによって適切な設定をしなくてはいけない。
SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION, NULL);
NRF_CLOCK_LFCLKSRCS | 詳細 |
---|---|
NRF_CLOCK_LFCLKSRC_SYNTH_250_PPM | 外部16MHzのみ 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_XTAL_250_PPM | 外部32KHzあり周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_XTAL_150_PPM | 周波数精度150ppm |
NRF_CLOCK_LFCLKSRC_XTAL_100_PPM | 周波数精度100ppm |
NRF_CLOCK_LFCLKSRC_XTAL_75_PPM | 周波数精度75ppm |
NRF_CLOCK_LFCLKSRC_XTAL_50_PPM | 周波数精度50ppm |
NRF_CLOCK_LFCLKSRC_XTAL_30_PPM | 周波数精度30ppm |
NRF_CLOCK_LFCLKSRC_XTAL_20_PPM | 周波数精度20ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_250MS_CALIBRATION | 内部発振回路 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_500MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_1000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_2000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_2000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_4000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_8000MS_CALIBRATION | 周波数精度250ppm |
NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_16000MS_CALIBRATION | 周波数精度250ppm |