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で行った
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 件のコメント:
コメントを投稿