« 10月終了のお知らせ | トップページ | 温度センサー色々 »

2011年11月 3日 (木)

I2Cバスのレベルシフト

世の中,I2Cバスなるものがあります。

マイコンやら周辺LSIをバス状に繋ぐ半二重のシリアルインターフェースで,データの送受信を行うSDAと,クロックを送るSCLがあり,そこにデバイスがバス状にぶら下がります。

 

はてさて,GNDと合わせて3本でデータが送れ,バス状に結線できるので便利なI2Cバス。

ただ,世の中すべての部品が5Vで動いてくれたり,3.3Vで動いてくれるわけではありません。

そうするとレベル変換をすることになるのですが,I2Cバスはどっち向きにも信号が流れていきます。

なので,オープンコレクタで変換では単一方向にしか信号流せなくなってしまいますので,うまくありません。

ダイオードでクリップさせると,5V側から3.3V側に送るときはいいのですが,3.3V側から5V側に送ろうとすると,5V側のHの閾値に到達せず,うまく行ってくれません。

(と言いながら,マージンを見て作られているでしょうから,ナンダカンダ動いてしまうと思いますが・・・)

 

と言うわけで,調べてみたら,何か皆さんお悩みの模様。

ってか,私も困ったんで調べたんですが(-w-;

 

調べてみると,PhilipsのI2Cバスの仕様書を読んだら,なんと,ご丁寧にレベルシフト回路が書いてありました(^^;

因みにI2CバスはPhilipsが作った仕様で,最新版の仕様書(しかも日本語の♪)はNPXのサイトからダウンロードできます。

で,回路としてはこんな回路が載っています。

Philips_2
  
 

PチャネルMOS-FETを使った回路です。

PチャネルFETはP型半導体の両端がドレインとソース,その中間部が凹んでおりそこにN型半導体がはまってるような構造で,N型半導体がゲートです。

MOSの場合のみ,N型とP型の間が酸化膜で絶縁されています。

で,ゲート電位がP型半導体の電位より高ければON,低ければOFFします。

この回路では常時ゲートは3.3Vになっています。

この為,ドレインであろうがゲートであろうが,この間は単なるP型半導体の金属の板なんで,どちらかが0Vになればゲート電位が相対的に高くなり,MOS-FETはONとなり,通通の状態になります。

すると,5V側も3.3V側も入力された0Vと短絡となり信号線は0Vになります。

しかし,ドレイン及びゲートとも3.3V以上になると,ゲート電位は高くなくなるのでMOS-FETはOFFとなりますので,それぞれの系統が切り離され,プルアップ抵抗から電源電圧が供給されます。

そのため,それぞれの電位のHになります。

 

・・・けど,MOS-FETなんてもってねぇっつの(´・ω・`

 

って,Webで探してたら,まったく同じ事言ってる人がいたりして(-w-;

 

そんな中見つけたのが,こちら↓

 

http://gomisai.blog75.fc2.com/blog-entry-46.html

http://blogs.yahoo.co.jp/gomisai/14177916.html

 

ねがてぃぶろぐの・・・いまだにこの人の名前,どこで見たら良いのか分かりません(-w-;

え~っと・・・

ま,いいや・・・

 

何かと調べ事としてるとためになるこのブログ,今回もためになるお話。

バイポーラトランジスタ1個で変換してます。

仕組みはPチャネルMOS-FETのときと同じです。

 

で,このブログにも書かれていますが・・・

NPN型トランジスタってコレクターからエミッタに向かって電流が流れると思うでしょ?

でも実は逆でもOKです。チョット特性悪いですが。

いかんせん『NPN』なんで。

エミッターもコレクターも『N』ですから(^^;

このことも書かれていますね。

 

不思議かもしれませんが,実際,そういう使い方をする場合も有ります。

ミュート回路なんかがそうです。

 

ただ,やっぱり逆なのは逆。

いえ,問題は無いです。

でも気になる。

と言うか,書いてる本人もそういうようなことかいてます。

 

で,なんかいい方法はないかなぁ~と考えてみました。

で,出来たのがこちら。

 

33v_to_5v

 
 

はい,2SK30でサクッと作ってみました。

てか,作ってはいませんね。シミュレーションしてみました。

 

回路としては2つの回路の中間位の回路です。

2SK30はNチャネルFETです。

構造としては先ほどのPチャネルのNとPが逆になったものです。

で,2SK30はMOSではないので,この間は絶縁されていません。

 

さて,NチャネルFETはゲート電圧がドレイン,ソースより低くなるとOFFになります。

この回路はゲートがGNDにつながっているので,ゲート電圧は常に0Vです。

なので,ドレインないしゲートが0Vの時はONとなっています。

しかし,ここでドレインないしソースに電圧がかかると,ゲートは0Vのままですから,相対的にゲート電位が低くなります。

そのため,FETはOFFとなります。

もう,ここから先は他の回路と同じです。

と言うわけで動くわけです。

 

5v_to_33v

 
さて,入出力を入れ替えてみます。

が,FETのドレインとソースの間は単なるN型半導体の金属の板です。

ですので,極性は関係ありません。

なので,『逆』という事はありません。

一応,100kHzの信号でも使えそうな感じです。

 

はい,コレでスッキリしました。めでたしめでたし・・・

 

と行きたいところですが,この回路,一つだけ欠点があります。

GNDは必ず同じ電位で無ければいけません。

もっと正確に言えば,電位差が0.6V以内でなければいけません。

 

と言うのは,FETはゲートとそのほかの端子間は,構造上,単なるダイオードです。

MOSなら絶縁されていますが,MOSでないものは絶縁されていません。

その為,Nチャネルの場合,ゲートはP型半導体ですので,ゲートがドレインやソースよりも,ダイオードの順方向電圧である0.6Vよりも高くなると,導通になってしまいます。

なので,ゲートや,デバイスに大量の電流が流れ,FETやデバイスが破損します。

 

そこだけ注意です。

まぁ,通常別にはしないでしょうけど,色んな回路がありますから。

もし不安があるようであれば,ゲートとGND間に抵抗器をいれ,破損するまで電流が流れないようにしてみてください。

|

« 10月終了のお知らせ | トップページ | 温度センサー色々 »

電子工作関係」カテゴリの記事

マイコン関係」カテゴリの記事

電子工学」カテゴリの記事

計測・制御関係」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: I2Cバスのレベルシフト:

« 10月終了のお知らせ | トップページ | 温度センサー色々 »