組み込みマイコン開発の基礎として、GPIOについて紹介します。
GPIOというのは、こちらに書いている英語の通りで、日本語で言うと汎用入出力です。
大きく分けて、出力と入力の2つの機能があります。
GPIOの中身と設定

このGPIOのマイコンの中身を見てみましょう。
この図に示しているのがGPIOの回路図です。
これはTexas InstrumentsのMSP430というマイコンのデータシートを参照しています。
ここで私たちが知りたいのは、GPIOの回路がどうなっているかではなく、この回路をどうやって制御しているのかということについてです。
実際、GPIOの設定方法は、もともとマイコンが持っているレジスタ情報を書き換えることで設定できます。
大きく分けて、Resistor Enable、Direction、Output、Selectの4つのレジスタを設定することでGPIOの設定ができるという形です。
- DirectionはGPIOのピンを入力にするのか、出力にするのかを設定します。
- そして、出力設定にしたときにOutputのレジスタを1にすることで、電圧を印加するという形になります。
次にこちらのSelectが、GPIOピンはGPIOだけではなく、例えばこのADコンバーターのピンも兼用しているので、
別の機能(これをペリフェラルと言います)をGPIOにするのかペリフェラルにするのかということのセレクションになります。
プルアップ、プルダウン、フローティング

そしてこちらのレジスタイネーブルについてです。
マイコンの中のイメージ図を書いてみたんですけど、マイコンのGPIOピンが出ていて、実際にはGPIOピンの中間に抵抗が存在しています。
これをどうするかという設定になります。
抵抗の片側はマイコンのGPIOピンにくっついているんですが、もう片方が浮いていて、これを電源につなげばプルアップ抵抗として機能し、
グラウンドにつなげばプルダウン抵抗として機能します。
もし何もつながなければ、フローティングと言って浮いている状態になります。
フローティングにすると、外来ノイズとかを拾ってしまい、マイコンのGPIOの誤作動を誘発するので、
フローティングにはせず、プルアップかプルダウンにするのが基本です。
プルアップ・プルダウンについては色々と使い方があるので、別の動画にしようと思います。
とりあえず、内部抵抗の設定があるということだけは記憶しておけばいいと思います。
割込みの発生

次に、GPIOの入力の使い方についてです。
入力は、もともと決められているしきい値を上抜けるか下抜けるときに割り込みが発生するということで使います。
しきい値になる電圧はマイコンによります。
例えば、MSP430のマイコンだと、電源を3Vで供給してあげているとき、
しきい値を上抜けるときに割り込みを発生させるなら、1.5Vから2.1Vの間の電圧を下から上に上がった瞬間に割り込みが発生します。
もう一方で、しきい値を下回る時は、3V電源だったら0.75Vから1.65Vの間、ここを上から下に落ちた瞬間に割り込みが入るという形になります。
出力の限界

続いて、GPIOを出力設定にした時は、マイコンと同じ電圧を印加します。
ここで注意しなければいけないのが、マイコンのGPIOから流せる電流には限界があるということです。
右図に流せる電流値のグラフを示しています。
いいとこ50mAぐらいしか流せなくて、LEDを点灯したいと思ってそこに10mA流すとかはいいんですが、
モーターとか数百mA、数Aを必要とする部品に電流を流そうとするのは難しいんですね。
これ、無理やりモーターをつないでGPIOの電圧を印加すると、電流を流そうとしてマイコンも頑張った結果、
電源電圧が下がってしまいます。
電源電圧をマイコンは常に監視しているので、下がりすぎるとマイコンがリセットしてしまいます。
なので、大きな負荷のかかる部品は直接マイコンのGPIOからは制御せず、
トランジスタとかFETとかリレーとか、別のものをかまして動かすっていうのが基本的な流れです。
まとめ
以上をまとめますと、
GPIOには入力と出力があります。
それぞれ方向とか、出力実際にするのか、内部抵抗をどうするのか、などを設定します。
入力のときは、マイコンで決められているしきい値を基準に超えたか下回ったかで割り込みが入ります。
出力設定のときは電流をたくさん流せないので、何でもかんでもGPIOで制御するのは難しいということは覚えておくといいです。
以上で終わります。ありがとうございました!
コメント