Arduino よもやま話-10 (出力ポートの電流供給能力)
2019年12月04日11:29
Arduino よもやま話
◆まえがき
IDEAHACK というサイトに「これだけはやるな!Arduino Unoを破壊する10の回路」という記事があります。これ、かなり目を引くタイトルなので読まれた方も多いのではないかと思います。
そこには Arduino を使う上での回路上の注意事項がいっぱい書かれていて、とても参考になります。でも、中にはそんなことしても壊れないでしょうと思える項目もあって、ちょっと脅かしすぎではないかと思います。
◆出力ポートの電流供給力
「これだけはやるな!」の記事は、出力ポートを電源やグランド、あるいは出力ポート間をショートさせてはいけない、という話から始まっています。これはまあやってはいけないですが、普通のデバイスはそれくらいのことで壊れるほどヤワに作られてはいません。
そんなことで、Arduino UNO で実際に出力ポートをショートさせて電流がどれくらい流れるか測定してみました。
こういう測定は素子(CPU) を壊す恐れがあるので、正常に動いている物を使うのは怖いです。ちょうどポートが一つ壊れているCPUがあって、これなら壊しても惜しくありません。そんなことで、この素子を測定することにしました。
・測定に使ったUNOとCPU

「△リーク」と書いたラベルが貼ってあって、ポートが一つ壊れた影響で電源のリーク電流が大きくなっているCPUを使いました。
ちなみに、これが壊れたのは今から約6年前にグリッドタイインバーターの実験をやっていた時です。
◆測定方法
惜しくないといっても、いきなり完全に壊れて何もデーターが取れなかったら悲しいです。そこで最初はデューティの小さなパルス電流を流しながらオシロを見て試してみました。そうやって様子を見たところ大丈夫そう、というか発熱による影響らしきものはほとんど無さそうでした。
ということで、測定はDCで行いました。なお正確には2秒間隔で出力をON/OFFするパターンを使い、DMMで電圧測定を行いました。負荷は可変抵抗を使うと端っこの方が焼けそうなので、1k, 300, 102, 51, 25.5, 10, 1 Ωの固定抵抗を差し替えて使いました。
◆測定結果
1.ソース電流
・測定回路と結果

・CPUからGNDへ向けて電流を流し出す使い方です。
・データーシートには20mAまでのグラフまでしか出てきませんが、今回の測定では限界まで電流を絞り出していて、最大で約90mA流れています。
・絶対最大定格ではピン当たりの最大電流は40mAとなっていますが、このグラフはその倍以上の電流を流しています。
・電流が増えると電圧(VOH)が下がるのは当然ですが、電流が大きくなるにしたがって電圧の低下の度合いが大きくなっていて、電流は飽和していく特性になっています。
2.シンク電流
・測定回路と結果

・電源から素子に電流を流し込む使い方です。
・ソースと逆の特性ですが、電流の飽和が急激で 60mA以上でVOLが急上昇しています。
・電源に直結しても約60mA程度しか電流が流れないことが判ります。
・ソース、シンク特性の重ね書き

比較しやすいように、ソースとシンクのグラフを重ね書きしてみました。40mAあたりまでは両者は上下対称な特性になっています。これはソース/シンクの駆動能力を揃えているのだと思います。
3.ピン間接続(ソース=シンク)
ピン間に負荷抵抗を入れて電流電圧特性を測定してみました。なお、ソースとシンクの特性が判っているのでこの測定はやらなくても推定出来ますが、念のために実測しておきました。
・測定回路と結果

1/2 Vcc(2.5V)を中心にきれいな上下対称な特性になっていました。
◆まとめ
・ポートの出力電流は負荷が重くなるとそれに比例して増えるのではなく、飽和することが確認できました。出力段のトーテムポールのFETの特性をチューニングし、このような特性になるように作り込んでいるのだと思います。なお、こういう特性になるように作るのは一般的に行われていることだと思います。もちろん飽和する電流の値はデバイスによって異なります。
・ATmaga328Pのデーターシートで出力ピンの最大電流は絶対最大定格で40mA と定められています。なので、この値を超えた領域は保証されません。突然壊れても寿命が短くなったとしても文句は言えません。
そうは言っても、ちょっとショートさせただけで壊れてしまうようでは使い難くて困るので、絶対最大定格を超えても、ある程度は大丈夫に作ってあるのだと思います。
・Arduino の出力に LEDを電源制限抵抗無しで直結してはダメ、ということが良く言われています。一方でLEDを直結して壊れたという話を聞いたことがありません。それはポートの出力電流が飽和特性になっているので、めちゃくちゃに大きな電流が流れることは無い、つまり壊れることは無いということだと思います。あと、LEDの抵抗成分は意外と大きいので、そこで電流が制限されるということもあります。
・記事の冒頭で引用した「これだけはやるな!」の記事の1項、2項で出力ピンのショートはやってはいけないと書かれています。でも素子の特性で壊れない(壊れにくい)用に作られているので、実はショートさせても大丈夫だと思います。ちなみに、私は配線ミスなどでそういうショートを何度もやらかしてますが、壊れたことは一度もありません。
あと、「これだけはやるな!」の記事の残りの項目にも気になることがいっぱい書かれているので、今度また記事の中で検討してみたいと思います。
IDEAHACK というサイトに「これだけはやるな!Arduino Unoを破壊する10の回路」という記事があります。これ、かなり目を引くタイトルなので読まれた方も多いのではないかと思います。
そこには Arduino を使う上での回路上の注意事項がいっぱい書かれていて、とても参考になります。でも、中にはそんなことしても壊れないでしょうと思える項目もあって、ちょっと脅かしすぎではないかと思います。
◆出力ポートの電流供給力
「これだけはやるな!」の記事は、出力ポートを電源やグランド、あるいは出力ポート間をショートさせてはいけない、という話から始まっています。これはまあやってはいけないですが、普通のデバイスはそれくらいのことで壊れるほどヤワに作られてはいません。
そんなことで、Arduino UNO で実際に出力ポートをショートさせて電流がどれくらい流れるか測定してみました。
こういう測定は素子(CPU) を壊す恐れがあるので、正常に動いている物を使うのは怖いです。ちょうどポートが一つ壊れているCPUがあって、これなら壊しても惜しくありません。そんなことで、この素子を測定することにしました。
・測定に使ったUNOとCPU

「△リーク」と書いたラベルが貼ってあって、ポートが一つ壊れた影響で電源のリーク電流が大きくなっているCPUを使いました。
ちなみに、これが壊れたのは今から約6年前にグリッドタイインバーターの実験をやっていた時です。
◆測定方法
惜しくないといっても、いきなり完全に壊れて何もデーターが取れなかったら悲しいです。そこで最初はデューティの小さなパルス電流を流しながらオシロを見て試してみました。そうやって様子を見たところ大丈夫そう、というか発熱による影響らしきものはほとんど無さそうでした。
ということで、測定はDCで行いました。なお正確には2秒間隔で出力をON/OFFするパターンを使い、DMMで電圧測定を行いました。負荷は可変抵抗を使うと端っこの方が焼けそうなので、1k, 300, 102, 51, 25.5, 10, 1 Ωの固定抵抗を差し替えて使いました。
◆測定結果
1.ソース電流
・測定回路と結果


・CPUからGNDへ向けて電流を流し出す使い方です。
・データーシートには20mAまでのグラフまでしか出てきませんが、今回の測定では限界まで電流を絞り出していて、最大で約90mA流れています。
・絶対最大定格ではピン当たりの最大電流は40mAとなっていますが、このグラフはその倍以上の電流を流しています。
・電流が増えると電圧(VOH)が下がるのは当然ですが、電流が大きくなるにしたがって電圧の低下の度合いが大きくなっていて、電流は飽和していく特性になっています。
2.シンク電流
・測定回路と結果


・電源から素子に電流を流し込む使い方です。
・ソースと逆の特性ですが、電流の飽和が急激で 60mA以上でVOLが急上昇しています。
・電源に直結しても約60mA程度しか電流が流れないことが判ります。
・ソース、シンク特性の重ね書き

比較しやすいように、ソースとシンクのグラフを重ね書きしてみました。40mAあたりまでは両者は上下対称な特性になっています。これはソース/シンクの駆動能力を揃えているのだと思います。
3.ピン間接続(ソース=シンク)
ピン間に負荷抵抗を入れて電流電圧特性を測定してみました。なお、ソースとシンクの特性が判っているのでこの測定はやらなくても推定出来ますが、念のために実測しておきました。
・測定回路と結果


1/2 Vcc(2.5V)を中心にきれいな上下対称な特性になっていました。
◆まとめ
・ポートの出力電流は負荷が重くなるとそれに比例して増えるのではなく、飽和することが確認できました。出力段のトーテムポールのFETの特性をチューニングし、このような特性になるように作り込んでいるのだと思います。なお、こういう特性になるように作るのは一般的に行われていることだと思います。もちろん飽和する電流の値はデバイスによって異なります。
・ATmaga328Pのデーターシートで出力ピンの最大電流は絶対最大定格で40mA と定められています。なので、この値を超えた領域は保証されません。突然壊れても寿命が短くなったとしても文句は言えません。
そうは言っても、ちょっとショートさせただけで壊れてしまうようでは使い難くて困るので、絶対最大定格を超えても、ある程度は大丈夫に作ってあるのだと思います。
・Arduino の出力に LEDを電源制限抵抗無しで直結してはダメ、ということが良く言われています。一方でLEDを直結して壊れたという話を聞いたことがありません。それはポートの出力電流が飽和特性になっているので、めちゃくちゃに大きな電流が流れることは無い、つまり壊れることは無いということだと思います。あと、LEDの抵抗成分は意外と大きいので、そこで電流が制限されるということもあります。
・記事の冒頭で引用した「これだけはやるな!」の記事の1項、2項で出力ピンのショートはやってはいけないと書かれています。でも素子の特性で壊れない(壊れにくい)用に作られているので、実はショートさせても大丈夫だと思います。ちなみに、私は配線ミスなどでそういうショートを何度もやらかしてますが、壊れたことは一度もありません。
あと、「これだけはやるな!」の記事の残りの項目にも気になることがいっぱい書かれているので、今度また記事の中で検討してみたいと思います。
トラックバックURL
http://radiopench.blog96.fc2.com/tb.php/964-2579a450