chottoshitahanashi’s diary

基本的に間違ったことばかり書いてるブログ。検索ひっかかるな

端子インピーダンスについて

基本LO出しHI受け。


入力はpull-upする場合もある。入力がpull-upされているときは出力側は入インピーダンスにすると勝手にHIになる。LOにするときだけGNDとのインピーダンスを小さくすればよい。


これは一本の線で双方向通信する時に使うことができる。線がどっかでpull-upされている時、受信したい場合は常にハイインピーダンスにしておく。送信したい場合は先ほどのようにHIにしたい時入インピーダンス、LOの時GNDとのインピーダンスを小さくする。これは線のどちら側のICがやっても良い。つまり

ハイインピーダンス:受信時、送信HI時
ローインピーダンス:送信LO時

どちらがいつ受信、送信するかのタイミングは何らかの方法で決まっていなければならない。要確認だがたぶんI2CのSDAラインはこれ。


送信LO時にはpull-up抵抗にはVDD-LO電位差とpull-up抵抗値によって決まる結構な量の電流が流れる。
受信側のインピーダンスは高いのでほとんどは送信側のICに流れ込む。低消費電流のICではこの電流値に耐えきれず誤作動する場合がある。VDD-LO電位差とpull-up抵抗値から電流値を計算し、それが定格を超える場合は要注意。双方向バッファ(リピーター)を介在させることによって回避することができる。なおLレベル=0.3Vddとのこと。ラズパイのI2CバスGPIO2,3は1.8kでpull-upされているらしい。結構小さな抵抗で驚いた。この辺全て秋月のFAQからの情報。普通pull-up抵抗は10kくらいらしい。秋月のFAQはなかなか意味わからなくて悩んだけどAQMシリーズ液晶が出力側でLOを出してる場合の話だね、LOになりきれないで誤動作する。


以上pull-upを例にとったがpull-downでも同じ理屈が成り立つ。


ArduinoではpinMode()関数で

pull-up抵抗値はAVRマイコンでは20k-50k保証、Arduino Dueでは50k-150k、Atmegaは20k。
大電流を必要としない場合は安全(とたぶん節電)のために470Ωか1kの抵抗を入れるべしとのこと。

Arduinoドキュメントのここがよくわからんかった。ここによると出力時はどちら方向の電流の供給もできるそうなんで低インピーダンスなんだと思うが

The pullup resistors are controlled by the same registers (internal chip memory locations) that control whether a pin is HIGH or LOW. Consequently, a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then switched to an OUTPUT with pinMode(). This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode().

意訳「pull-up抵抗はピンをHI or LOにするCPUレジスタと同じものによって制御されるのでpinModeをINPUT_PULLUPにした時とOUPUTにしてHIをwrite()した時のpinの設定状態?は同じになる。...」じゃあoutputはハイインピーダンスになるんじゃないかと思ったが、出力時のHI-LOコントロールとpull-upあり/なしが同じレジスタによってコントロールされると書いてあるだけでインピーダンスまで同じになるとは書いてないか。output HIの場合インピーダンスは低いがpull-upが付くということ?ローインピーダンスでVDDと繋がっていたらpull-upついててもついてなくても関係なさそうだけど。

VDD - 非常に小さな抵抗 - ピン
VDD - プルアップ抵抗 - ピン
ローインピーダンスの非常に小さな抵抗とプルアップ抵抗が並列接続されている、こんな感じ?じゃああんまり考えても意味ないね。


参考リンク:
FAQ詳細 秋月電子通商-電子部品・ネット通販
もう少し詳しく計算したい場合。入力インピーダンスと出力インピーダンスの関係 【Analogista】
ラズパイで測定した人の結果、出力HIもLOも低インピーダンスRaspberry Pi : WiringPi-PythonでGPIOの入出力設定の検証
I2C通信の使い方
Digital Pins | Arduino Documentation | Arduino Documentation
特に質問されてないけどこれは知っておけ - 入力/出力インピーダンス編 - - VIVITABLOG