ESP8266 (ESP-WROOM-02) 回路シミュレーション・ツール LTspice (無料) の使い方 まとめ


概要

Mac版 LTspice で 回路をシミュレートして、動作を理解する。

はじめに

hotchpotch さんの Qiita記事
http://qiita.com/hotchpotch/items/8a6fe6b8b0026ac6218e
で、スイッチサイエンスの「自動書き込みモード」の回路について言及されていましたが、それが気になって気になって。
動きが理解できなかったので、「そうだ!シミュレーションしてみよう!」というのが発端です。
今回、なかなかうまくシミュレートできた(と思う)ので、ツールの使い方をQiita化しておきます。
(しかし、謎は解けていない)

なお、シミュレーションの対象となる回路は、以下の部分です。
http://doc.switch-science.com/schematic/ESP-WROOM-02_devboad/ESP_WROOM_02_FTDI.pdf

インストール

今回使うシミュレーション・ツールは定番の LTspice (無料)。
ダウンロードはこちらから
http://www.linear-tech.co.jp/designtools/software/#LTspice

LTspice の使い方

最初が、非常にとっつきにくいです。
Windows版の移植だそうですが、UI ヒドいなコレ。

とにかく、ファンクションキー と ショートカット を覚えるのだ!!

  • ファンクションキーでコマンド開始
キー 名前 意味
ESC Cancel コマンドのキャンセル
F2 Component 部品を配置
F3 Wires ワイヤで結ぶ
F4 NetName ワイヤの名称をつける
F5 Delete 削除
F6 Duplicate コピー
F7 Move 移動
  • ワイヤの斜め線を書きたい場合は「Shift」を押しながら。
  • 配置時に、部品を回転させるには Ctrl + r。 鏡映は Ctrl + e。
  • Windows版では "Control Panel" の "Netlist Options" で、"Convert 'μ' to 'u'" に「必ず」チェックをいれる。
    Mac版では設定を変更する必要はない。
  • 保存時の名前に日本語はNGでした。

実際に回路を書いていく

部品を配置する

Draft - Component を選択する。(ショートカットは「F2)

  • 計量単位 "Ω"、"V"、"A" は省略可能。
  • 大きさの単位(補助計量単位)は、以下を使う。
単位 乗数 名前
PET 10^15 ペタ
T 10^12 テラ
G 10^9 ギガ
meg 10^6 メガ
k 10^3 キロ
m 10^-3 ミリ
u 10^-6 マイクロ
n 10^-9 ナノ
p 10^-12 ピコ
f 10^-15 フェムト

1. 抵抗

馴染みのある記号。「r」で検索。

あるいは、現在のJIS規格 ではこちら。(個人的にはこっちがいいな)
misc にある。「ヨーロッパ抵抗」というらしい。

2. トランジスタ

そのものズバリ、「npn」で検索すると出てくる。

3. 電源

voltage で検索。「入力信号」にも、これを使う。

4. グランド

これがわかりずらい。
グランド(アース) は、F4(NetName) で GND を選択。 → ショートカットは「g」キー。

ワイヤで接続する

Draft - Wires (ショートカットは「F3」) ワイヤで結んでいく。
(ワイヤの斜め線を書きたい場合は「Shift」を押しながら。)

ワイヤに名前をつける

Draft - Net Name (ショートカットは「F4」)
出力端子 (IO0/RESET) と 入力端子 (RTS/DTR) に、ラベル(名前)を付ける。
Port Type は、Output(出力) / Input(入力) / Bi-Direct.(両方向) を適切に選択!!

最後に忘れない

Draft - SPICE Directive (ショートカットは「s」キー) で、以下を追加する。
(これがないと、エラー「No analysis command found.」となる。)

.tran 0 0.2 0 1m

意味は「0〜0.2秒まで0秒目から0.001秒ずつ計算する」です。

回路

これが、最終的に出来上がった回路。

こっちはオリジナル。うん、間違いなさそう。

入力信号を定義する

RTS/DTR は入力信号です。LTSpice では、電源を使って入力信号を表現するようです。
RTS/DTR の voltage 記号で右クリック。以下を入力。

設定値の意味は

属性 意味 RTS DTR
Vinitial Lレベルの電圧 [V] 0 0
Von Hレベルの電圧(V) 3.3 3.3
Tdelay 時間0から電圧が上がり始めるまでの時間 [s] 0 0.06
Trise LレベルからHレベルに変化するまでの時間 [s] 0.01 0.01
Tfall HレベルからLレベルに変化するまでの時間 [s] 0.01 0.01
Ton Hレベルになっている時間 [s] 0.05 0.05
Tperiod パルス列の周期(LレベルとHレベルの中間電圧の幅) [s] 1 1
Ncycle パルスの数 1 1
  • レベルが変化するのに必要な時間を、0.01s と仮定しました。
  • DTR の Tdelay 0.06 は、RTS と同期するための値 (0.05 + 0.01) です。

何故なら、ファームウェア書き込みツール esptool.py のコードが以下だから。
https://github.com/themadinventor/esptool/blob/master/esptool.py#L156

# RTS = either CH_PD or nRESET (both active low = chip in reset)
# DTR = GPIO0 (active low = boot to flasher)
self._port.setDTR(False)
self._port.setRTS(True)
time.sleep(0.05)
self._port.setDTR(True)
self._port.setRTS(False)
time.sleep(0.05)
self._port.setDTR(False)

Netlist

最終的に出来上がった回路のNetlist
(View - SPICE Netlist で表示できます)

* /Users/dreamarts/Desktop/ESP8266.asc
Q§TR2 IO0 N002 DTR 0 NPN
Q§TR1 RESET N003 RTS 0 NPN
V1 N001 0 +3V3
R4 N001 IO0 10K
R6 RTS N002 10K
R5 N001 RESET 10K
R7 DTR N003 10K
V§RTS RTS 0 PULSE(0 3.3 0 0.01 0.01 0.05 1 1)
V§DTR DTR 0 PULSE(0 3.3 0.06 0.01 0.01 0.05 1 1)
.model NPN NPN
.model PNP PNP
.lib /Users/dreamarts/Library/Application Support/LTspice/lib/cmp/standard.bjt
.tran 0 0.2 0 1m
.backanno
.end

シミュレーション実行

やっと、ここから、シミュレーション!!
「走る」アイコンでシミュレーション開始!!

最初は「真っ黒」な画面が出て、なんじゃこりゃ?と思わせるが、ここであわてない。

黒い画面上で「右クリック」。「Add Plot Pane」を選択。

おぉ!画面が分割して、グラフが二つ書けそうな雰囲気になる。
左クリックで、どちらのグラフを使うか選択できる。微妙なハイライトで分かりづらい。
ここではとりあえず、上側を選んでおく。

ここで、ウィンドウを、もとの回路図に切り替える。
マウスカーソルを、RTS の上に持って行くと、カーソルが「鉛筆マーク」(電圧計測)に切り替わる。(これ多分「プローブ」かな。アイコンが下手すぎるwww)
ぽちっと左クリックすると、先ほどのグラフ上に、RTS のグラフが描画される!
(カーソルが「蜂マーク」になった場合は「電流計測」になります。もしや「クランプメーター」を表している?)

ここまでくれば、しめしめ。あとは、同じく DTR をグラフに追加する。
グラフの下側を選択して、IO0 と RESET をグラフに追加する。

そして、完成したのがこれ。なんとも RESET のタイミングが超絶に微妙。

考察

  • シミュレーションの結果は、hotchpotch さんの言うように、RESET の LOWトリガ よりも IO0 の HIGH 復帰の方が早いことになっている。というか、微妙。同時だなこれ。
  • これで「書き込みモード」になる?ならない?
  • しかし、実際の回路だと、必ずうまく「書き込みモード」になるそうだ。何故かはわからない。
  • 自分も、7of9 さんのいうように、バイブレータ回路 になっていて、相手方のトランジスタの出力を入力することで安定化している、と思ったのだがそうでもないらしい。解る人居たら教えて下さい…><!
  • (→ なんならスイッチサイエンスさん教えて!!)
  • 初めて使ったけど、操作になれると、実は LTspice よく出来ている。
  • upvertor でもシミュレーション機能をそのうち出す、とか言っていたけど、なかなか出ない。このままだと、LTspice いいじゃん、ということになっちゃうよ。
  • LTspice タグ、1番ゲット!!

参考

http://ahonoyashiro.blog.fc2.com/blog-entry-79.html
http://www.cn.kagawa-nct.ac.jp/~kusama/experiment/cn4/T4_LTspice_2.pdf
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13109790308