概要
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. トランジスタ
3. 電源
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
https://exabugs.com/archives/50577590.html