がれすたさんのDIY日記

電子回路、Python、組み込みシステム開発、自作エフェクターを語るblog

KiCad6のSpice機能で回路シミュレーションを行う方法

2021年12月にKiCad6 Stableが公開されてUI含め大きな変更がありました。
Spice機能についても見た目が変わったりしているので再度解説を書きます。

シミュレーション回路の準備

KiCad6のngspiceを使うにあたり回路を準備します。
簡単なトランジスタ増幅回路を題材として扱います。
f:id:gsmcustomeffects:20220116043210p:plain

抵抗、コンデンサは通常通りのものを配置します。
信号源はSpiceシンボルを配置します。
Spice信号源シンボルですが、シンボル配置検索ウィンドウでspiceと打つと出てきます。
ここではVSINとVDCを使います。
f:id:gsmcustomeffects:20220116043425p:plain

Q1のトランジスタはBC550がKiCadの標準ライブラリに入っているのでそれを使います。

オペアンプトランジスタのようにspice外部モデルを使うようなシンボルはKiCad-ngspice間でピン配置を合わせないといけないのですが後述しますのでとりあえず変更しなくても済むBC550を使用してください。

次に各種シンボルに値を設定してきます。
ダブルクリックか選択+Eでプロパティに入ってもらって下部のSpiceモデル...というボタンをクリックします。
Spiceモデルエディターが開くので好みに設定します。*1
今回は過渡解析をやりたいので画像のように設定しました。
f:id:gsmcustomeffects:20220116045023p:plain



うまく設定ができるとシンボルフィールドにSpiceに関するパラメータが入ります。


f:id:gsmcustomeffects:20220116045450p:plain


DC信号源も同じように設定します。
抵抗コンデンサも同様に処理しますが、KiCadのValueフィールドとSpice_Modelフィールドが自動連動してないので注意してください。
あとは回路図上のすべての素子に対してSpice_Modelフィールドを設定していきます。
f:id:gsmcustomeffects:20220116050120p:plain

トランジスタモデルの読み込み

ONSEMIのサイトからBC550のspice modelをダウンロードします。
https://www.onsemi.com/products/discrete-power-modules/general-purpose-and-low-vcesat-transistors/bc550

先ほどと同様にプロパティからSpiceモデルエディタを開きます。
モデルタブからファイルを選択をクリックしてダウンロードしたモデルファイルを読み込みます。

f:id:gsmcustomeffects:20220116053322p:plain

ここで注欄にシンボルピンのナンバリングが要求されたSPICEのピン順と一致しませんという文字が出てきますが、修正の必要のないシンボルでも出てくるのでおそらくBugかと思います。BC550はピン順がコレクタ、ベース、エミッタの順なので修正の必要なし

シミュレーションの設定

ここではシミュレーションの設定を行います。
KiCad上部メニューよりシミュレータを起動します。
f:id:gsmcustomeffects:20220116054726p:plain

シミュレータウィンドウが起動するのでパラメータアイコンをクリックします。
f:id:gsmcustomeffects:20220116054944p:plain

各自シミュレーションの設定を行います。
今回は過渡応答を行うので以下のように設定しました。
互換モードは基本PspiceLTspiceを選んでおくとエラーが起こりにくいです。
f:id:gsmcustomeffects:20220116055046p:plain

シミュレーションの実行

実行アイコンをクリックしてシミュレーションを実行します。
信号を追加 or プローブで見たい信号を選びます。

この時KiCad上でノードに名前を付けておくとシミュレーション画面が見やすくなります。
f:id:gsmcustomeffects:20220116055226p:plain

Tipsなど

SpiceとKiCadでシンボルピン番号が違う場合

SpiceのBJTのピンはコレクタ(1)、ベース(2)、エミッタ(3)の順なのでそれ以外のものは代替ノードシーケンスを使う必要があります。
f:id:gsmcustomeffects:20220116070406p:plain

オペアンプの場合

オペアンプの場合は多回路入りを使うとノードでバグるのでSPICE専用シンボルを使うことになります。
実際の回路を作るときは多回路入りに戻すことになるので多少めんどいです。
f:id:gsmcustomeffects:20220116074845p:plain

代替ノードシーケンスはトランジスタと同様でSPICE側のピンに合わせます。
f:id:gsmcustomeffects:20220116074743p:plain

シミュレーションに含めたくないシンボルの扱い

シミュレーションに含めたくないシンボルもあると思います。
その場合はシミュレーションでシンボルを無効化にチェックを入れることで回避できます。
f:id:gsmcustomeffects:20220116075648p:plain

シンボルフィールドテーブルの利用

一個一個設定するのがめんどくさい方はシンボルフィールドテーブルを使うとまとめて管理できる。
f:id:gsmcustomeffects:20220117090805p:plain

*1:この辺は一般的なSpice(PSpice,LTspice,ngspice)と何ら変わりないので好みの値でやってもらって構いません

HAKKO FX-1003のレビュー

HAKKO FX-1003

f:id:gsmcustomeffects:20211218224125j:plain

今回購入したもの

HAKKO FX-100のオプション小手先FX-1003です。
特徴としては、ピンセット型のはんだごてでSMDパーツを外すのに便利です。
購入形態としてこて台付きのFX1003-82(¥27,500(税込))と本体のみのFX1003-81(¥17,600(税込))があります。
小手先は別売りですので別途購入が必要になります。

その他高さ調整と開き具合の調節機能があります。
f:id:gsmcustomeffects:20211219000805p:plain

HAKKOのWebショップ , モノタロウなどで購入できます。
FX-100本体はAmazonでも購入できます。
https://amzn.to/3iEbhox

使用感など

文章で書いてもわかりにくいと思うので動画を撮ってみました。
作業対象は0603(1608)抵抗
小手先はT38-03I / I型を使用
www.youtube.com

PyLTSpiceを使用した自動シミュレーション

PyLTspiceについて

nunobrum氏が開発されているLTspiceが出力するファイルを解釈しPython上で扱えるようにするライブラリです。
ネットリスト(.net)の編集、結果ファイル(.raw)の取得、シミュレーションの自動実行なんかができます。


内包されているモジュールを以下に示します。

使用準備

PyLTspiceを使用するにあたってシミュレーションする回路が必要になります。
簡単なオペアンプの回路を用意して実行できることを確認しておきます。
f:id:gsmcustomeffects:20210626215308p:plain

Python環境に関しては以下の通りです。

  • python3.8.10
    • matplotlib
    • numpy
    • PyLTspicev 1.6

PyLTspiceはpip install PyLTSpiceで導入可能です。

RawRead

まずはLTSpiceが出力する.rawファイルを読み込むのをやってみようと思います。
先ほど用意したオペアンプ回路のin,outを拾ってきてmatplotlibで出力するというものです。

import matplotlib.pyplot as plt
from PyLTSpice.LTSpice_RawRead import LTSpiceRawRead

#.rawファイルを読み込む。
LTR = LTSpiceRawRead(r'D:\LTspice\opamp\opamp.raw')

#LTspiceで使っているラベル類を抜きだす。
print(LTR.get_trace_names())

#.rawファイルの上のほうの情報を抜き出す。
print(LTR.get_raw_property())

#ラベル値を指定してrawファイルからデータを抜き出す。
V001    = LTR.get_trace("V(n001)")
V002    = LTR.get_trace("V(n002)")
x       = LTR.get_trace('time')

#step実行命令がある場合step番号を取得する。
steps   = LTR.get_steps()

fig = plt.figure()

#グラフのプロット
for step in range(len(steps)):
    plt.plot(x.get_time_axis(step), V001.get_wave(step), label="Vin",color="blue")
    plt.plot(x.get_time_axis(step), V002.get_wave(step), label="Vout",color="red")

plt.legend(fontsize=9)
plt.xlabel("time[s]")
plt.ylabel("voltage[V]")
plt.show()

コードを実行すると以下のような波形がプロットされると思います。
f:id:gsmcustomeffects:20210626223353p:plain:w500

LTSpiceBatch使用例

先ほどのシミュレーションでは.rawファイルを読みだすことができたので少し応用的なことをやってみます。
LTSpiceBatchというモジュールを使用してnetlistファイルを編集しバッチコマンドを実行します。

具体的には、R1を10k,20k,30kと変えたときのVoutの値をプロットするというものです。*1

import matplotlib.pyplot as plt
from PyLTSpice.LTSpiceBatch import SimCommander
from PyLTSpice.LTSpice_RawRead import LTSpiceRawRead

# LTspiceの回路ファイルを読み込む
LTC = SimCommander(r'D:\LTspice\opamp\opamp.asc')
fig = plt.figure()
R1list = ['10k','20k','35k','45k','55k']

for i in R1list:
    #netlistの中身を編集する
    LTC.set_component_value('R1', i) 
    LTC.set_component_value('V1','SINE(0 0.1 1000 0)')
    
    #現在のnetlistの情報でバッチ処理を実行する
    a = LTC.circuit_radic
    run_netlist_file = "{}_{}.net".format(LTC.circuit_radic,i)
    LTC.run(run_filename=run_netlist_file)
    LTC.wait_completion()
    LTR = LTSpiceRawRead(LTC.circuit_radic + '_' +str(i) + '.raw')

    #rawファイルよりプロットに必要な情報を取得する
    V001    = LTR.get_trace("V(n001)")
    V002    = LTR.get_trace("V(n002)")
    x       = LTR.get_trace('time')

    #step実行がある場合回数を取得する
    steps   = LTR.get_steps()
    plt.plot(x.get_time_axis(0), V002.get_wave(0), label="Vout , R2 = "+i,color="red")

#netlistを元に戻す
LTC.reset_netlist() 
plt.plot(x.get_time_axis(0), V001.get_wave(0), label="Vin",color="blue")   
plt.legend(fontsize=9)
plt.xlabel("time[s]")
plt.ylabel("voltage[V]")
plt.show()    

f:id:gsmcustomeffects:20211211045249p:plain:w500
このコードではV(n001)のようにデフォルトネットを参照していますが
ltspice上でネットにラベルを付けておくとプログラム上で参照する際にわかりやすいです。

まとめ

PyLTspiceを触ってみましたが使い方によってはかなり便利なのではないかと思いました。
今回はあまり込み入ったことをしていませんが、その他の科学計算ライブラリと組み合わせてバッチ実行を繰り返すといったこともできそうなので機会があればやってみようと思います。

*1:この操作自体は、LTspiceの.stepコマンドで実行できますがモジュールの使い方を学ぶ例題としてはよいと思います。

HAKKO FT-720のレビュー

今回はHAKKO社から新発売となった*1小手先クリーナーFT-720を購入したのでそれのレビューです。
商品の詳細は公式ページを見たほうがわかりやすいと思います。
f:id:gsmcustomeffects:20211007031858j:plain

HAKKO商品ぺージ
https://www.hakko.com/japan/products/hakko_ft720.html

Amazon商品リンク
https://amzn.to/2Yr1POw

使用感など

試しに小手先にはんだがのった状態からクリーナーを使ってみると画像のようにかなりきれいになります。
動作音は思ったより静かです。

f:id:gsmcustomeffects:20211007195615j:plainf:id:gsmcustomeffects:20211007195631j:plain

除去されたはんだは内部にたまるようになっている。
f:id:gsmcustomeffects:20211008013824j:plain

内部は思ったより単純ですね。
IRセンサとドライブ用のTrとDCモータが入っているだけです。

消耗品は内部ブラシでHAKKOオンラインショップで購入できます。
f:id:gsmcustomeffects:20211008014423p:plain

*1:正確にはFT-710のリニューアル

GOKKO MANTRA ISOLATED POWER SUPPLY GK-54

購入したもの

今回紹介するのはGOKKOのMANTRA ISOLATED POWER SUPPLY GK-54です。
商品リンク(https://amzn.to/39wopYj)
f:id:gsmcustomeffects:20210924121331j:plain

説明

特徴としては最近流行りの各出力が独立しているフルアイソレートタイプになります。
仕様は以下の通りです。

  • 入力36W:18V 2A
  • 可変出力1 : 9-12-18V/500mA
  • 可変出力2 : 9-12-15V/500mA
  • 通常出力 : 9V/300mA x 6

こうやって見ると現行風スペックのパワーサプライですが、特筆すべきは値段です。
この記事を書いている2021/09/24現在ではAmazonで3780円でした。

f:id:gsmcustomeffects:20210924124053p:plain

同じようなスペックを持つ機種にVITAL AUDIOのPOWER CARRIER VA-08 MKIIがありますが、それの価格が9280円であることからかなりお買い得であることがわかります。
値段は二倍以上の差がありますが見た目が安っぽいということもなく付属品もしっかりしています。

アダプター、ケーブルはもちろんついているのですが極性反転ケーブルと旧RATに採用されている特殊変換ケーブルもついています。

f:id:gsmcustomeffects:20210924171229j:plainf:id:gsmcustomeffects:20210924171207j:plainf:id:gsmcustomeffects:20210924171218j:plain

内部解析

商品紹介だけではこのブログ読者には申し訳ないので内部も見ていくことにします。
f:id:gsmcustomeffects:20210924171707j:plain

まずは基板全体を眺めてみます。

f:id:gsmcustomeffects:20210924193817j:plainf:id:gsmcustomeffects:20210924193804j:plain

スカスカな中身を予想したのですが、しっかりと回路が組まれていそうです。
トランスが2つあり1つ当たり4出力(可変出力 x 1 + 9V x 3)を作っているみたいです。
もう少し詳しく見ていきます。

トランス一時側の回路

まずトランス1次側の回路ですがXKT-801という制御ICとXKT-1511というドライバ素子で構成されています。

f:id:gsmcustomeffects:20210925083055j:plainf:id:gsmcustomeffects:20210925083058j:plain

データシートは見つけられなかったのですがググるとAliexpressで販売されているワイヤレス給電モジュールが出てきます。
f:id:gsmcustomeffects:20210925083429p:plain

ワイヤレス給電も一般に使用されているものでは磁界結合方式です。
トランスを使った絶縁コンバータも同じような仕組みで動いているので組めなくはないと思いますが、コイルの結合係数が違うので同様の使い方していいのかなと気になりました。

トランス二次側の回路

次にトランス二次側を見ていきます。
トランス一次側から送られてきた電力をブリッジダイオード(MB2S)で整流し可変レギュレータ(LM317G)でドロップし9Vを作っています。
f:id:gsmcustomeffects:20210925084603j:plain

可変出力側は、XLSEMIのXL4001というBuckコンバータICが使用されています。
このICはAliexpressとかで売っているDCDCモジュールに載ってる定番ICなので聞いたことがあるかもしれません。
f:id:gsmcustomeffects:20210925084608j:plain

まとめ

ワイヤレス給電系の回路が使われてたり一部??な部分もありましたが値段にしてはすごくよくできているなと感じました。
オールアイソレート出力にもなっているのでどうやってこの価格叩き出してるんだ?と思うばかりです。
以前MXRのiso-brickを解析した記事を出しましたが、ほとんどが中華ICになっていたころを考えると、最先端プロセスを使わないようなICは置き換わっていくのでしょう。

GK-54に似たような製品としてVITAL AUDIOのVA-08 MKⅡ、FIREGLOW PPS-1がありますが、出力数・可変出力の操作部も同じことからOEMということなんでしょう。

f:id:gsmcustomeffects:20210925092952p:plainf:id:gsmcustomeffects:20210925092936p:plain

巷ではこれらはすべてVitoosという深センの楽器メーカーOEMであると噂がされていますが中身を全て確認したわけではないので真偽は定かはないです。

おまけ

おまけ程度にこういうこともできますというのを紹介して終わろうと思います。
USBPDという規格が登場してからUSB端子から5~20Vの電圧を出せるようになったのですがそれを使った使用例みたいな感じです。
EUのほうではType-C標準過激派が話題ですが楽器界隈でもこういうのが広がるとよりスマートになるのかなと思います。

f:id:gsmcustomeffects:20210925094630p:plain

USB PD充電器によって取り出せる電圧が決まっておりどれでもつなげるわけじゃないということに注意して下さい(どうしてもやりたいという方はUSB PDについて学習することを勧めます。)
GK-54は18V/2Aが要求されているので画像のような使用方法は使用範囲外です。
またZOOMのMS50gも500mA定格なので仕様上で言えばオーバーです。
筆者は実験前提で購入しているのでくれぐれも真似をしないようにお願いします。
くどいですがメーカー仕様範囲外での事故や故障などには一切の責任を負いませんのでご留意ください

安定化電源装置(HANMATEK HM305)の紹介

HANMATEK HM305について

f:id:gsmcustomeffects:20210506032202p:plain:w500

今回は安定化電源装置を購入したのでそれの紹介です。
購入したのはHANMATEKのHM305という機種です。
価格はAmazonで6500円程度(商品リンク

ちなみにもう1000円ほどだすと10A仕様のものが買えるみたいですね。
https://amzn.to/3AYdMtV

主なスペックは以下の通りです。

  • 電圧 : 0 - 32V
  • 電流 : 0 - 5A
  • 表示解像度 : 電圧:0.01V , 電流0.001A
  • 電流保護機能、操作部ロック機能
  • 電源スイッチから独立したOUTPUTスイッチ
  • 幅: 80mm , 高さ : 150mm , 奥行 : 230mm

付属品は、バナナtoミノムシケーブルと電源コード
この価格にしては非常によくできていると思いますが、残念な点もいくつかあります。

  1. 付属の電源コードが貧弱であること
  2. アースGNDターミナルがない
  3. 電圧設定時のインターバルが短すぎる

付属の電源コードですがかなり細いのとアース端子がないタイプでした。
太さについては最大電力を引いたときにちょっと怖いかなという印象です。
アース端子の有無は個人宅での使用では特に問題ないのかなと思っています。
f:id:gsmcustomeffects:20210523031904p:plain:w300

この価格帯において残念な点を述べるのは非常にナンセンスなので問題点もろもろを理解した上で使用できる人にはお勧めです。

回路について

次に内部回路のほうを見ていこうと思います。
f:id:gsmcustomeffects:20210523044105p:plain
中身は2枚の基板で構成されています。
ここではメインスイッチング基板、UIコントロール基板と呼ぶことにします。

まずはメインスイッチング基板から解析をしていきます。(画像はクリックで拡大可能)

f:id:gsmcustomeffects:20210529230041p:plainf:id:gsmcustomeffects:20210526230319p:plain

メインスイッチング基板をざっと見ていくと、メインスイッチング回路、サブ電源(制御用電源回路+FAN電源回路)、制御回路の3つに分けれます。

サブ電源

サブ電源にはSHENZHEN DONGKE SEMICONDUCTORのDK112というスイッチ素子内蔵の制御ICが使用されています。LCSCで0.24ドルで購入できるみたいです。

データシートより12Vを作るためのリファレンス回路を示します。
f:id:gsmcustomeffects:20210531003249p:plain

回路を見る限りかなり少ない部品点数でAC85~265からDC12Vを作成できることがわかります。

AC一次側

AC一次側の回路はざっと見た感じこのようになっています。
間違ってるかもしれないのであくまで参考でお願いします。
f:id:gsmcustomeffects:20210710204422p:plain

サーミスタ、Xキャパシタ、コモンモードチョーク、Yキャパシタ、ブリッジダイオードというようにAC一次側を構成する一般的なパーツが並んでいます。
スイッチ部はおそらくアクティブクランプ構成なのかな?と思います。

UI部分

f:id:gsmcustomeffects:20210711001353p:plain

UIコントロール基板はFPCケーブルでメインスイッチング基板とつながっています。
マイコンはNuvoton製の8051マイコンであるN76E003AT20というものが使われています。
安めの中華機器には8051マイコンがよく使われているなと感じます。

セグメントの駆動にはTM1640という定番ICが使われています。
これは秋月とかでも購入できるので使ったことがある人が多いのではないでしょうか?

その他UI基板側で使う電源を生成するDCDC回路などが載っているようです。


同じような製品?

Aliexpressで同価格帯のものを探していたらA-BF SS-305というものを見つけました。
インターフェイス系が若干異なっており、プリセットメモリ機能がついていてよく使う電圧を保存しておけるみたいです。
どうやら32V , 5Aと出力系のスペックはHM305と同じようです。
f:id:gsmcustomeffects:20210710235727p:plain:w500



インターフェイスは異なりますが、仕様とか外見が非常に似ているのでまさかと思ったら・・・
f:id:gsmcustomeffects:20210711000242p:plain:w500
内部基板の部品レイアウトがほぼ同じですね。
リビジョンがA-BFのほうが新しいので多少は変わっているかもしれませんが・・・

こういうのは中華製品ではよくあることでどこかしらがOEMでやってるのかもしれないですね。
それでもこういった低価格帯の商品でも、UIを変えて売ればきちんと価値を付けられるといったところがすごいなと思いました。

まとめ

今回はHanmatekのHM305という電源装置を紹介しました。
6500円で案外回路がしっかりしているので電子工作を始める人向けの最初の一台にお勧めできると感じました。


技術的な面からみると中華半導体が多く使われており、これが低価格を実現していることがうかがえます。
プロセスルールがそこまで厳しくなく、定番ICみたいなのは大陸製に置き換わりつつあるのでしょう。
記事中で出てきたDK112なんかは30円なのですごいとしか言えないです・・・・


あとはUIとメインスイッチングで基板を分けることで別の製品でも使えるように共通化しているのでそういった点は参考にしたいなと思いました。
以上HANMATEKのHM305の紹介でした。
最後にこんなこと書くまでもないのですが使用上起きた問題については自己責任でお願いします。