LoginSignup
30
31

More than 1 year has passed since last update.

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

Last updated at Posted at 2016-03-12

概要

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
https://exabugs.com/archives/50577590.html

30
31
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
31