著者から
これは私の最初の記事です-私は建設的な批判、意見、コメント、質問を待っています。
まえがき
この記事は、オープン/ショート回路を検出し、温度を取得する必要がある無線モジュールのソフトウェアの開発中に存在した省エネの問題を解決することに専念しています。
何がありますか
無線モジュールが搭載されて開発されました。脳はatmega128rfa1で、無線送信機と温度センサーFM75が内蔵されています。 デバイスは、最初のCR2032バッテリー(3.3 V、約200 mA *時間)で駆動されます。
モジュールによって実行される機能
- 外部割り込みによってトリガーされた連絡先を閉じる/開くとき-サーバーにイベントデータを送信し、受信の確認を行います。
- サーバーからコマンドを受信すると、必要なアクションを実行し、実行したアクションの結果を送信し、受信確認を受信します(問題のタスクについて、これらのアクションは現在の温度を取得し、連絡先のステータスを取得し、モジュールのステータスを制御します);
モジュールの適用可能性
- 家庭用モーションセンサーへの追加として
- ラジオボタンのように(祝福をオン/オンする:220 Vワイヤの1つに断線を接続する代わりに、通常のスイッチに入れられます;ゼロセンサーが接続されているときはネットワーク220 Vにも電圧があります;ドアの位置など)
- 温度データを定期的に収集するため
問題
モジュールの消費:
- 付属のトランスミッターで〜9.4 mA
- 最大電力〜14 mAでの連続無線データ伝送
- 無線送信機がオフの場合〜5.4 mA
- 温度〜25 mAを受信した場合
- ディープスリープモード(パワーダウンモード)〜200 nA
したがって、無線送信機をオフにせず、何も送信も受信もしない場合、200mAバッテリーは理論的には20時間、実際には約16時間持続するはずです。 そして、モジュールがいくつかの機能を実行する必要があるという事実について話す場合は!?
モジュール操作の2つの例を示します。通常と極端です。
通常動作(予想):
- サーバーからの要求に応じて、現在の温度を受信する1時間に1回
- 1時間に1回のオン/オフ、たとえば-ライト(つまり、モジュールはサーバーにライトの原因であるスイッチのステータスを通知します)
モジュールの実際の動作時間は大幅に変わらず、同じ16時間でした。
極端な操作、省エネの問題の解決策を見つけ、明確にするため:
- サーバーからの要求に応じて、現在の温度を1時間に1000回受信
- たとえば、1時間に1000回のオン/オフの切り替え-ライト(つまり、モジュールは、ライトを担当するスイッチのステータスについてサーバーに通知します)
モジュールの実際の動作時間はわずか4時間でした。
ここで、評価に重大なエラーがあります。なぜなら、 バッテリーは、1回のバッチで190〜250 mAの幅広い容量を備えていますが、それでも動作時間の大まかな見積もりにはこれで十分です。
追求した目標
部屋の状態の200 mAバッテリーからのモジュールは、 通常の動作 (上記)で少なくとも1年間は動作する必要があります。
解決策
解決策は明らかです-スリープモードだけでなくスリープモードの使用、つまり「ディープスリープ」(パワーダウンモード)。 以下に提案するアルゴリズムは、さまざまなメーカーのマイクロコントローラーに適用できます。したがって、アルゴリズム(コードなし)のみが提供されます。目的のマイクロコントローラーのデータシートを使用してコードを作成することは難しくありません。
そのため、マイクロコントローラ(以下「MK」と呼びます)には、さまざまなスリープモードと、これらのモードから抜け出す方法があります。
ただし 、MKがサーバーからのメッセージに応答することが重要です。 -そしてこれは、無線送信機をオンにする必要があることを意味します-MKがスリープしているときにモードがありますが、彼のためのメッセージをブロードキャストに「聞いて」、もしあれば、私たちには適していません 約10 mAの消費電力。
次に何をする? 実際、「ディープスリープ」モードでは、無線がオフになります(つまり、MKは何も送受信しません)。外部割り込みからの信号、または「ウォッチドッグ」(ウォッチドッグ)によってのみ、このモードから抜け出すことができます。 、MKリセットモードと割り込み呼び出しモードの両方で機能することができます -ここでそれは私たちを救います!
アルゴリズム
したがって、この目標を解決するために、次のアルゴリズムが開発、デバッグ、およびテストされました。
1)MKは常に「ディープスリープ」モード(パワーダウンモード)です。
2)外部割り込みがトリガーされると(スイッチの位置を変更)、MCが起動し、サーバーにメッセージを送信し、確認応答を受信して、再びスリープ状態になります。
3)なぜなら 特に、サーバーからコマンドを実行するには、定期的にラジオをオンにして、MKのメッセージのブロードキャストを聞く必要があります。 ウォッチドッグを0.016〜8秒の頻度で割り込みモードにします(必要に応じて、8秒で十分です)。 中断中にブロードキャストを聞きます。MKに何もなければ、再びスリープ状態になります。
アイテムをさらに詳しく分析しましょう
「ディープスリープ」状態にあるMKは、約200 nAを消費します(バッテリーの自己放電がなければ、何年もの間、200 mAで十分です)。 自己放電は考慮しません。
次に、「人生」の時間は、ポイント2と3が満たされる頻度によってのみ影響を受けます。
ステップ2で外部割り込みがトリガーされると、MKは20ミリ秒のオーダーで動作します。これは「通常動作」モードでも無視できます。
私たちの主なエネルギー消費者はポイント3です。私たちのタスクでは、MKがサーバーからのメッセージに8秒以内に応答すれば十分です。 したがって、8秒ごとにブロードキャストをチェックし、20ミリ秒間ブロードキャストをスキャンしてからスリープに戻るように、「ドッグタイマー」を設定します。 T.O. ポイント2からの信号がなく、サーバーからのメッセージもない場合、MKは8秒間で20ミリ秒動作し、0.0235 mA *時間に変換されます。
MKに到達するために、サーバーは8秒間継続的にパケットを送信します。MKは異なる応答をします-即座に、または8秒の終わりに-応答します!
結果
アルゴリズムをコードに実装してから、モジュール(一般にいくつかあります)は現在378日間以上動作しています。 バッテリーの残りの容量は40 mAです。 動作モードは、上記の「通常動作」モードで想定されていたよりも実際には控えめです-しかし、それは人生であり、最悪の事態に備え、最善を望んでいます。
PS
この記事が、同様の問題を解決するのに役立つことを願っています。
プロジェクト開発
この記事は、ハブロフスク市民の間でハードウェアとソフトウェアの両方の開発に強い関心を呼び起こしました。 これで、ハブ上のプロジェクトの1つである「スマートホーム」のDIY調光器のモジュールの開発が完了しました(この相互作用は、この記事の結果です)。