Arduino
IoT
ESP8266
ESP-WROOM-02
LTSpice

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

More than 3 years have passed since last update.


概要

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

スクリーンショット 2016-03-13 10.47.47.png


インストール

今回使うシミュレーション・ツールは定番の LTspice (無料)。

ダウンロードはこちらから

http://www.linear-tech.co.jp/designtools/software/#LTspice

スクリーンショット 2016-03-13 5.26.04.png

スクリーンショット_2016-03-13_5_26_40.png


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」で検索。

スクリーンショット 2016-03-13 0.46.14.png

あるいは、現在のJIS規格 ではこちら。(個人的にはこっちがいいな)

misc にある。「ヨーロッパ抵抗」というらしい。

スクリーンショット 2016-03-13 1.13.35.png


2. トランジスタ

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

スクリーンショット 2016-03-13 0.47.04.png


3. 電源

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

スクリーンショット 2016-03-13 1.09.50.png


4. グランド

これがわかりずらい。

グランド(アース) は、F4(NetName) で GND を選択。 → ショートカットは「g」キー。

スクリーンショット 2016-03-13 5.14.34.png


ワイヤで接続する

Draft - Wires (ショートカットは「F3」) ワイヤで結んでいく。

(ワイヤの斜め線を書きたい場合は「Shift」を押しながら。)


ワイヤに名前をつける

Draft - Net Name (ショートカットは「F4」)

出力端子 (IO0/RESET) と 入力端子 (RTS/DTR) に、ラベル(名前)を付ける。

Port Type は、Output(出力) / Input(入力) / Bi-Direct.(両方向) を適切に選択!!

スクリーンショット 2016-03-13 5.11.35.png


最後に忘れない

Draft - SPICE Directive (ショートカットは「s」キー) で、以下を追加する。

(これがないと、エラー「No analysis command found.」となる。)

.tran 0 0.2 0 1m

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

スクリーンショット 2016-03-13 4.16.55.png


回路

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

スクリーンショット 2016-03-13 4.16.22.png

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

スクリーンショット 2016-03-13 10.47.47.png


入力信号を定義する

RTS/DTR は入力信号です。LTSpice では、電源を使って入力信号を表現するようです。

RTS/DTR の voltage 記号で右クリック。以下を入力。

スクリーンショット 2016-03-13 3.54.39.png

スクリーンショット 2016-03-13 3.54.51.png

設定値の意味は

属性
意味
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


シミュレーション実行

やっと、ここから、シミュレーション!!

「走る」アイコンでシミュレーション開始!!

スクリーンショット_2016-03-13_4_16_22.png

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

スクリーンショット 2016-03-13 3.19.35.png

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

AddPlotPane.png

おぉ!画面が分割して、グラフが二つ書けそうな雰囲気になる。

左クリックで、どちらのグラフを使うか選択できる。微妙なハイライトで分かりづらい。

ここではとりあえず、上側を選んでおく。

スクリーンショット 2016-03-13 3.22.41.png

ここで、ウィンドウを、もとの回路図に切り替える。

マウスカーソルを、RTS の上に持って行くと、カーソルが「鉛筆マーク」(電圧計測)に切り替わる。(これ多分「プローブ」かな。アイコンが下手すぎるwww)

ぽちっと左クリックすると、先ほどのグラフ上に、RTS のグラフが描画される!

(カーソルが「蜂マーク」になった場合は「電流計測」になります。もしや「クランプメーター」を表している?)

スクリーンショット 2016-03-13 3.29.16.png

ここまでくれば、しめしめ。あとは、同じく DTR をグラフに追加する。

グラフの下側を選択して、IO0 と RESET をグラフに追加する。

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

スクリーンショット 2016-03-13 4.12.50.png


考察


  • シミュレーションの結果は、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