組み込みデバイスのデバッグ用UART:低消費電力デバイスのベストプラクティス
USBがほとんどの周辺機器の役割を担うようになった一方で、UARTは組み込みシステムの世界では依然として健在であり、GPSモジュールからRaspberry PiやArduinoボードに至るまで、あらゆるもののデバッグに使用されています。
しかし、超低消費電力設計の限界に挑む中で、開発者からしばしば寄せられる質問があります。「UARTはバッテリを静かに消耗させるのか」というものです。答えは簡単です。「いいえ、そうとは限りません」どんな優れたツールと同様、すべてはそれをどのように使用するかにかかっています。それでは、詳しく見ていきましょう。
TX/RXリーク電流に注意
不必要な電力消耗を防ぐ簡単な方法は、TXチャンネルとRXチャンネルからのリーク電流に対処することです。リーク電流が多いことはあまりありませんが、後で予期せぬ電力消耗を避けるためにも、潜在的な問題を早期に確認し、対処するのが常に望ましいです。
低消費電力を念頭に置いたコードの記述と実行
UARTは、デバッグ用のスイスのアーミーナイフのようなものだと考えてください。開発中はとても便利ですが、常にポケットに開いた状態で入れて持ち歩くようなものではありません。賢明な方法は、コードに#defineを使用して、デバッグ時にUARTをオンにし、デバイスが生産段階に入ったらオフにすることです。これは単純な方法ですが、現実世界の悪夢からあなたを救うことができます。
次のような状況を想像してみてください。あなたとあなたのチームは、消費電力を最小限に抑えることに全力を注いでいます。あなたは継続的に電流を測定し、大きな進歩が見られます。開発中は、一時的な電力消費が増えることを承知の上で、デバッグ用にUARTを有効にしておきます。しかしその後、誰かが誤ってそのコードをメインブランチにマージしてしまい、UARTが有効なままの状態になってしまいました。そして、何百万ものデバイスにワイヤレスでこのコードが書き込まれてしまいました。それまで効率的だった設計が、突然、アーケードマシンのようにバッテリを消耗し、不幸な顧客を抱えることになります。
この問題はどうすれば解決できるでしょうか。消費電流のベンチマークを備えた継続的インテグレーションシステムを構築することです。そうすれば、このような問題を、コストのかかるミスに発展する前に発見することができます。これは自動化された安全策だと考えてください。コードが製品化される前に、余分な電流を抑制します。
すべてを確実にオフにする
UARTを有効にすると、さまざまなMCUブロックやクロックなど、ソフトウェアの複数の部分がアクティブになります。MCUは開発を容易にするため、デフォルトですべてがオンになるように設計されていることがよくあります。ただし、MCUがスリープモードに入る前に、不要なコンポーネントを無効にすることが極めて重要です。UARTクロックが有効のままだと、MCUが最も深いスリープ状態になるのを妨げ、消費電力の増加につながる可能性があります。クロックツリーを見直し、UARTにリンクされているすべてのコンポーネントが、不要なときに適切にオフになっていることを確認してください。
Otiiの実験
同じデバイス、Seeed TechnologyのSeeed Studio XIAO nRF52840上で動作する2つのファームウェアバージョンを比較してみましょう。モジュールを初期化し、フラッシュメモリをセットアップし、短いLED点滅シーケンスを実行し、その後モジュールを最低電力モードにするサンプルスクリプトを用意しました。一方のバージョンはUARTが有効になっており、もう一方はUARTなしで動作します。QoitechのOtii Ace Proを使用して消費電流を測定し、異なる電圧レベルにおける両バージョンの消費電力を分析し、比較しました。
図1では、デバイスがアクティブにUARTメッセージを送信しているのに対し、図2ではMCUがスリープモードになっています。青い線はUARTが有効であることを示し、オレンジの線は無効であることを示しています。この違いは、UARTが消費電力に与える影響を浮き彫りにしています。
図1:アクティブなSeeedStudio XIAO nRF52840デバイスとUART通信|有効(青のグラフ)|無効(オレンジのグラフ)。(画像提供:Qoitech)
図2:低消費電力モードのXIAO nRF52840デバイス(グラフの選択部分)とUART通信|有効(青のグラフ)|無効(オレンジのグラフ)。(画像提供:Qoitech)
アクティブモードでは、平均消費電流が460μAから1.34mAに増加しました(図1参照)。スリープモードでは、消費電流は2.27μAから2.19μAになります(図2)。これは、わずかな違いに見えるかもしれませんが、IoTデバイスで一般的な長時間のスリープにより、この増加はバッテリ寿命にとって重要なものとなります。明らかに、ファームウェアはUARTが無効化された場合に最適化されています。
Otiiを使ったバッテリ寿命の推定
バッテリ寿命への影響を説明するために、Otii Desktop AppのBattery Life Estimatorを使用しました。ここでは、1時間に1回のアクティブ期間を想定し、デバイスが起動し、点滅シーケンスを実行した後、約3600秒間スリープします。
図3ではUARTを無効にしており、図4ではUARTを有効にしています。UARTを使用するか、しないかによって、バッテリ寿命に大きな違いがあることがわかります。
図3:UART通信を無効にした場合のバッテリ寿命の推定値。(画像提供:Qoitech)
図4:UART通信を有効にした場合のバッテリ寿命の推定値。(画像提供:Qoitech)
その差は非常に大きいです。UARTを有効にしておくと、バッテリの推定寿命は5.9年からわずか11.6日にまで低下します。
重要なことは、MCUがスリープモードに入る前に、UARTに関連するすべての電源がオフになっていることを確認することです。これをOtii Product Suiteを使用した継続的インテグレーションプロセスに組み込むことで、UARTを有効にしたまま誤ってリリースしてしまい、デバイスのバッテリ寿命が大幅に低下してしまうことを防ぐことができます。

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum