*spice遊び
何故にspiceなんてのに手を出した? おまえは既にハード道とは縁を切って、ソフト道に 足を踏み入れていると言うのに。そう、ハードは目が悪くなって、米粒な部品をハンドリング 出来なくなって、諦めたんだった。
ウブを16.04にしたら、デフォのpythonが3系になってた。これを記念してpythonで何か やろう。それには、python用の素敵なreplが欲しいな。
emacsの上で動かしてもいいんだけど、それじゃ芸が無い。IPythonが現代風。でも、qtが 基底にあるIPythonは遅い事確実。だったら、入出力をブラウザーに任せてしまった、notebookが 良かろう。
IPython notebookって、juliaもサポートしてたよな。やってみんべ。で、Ipythonから 進化したjupyterに鞍替え。満足、満足。
何か、面白いアプリ無い? あちこちを嗅ぎ回る。おお、pythonでLCRの回路シュミレータを やった人が居るよ。その人のまとめによると、もっと本格的なのが有るよとの事。
探してみたぞ。元祖spiceとか、その発展系のngspiceとか。GUIのアプリで回路図を 書いておいて、それをシュミレーションするやつとか。入れてみたけど、めちゃ遅い。
ならば、Windows7にスイッチしてltspiceなんてのはどうだ。他にもWindowsで動く やつが有るようだけど、デファクトスタンダードみたいだから、ltspiceで満足だな。
これはもう電子工作の世界。ハード道の再来です。嬉しくなりました。何かやってみろ。 そこで思い立ったのが、TTLの等価回路を世に有るトランジスターで組んでみる事。 そして、内部の節点にプローブを当てて、オシロスコープで波形を観測してみる事。
やってみると、思うように動かない。理想と現実が横たわっているのでありました。 ここまでが、前回までの成果と言うか軌跡です。
我ながら、遠くまで来たもんだ、と言うか、糸の切れた凧みたいだな。
パラメーター抽出
前回やった、自家製のSN7404を作ると言う試み、何も考えずに石を選定してしまうと 動作がめっぽう遅いICになってしまう。ちなみに、現実のICのスペックはどれぐらいか カタログを取り寄せてみた。 SN7404 data sheet
少しは自分で使う石を選定してみろよ。そんな時には、自作者の御用達、 秋月電子通商 NPNトランジスタ とかを調べればよい。プロフェッショナルなら RSコンポーネンツか。 同僚がよく、ここから部品を着払いで調達してた。同僚が席を外してる時に荷物が届くと、 オイラーが立替払いで荷を受け取った。たまに、数万とか言われて、焦る事が有った。 懐かしい!!
でも、これだと本当に半田こてを振り回すはめになるんで、 涙を飲んで諦める。
ltspiceに付属のカタログからチョイスして使おう。えと、高周波スイッチングに 良く効くパラメータは何だ? 眼grepするには老人には辛いな。だって山程パラメータが 列挙されてるんだもの。必要なものだけ選び出して表示して欲しい。
そんなの正規表現で引っ張ってくればいいんでないかい。その通りなんだけど、書式が 1行にガーと書くのと、複数行に渡って書くのと混在してる。複数行の場合は、継続行を 表す目印として、冒頭にプラス文字を置く約束らしい。
と、なると、これはもうプログラムで処理するしかないな。久しぶりにPythonのスクリプトを 書いてみるか。今更ながらpytonの正規表現を扱うモジュールの説明を 見ておく。 6.2. re 正規表現操作 ちゃんとPython3系に対する説明が有って、ドキュメントを大事にする姿勢が窺え 頭が下がりますよ。
#!/usr/bin/python3 import re aline = re.compile( '^\.model (\w+)' ) # Begin line cline = re.compile( '^\+ ' ) # Continue line pats = [ re.compile( '.*(cje=\S+)' ), re.compile( '.*(cjc=\S+)' ), re.compile( '.*(tr=\S+)' ) ] def pick( l ): ll = l.lower() rs = '' for p in pats: m = p.match( ll ) if m: rs = rs + m.group(1) + ' ' return rs f = open('standard.bjt', 'r') for l in f: m = aline.match( l ) n = cline.match( l ) if m: # Start line name = m.group(1) dat = pick( l ) if n: # Continu line dat = dat + pick( l ) if l.find(')') > 0 and (m or n): # Check end print(name, '\t', dat) f.closed
ltspiceのカタログをウブに持ってきたんだけど、それをそのまま料理しようとすると ごりゃ、utf8の文字が混じってるぞとPython3に文句を言われる。本来ならutf8対応に するのが筋だけど、冒頭のコメントの一部に含まれるutf8文字を取り除いて対応する。
結果は、抜粋だけど
2N2222 cje=25e-12 cjc=8e-12 tr=100e-9 2N3391A cjc=5.777p cje=8.307p tr=701.7p 2N2369 cjc=2.83p cje=4.5p tr=1.073u BC547B cje=1.358e-11 cjc=0.6193 tr=1.00e-32 BC857A cje=1.325e-11 cjc=0.6288 tr=0.00000007 2SC1815 cje=25p cjc=1p tr=450n 2SC1907 cje=5p cjc=3p tr=1n 2SC288 cje=1.0pf cjc=0.7pf tr=0.2n
表現がまちまちですなあ。BCXXXなんて石は、非常に怪しいパラメータが列挙されてる。 まあ、これを見ると、外国製なら2N3391Aが、国産なら2SC288あたりが妥当なように 思える。
本格的に使うなら、上記の表現のまちまちさを正規化して、sqlite3あたりのDBに 突っ込んでおけば良さそう。そうすれば、手製のトランジスターデータ規格表だったか ぐらいにはなりそうだな。
昔は、CQ出版のこの手のカタログにはお世話になったけど 今でも有るのかな? 半導体規格表シリーズ ああ、有ったな。でも、FET/MOS系は無いな。最初から無かったっけ?
python.elとpython3の組み合わせ
昔やったemacsからpythonをコントロールする技、C-c C-c で、bufferの内容を pythonに送るやつとか、C-c C-l でファイルごと評価するってのが、エラーに なって使えなかった。
Wrong type argument: arrayp, nil
今までの経験だと、この手のエラーはelispに問題が有りそう。でも、 fedoraのpython2では普通に動いているので、新たなpython3の障壁かと思っちゃったぞ。 待て待て冷静になれ、頭を巡らせるんだ。きっと2系と3系を切り替えるしかけがpython.elに有るはず。
/usr/share/emacs/24.5/lisp/progmodes/python.el.gzをemacsから開いてみたよ。 そしたら答えが載ってた。
(setq python-shell-interpreter "ipython3" python-shell-interpreter-args "-i")
こんな設定を書いておけとな。近頃はpyも色々あるから、ちゃんと設定しましょって 事だ。pyの環境を切り替えるしかけとも連動出来るみたい。
で、python.elのコードを眺めていたら、C-M-i で、補間が出来るぞって書いてあった。 昔苦労して、jediとかの補間機を入れた覚えが有るんだけど。。。 それが無くても OKらしい。そう言えば Ipythonはちゃんと補間してくれるものなあ。
説明を読むと、pythonの事はpythonに聞け、それが一番確かですからってそうだ。 間抜けな人がpythonをコンパイルすると、その機能が入らないらしい。 そんな場合は、スクリプトの冒頭に
import readline, rlcompleter
を書いておけとな。
で、実際にやってみると、一度ターゲットになるスクリプトを走らせる。すると、 上で設定した ipython3 -i でいいですか? ipython3に実行後も居座ってもらいますかと 聞かれる。そこは、勿論居残って、補間機になってもらいましょ。 (要するにpythonのサーバーモードだ。以前にやったjupyterもサーバモードのpythonに 接続しに行くとな。)
後は、どんな正規表現が使えるかなんてのは、例えば、re.f まで打って、C-M-i すれば、補間候補が出て来る
Possible completions are: re.findall( re.finditer( re.fullmatch(
まあ、いきなりコードを書き始めるわけじゃなくて、ipython上で実験してから、 その残骸を emacsに貼り付けるって事が多いんで、余りお世話になる事はないな。
emacsを起動したら適当に編集したいファイルを開き、C-c C-z してipythonを起動しておくと、 コピペが非常にスムーズ。schemeのreplと編集画面の様相で、とっても便利。
それより重宝しそうなのが、複数行をまとめて、右左に移動する技。C-c > と C-c < だな。 リファクタリングの常で、常用しそうですよ。余り深いインデントは不快ですから。 バグの温床ですから。
ああ、C-c C-f で、関数の多少の説明が出てくるのね。それから、C-c ? で、python-modeの キーバインドが出て来るとな。
imenuってのが有った。何じゃこれ? 調べてみたら俗に言うTAG jumpみたいなもの。 定義した関数へ一発で飛べるとな。人様のコードを読む時に使えばいいんだな。
再び SN7404
ちょっと回り道しちゃったけど、おあつらえな石、2SC288が見つかった。 ネットで調べてみるとTOSHIBAの石らしい。やけにカタログが簡素。 ltspiceに登録されてたスペックも
.model 2SC288 NPN(Bf=70 CJC=0.7pF CJE=1.0pF Rb=15 Rc=3 Tr=0.2n Tf=0.2n)
これしかパラメータの登録がない。こんな理想に近い石を作られるのか?
この石を使ってSN7404もどきを作ってみた。理想通りの仕上がりになったけど、 いまいちヤッター感が無いのは何故?
それは思うに、トランジスターのパラメータ詐欺に遭ったんじゃないかと、オイラーの 敏感なセンサーが働いたから。
この田舎では、よく防災放送で、息子を語るオレオレ詐欺の 電話がかかって来ています。不審な電話はすぐに警察へご連絡してください。って、言ってる。 田舎のじっちゃん、ばっちゃんは人が良くて、金持ちだからなあ。
大体、上の石、型番が2SC288ってのにも引っかかるものがある。288ってのは業界団体への 登録番号。今は3000番台になってる事からすると、超昔に登録されて今は既に製造 中止になってると思われる。そんな古い石を語るのは、怪しさ満載ですよ。
ちなみに、2SCの2Sは、2つの接合部分を持つ半導体。次のアルファベットは、AがPNP タイプの高周波用、Bは低周波/パワトラ。CはNPNタイプの高周波用、Dは低周波/パワトラ。 って具合に、大雑把に区分けされてる。
FETの場合だと、2SKは、Nチャネルの石、2SJはPチャネルの石って区分けだったかな。 米国は、トランジスタにしろFETにしろ、そこまで親切じゃなくて、2NXXXの1種類しか ない。QST誌とかの回路図を眺める時は、回路上でどんな信号を扱っているか推測し、 シンボルの矢印の方向を見て判断する事になる。ちょっと不親切と思うぞ。
で、詐欺に遭ったと思って、少しおちょくってやれ。作った回路は、負荷が全く付いて いないもの。普通は、ICの出力に別のICを取り付ける。この時、無制限にICを接続出来る わけではない。
余りICを取り付けると、電流が沢山流れ過ぎて、出力電圧が下がってしまう。そうすると 回路がノイズの影響を受けやすくなって、はなはだ具合が悪い。幾つのICを接続出来る かってのが、規格で決まっている。ファンアウトが10のICと言うと、10個相当のICを 接続出来ますって意味。中には、1端子でファンイン2とかのもの(2入力相当)も あるので、その場合には、接続個数を減らさなければならない。
規格表では、ICの入力を模した負荷を取り付けて、試験する事になってる。模した負荷 回路は、1N3064って言うダイオード4個と負荷抵抗、負荷容量を付けたものになる。 ダイオードの直列接続は、ICの入力等価回路になってる。(IC内のトランジスタの 矢印の数を数えてみよう)
負荷抵抗は280オーム、容量は15pと50pの事例で測定しますとな。こういう脅しもとえ 負荷をかけると、詐欺トランジスターは馬脚を現すかなあ。折角だから、やってみれ。
そして、違反を見つけたら、即通報して、たいーーほ、して貰おう。この場合の罪は、何に なるんでしょ。デマの拡散罪? それとも、電子書類の虚偽記述罪? こういう事は、 あの高木先生に聞いてみるといいのかな? ああ、彼はセキュリティーの研究者で あって、弁護士とは違うから、どうなのかなあ?
最近、仕事がなくて、さかんに仕事の売り込み(過払い金を取り戻せます)を図って いる市井の弁護士にでも相談すればいいのかしら?
スピードアップ・コンデンサ
ってのが、石のスイッチング特性を良くする妙薬だってのが、前回の探した資料で 述べられていた。 このスピコンは、ベース抵抗に並列にコンデンサをつけたもの。
石をonさせるには、ベース抵抗を流すわけだけど、コンデンサで脇道をつくり、そこを 経由させて一時的に大電流を流す。大きな電流で石がターンオンする訳だ。
ドライブ電圧がGNDになった時には、スピコンの充電電圧により、石のbase電極が一時的に 逆バイアスになる。これによい、B-C間の少数キャリアーを速やかに無くす事ができ、 これによって石は速やかにOFFになるとか。
このスピコンの容量は、200pF前後。カットアンドトライで、最終的には決めるそうだ。 また、石を確実に(直流的に)オフするため、ベースとグランド間に、数Kの抵抗を 入れておく。 ドライブ回路が基盤の中、終段の石がシャーシに放熱を兼ねて取り付けられているような 場合、基盤が抜いてしまうと、終段の石のベースがオープンになってしまい不安定に なる。それを防止するんで、終段の石に直付けしたりする。 こういう、安全設計、大事だよ。
位相補正
ふと、このドライブ回路を見ていて、これって抵抗2本と、コンデンサ2個の ブリッジ回路じゃないかと思った。
Dr. E --+-- Rs --+-- Re --+-- GND | | | +-- Cs --+-- Ce --+ | final B
Csはスピコン、Reは安定化抵抗、Ceはフィナルな石のCJE相当。だとすれば、Ceが 存在しても、それを無きものに出来る。それには、Rs X Cs = Re X Ce っていう 関係を満たせばよい。
この考えは、オシロスコープのプローブの位相補正にも応用されている。 大体、パッシブ・プローブは、10:1 のATT構成を取る事が多い。
具体的上図に当てはめると、Dr.Eのポイントがプローブの針。finalBは、オシロの 入力。抵抗2本で1/10に波形を減衰させるので、Rs=9M, Re=1Mなんてのが多い。 Ceはオシロの入力容量。Csはケーブルの浮遊容量。これらが有るので、高周波の波形は、正しくオシロに 伝わらない。
それを補正するために、プローブの根元に可変コンデンサが入っている。これを 調整して、キャパシタンスのバランスを取ってやるんだ。俗に言う、プローブの校正ね。
こういう事を知ってて、オシロを使う前に校正してる人なんて見た事無かったぞ。 今の大学とかでは、教えてくれるのだろうか?
これなんかは、spiceの佳き実験材料だぞ。spiceのハロワに相当する、CRの ローパスフィルターは止めて、是非位相補正回路を取り上げて欲しい。 回路定数を変えて、過補償、過小補償の実験をやってもらいたいものだ。
OSC
昔は、よく石でマイクアンプとかを組み立てた。本人はアンプの積もりなんだけど、 欲張ってゲインを稼ぐと、アンプが発振を起こす。入力がなくてもピーって音がするんだ。
増幅された出力が入力に舞い戻って、それがまた増幅されて、、、、ってやつね。 ハウリングと呼ばれるやつも一種の発振。スピーカーの音をマイクが拾って、それが 増幅されて、マイクで拾われて。。。。
そんな訳で、オイラーとアンプは相性が悪い。だったら、最初から発信器作りに 精を出せば。。無線界では、VFOと呼ばれる発信器作りが、腕の見せ所だった。 いかに、安定な周波数を持続させるかってね。
ネットを探っていたら、電子回路をitspiceで解析しましょって大学の講座があった。
今注目の金沢の大学の書庫 にある、 1.3 LTspiceの基本操作 とか、 発振回路の理論 が面白い。
VFOには、ハートレーが良いか、コルピッツが良いかなんて議論があって、ハートレーは 共振回路のL部分からタップを出すんで、工事が面倒って結論だったかな。
コルピッツと言っても、その変形でクラップ発振回路とかバッカー発振回路だとか、 やったな。で、それよりは共振回路に高いQが備わっている必要が有るとか言って、 水晶を使ったものまでやった。
水晶を使った発振器って、単一周波数しか発振しない? そこは、アマチュアの 突撃精神発揮。回路を工夫して、多少は可変出来るように出来た。えと、その回路の 事、なんて言ったかな?ああ、VXOとかスーパーVXOって言ってたな。
今ならspiceで解析出来ちゃう? 面白そうなんで、机上の空論してみれ!
etc
太陽電池の解析 も、spiceで出来ちゃうそうだ。そりゃ、そうだ。電気的にはダイオードだもの。