以前記事にしたESP-01ボードの自動flash書き込み回路の回路図。
参考にしたのはWeMos D1ボードの回路図だが、よくよく見てみると使っているトランジスタがLMUN2233という抵抗内蔵型の物だった。…ってことは、この回路じゃマズいじゃん??と思うに至り、詳しく調べることにした。
LTSpiceで回路図を描く
まずはトランジスタ回路を抜き出してLTSpiceでシミュレーションを行うための回路図を描く。
DTR信号とRTS信号の代わりに周期の違うパルス信号を生成してトランジスタへの入力とした。この信号はICの出力ということもあって、パルス生成用の電圧源に直列抵抗100Ωを設定している。
真理値表を作る
LTSpiceで実際にシミュレーションをする前に、回路についてもう少し調べておく。
基本的にこの回路ではトランジスタはインバータのように使われている。その動作原理は、以下の通り。
- ベース-エミッタ間が順バイアス(つまり、ベースがHighでエミッタがLow)になった時にコレクタ電流が流れる
- それ以外の時はコレクタ電流は流れない
コレクタ電位はコレクタ電流が流れた時はLowに落ち、コレクタ電流が流れない時はHighだ。これに基づいて真理値表を作ると以下のようになる。
DTR(Q1b,Q2e) | RTS(Q1e,Q2b) | OUT1(GPIO0) | OUT2(RST) |
---|---|---|---|
L | L | H | H |
L | H | H | L |
H | L | L | H |
H | H | H | H |
DTR=HighかつRTS=Lowの時にOUT1がLowになって、DTR=LowかつRTS=Highの時にOUT2がLowになるというデコーダのような働きをする回路とわかる。
LTSPiceでシミュレーションをしてみる…あれれ?
シミュレーションをしてみたところ、なんとトランジスタへの入力信号が化けている!以下のグラフの電圧源V1(DTR)は1ms周期の矩形波に設定しており、0.5〜1.0msの所は0Vの筈が1.2Vに、1.0ms〜1.5mSの所は3.3Vの筈が2.1Vになってしまった。
入力信号が化けてしまう原因はトランジスタに流れる電流を調べれば一目瞭然で、ベース電流とコレクタ電流の大きさが通常のトランジスタの使い方と逆転している。抵抗を挟まずにベース-エミッタ間に電圧をかけたから大きな電流が流れてしまったということだ。信号源に100Ωの内部抵抗を入れたからこの電流値で収まっているが、それが無ければいくらでも電流が流れる状態…(怖)
しかし意外なことにトランジスタの出力であるコレクタ電圧はそれほど変ではない。Lowレベルが1.2Vと微妙な電圧だが、許容範囲内だから書込みが出来ていたんだろう。
設計し直した回路
上記回路の問題点は、トランジスタOn時のベース電流が流れすぎていること。これを踏まえて設計し直した回路は以下。
この回路ならトランジスタへの入力信号が化けることもないし、以下の通りLow時のコレクタ電圧もちゃんと0V付近まで落ちてくれる。
実際ESP-01の自動フラッシュ書込みこの回路に修正したところ、問題なくフラッシュの書込みが行えた。
まとめ
以前に作った回路でもflash書込みは問題なく出来ていたので実用上は問題無いともいえるが、やはりベースにコレクタより大きな電流が流れるというトランジスタの使い方は気持ちが悪い。記事も訂正しようと思う。
今回作ったLTSpiceのascファイルも一応置いておく。
コメント