質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

4回答

6657閲覧

Raspberry Pi のGPIOと3V3のGNDの違いについて

itokoishi

総合スコア63

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

2グッド

0クリップ

投稿2021/07/30 15:31

お世話になります。
この度Raspberry Pi Picoを購入しまして、初めての電気工作をしようとおもっています。
まずはLEDを点灯せることから始めようと思っているのですが、
いろいろな事例を見ると

1, GPIO→抵抗→LED→GND
2, 3V3->抵抗→LED→GPIO

という2パターンがあり、どちらも3.3V出力となっているようなのですが、
この違いはなんなのでしょうか?
素人ながらに、3V3は出力をし続けるもので、
GPIOは入出力を制御できるものと考えているのですが、違いますでしょうか?

また1と2以外に
3, GPIO->抵抗→LED→GPIO
4, 3V3->抵抗→LED→GND
でも点灯させることは可能なのでしょうか?

素人のため、初歩的なことかもしれませんが、
よろしくおねがいします。

Hiroyuki-Nagata, fana👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

私は、Raspberry Piを使った事ないので詳しいことは言えませんが、まずRaspberry Piを使わずに単純にLED点灯はどうすれば点灯するか分かりますでしょうか?
電気には、直流(DC)と交流(AC)があり今回使用しているのは直流の方です。

直流は、プラスV(ここでは3.3Vになるのかな?3V3だから)から0V(GND)へ向かって電流が流れます。
そこの間に、抵抗とLEDを挟めばLEDが点灯します。
つまり、3V3(+3.3V)→抵抗→LED→GND(0V)となれば点灯します。
つまり、質問4の3V3->抵抗→LED→GNDがまさにそれに当たります。
と言うことは、3V3はマイコンには関係なく電源の発生のプラス側と直に繋がっていることになります。
乾電池でいうと、乾電池のとがった方と言えば分かりますか?

GPIOは、入力としても出力としても使え、出力では、つまり簡単にいうとプログラムでHighにすると3.3vを繋げてやる事ができます。
そのピンのGPIOを入力として使うのか出力として使うのかはプログラム内で設定すると思います。

1, GPIO→抵抗→LED→GND
プログラムでGPIOをHighにするすると、3V3(3.3V)→抵抗→LED→GND(0V)が成り立ちLEDが点灯します。

後、3V3(3.3v)とGNDを直に繋げショート(短絡)しないように自己責任で行ってください。
後、LEDは極性があるので長い方をプラス側に繋ぎます。
GPIO→抵抗→足の長い方(LED)足の短い方→GND

2、3のそのほかは、考えてみてください。
2の繋ぎ方は、3V3→抵抗→足の長い方(LED)足の短い方→GPIO

投稿2021/07/31 07:49

編集2021/07/31 07:51
shinami

総合スコア334

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itokoishi

2021/08/02 02:34

回答ありがとうございます。 一度電池を利用して試して確認してつなぎ方の確認はしました。 Raspberry Piでと思ったときに、つなぎ方が色々あってわからなかったので質問いたしました。 色々と教えていただき、ありがとうございます。 より知識が深まりました。 自分の中では プログラムを利用して、プラス側の制御を行って、GDNに流すというやり方が 今の所一番わかりやすいかなと思いましたので1で進めていきたいと思います。
shinami

2021/08/03 11:05

がんばってください
guest

0

ベストアンサー

1, GPIO→抵抗→LED→GND
2, 3V3->抵抗→LED→GPIO

この2つの違いですが、「1」ではHigh電位にしたGPIOから電流が流れ出す(電子は流れ込む)のに対し、「2」ではLow電位にしたGPIOに電流が流れ込む(電子は流れ出す)違いがあります。
大昔、ICがまだCMOSでなかった頃、GPIOはLowにして電流を吸い込むことはできても、Highにして電流を吐き出す能力はほとんどありませんでした。
例えば吸い込み側は10mA出せても吐き出し側は0.1mAといった具合です。
この場合、2の方向にせざるをえません。
時代は進んでICがCMOS化し、吐き出し側も十分な電流が出せるようになりました。それでも吸い込み側の方が能力が高い場合は多く、例えば20mA対5mAといった具合です。
なので、吸い込みと吐き出しの能力に差のあるICにおいて(RaspberryPiPicoもそうです)少しでも電流を多く流したい場合のつなぎ方が「2」で、
今の時代LEDなぞ数mA流せば十分なのでHighで点く方が分かりやすくてよいというつなぎ方が「1」です。

3, GPIO->抵抗→LED→GPIO
可能です。マトリックスを組んで多数のLEDを扱うとき有用なつなぎ方です。ただし両側のGPIOでそれぞれ電圧降下が起こるので、あまり電流は流せません。

4, 3V3->抵抗→LED→GND
それはマイコンを通さず電源に直接つなぐのと同じですので、当然点きます。

投稿2021/07/31 02:55

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2021/07/31 03:54

ああ、この手の図、縦軸のスケールが違うんですよ。 なお私が見ていたのはTable 632で、電流が同じでIOVDD-VOHとVOLに差があることからの判断でした。
thkana

2021/07/31 04:05

絶対最大定格内で、Voh/VolがH/Lの範囲に留まるのが供給/流し込み能力とするなら、そりゃL側0.3Vに対してH側は0.6Vddとかいうとスケールは大きくなることにはなるだろうけど。 純粋に電圧降下の値だけを問題にするのかしら?
ikadzuchi

2021/07/31 04:24

どうも話が見えませんね…。 「同じ電流を吐き出し/吸い込んでいる時のVdd/GNDとの電位差が小さい」・「同じ電位差の時の電流が大きい」ことを能力が高いと呼んでいます。 そしてグラフを見てIohの方が余裕があるということですが、縦軸のスケールが異なるのを見落としてはいませんか? スケールを考慮すればOutput HighよりOutput Lowのカーブの方が傾きが緩やかで、能力が高いと判断しているのですが。
thkana

2021/07/31 05:28

では縦軸を揃えたとして、Figure169では、Vdd3.3VからVohが3.0Vにまで下がる電流とVol側が0.3Vにまで上がる電流と、どこが4倍の差になっていますか?
ikadzuchi

2021/08/01 09:41

おや、すいません、今日の昼過ぎにコメントを書き込んだつもりが失敗していたようです。 なぜ急に4倍という数字が出てくるのでしょう。RaspberryPiPicoで電流が4倍になると主張した覚えはありません。 4倍と言えば(架空の)例として挙げたRaspberryPiPicoとは無関係な20mA対5mAがちょうど4倍ですが何か関係ありますか? この場合も常に電流が4倍になると取るには無理があると思いますが。 それよりFigure169のグラフを見てIohの方が余裕があると言った件はどうなったのでしょう。
thkana

2021/08/01 10:01

> 20mA対5mAがちょうど4倍ですが何か関係ありますか? まさにそれが「4倍」です。別に4倍である必要はないですが「大きな差がある」と言いたかったのではないのですか? RP2040でも。 > どうなったのでしょう。 特に聞かれていると思っていなかったので放置していました。VOHがHを保つ電流と、VOLがLを保つ電流ではVOH側のほうが大きい、というそれだけです。
ikadzuchi

2021/08/01 10:20

RaspberryPiPicoについて「大きな」差があるとは言っていませんが、差があることについては、先述の通り表を見て同じ電流についてIOVDD-VOHとVOLに差があることから判断しています。 Output Voltage High @IOVDD=1.8Vからの6件から、 (1.8-1.24)/0.3=1.8666667 (2.5-1.78)/0.4=1.8 (3.3-2.62)/0.5=1.36 となります。 グラフの傾きを見てもよいです。先述の通りスケールを考慮すればOutput HighよりOutput Lowのカーブの方が傾きが緩やかなことから能力が高いと判断しています。 > VOHがHを保つ電流と、VOLがLを保つ電流ではVOH側のほうが大きい、というそれだけです。 ああ、つまり「絶対最大定格内で、Voh/VolがH/Lの範囲に留まるのが供給/流し込み能力とするなら、そりゃL側0.3Vに対してH側は0.6Vddとかいうとスケールは大きくなることにはなるだろうけど。」の部分でしたか。 こちらは納得しました。
thkana

2021/08/01 10:32

> Output HighよりOutput Lowのカーブの方が傾きが緩やか 事実としてそのとおりです。 で。 いまさらTTLを使う機会もほぼないでしょうから、LEDを目視用途で連続点灯する場面においては、電流を吐き出そうと流し込もうと実用上大差はないと思っていてほぼ差し支えない、で結論付けちゃっていいですかね。 (LEDを抵抗なしで直結する輩が結構居るのはおいといて...)
ikadzuchi

2021/08/01 10:38 編集

そうですね。 (目視用途連続点灯でなく光量を出したく)少しでも電流を多く流したい場合のつなぎ方が「2」で (目視用途連続点灯で)今の時代LEDなぞ数mA流せば十分なのでHighで点く方が分かりやすくてよいというつなぎ方が「1」 だと思っています。
thkana

2021/08/01 10:48

> 目視用途連続点灯でなく光量を出したく その場合は吸い込み吐き出しどちらを選ぶかということではなく、マイコン直でドライブという設計自体が間違いになると思います。まぁ、コストとか基板面積が極限に厳しい場合とかあるのかもしれませんが... 目視でもダイナミック点灯だったりすると小さなLEDでもパルスで50mAとかいう世界になりますから、当然に何らかのドライバを噛ませることになるでしょう。
shinami

2021/08/01 11:49

私は、小さなLED程度だとマイコンピンから直でドライブして終わりにしてましたが、LED程度でも何か間に嚙ませスイッチングしないと本当は良くないんですね。コイルみたいに逆起電圧もかからないしそこまで必要ないと思っていました。ちなみに、その50mAパルスはどのタイミングででるのでしょう?直流ですから突入電流はなさそうですし。
thkana

2021/08/01 12:40

> LED程度でも何か間に嚙ませスイッチングしないと本当は良くないんですね マイコンのスペック内なら直で全然かまいませんよ? > その50mAパルスはどのタイミングでで でる、というと「勝手に出てくる」というようなニュアンスを感じますが、そんなことはなく、単に50mAなら50mA流すように回路を作るだけの話です。
shinami

2021/08/01 12:55

そうですよね、マイコンのスペック内なら良いですよね。 そうですよね、LEDなので〇mA流すように抵抗を調整するだけですもんね。 目視で確認できるレベルまで流すとしてもそこまで電流を流さなければいけなかったけなぁと思ったり、どこかのタイミングで突発的にでる現象によるものなのかと思いまして。 勉強になるなぁとちょっと質問してみました。ありがとうございます。
itokoishi

2021/08/02 02:37

回答ありがとうございます。 みなさんがおっしゃっていることが自分にはまだチンプンカンプンですが。。。 勉強になりました。 すべてのつなぎ方で説明いただけて大変助かりました。 少し触って色々と試していきたいと思います。 自分の中では プログラムを利用して、プラス側の制御を行って、GDNに流すというやり方が 今の所一番わかりやすいかなと思いましたので1で進めていきたいと思います。
guest

0

イメージ説明
出力状態のGPIOの端子ってのはfig1のようになっているわけです。SW1とSW2はどちらかがONになって、SW1がONならH出力、SW2がONならL出力。(両方OFFならハイインピーダンス、両方ONなら...壊れる)
3V3は通常(マイコンの動作が主眼のとき)「出力」とはいいません。単に電源につながっているだけでマイコンの管理の外なので。システムとして電源を供給する端子として使われるときは「出力」と言わないわけではありませんが。

で、LEDの回路は、ループ中に電源が入っていれば点灯、入っていなければ(あるいはループが切れていれば)消灯(fig2)。

GPIOとGND間にLEDを繋いで、H出力のときはfig3のようになるのでつまり点灯。L出力のときはfig4の用になるので消灯。

それ以外の接続でどのようになるか、そんなに難しい話ではないと思いますがいかが?

なお、SW1とかSW2にはRP2140(RaspberryPi Pico)の場合は一つの端子あたり25mA以上流したら壊れるかも知れません。GPIOの総和で125mA以内という制限もあります。

投稿2021/07/31 02:07

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itokoishi

2021/08/02 02:41

回答ありがとうございます。 図まで書いていただいて大変参考になりました。 電流の上限は全く頭に入っていませんでした。 危ないところでした。 基本の勉強し直して、どんどんと進めていけるようにします。 自分の中では プログラムを利用して、プラス側の制御を行って、GDNに流すというやり方が 今の所一番わかりやすいかなと思いましたので1で進めていきたいと思います。
itokoishi

2021/08/04 13:29

ありがとうございます!!凄くわかりやすいですね。 読んで勉強いたします。
guest

0

1では、GPIO出力をHiにするとLEDが点灯します
2では、GPIO出力をLoにするとLEDが点灯します

4では常に点灯しっぱなしになりますね

3でも点灯させることは可能です。どういう条件で点灯するかは考えてみてください

投稿2021/07/30 22:20

編集2021/07/30 22:21
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itokoishi

2021/08/02 02:45

回答ありがとうございます。 電池で一度試してみたものの、つなぎ方がたくさんあってプラスマイナスが一体どれなのか 予想はできても自身がなかったので質問しました。 2の話を聞くと、GPIOを0にすればマイナスと同じということで理解が深まりました。 1が自分には一番わかりやすく、プログラムもやり易いかなと感じましたので、 まずはそちらでどんどん作っていきたいと思います。
y_waiwai

2021/08/02 02:52

3V3とGNDというのは電源のそれぞれ3.3Vと0Vのラインです GPIOのHiレベルとLoレベルにそれぞれ対応します LEDは電流を流すことで点灯します GPIOとLEDとGNDをつないだ場合、GPIOがLoの場合は、LEDの両端が0V通しなので電流は流れず、点灯しません(回答の1) 3V3とLEDとGPIOをつないだ場合、Hiにしたときは、両端3.3V通しなので電流は流れず点灯しません(回答2)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問