開発ツールを使用したMCUでの消費電力の最適化

著者 ヨーロッパ人編集者

DigiKeyのヨーロッパ担当編集者の提供

モノのインターネット(IoT)を構成する数多くのデバイスに共通する課題は、低消費電力が要求されることです。この要求を満たすには、さまざまなレベルでの最適化を総体的な戦略で考える必要があります。効果的な設計を実現するには、低消費電力コンポーネントを選択するだけでなく、最も効率的な方法でコンポーネントを連携させることで、使用可能なバッテリ容量を節約するソフトウェアが不可欠です。ハードウェアとソフトウェアの実装を微妙に変更するだけで、総合的なエネルギー使用量を大きく変えることができます。

ほとんどのIoTデバイスの中心にあるのは、高いエネルギー効率を目指して設計されたマイクロコントローラ(MCU)です。標準的な低消費電力MCUには、コアプロセッサに代わってI/Oおよび基本的システム機能を制御するインテリジェントなペリフェラルが多数搭載されています。多くのシリアルポート(UART)は自律的にデータを送受信できるうえに、プロセッサコアで稼働するソフトウェアは、いったんデータを受信したら、該当するバッファから数バイト送信するときしか必要ありません。さらに、Silicon LabsGecko EFM32シリーズ MCUなどのデバイスで使用できるリンクDMA転送では、この対話処理をさらに最小化できます。この場合、プロセッサコアの起動が必要になるのは、メッセージ全体を受信した後でメモリの内容を確認するときだけです。

ペリフェラルでI/Oを管理すると、MCUはほとんどの時間スリープモードになり、多数の構成部品が停止されて電力を消費しません。デューティサイクルは、アクティブモードになる時間とスリープモードになる時間の比率を示します。バッテリ駆動のIoTアプリケーションにとって低デューティサイクルであることは重要です。スリープモードで消費される電力はわずか数マイクロアンペアですが、アクティブモードでは通常、それより何桁も大きい電力が消費されます。

デューティサイクルが低い場合、プロセッサコアは大半の時間をスリープ状態で過ごし、起動するのは、必要に応じたデータ収集または通信のときだけになります。低デューティサイクル戦略を実践するための鍵は、ソフトウェアがハードウェアと相互作用する方法を理解することです。MCUを長時間稼働させる機能を識別し、可能であれば置き換えるか、作り直す必要があります。このような識別には完成したハードウェアのテストを利用するため、従来、これを開発フェーズの早期に達成することは困難でした。

Silicon LabsのPearl Geckoスターターキットおよび同等の評価ボードには、Advanced Energy Monitor(AEM)機能が搭載されています。同社のSimplicity Studioに含まれる高度なツールと一緒に使用すると、ソフトウェア開発サイクル中に、アプリケーションに必要な電力に関する貴重な見通しが得られます。この情報には、スリープモードによる効果だけでなく、関数レベルの最適化も含まれます。

Silicon LabsのPearl GeckoスターターキットのAEMモジュールの図

図1:Pearl GeckoスターターキットボードのAEMモジュール実装図

AEM機能は、USBバスから電力を消費するオンボードLDOから流れる電流を監視します。USBは通常、デバッグとターゲットMCUへのソフトウェアのダウンロードをサポートするために使用されます。図1に示したとおり、オンボードスイッチがバッテリ駆動モードに設定されると、電流は測定できません。

パワースイッチがAEMモードに設定されると、ボードコントローラによって収集されたデータがSimplicity Studioツールにリレーされるので、エネルギープロファイラを使用してデータを表示できます。AEMは、114dBのダイナミックレンジで、0.1μA~50mAの幅広い電流を測定します。このため、異なるスリープモードの状態だけでなく、アクティブモードでの消費電力の影響を高精度で分析できます。

このように広い範囲の電流を正確に測定するために、電流センスアンプとともにデュアルゲインステージを利用します。このアンプが低い直列抵抗を介した電圧降下を測定した後で、ゲインステージが2種類のゲイン設定を使用してこの電圧を増幅することで、2つの電流範囲を取得します。これら2つの範囲は、おおよそ250μAで遷移します。サンプルがエクスポートされる前に、評価ボードコントローラ内でデジタルフィルタリングと平均化が実施されます。

AEMがタイマ間隔ごとに電流をサンプリングして変換し、電圧およびタイミング情報とともにUSB経由で開発ツールに送信すると、1秒あたり最大6250の電流サンプルが生成されます。

エネルギープロファイリングでは、相関性を確認する目的でトレースデータを利用するため、MCUで実行されるコードをコンパイルして、Debug With Arbitrary Record Format(DWARF)を送信する文を含める必要があります。該当するソースファイル、関数、MCUで実行されるCコード行を見つけるため、デバッグデータを使用して、デバッガに送信されたプログラムカウンタ(PC)サンプルにオブジェクトファイルが関連付けられます。これにより、電力測定値が個々の機能およびタスクに結び付けられます。

Simplicity Studioに含まれるプロファイリングツールを使用するとき、ユーザーは3つのウィンドウにアクセスできます。各ウィンドウは、関連するコード、電流消費グラフ、関数レベルビューを表示します。電流グラフで任意の箇所をクリックすると、コードリストウィンドウ内のコード部分がハイライトされます。これは、指定されたその瞬間に、表示された消費電流レベルで、実行される実際のコード部分に対応しています。関数リストは、各関数によって消費される合計エネルギーと、アプリケーション全体で測定された合計値に対する割合を表示します。ユーザーが後でプロファイリング情報を分析する場合、データをファイルにエクスポートしておき、インポートしてから分析することができます。

Simplicity Studioで使用できる電力監視ツールの使用法を説明するため、UARTポート経由で通信するMCUの例を確認してみましょう。後続の処理のために、GeckoのLEUARTバッファからメインメモリにデータを移動させる方法として非常に簡単なのは、定期的にペリフェラルをポーリングする方法です。データが使用可能である場合、ステータスフラグ(LEUART_STATUS_RXDATAV)にデータを取得可能であることが示されます。

長時間の高消費電力のイメージ

図2:シリアルポートのポーリングによる長時間の高消費電力

アクティブなプロセッサコアでコードを実行すると、一定して数ミリアアンペアの電流を消費します。グラフをクリックすると、ドレインの原因になっている関数をハイライトできます。エネルギーを節約するためには、MCUで、使用可能なデータをチェックするためのポーリングを回避する必要があります。そのため、データをフェッチしていないときはプロセッサをスリープ状態にし、バッファデータが使用可能になったら、割り込みを使用してプロセッサを起動します。スリープ中は消費電流が大幅に低下し、割り込みサービスルーチン(ISR)の実行中はスパイクが発生します。エネルギープロファイラウィンドウでISRを特定すると、これを確認できます。

割り込みサービス応答の実装グラフ

図3:割り込みサービス応答を実装すると、消費電力の高い時間を短かくできます。

ただし、データ受信割り込みが処理されると、別のコード部分によって、プロセッサをアクティブに維持した場合よりも大きい電力が消費される可能性があります。該当する関数をクリックすると、送信機能が、より高い電力を消費していることが分かります。簡単な方法で送信機能をプログラミングすると、while{}ループ内で各バイトの転送が終わるまで待機するような設定になりますが、この場合、必要以上にプロセッサが実行し続けます。受信ポートの場合と同様に、それぞれのバイト送信が完了した後にプロセッサを起動する割り込みを使用して、このループを置換することができます。その場合、各フレームバイトの合間にプロセッサがスリープモードに入るので、平均消費電流が低下します。

バイトレベルの送信間でのスリープモード移行のグラフ

図4:バイトレベルの送信間でのスリープモード移行による、一層の消費電力の削減

Gecko MCUに搭載されたLEUARTモジュールは、ディープスリープモードでも動作します。このモードでは高周波発振器は停止していますが、低周波発振器(RCまたは水晶振動子)は稼働し続けており、LEUARTのクロックを制御しています。このモードを使用すると、ISR処理間の消費電流を数マイクロアンペアまで下げることができます。

ディープスリープモードによるエネルギー効率改善のグラフ

図5:ディープスリープモードの使用による、低デューティサイクルアプリケーションのエネルギー効率の改善

より多くのバッファ処理をリンクDMAエンジンに移動して、フレーム全体の送信または受信が完了した時点での割り込みトリガをこのエンジンに任せると、さらに効率を改善できます。このような戦略では、プロセッサコアをより長時間スリープ状態にすることで、関数レベルでのデータ分析タスクの消費電力を重点的に最適化できます。

結論

上記の例では、MCUアプリケーションのエネルギー効率を最適化するとき、電流監視およびデバッグツールが重要になることを示しました。エネルギーの最適化を実行するために、開発の完了まで待つ必要はありません。開発者にはっきり見える方法で改善を繰り返しながら、開発ステージ全体を通じて分析を実行することができます。高度なスリープモードと、長時間プロセッサを停止したままで機能するインテリジェントなハードウェアを組み合わせると、エンジニアリングチームはすぐに大幅なエネルギー効率の改善を実現できます。

 
DigiKey logo

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。

著者について

ヨーロッパ人編集者

出版者について

DigiKeyのヨーロッパ担当編集者