低電力での起動が機能しない


9

私は通常、Arduino Pro 3.3V 8MHzプロファイルとブートローダーを使用して、5V @ 8MHzで動作するカスタムArduino ATMega328ボードを持っています。このセットアップを使用している主な理由は、主電源が切断され、バッテリー電源(コインセルから3V)がなくなると、ボードをスリープ状態にできるようにするためです。5Vと3VのソースはダイオードOR接続され、5V入力はINT0に接続されています。コードでは、INT0がLowに低下したことを検出すると、スリープモードを初期化し、1Hzサイクルを維持して内部カウントを維持し、チップが再びウェイクアップすることを確認するウォッチドッグタイマーを除いて、すべてがパワーダウンします。これは、作品美しく、5V電源は、その後、バッテリーが挿入され、最初に適用されると、その後5Vは切断されています。スリープ状態になり、5Vに戻るとウェイクアップして、カウントを失っていないことがわかります。

ただし、問題は3Vが最初に適用されるときに発生します。正直なところ、それが起動するかどうかはわかりません。しかし、それはブートすることですが、INT0(デジタル2)が低いかどうかを確認し、低い場合はスリープ状態にしてください。電流引き込みを観察すると、数秒間で数mAまで電力が供給され、その後約0.3 mAに低下します(スリープモードの場合よりもさらに高くなります)。しかし、5Vを再適用しても何も起こりません。消費電力は回復しますが、応答しません(FTDIシリアル経由)。

3Vで起動できないという見当たらないことはありますか?理論的には問題なく動作するはずです。

更新: D13にLEDを落として、点滅のスケッチを試しました。3Vまたは5Vから開始すると正常に動作します。しかし、ファームウェアを実行して3Vから起動すると、LEDが乱暴に点滅し始めます。私はコード内でD13をセットアップすることさえしなかったので、何が原因なのかわかりません。しかし、それは私にそれをブートローダーと関係があるものにする...


1
BODは何に設定されていますか?起動時の現在のドローは何ですか?
Ignacio Vazquez-Abrams

2.7Vに設定されています。3Vでの電流引き込みは、最初の数秒間は約4mAであり、その後低下してLEDが狂います。
Adam Haile

ブートローダーなしで、つまりISP経由で試しましたか?
Ignacio Vazquez-Abrams

いいえ、まだ試していません。奇妙なのは、まばたきのスケッチを実行しているだけでも問題ないということです
Adam Haile

2
バッテリーのセンサーや負荷など、配線の接続方法を「正確に」示す図を追加できますか。使用しているコイン型電池の種類は、リチウムイオン(充電式)またはアルカリですか。
ロンJ.

回答:


6

だから...起こっていることはすべてコードにあることがわかりました。INT0の割り込みが低いときに、コードの最初で割り込みを初期化していたことがわかりました。問題は、3Vバックアップ電源で起動したときに、INT0が5Vラインに接続されているため、INT0が常に低かったことです(スリープ状態になる方法がわかっています)。INT0がLowで、割り込みがLowでトリガーされていたため、継続的な割り込みが発生し、プログラムの残りの部分が実行されることはありませんでした。完全なスリープ解除モードに入ると、割り込みを有効にするように切り替えたところ、問題なく動作しました。


4

正確に何が起こっているのか、なぜ提供された情報の量に基づいて決定できないのか。ただし、説明されている症状を少なくとも部分的に説明する潜在的な問題が少なくとも1つあります。

あなたは電圧供給を選択するためにダイオードを使用していると言いました、そして、1つの供給は3Vバッテリーです。〜0.6V降下する標準ダイオードを使用している場合、MCUへの供給電圧は〜2.4Vです。0.15〜0.45の電圧降下でショットキーダイオードを使用している場合、電源電圧は2.5Vと低くなる可能性があります。BOD電圧を2.7ボルトに設定しているため、理論的にはMCUがバッテリーで起動することはありません。

なぜ5vから始めて、3vに下げて、再び立ち上げることができるのかについては、よくわかりません。コードでBODを無効にしている可能性があります...たぶん…なぜ機能するのかはわかりませんが、機能することは保証されていません。

電圧が切り替わったときにオシロスコープでどのように見えるかを確認するために、5vと3.3vでダイオードスイッチ回路をセットアップしました。3.3vで最大5vにスイッチングするとき、電圧は最初はかなり振動します。これにより、MCUがスリープを解除しようとするときに、問題が発生する可能性があります。VCCとGNDの間にキャップを付けると、信号が非常にスムーズに平滑化されました。5vから3.3vに切り替えたとき、実際には振動はなく、きれいに落ちていました。

この情報から、BODしきい値を下げるかBODをオフにし、VCCとGNDの間にデカップリングキャップを配置する必要があるようです。また、INT0にプルダウン抵抗があることを確認し、さまざまなスリープモードを説明するMCUデータシートのセクションを読んで、スリープとスリープ解除に関するすべての考慮事項を確認する必要があります。乾杯


2

問題はあなたのブートローダーにあると思いますが、あなたが考える方法ではありません。

Arduinoが起動すると、シリアルホストの検索やフラッシュからのプログラムデータの読み込みなど、いくつかのタスクを実行するブートローダーは、スリープ状態のArduinoよりも多くのエネルギーを消費します。

Arduinoが起動しない理由は、ブートローダーが正確なクロックソースを必要とするためですが、3vを適用すると、クロックがめちゃくちゃになり、クラッシュするか、3.3vが安定したソースに適用されるのを待つ可能性があります。

データシートを見る:

著作権ATMEL

起動中(ブートローダーの実行中)の電流引き込みは約2mAであり、スリープ電流は約0.8マイクロアンペアであることがわかります。これは確かに、適切な電流がなければ、起動時に停電につながる可能性があります。

おそらく、5v電源でのみオンにする必要があります。または、より高電流、高電圧のバッテリーが必要な場合もあります。


これは、Blinkも機能しないことを意味しませんか?また、私はコインセルからいくつかのArduinoを問題なく実行しています。短時間で多くの電流を供給できます。
Cyber​​gibbons 2014年

-5

Tools> Burn Bootloaderに移動して、arduinoを再ブートロードしてみてください


1
これをさらに行う方法の詳細を追加できますか?それほど具体的ではありません:Arduinoに何を接続できますか?リスクはありますか?ありがとう!
匿名のペンギン

私は安全のためにすべてを抜くだろうが、どんなリスクがあるはずの
DeveloperACE

ブートローダーを書き込む方法は次のとおりです:arduino.stackexchange.com/a/474/37。あなたの答えはそれを行う方法のすべてを説明しているわけではありません。
帽子をかぶった男
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.