(2014.5.14 作成)
5Vのマイコンと3V系のセンサーなどをつなぐ場合などは直接接続することは出来ず電圧を変換する必要があります。
このような場合に使用するのがレベルシフタと呼ばれる部品です。ここでは5VのArduino UNOを3Vの加速度センサーMPU-6050にI2Cで接続すること念頭に説明します。右の写真はSparkfun社のレベルシフタBOB-08754です。
電圧を変換するだけであればFETだけで出来るので個別にチップ部品を購入して自分で半田付けするのがもっとも安上がりだとは思いますが、200円程度でこのような基板が入手可能なので、このような基板を利用するほうがよいと思います。
なおここで紹介するBOB-08754は既にSparkfunでは生産終了しており、後継のBOB-12009が推奨されています。どちらでもここで紹介するFET(Fairchild社製BSS-138)が使用されているので使用方法は同じです。
接続は以下の通りです(回路図をクリックすると拡大します)。HVは5V, LVは3.3V, TXOをI2Cの5V側, TXIをI2CのSCL側, RXは使用しません。
このように接続することで5V系と3V系のI2Cを接続することが出来るようになります。
BOB-08754のFET周辺の回路図を右に貼り付けます。
I2Cは無通信時には信号線が高電圧側に固定されており、Master(Arduino)またはSlave(センサー)が信号線をGNDに落とすことで通信を行います。このため5V側がGNDに落ちると3V側もGNDに落ち、3V側がGNDに落ちると5V側もGNDに落ちる必要があります。これを実現するためにBOB-08754ではn型のMOSFET(BSS-138)を以下のように使用しています。
無通信時 | FETのゲートとソースが同電位なのでスイッチがOFFとなり、5V系と3V系が分断される。 |
5V系がGND | ボディダイオードを使用して電流が流れ、3V系をGNDに落とす。 |
3V系がGND | FETスイッチがONとなり、電流がドレインからソースを通って5V系をGNDに落とす。 |
少し説明が長くなってしまったので、ページを分割します。なかなか直感で動作が理解しづらいのでシミュレータを使って動作を紹介します。