公開日:2020/02/22
title.png

9th Season


#9-6 SDカードI/F回路の改定

 5VのArduino UNO等で使用できる様、SDカードI/F回路を手作り(「#6-5 microSDカードI/Fを自作する」)したのですが、時々、動作が不安定になることがありました。
 全く関係のない回路設計をしていた時に気が付いたのは、「やっぱりレベルシフタ(L/S)のスピードが足りないのでは?」と、言う事。SPI通信を使うSDライブラリは、SPIクロックがデフォルトで4MHz、クロック周波数を指定すると8MHzまで高速化できます。オープンドレイン&プルアップの双方向L/S(下図)では、スピードが足りないのではないか?という不安は、前からありました。

ar47_lvshft.jpg

LTspiceでシミュレーションする

 LTspiceでSPI(8MHzクロック)を想定したL/Sのシミュレーションを実施して、現在の状態を確認してみます。

シミュレーションモデルの準備

 L/Sの動作シミュレーションをLTpsiceで実行するため、必要な部品(ライブラリやモデル)を収集しなければなりません。使用しているL/Sの回路は、以下図の様になっています。

ar73_lvshft.png

 抵抗は、いつもの様にデフォルトのモデルをそのまま使うとして、回路の肝でもあるエンハンスメントモードのFET、BSS138のモデルが無いと話になりません(上図青破線内の素子)。

  BSS138のspiceモデルを検索(新しいウインドウが開きます)

 モデルが見つかったら、「#6-2 オペアンプにspice」でLM358のモデルを組み込んだ手順に倣って、BSS138モデルを組み込みました。

現状の確認

 モデルが組み込めたところで、前節で示したL/Sの回路をLTspiceでエントリして、シミュレーションしてみました。確認すべき信号線は、大きく2種類です。

 シミュレーション結果は以下図の通りとなりました。

ar96_lsng.png

 やっぱりね<(1^_^💦)>。

 このL/Sは、信号をHIGHにドライブする回路を持たず、HIGH出力はプルアップに頼っているので、HIGH→LOWの遷移は速いのですが、LOW→HIGHの遷移は遅いのが特徴です。

回路特性を向上するには

 プルアップが必ずしも悪いわけでは無くて、要は、電流が足りないのですよ。前節で示した回路の様に、プルアップに10kΩの抵抗が入っているので、5V出力端子には、精々5V/10kΩ=500μA程度の電流しか流せないことになります。
 500μA程度の電流で、負荷回路の既成容量等に充電しない限り5Vまで上昇できないので、時間がかかる → 遅い、という構図です。もっと電流供給能力を増やしてあげれば、高速化できるはずです。
 そう、プルアップなので、並列にプルアップ抵抗を追加すると、合成抵抗は10kΩより小さくすることができるので、電流を流せる様に修正することができます。L/Sの外付けに、プルアップ抵抗を追加した、改定後の回路図を以下に示します。

ar96_schem2.png

 縦の青破線の内側がL/Sの回路で、その外に追加したRa1、Ra2が追加のプルアップ抵抗です。改定後のシミュレーション波形を確認しておきます。

ar96_lsok.png

SDカードI/F回路を改定する

 LTspiceでの確認結果に従って、SDカードI/Fの回路を改定しておきます(下図)。

ar96_schem.png

 ちょっと多めに電流を消費するようにはなったけど、安定してくれるといいなぁ。

 以下、改定後の回路をブレッドボードに作り込んで実験した時の様子です。

ar96_expr.jpg

 以下の様なアプリケーションで動作を再確認しました。

 改定前の回路では、起動時にSDカードが認識できないケースが時々あったのですが、少なくとも、今回試した範囲では、一度も遭遇しませんでした。改定前の回路でも、「実力」でそこそこ動いてはいたので、改定の効果を明確に実感するには至りませんでした。まあ、シミュレーションで明らかな様に、スペック未達だったところが向上しているので、デグレイドはしていないはず。

※「デグレイド」で心配なのは、電流が増えた点。特に、UNOの3.3V出力で使う場合。かえって悪影響を及ぼす可能性も0ではない。以下図の様な外部電源回路を使うのが正。ちなみに、下図の電源モジュールは、UNOから5Vを供給すると、そこから3.3Vだけを作ってくれるので、3.3V電源が欲しいだけならACアダプタ無しで使用可能です。

ar26_acpow.jpg


 DIYなのだから、「スペック満たしていなくても、実力で動くのなら、問題ない」と、言う考え方もありだと思います。現に、故意犯でスペック外使用する場合もありますから。でも、結果として動作不安定で、使い難くなってしまう様であれば、「問題あり」です。これからも、気が付いたところで、改定して行きたいと思いますm(1__)m。


btn_arduino.png

btn_prev.png btn_next.png

home