2015年3月17日火曜日

Nch MOS FETで3.3V<->5V双方向レベルシフト

交換してもらったオシロのプローブが届いたのでハードウェアの実験

I2Cではなく、SPI等普通の入出力のレベルシフトです

<追記: 2015.03.17>調べてみたらこの回路I2Cでも使えるようです。前書いた記事「I2Cの5V↔3.3Vレベルシフト」(http://dad8893.blogspot.jp/2014/09/i2c5v33v.html)の「Nch MOS FETを使う」で挙げた回路と一緒です。パッと見の見た目が違うだけだった(^q^;</追記>

SparkFunの「Logic Level Converter - Bi-Directional」の回路図を参考にNch MOS FETで実験してみた
https://www.sparkfun.com/products/12009

LTSpiceでシミュレーション

手持ちにあったので実際は2N7000で実験したが、シミュレーションはLTSpiceにデフォルトで入っていた2N7002で行った



500Hzの矩形波でのシミュレーションだ

3.3V→5V、5V→3.3Vの両方をやってみた
どちらもうまくいった

ブレッドボードで実験



5V→3.3Vの変換はArduinoで5V/500Hzの矩形波を出力するスケッチを書いて
3.3V側の波形をオシロで見た

電源電圧の実測値は
3V: 3.37V
5V: 4.93V

赤色が3.3V側、黄色が5V側(Arduinoの出力)

3.3V→5VはPSoC 4 Pioneerを3.3V駆動させて波形を出力、5V側をオシロで測定した

電源電圧の実測値は
3V: 3.40V
5V: 4.92V

赤色が3.3V側(PSoCの出力)、黄色が5V側

どちらもうまく動いているようだ(^q^/

動作周波数を上げてみる

PSoCのPWMを使って出力周波数をあげてみた

100kHz



変換後の波形がなまり始めた

200kHz



かなりなまってきたが、まだ5V付近まで電圧は上がっている

500kHz


最大でも4V程度までしか電圧が上がっていない

1MHz



もはやコンバート前の3.3Vより電圧が下がってしまっている(^q^;

Nch MOS FETでのコンバートは200kHzぐらいまでと考えたほうがいいかもしれない

負荷にRやCをつなぐとさらに出力電圧は下がる

LTSpiceで周波数を500kHzにしてシミュレーション


シミュレーションでも500kHzにすると波形がなまる
実験と案外似通った結果だ

Nch MOS FETのレベルシフタを通してNokia 5110を動かしてみた


画像ではLCDに何も表示されていないが表示はされる。

が、データの読みこぼしがあるのか頻繁に表示が崩れてしまう(^q^;;;

画像の通り何も表示されない状態になることもある

SCKの波形


Arduinoからの5V出力は3.3Vにレベルシフトされているが、波形がかなりなまっている

カーソルを使って周波数を調べるとだいたい315kHz程度だった

<LCD-5110_Basic>ライブラリのソースを眺めた感じでは
Arduinoの<SPI>ライブラリは使わずにAVRのSPI用のレジスタを直にたたいているようだ

ともかくNch MOS FETを使ったレベルシフトはSPIでは速度的にきついのかもしれない

考えてみればSPIはMOSI、MISOとマスタ・スレーブ間が一方通行なので双方向変換でなくてもいいのか

Rとダイオードとかもっと速度的に期待できる方法も試してみようかな

ぴゅんぴゅん3号のファームウェアのプログラミングが何かやる気が起きないので
こまごましたハードの実験をもう少しやるかもしれません

0 件のコメント:

コメントを投稿