KiCad8のSpice機能で回路シミュレーションを行う part2

記事後半についていたTipsを本記事に分割しました。

KiCad8のSPICE基礎を知りたい方はこちらを読むことをおすすめします。
KiCad8のSpice機能で回路シミュレーションを行う - おながわの日記

多回路オペアンプの使用方法

基板設計を考えると実際に使用するシンボルでシミュレーションをできた方が便利です。
本項では多回路シンボルの使用方法について説明します。

手法としては既存subcktを引用して2回路分のsubcktを作るというものです。
下記の手順で進めます。
Texas instrumentsのサイトよりTL072HのSPICEモデルをダウンロードする
テキストエディタでtl07xh_tl08xh.libを開く
③subcktとして下記4行を追加する

.subckt TL072H 1out 1in- 1in+ vcc- 2in+ 2in- 2out vcc+
XU1A 1in+ 1in- vcc+ vcc- 1out TL07XH_TL08XH
XU1B 2in+ 2in- vcc+ vcc- 2out TL07XH_TL08XH
.ends

④KiCad側でTL072Hを読み込む

⑤ピン対応を確認する

⑥回路を完成させる

⑦シミュレーションを実行する

トランスの使い方

KiCadではテキストでspice命令を記述できるようになっています。
テキストでK1 L1 L2 0.999のように書くことで結合インダクタを作ることができます。

POTの使い方

オーディオ系の工作ではポテンショメータが必須となります。
実現方法は多々ありますが、KiCad forumでHolger Vogt(ngspiceのmaintainer)さんが紹介している方法が簡単で良いと思います。
https://forum.kicad.info/t/basic-potentiometer-simulation/22681/7

ここでポイントとなるのが、PARAMS:という書き方です。
PARAMS以下に宣言した変数は外からオーバーライドすることが可能です。

.subckt RPOT 1 2 3 PARAMS:value=1k ratio=1
R1 1 2 {value*ratio + 0.001}
R2 2 3 {value*(1-ratio) + 0.001}
.ends

トグルスイッチの扱い方

トグルスイッチもsubcktで実現できます。
片方を1mΩ、片方を1GΩのようにしてオープンショートを模擬します。

.subckt SPDT out1 in1 out2 PARAMS: orm1=10m orm2=1G
R1 in1 out1 orm1
R2 in1 out2 orm2
.ends

この方法はお手軽なのでよく使用されますが、スイッチを切り替えた際に片方がオープンになる回路では注意が必要です。
これはSPICEの計算上の問題であり、未接続ノードがあると多くの場合で計算が収束しません。

XSPICE Analog Modelsについて

ngspiceには、ミックスドシグナル解析を行うためにXSPICE拡張機能が実装されています。
XSPICEはコードレベルモデリングを利用してデジタル素子を含むシミュレーションの高速化に寄与します。

ユーザーはあらかじめ内包されたコードモデルの使用及び、独自のコードモデル定義が可能です。
定義済みコードモデルはAnalog Model , Digital Model , Hybrid Modelの3つが存在します。
ここではAnalog Modelsに内包されているGainというモデルを例に説明します。

コードモデルはAxxxのように書くことで使用可能です。(xxxは任意

*usage : Axxx input output モデル名
.subckt gain01 1 2 PARAMS: gain=1.0
a1 1 2 amp
.model amp gain(gain={gain})
.ends

シンボルは2ピンで適当なものを作って配置します。

コードモデルのgainパラメータを設定します。(ここではgain=2.0とする)

シミュレーションを実行し入力信号が2倍になっていることを確認する

以上がAnalog Modelsの使い方になります。
Gain以外にも定義済みモデルとしてSummer,Multiplier,Divider,Limiterなどが内包されていますので概念検証には便利かと思います。

XSPICE ユーザー定義モデルの使用方法

現在執筆中

ロジック素子の使用方法

現在執筆中

収束性向上について

ROHMさんのLTspiceモデルの使い方 収束性の改善ヒントが参考になりますのでそちらを参照ください
https://fscdn.rohm.com/jp/products/databook/applinote/common/how_to_use_ltspice_models_tips_for_improving_convergence_an-j.pdf

ROHM資料 SPICEシミュレーションの収束性と安定性
https://techweb.rohm.co.jp/product/simulation/8143/

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

はじめに

KiCadがバージョンアップするたびに記事を書いている気がしますが、今回も同じように解説記事を書きたいと思います。7からあまり操作感は変わっていないため、下記記事も参考にしていただけると良いと思います。
gsmcustomeffects.hatenablog.com

KiCadは20240714時点で最新の8.0.4を使う前提で進めます。

KiCad7→8における主な変更点

KiCadバージョン間のngspice変更点は主に4つになります。

  • ngspice37→ngspice42にアップデート
  • シミュレーションウィンドウのUI改善
  • 解析項目の追加(pole-zero, noise, S-parameter, and FFT)
  • 動作点解析において回路図上にノード電圧が表示

基本的な使い方

基本的な使い方はKiCad7の時と変わらないのですが、前回記事で一部抜けがあったためそちらを補完する形で説明したいと思います。
例題には下記NPNトランジスタ増幅回路を用います。

抵抗、コンデンサの設定

まずは抵抗を一つ配置して下記の手順に従ってプロパティを設定してください。
①プロパティを開く
②ピン番号を表示をチェック
③シミュレーションモデルをクリック
④値フィールドに10kを設定する
⑤終了したらOKをクリック

⑤の時点でプロパティフィールドにSim項目が追加されると思います。

この後OKをクリックすると回路図上に反映されます。抵抗には極性はありませんが、SPICEシミュレータは電流を計算する際にキルヒホッフの法則に基づいて立式します。シミュレーション上エラーにはなりませんが、部品に流れる電流を計測する際に逆に出てしまうので最初から方向を意識して配置すべきということになります。

次にコンデンサも同じように配置して設定します。

トランジスタの設定

NPNトランジスタを配置します。部品配置画面でspiceと検索し、その中にNPNというシンボルがあるのでそちらを用います。*1

抵抗と同じようにシミュレーションパラメータを設定します。トランジスタはモデルが必要になるのでspiceモデルをダウンロードします。
今回はROHMさんのBC847Bというモデルを拝借します。

https://www.rohm.co.jp/products/transistors/bipolar-transistors/standard-bipolar-transistors/bc847b-product#productDetail
ダウンロードしたbc847b.libはKiCadのプロジェクトと同じディレクトリに配置しておきます。*2

NPN設定の手順は下記のとおりです。
①NPNのプロパティを開く
②ピン番号表示にチェック
③シミュレーションタブを開く
④ファイルからSPICEモデルを読み込むをチェック
エクスプローラーからbc847b.libを選択
⑥モデルタブでBC847を選択
⑦コードタブでモデル読み込みを確認
⑧ピン割り当てタブをクリック
⑨回路シンボルとSPICEモデルのピン対応を確認
⑩すべて設定できたらOKで終了

電源シンボルの設定

次にシミュレーション用の電源シンボル設定を行います。直流電源と交流信号源の2つを設定します。

直流電源の電圧値は12Vを設定します。

交流電源は0.1Vにしておきます。

GNDはSPICEの0シンボルを用います。

回路を完成させる

必要な部品は配置できたので回路を完成させます。抵抗値などのパラメータの設定は次の項目でまとめて設定します。

次にパラメータを設定します。

シミュレーション設定

シミュレーションの設定を行います。今回は過渡解析を行いたいので画像に従って過渡解析メニューを設定します。

シミュレーション実行

再生ボタンのアイコンをクリックすることでシミュレーション実行できます。
実行を行うと下のコンソールで計算が走ります。終了後に右の波形ペインで表示したい波形のプロットを行うことで波形表示ができます。

以上が基本的な使い方になります。

その他Tips

netlistの出力

シミュレーション画面からnetlistの出力が可能です。
時間のかかるシミュレーションは、netlistの形で持っておいて外部SPICEでバッチ実行という使い方が良いと思います。

より応用的な使い方としてpyspice or spicelibでnetlistをパースして解析を行うのもよいと思います。
https://github.com/PySpice-org/PySpice
https://github.com/nunobrum/spicelib

ノード間電圧の測定方法

ノード間電圧の計測はユーザー定義信号により表示できるようになりました。

動作点解析

動作点解析により回路図にノード電圧が出るようになりました。

解析タブの利用

解析タブを追加しワークブックを保存することで複数種類のシミュレーション結果を保持できる

基板設計に含めたくないエレメントの設定

シミュレーションには必要だが基板には必要のない部品について、部品プロパティから設定できます。

ライブラリの管理方法

ライブラリは同種のものであればまとめて管理したほうが効率的です。

読み込む際にプルダウンで選択できる。

その他TipsについてはPart2に移動しました。
gsmcustomeffects.hatenablog.com

*1:ここでは半導体系のシミュレーションは扱わないので3端子トランジスタを選んでいます。PDKなんかに入っているトランジスタはボディピンがある4端子シンボルを用います。

*2:spiceモデルは必ずしも同一ディレクトリである必要ありませんので各自モデル用のディレクトリを作っておくでもよいと思います。

MINI-ITXなARM PCを組む

MINI-ITXなARM PCを組む

なんとなく作業用ARM PCが欲しくなったので組みました。今回は組み立て過程をまとめます。
早速ですが今回購入したのは、Radxa ROCK 5 ITXRadxa ROCK 5 ITXというMINI-ITXサイズのSBCになります。
スペックの詳細などは公式ページを見ていただければと思います。

購入はallnet chinaでFedex配送でした。外箱は若干へこんでいますが梱包はしっかりされていました。

開封する

基板は黒レジストにENIG処理でなかなか高級感があります。
付属品はバックプレートとSSDねじがついてます。

ROCK5Bと比べてみるとかなり大きいですね。

セットアップ環境

パーツ構成はこんな感じです。

モニター周りは以下のものを使用
映像出力は背面Type-CよりThunderbolt 3ケーブルにて4k出力しています。

マウスキーボードは適宜持ち合わせでOKです。
下記に示すものはドライバ追加なしで動きましたので参考までに載せておきます。

ファンを取り付ける

このボードはintel系CPUクーラーが取り付け可能です。
しかしここで一つ問題があって、RK3588はCPUが直付けかつx86タイプより低背なためクーラーをマウントすると周辺部品が干渉します。
そこで苦肉の策ですが、下記のようにマスキングを施しました。

次にクーラーのブラケットを固定します。
DEEPCOOLの場合支柱が比較的太いので思いっきり干渉します。
intel純正のようなプッシュピンタイプのクーラーに買い替えるのが得策ですが今回はこのまま進めます。

次にクーラーのヒートブロックがCPUに対して的確にアタッチするために厚めの放熱用シリコンパッドを貼り付けます。
一般的なCPUグリスより熱伝導率が落ちてしまいますが、ROCK5Bでファンレスヒートシンクで十分運用できること確認していますので問題ないと思います。(SoC自体はRK3588で同じものが実装されている)

CPUクーラーを取り付けるとこのような形になります

ケースに組み込む

ケース組み込みといっても自作PCと同じです。
電源の組み込み、マザーボードのねじ止め、フロントIOの接続ぐらいです。
組み込むとこのようになります。FractalのPop Mini SilentだとスカスカなのでRidgeにすれば良かった・・・・

OSを書き込んで起動する

現状発売直後ということもあり頻繁にイメージが更新されています。
最新ビルドはRadxaのGithubのリリースページから見れます。
https://github.com/radxa-build/rock-5-itx/releases

やり方はimgファイルをbalena etcherでSDカードに書き込むだけです。
こちらもRadxa Wikiに手順が記載されています。
https://docs.radxa.com/en/rock5/rock5itx/getting-started/install-os

尚、オンボードeMMCにROOBIというシステムがプリインストールされているので、ネットがつながる環境であればこちらでもインストールが可能です。

起動メディアを変更する(NVMe SSD起動)にはブートローダーの書き換えが必要です。
https://docs.radxa.com/en/rock5/rock5itx/getting-started/install-os?install-os=NVME

起動するとこんな感じでKDEのデスクトップが立ち上がります。

Linuxカーネルは5.10.110-35-rockchipベースのようです。

簡単に動かしてみる

Web GL aquarium

スクリーンショットの関係でFPSが落ちていますが、何もしていなければさかな1000匹描画設定で30FPS程度です。
5000匹描画設定で24~30FPS,10000にすると画面がちらつく感じです。最大FPSが30上限なのはGPUドライバの設定があるのかもしれません。
動作中のコア温度は、psensor基準で44~49℃で推移していました。
CPUファンは60度を超えると動作しますが、この程度の負荷だと常に静止状態です。

Geekbench6

aarch64 previewでの実施です。

環境はROCK5 ITX 16GB model

結果はSBC geekのbretdk(https://bret.dk/)の結果に近いです。
bretdkさんは8GBモデルのようです。

おわりに

ROCK5 ITXを組み立てて動作まで確認しました。ROCK5シリーズのフラグシップということもあり非常にクオリティが高いなという印象です。
Radxa Debianイメージには、ARM Mali-G610-driverが当たっているのでYoutubeなんかは快適に再生できます。

Radxa Wikiを見た感じpanfork 3D/VPUも使えるみたいですが現状4k画面出力でYoutubeを見てても快適なのでこのままにしておきます。
Armbianのpanfork 3D/VPUイメージが出たら試してみます。

CPUクーラーは過剰な負荷をかけない限り停止状態なので過剰だったかもしれないです。
youtubeの4k再生で42℃程度しか上がらなかった。

今後はこのPCを利用してYoctoなんかでNativeビルドして遊ぼうと計画しています。

2024/5/11追記
AliexpressにRadxa公式ストアができたみたいです。
https://nl.aliexpress.com/store/1103615006?spm=a2g0o.detail.0.0.52f4MldqMldqB4

Qorvo QSPICEのC++機能を使ってみる

導入

前回はQSPICEで簡単なシミュレーションを行いました。
目玉機能のC++/Verilogに触れていなかったので今回はC++機能を説明しつつ使用感などを評価できたらと思います。

QSPICE C++基礎

まずは簡単な例として2つの信号を掛け算したものを出力するモジュールを作ってみたいと思います。
最初に回路図画面で右クリックしDraw Hierarchical entryをクリックする。

好きなサイズでブロックを配置する。

ブロック内で右クリックしピンを追加(Add port)する。

今回はinput2つとoutput一つなので以下のように追加します。

F3キーを押してSymbol Propertiesを開き、φ(.dll)を選びます。

右クリックで入出力方向を指定します。

右クリックで入出力データの型を指定します。今回はfloat64にしました。

右クリックからC++interface/Open C++ Interfaceを開きます。はじめてソースを作成する場合テンプレートより作成しますか?というダイアログが出るのでOKを押せばよいです。

コード画面が開くので下のほうにあるImplement module evaluation code hereの下にユーザーのコードを記述します。今回は入力同士を乗算したものを出力する単純なコードを記述しました。

コードが書き終わったら右クリックからCompile DLLをクリックしdllを作成します。ここでエラー含め、コンパイラから怒られたら適宜修正をしてやり直してください。

最後に回路画面に戻って信号源の配置、.tranコマンド、plotコマンドを好みで設定してください。

シミュレーションを実行し以下のような波形が出てくればOKです。

その他Tips

最後にその他Tipsを紹介して終わろうと思います。

robdunn4/QSpice

robdunn4氏のC++ツールセットでPID制御、シリアル通信、WavIOだったり便利に使えるものがそろっています。
https://github.com/robdunn4/QSpice

WavIOは任意の波形を突っ込むのに便利なので重宝しています。

PyQSPICE by nurobrum

PyLTspiceのQSPICE版です。開発当初はPyQSPICEという名前で開発されていたみたいですが、spicelibとして統合されLTspice、NGSpice、QSPICE、Xyceに対応しているようです。
https://github.com/nunobrum/spicelib
バッチ実行はLTと同じように扱えるのでシミュレーションレシピを組んであげて長時間回し続ける用途が良いと思います。
あとは資料向けのグラフをmatplotlibで出力するのもよいと思います。

Qorvo QSPICEを使ってみる。

導入

今回は2023年にQorvo社よりリリースされた比較的新しい回路シミュレータQSPICEを触ってみます。
読んで字の如くSPICEシミュレータなのですが、LTspice開発者で有名なmike engelhardt氏が開発されているとのことで注目を集めています。
QSPICEの特徴としては以下4つがあげられます。個人的には無償ソフトでC++/Verilogに対応している所がうれしいです。

  • シミュレーション速度の向上
  • 多くのデジタル素子(AND,OR,Flipflopなど)が標準内包
  • 商用利用可能
  • C++/Verilogに対応

基本的な使い方

QSPICEを起動すると画像のようなメイン画面が立ち上がります。LTspiceからUIが変わりましたが、基本的な使い方は一緒です。
部品の配置は左側のSymbol&IP Browserから行います。LTspiceでRキーで抵抗が配置できるようにQSPICEでもキーボードショートカットが使えます。ショートカットリストはHelpのQSPICE Documentationを参照ください。

今回は簡単なトランジスタ増幅回路を組んでみます。抵抗、コンデンサ、電源なんかはLTspiceと同じように配置します。

ここでNPNトランジスタとしてBC847を使用しています。外部spiceモデルを使用しますので以下の手順に従って進めてください。

  1. Rohm のサイトでspiceモデルをダウンロードする。
  2. テキストエディタでモデルを開き.model以下をコピー
  3. QSPICEに貼り付け
  4. Autogenerate Symbolダイアログが出てくるのでOKを押す
  5. QSPICEが自動判別してくれるのでシンボルを配置する。


シミュレーション回路が完成したら上の電源ボタンアイコンを押してシミュレーションを実行します。うまくできていれば以下のような波形が出てくるはずです。

まとめ

2023に発表されたSPICEということでQSPICEを使ってみました。モデルの読み込みがコピペでできるので回路作成が効率化できると感じました。
今後はC++機能やスイッチング電源回りのシミュレーション速度評価を行っていきたいと思います。

Radxa Rock5Bのセットアップ

Radxa Rock5Bについて

Radxa Rock5Bは、中国Rockchip社のRK3588(4x Cortex-A76 + 4x Cortex-A55)を搭載するSBCになります。購入オプションにはメモリ容量(8GB/16GB)があります。別売りですが、ヒートシンクとケースがそれぞれ販売されています。

その他の機能については、別の方のブログに詳しく紹介されていますのでそちらを参考ください。

Armbianで動かす

通常なら公式配布のイメージで動かすところですが、標準コンフィグの使い勝手のいいArmbianで動かすことにします。まずは以下のページよりイメージをダウンロードします。2023/05/03現在ではArmbian 23.02 Jammy Gnomeが最新みたいなのでこれをダウンロードしました。

https://www.armbian.com/rock-5b/

次にMicroSDへイメージを書き込みます。最近ではbalena-etcherという書き込みソフトが定番になっているみたいなのでそれに従い起動メディアを作成します。

https://www.balena.io/etcher

イメージ書き込みが終わったらMicroSDを差し込んでRock5Bを起動します。起動時にLANケーブルをつないでいるとIPから勝手に日本語向けに設定してくれます。その後ユーザー設定なんかを済ませるとデスクトップが表示されると思います。


NVMe M.2 SSDから起動するようにする。

Rock5BはNVMe M.2 SSDを搭載可能です。SDのままでも十分運用可能ですが、CPUが高性能な反面ディスク速度でプチフリーズすることもしばしばあるのでSSD経由の起動がおすすめです。
RK3588はPCIe3.0までなので3000~5000円ぐらいで購入可能なSSDを選ぶと良いと思います。私はKIOXIA EXCERIA G2 512GB(https://amzn.to/3qsyNfe)を使用しています。 Phison系列のコントローラは発熱がすごいので気休め程度のヒートシンクをつけています。

SSD取り付け後はlsblkコマンドにてシステムから認識しているか確認してください。nvme0n1が見えていればシステム側から認識されています。

続いてSSDにイメージの書き込みを行います。ARM向けのbalena-etcherを使うとRock5B本体で完結しますので楽に書き込みを行うことができます。(ddコマンドでも書き込めるのでお好みで)
https://github.com/Itai-Nelken/BalenaEtcher-arm

次にarmbian-installでブートローダを書き換えます。

sudo armbian-install

青い画面が開くので、Install/Update the bootloader on MTD Flashを選択して了解をクリックします。しばらく待つとDoneと表示されますのでウィンドウを閉じます。

最後にMicroSDカードを取り外し再起動します。起動後はapt updateなんかをしてパッケージ等を最新にするといいと思います。

Chromiumのハードウエア高速化を有効化する

次にRockchipメデイア機能を有効化します。これを行うことでYoutubeなんかがヌルヌル動くようになります。

sudo add-apt-repository ppa:liujianfeng1994/panfork-mesa
sudo add-apt-repository ppa:liujianfeng1994/rockchip-multimedia
sudo apt update
sudo apt dist-upgrade
sudo apt install kodi

パッケージ更新後はChromiumを再起動します。
chrome://gpuを開くと以下のように有効化を確認できると思います。

WebGLのベンチなんかを回すと面白いと思います。
https://webglsamples.org/aquarium/aquarium.html

まとめ

今回はRadxa Rock5Bをそれっぽく使うまでのセットアップを解説しました。HDMI2画面表示でyoutubeなんかを見ても普通に使えるので、いじり飽きたら実家のテレビの横なんかにおいてyoutube専用機にでもしたら良さげですね。

ちなみに発熱はそれなりにするのでヒートシンクは必須ですね。

コラム : 他のボードは?

Rockchip系のSBCは探せば無数にあります。(orangepi5,firefly,khadas etc...)
多くのボードは3588S(末尾S型番)が使用されておりハードウエア機能が一部絞られていたりします。具体的には映像系ペリフェラル(HDMI RX,DP周り)、PCIe3.0の有無に違いがあります。そのあたりを使用しないのであればより廉価であるorangepi5(12000円〜)を選ぶのもありです。

私の選定基準はこんな感じです。

  • 入出力が片側にまとめられている。
  • 給電(PD対応)と映像系(DP)がType-C一本でまとまる
  • ピンヘッダがラズパイ互換
  • 2280サイズのM.2 SSDが装着できる。