前回の時点で、半二重RS-422にて壁越えを行う方針が決まりました。
次の課題は電圧レベルの差です。
先に述べたように「かんたんスマートモニター」側は3.3Vのシステムに対し、
BME280は標準1.8Vのセンサー。
それをどう繋ぐか、という話ですね。
半二重RS-422を使うので、トランシーバーとマイコンが追加されました。
それも加味した図が下記。
電圧レベル変換の対処法は複数考えられます。
それぞれ見ていきましょう。
1.オール3.3V案
先に書いたようにBME280自体は3.6Vまで印加可能ですので、
センサーも3.3Vで駆動してしまおうという案です。
細かいことを考えなければ、これが一番単純ですね。
センサーの発熱が増えるでしょうから測定誤差の懸念が出ますが、
あくまで自分用として割り切ってしまえば、これも有りかもしれません。
2.SPI信号変換案
これはセンサーのみ1.8Vで駆動し、SPI信号で電圧レベル変換を行う案。
1.8Vと3.3Vの電圧変換というのは割と選択肢が少ないんですね。
(3.3Vと5Vの変換ですと結構選択肢が多いのですが。)
ここで使用できる変換ICは大きく分けて2種類になります。
1つ目は単方向型ロジックIC。
もう1つは双方向型ロジックICです。
どちらも2電源入力タイプなので、今回の場合ですと1.8Vと3.3Vの両方を給電します。
単方向型というのはバッファーのように入出力が決まっているものです。
方向制御ピンにより入出力方向を切り替えられる物もこれに含みます。
今回の場合ですと、TIのTXU304がジャストフィットします。
たぶん、SPIバス用にリリースされている製品かと思われます。
双方向型ですと東芝のTC7QPB9306等、複数の製品が存在します。
双方向型の場合、信号の入出力方向の設定が存在しません。
任意の側から信号を入れてやれば、電圧変換された信号が反対側から出てきます。
これはI2Cバスでは非常に便利なので、昨今重宝されてる模様です。
しかしながらこのタイプはオープンドレインドライバーが基盤となっております。
従ってL->Hへの遷移時は外付けのプルアップ抵抗に頼る形になります。
プルアップ抵抗の抵抗値が高いと波形の立ち上がり時間が遅くなり、
データー伝送速度が抑制されてしまう点が要注意です。
SPIバスのような高速バスに使用する際はプルアップ抵抗をかなり下げる必要があり、
結果として変換デバイス部の消費電力増加に繋がってしまうので、
使いどころを見極める必要があると言えるでしょう。
3.非同期シリアル信号変換案
これはマイコンも1.8Vで駆動し、差動トランシーバーとの間で電圧変換する案です。
パッと見ではSPI変換案と大差無いようにも見えます。
SPIバス変換の場合は同方向×3+逆方向×1の、
いわゆる3+1という回路数になるわけですが、
非同期シリアル信号変換の場合は2+1で済みます。
更にSPIに比べると信号速度が遅目なので、選択肢が増えるんですね。
1つのICで済ませようと思うと、TIのTXU304やTXU0204辺りが使えます。
2+1で済むと記述しましたが、この内の1本は差動トランシーバーの送受切替信号です。
これはデーター線ほど高速に動く必要が無いので、
ディスクリートのトランジスターやFETでレベル変換させる事も可能。
そうするとデーター線は1+1のみで済むので、
TXS102やTXU102が1個で足りる事になります。
RS-422の速度を抑えれば、全てディスクリートデバイスでレベル変換も可能でしょう。
部品数が増えてしまうので、ここはお好みという感じです。
4.RS-422でレベル変換を兼ねる案
これは思い付きで頭に浮かんだ案です。
差動信号伝送というのはペアとなる信号線の位相差を使った信号伝達です。
つまり各信号自体の電圧レベルには依存していないという事になります。
ならば1.8V系システムと3.3V系システムを差動信号線で直結できるのでは?
と考えたわけです。
ここで出てくる問題点は以下の2つ。
1つ目は1.8Vで動作する差動トランシーバーが存在するのか?
2つ目は1.8Vで駆動する差動トランシーバーで3.3V信号を受けられるのか?
という点です。
探してみると1.8V動作可能な差動トランシーバーは存在しました。
ルネサスのISL32600シリーズです。
次の課題としては、この石で3.3V信号が受けられるかという点ですが・・・・・
残念ながらNGでした。
電源電圧に対する信号線電圧範囲はコモンモードレンジとして規定されています。
パッと見、この石のコモンモードレンジは必要十分な広さが有る様に見えますが、
よ~く見てみると、電源電圧に依存すると注釈が有ります。
なんと3.3V電源動作時は結構なレンジを有しているのですが、
1.8V電源動作時は±2Vのレンジしかありません。
これでは3.3Vの信号を入力することは不可能です。
ならばドライバーとレシーバーがピンレベルで分離しているISL32602を使い、
抵抗分圧で減圧した信号をレシーバーに入れるという案も考えてみました。
ところがこれも問題発生。
RS-422やRS-485では伝送路のインピーダンスマッチングの為、
両端に負荷抵抗を付けるのは 皆さんご存じかと。
ところがISL32600シリーズを1.8V電源駆動した場合、
出力ドライバーの能力の問題なのか、負荷抵抗が10KΩまでに制限されるとな。
さすがに10KΩだと まともにインピーダンスマッチングが行えません。
なので5mのケーブル伝送には使えないという事になります。
1.8V駆動の差動トランシーバーはISL32600シリーズしか見つからないので、
事実上この案は没ということになってしまいました。
余談ですが、3.3V系と5V系を繋ぐ場合には、この方法が使用可能です。
ISL32600シリーズの場合、コモンモードレンジが12Vまで有るので、
5Vの信号も余裕で受けられます。
たぶん他の石でも同様の余裕は有ると推測されます。
これは割と有用な手段かもしれません。
以上のような考察に基づき、回路設計と基板設計を行っておりました。
現時点は基板の発注待ちという段階です。
実機が動き出したら、この続きを書く予定ですので、
それまでは暫くの間、この話は休止です。