部品屋根性(30) Groveモジュール 信号レベル変換の罠?

Joseph Halfmoon

前々回、5V電源、5V信号レベルのGroveモジュールを3.3V電源、3.3V信号電圧レベルのWio TerminalのGroveポートに接続するのを見送っておったのが気になっておりました。ところが前回Groveコネクタと対応ユニバーサル基板を仕入れ、やっとやる気になったので、異なるGroveポート間での変換をするためのモジュールを作ってみました。しかし例によって意外?なところにハマる。

※「部品屋根性」投稿順Indexはこちら

前々回、4ピンのGroveコネクタにもいろいろあって、という事を書かせていただきました。機能的にもいくつか選択がある上に、電源電圧と信号レベルの組み合わせも装置によって異なる、と。ダイレクトに接続可能なものもあれば、不可なものもある。でも同じ形状で使いやすいので、

何か変換器でも用意すれば皆接続できていいんじゃね

と思うのは人情というものでありましょう。機能的には接続する端子を選べば良い。しかし、電源電圧と信号レベルは問題。ここで手元のGROVEモジュールを眺めると、マイコン(ホスト)側が5V系の場合はあまり接続問題はなく、問題になるのは、マイコン側が3.3V系の場合。そこで方針としては、

    • HV(5V)側に末端のGroveモジュールを接続する用途(ホストはLV3.3V)
    • HV(5V)電源は外から与える
    • デジタル信号のみ対応
    • 信号はHV(5V)、LV(3.3V)双方向伝達

といたしました。ぶっちゃけ前々回見送っていた3.3V系のWio TerminalのGroveポートに、5V化されたBMP280圧力センサモジュール(BMP280は3.3VのデバイスなのだけれどもSeeedSudio社 Grove Beginner Kit for Arduino用に5Vインタフェース化されたもの)が接続できるとよい、という方針。

自作GROVEレベル変換モジュール

まずは、作成した「変換」モジュールの簡素な回路図がこちら。電源は外部から与え、「信号レベルの変換」は、別シリーズ投稿で大量に仕入れてあるNch MOSFET、BSS138で行うもの。
Grove LEVEL Converter module circuitMOSFETによる信号レベルの変換については、「帰らざるMOS回路(18) N-MOSトランスファゲートでレベル変換」でもとりあげているのですが、おさらいのため、いい加減なSpiceモデルで、いい加減に確認しておきます。まず、心配なのが、5V系から3.3V系に5Vが流れこんでこないかという点。

BSS138_DC_HV2LV_CIRDC解析をしてみると、こんな感じ。約2.2V付近までは、5V系から3.3V系に信号が「流れ込んでくる」みたいですが、そこを超えると5V系の影響はなくなって行き、後は3.3V側のプルアップ抵抗で3.3Vへと上がっていく?BSS138_DC_HV2LV

逆方向に3.3Vから5V系に信号が伝達されるとき。

BSS138_DC_LV2HV_CIRやはり、2.2V付近までは、3.3V側でLOW側に引っ張っているのが5V系に伝わっていく感じでありますが、そこを越えると3.3V側の影響はなくなっていき、後は5Vプルアップで登っていく。本当か?

BSS138_DC_LV2HVまあ、実際の回路がこれに似た挙動を示すのであれば、想定しているI2C用のGROVEインタフェースの変換は勿論、MOS-ICがぶら下がっているような「デジタル信号」モジュールなら接続できるんではないの?

5Vのモジュールを3.3VのWio TerminalのGroveポートに接続

やってみました。接続するのは、GROVE化されたBMP280圧力センサモジュールです。下の写真の中央右上の小さなモジュール。本来BMP280は3.3V電源、3.3VのIO電圧なのですが、Arduino Uno(互換機)に接続するため、5V電源を与えてモジュール内で3.3Vを作っており、また、3.3Vの元信号を5Vに変換してコネクタに出てくるもの。

GroveCONVboardWithBMP280左上が、今回自作の変換モジュール、左下が3.3VのGroveポートを持つWio Terminail、右側は5V電源を取り出すのに使ったブレッドボード用電源です。こんな形で、Wio TerminalにArduino UNO上でBMP280を読み取れるプログラムを書きこめば、ちゃんと動作しました。

変換OKだな。。。

Passive Buzzorモジュールにハマる

これがあれば、デジタル信号で動く大抵のモジュールは皆接続できるんじゃないの。根拠のない楽観のもと、早速次なるモジュールを接続してみます。取り出したのは、やはりGrove Beginner Kit搭載のPassive Buzzerモジュールであります。PWM信号(信号的には0,1のデジタル)でブザーを駆動するだけのもの。5V電源のホストでは元気よく鳴るのですが、3.3V電源のWio Terminalに接続すると「蚊が鳴くような」音でしかならないもの。期待を込めて接続いたしました。

鳴りません

おやどうしたことか。ちゃんと5V電源生きているし。ブザーモジュールを取り外してAnalog Discovery2で波形を見てみると、期待通りの5V振幅のPWM波形が見えるというのに。。。

試みに信号レベルの変換機能の入っていないもう一つの変換ボードを使ってみました。アイキャッチ画像の下の方の小さいボード。信号はスルー。電源のみ外部から与えるもの。

か細く鳴きます

どうしたんだいったい?しかし、PASSIVE BUZZER MODULEの回路を見ればなぜかは一目瞭然でした。Passive Buzzerの投稿で掲げた図面を再掲載します。Grove Passive Buzzer Module Schematic

今回の変換モジュールだと、D6の先に変換器がついています。LOWはトランジスタで引いてますが、HIGHのときは10kΩのプルアップで吊り上げているだけ。ところが、このモジュールの駆動用のMOSFETにはR4なるプルダウンがふくまれている。その値1kΩ。変換器の10kΩ+R3の1kで吊り上げてもぜんぜんかなわない。MOSFET 2N7002はオンしていないでしょう。また、小さいボードで直結した場合は、マイコン側のトランジスタでHIGHを駆動することになるので状況は多少好転します。R3とR4の合計を最大3.3Vまで引っ張りあげる、っと。でも2N7002のゲートには、どう頑張っても1.65V以上にはかかりそうにない。

この変換方式では、入力インピーダンスが低いやつらは駄目だね、トホホ。

部品屋根性(29) 火炎センサ(flame sensor) に戻る

部品屋根性(31) HC-SR04 超音波センサ、3.3V信号接続 に進む