低消費回路についての検討

TWEシリーズのスリープ時の消費を抑えるための回路についての検討事項です。

モジュールの外部回路について

最終回路が出来てからの電流抑制の検討は非常に困難です。必ず試作段階で確認するようにしてください。

 

モジュール自身を遮断する

回路例

DIOによる外部回路のスイッチ

DIOポートを電源として利用する簡易的な方法です。

 

起動制御+FETによる外部回路のスイッチ

リセットIC(IC1)による安定した起動を行い、起動後は IO の制御により外部回路の電源を投入する回路例を示します。

※ 必須ではありません。無線モジュールの半導体にも SVM というリセットICに似た仕組みがあります。以下に挙げる起動回路は、例えば、電圧降下のある電池を使用していて、より高い電圧で始動したい場合に有効です。

 

ソフトウェア上の対応

スリープ時の消費を抑えるために特別に特定のAPIを呼ぶと言った処理はありませんが、ペリフェラルやIO状態等により期待しない消費がある場合があります。原則として、ペリフェラルは停止手続きを行う、IO状態は上記のとおりプルアップ状態を正しく行う必要があります。

ToCoNet_vSleep (スリープ関数)

第3パラメータ (bRamOff) を TRUE にすると RAM の保持をしません。RAM の保持には約1uA消費します。

スリープの手続き例

スリープ手続きは、ペリフェラルの終了手続き(必須ではありません)、割り込みの停止、スリープ割り込みの設定、スリープ実行の順となります。

void vSleep(uint32 u32SleepDur_ms, bool_t bPeriodic, bool_t bDeep) {
	// ペリフェラルの終了
	vAHI_UartDisable(UART_PORT); // UART を解除してから(このコードは入っていなくても動作は同じ)

	// 他の割り込み源がある場合は停止しておく
	;

 // スリープ割り込みの設定
	vAHI_DioSetDirection(PORT_INPUT_MASK, 0); // 対象ポートを入力に設定する

	(void)u32AHI_DioInterruptStatus(); //割り込み情報のクリア
	vAHI_DioWakeEnable(PORT_INPUT_MASK, 0); // also use as DIO WAKE SOURCE
	// vAHI_DioWakeEdge(0, PORT_INPUT_MASK); // 割り込みエッジ(立下りに設定)
	vAHI_DioWakeEdge(PORT_INPUT_MASK, 0); // 割り込みエッジ(立上がりに設定)
	// vAHI_DioWakeEnable(0, PORT_INPUT_MASK); // DISABLE DIO WAKE SOURCE

	// スリープ実行
	ToCoNet_vSleep(E_AHI_WAKE_TIMER_0, u32SleepDur_ms, bPeriodic, bDeep);
}
    

※ ToCoNet_vSleep() では、スリープ前に状態遷移関数 (vProcessEvCore() など) に対して E_EVENT_TOCONET_ON_SLEEP を発生させます。状態遷移関数中からの呼び出しでは、自身がもう一度呼び出されるため、ToCoNet_vSleep() は一度だけ呼び出されるように記述します。