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が装着できる。

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

2023/02/12にKiCad7.0.0がリリースされました。
それに伴いspice機能も扱いやすくなっていますのでやり方などをメモがてら書こうと思います。

KiCad6でも同じことをやっていますので以下も参考にしてください。
gsmcustomeffects.hatenablog.com

回路図の準備

シミュレーションを行う回路図を準備します。
前回同様にNPNトランジスタの増幅回路を例題として扱います。KiCad7.0の回路エディタを開いて同じように回路を作成してください。

この時NPNトランジスタはSimulation_SPICE内のシンボルを使用します。

次に信号源と電源を配置していきます。
この時SPICEの基準となる0シンボルを置くのを忘れないでください。

一通り配置し終わるとこのような形になります。

次に信号源、電源のパラメーター設定をしていきます。

次にトランジスタのモデルを設定します。
今回は例としてRohmさんのBC847を使用させていただきます。ダウンロードしたモデルは解凍して今使用しているKiCadプロジェクト直下に置いておくと扱いやすいです。

モデルの設定はトランジスタのプロパティを開き、シミュレーションモデルから詳細画面を開きます。初期状態ではGummel-Poonモデルの初期パラメータが入っているので先ほどダウンロードしたモデルを読み込みます。

最後にピン割り当てタブに切り替えてKiCad上のシンボル並びとシミュレーションモデルのピン順番が正しいことを確認します。*1

ここまでで回路上の設定は終了になります。

シミュレーション

次にシミュレーションを行うための設定をします。まず上部アイコンよりシミュレータを起動します。コマンドアイコンをクリックし行いたいシミュレーションの設定をします。今回は過渡応答をやってみることにします。

設定が終了したらOKをクリックし実行します。実行後信号を追加し見たい波形を確認します。うまくシミュレーションできていれば以下のような波形が表示されるはずです。

以上がKiCad7でSPICEシミュレーションを行う方法になります。

Tipsなど

以下本文に書ききれなかったTipsなどをまとめましたので参考にしてもらえればと思います。

書籍、ドキュメントなど

解析手法やモデルなどを知りたい場合は以下の2冊がおすすめです。

コマンドなど詳しい話はngspiceやKiCadのドキュメントを参考にするとよいと思います。

2点間の電圧測定

記事ではGND基準のシングルエンド信号を観測する方法を紹介しましたが、2点間の電圧を見たい場合もあると思います。
KiCad7のspiceにはVOLTMETER_DIFFという測定エレメントがあり、差電圧を出力することができます。

使い方としては以下のように回路をつなぎます。

次に少し修正が必要になります。
2022/03/04時点のStable Release KiCad7.0.0ではこの操作をしないとエラーが出ました。nightly buildでは必要ないかもしれません

VOLTMETER_DIFFは内部的に${KICAD7_SYMBOL_DIR}/Simulation_SPICE.spを使用しているがKiCad7.0.0の${KICAD7_SYMBOL_DIR}にはそのファイルが入っていません。

KiCadのGitlabから最新の該当ファイルを持ってくる必要があります。
KiCad / KiCad Libraries / KiCad Symbols · GitLab

  • Simulation_SPICE.kicad_sym
  • Simulation_SPICE.sp

上記2つのファイルをダウンロードし${KICAD7_SYMBOL_DIR}内のファイルと置き換えてください。
あとは通常通りシミュレーションを行うと波形が表示されると思います。

トランスを扱う方法

トランスはLTspiceなどと同様にK1 L1 L2 coeffで書くことができます。(coeffは結合係数のことであり0~1.0)

インダクタを二つ配置してそれぞれにインダクタンス値をセットします。トランスとして扱う場合極性があるのでピン番号表示のチェックしておいた方が良いです。

次にテキストでSpiceコマンドを直打ちします。

シミュレーション画面を開きカスタムタブで回路図から指令をロードします。

あとの操作は同様で通常通り波形表示できます。

メーカーが提供しているsubcktモデルを読み込む方法もあります。(ピン対応に注意)

JFETモデルを読み込む際の注意点

JFETモデルを読み込む際にこのようなエラーが出ることがあります。

これはngspice内でJFETモデルが2つ用意されているためでlevel指定をする必要があります。OnsemiのJ201を例に示しますが、NJFの後にlevel = 1という文字を追記する必要があります。

.MODEL J201 NJF level =1(Beta=1.621m Betatce=-500m Rd=1 Rs=1 Lambda=2.236m Vto=-600m Vtotc=-2.5m Is=114.5f Isr=1.091p N=1 Nr=2 Xti=3 Alpha=506.8u Vk=251.7 Cgd=4.667p M=227.1m Pb=500m Fc=500m Cgs=2.992p Kf=0.6042f Af=1)

より詳しい話はngspiceドキュメントの9章JFETsを参照ください。

外部SPICEモデルの管理方法

外部SPICEモデルメーカーのHPに別々に配布されていますが一つにまとめることもできます。私はJFETならmy_jfet.libというようにデバイスごとにまとめています。

KiCad上ではこのようにプルダウンで選ぶことができます。

*1:KiCad6では代替ノードシーケンスと呼ばれていたものになります。

FNIRSI HS-01のレビュー

FNIRSI HS-01

今回はFNIRSIのHS-01を購入しましたのでそれのレビューになります。

電子タバコのようなスタイリッシュな見た目をしていますが、USB PD給電のはんだごてになります。付属品は購入形態にもよりますが、小手先、簡易的なこて台、barrel jack - Type-C変換がついてきます。私は7000円ぐらいの小手先一式がついてくるものを購入しました。

詳しくは公式ストアの説明を見ていただけたらと思います。
HS-01 購入ページリンク

スペック、使用感など

スペックですが、9,12,15,20Vに対応しており最近の急速充電対応のアダプタであれば駆動できます。ただ初期設定が20Vをトリガするようにできており、対応していないアダプタの場合起動にコケる場合もあるようです。(設定でデフォルト電圧を変更可能)

アダプタとケーブル付きのモデルもありますが、海外コンセント仕様なので本体だけを購入しアダプタとケーブルはAmazonなどで買うのが良いと思います。
私は以下の環境で動作確認をしています。

説明が長くなってしまいましたが早速使っていきます。

電源を入れるとスタンバイモードになります。
UIに従ってボタンを押すと加温が開始されます。
尚この状態で両方のボタンを同時押しすると設定モードへいけます。ここで温度やスリープ遷移時間、利き腕などを設定しておくと後々楽です。

加温時は40W~60Wで急速に加温し通常使用時は7~15Wぐらいで保たれるようです。

実際の使用感はこのような感じです。
350℃設定で熱量も十分ですし結構ぬるぬる溶けます。使用した半田は弘輝のS3X-72M 0.8mmです。
www.youtube.com

その他の機能として一定時間使用がないとヒータを切るスリープモード(80℃)を装備しています。内部に加速度センサが内蔵されており手に取ると再び加温が始まります。

その他製品とオープンソースでの取り組み

これまでFNIRSI HS-01の紹介をしてきましたが、他のPDはんだごてについても触れておこうと思います。現在販売されているものでは、以下の3つが有名かと思います。

このような製品が多く出回っている背景にはオープンソースプロジェクトの発展があげられます。
PINE64のPinecilもオープンソースで開発されており、PINE64のWikiに回路図が公開されています。ファームウェアはRalim氏が開発されているIronOSというものが使用されています。Pinecil V2ではPD EPRに対応するなど精力的に開発が進められています。

まとめ

今回はFNIRSIのHS-01というUSB PD給電のはんだごてを紹介しました。耐久性はわかりませんが、デザイン、性能ともに素晴らしい製品だと思いました。こういった製品がものすごい速度で出てくるあたり中国の開発力は流石だなと思うばかりです。

現状FNIRSIのHS-01は公式ファームのみのサポートですが、IronOSに対応して新しい機能が追加されていくのに期待したいです。個人的にはホールセンサを搭載しこて台に置いた際にスリープする機能が欲しかったりします。

というわけでPD対応はんだごての紹介でした。

FNIRSI FNB-58のレビュー

FNIRSI FNB-58

今回はUSB PD3.1トリガ+アナライザーであるFNIRSI FNB-58を購入しましたのでそれのレビューになります。
購入はAliexpressのFNIRSI Official storeで6500円程度でした。

外装から見ていきますが、アルミボディにアルマイトが施されており非常に高級感があります。インターフェイスはType-C入力/出力、MicroB入力、TypeA入力/出力、PC接続用(MicroB)があり豊富なプロトコルに対応できるようになっています。
液晶もかなり解像度が高く良いものが使用されているようです。

その他の機能については公式ストアを確認してもらえればと思います。
Aliexpress FNB-58 Store page

PDトリガで電圧を取り出してみる

PD SourceとしてはANKERのNanoⅡ 65Wを使用します。PDOは5.0V=3.0A / 9.0V=3.0A / 15.0V=3.0A / 20.0V=3.25A (最大 65W)に対応しているみたいです。

実験構成は以下のものを使用しました。

名前 メーカー 値段 説明 販売リンク
Hantek 2D72 Hantek 25000円 テスター https://amzn.to/3k5zDvN
Treedix Type-C Breakout Treedix 1090円 Type-C Breakoutボード https://amzn.to/3XECcTi
NanoⅡ 65W ANKER 4490円 アダプタ https://amzn.to/3Shueyf
U2C-CCPE20NBK ELECOM 2655円 PD EPRケーブル*1 https://amzn.to/3IwLHzy

ここでType-CのBreakoutボードに改造が必要なります。具体的にはCCピンに5.1kのついているのでこれをはがします。

5V,9V,15V,20Vを取り出した時の様子がこちらです。多少の電圧誤差はありますが正しくトリガできているようです。ここら辺はケーブルの電圧降下とテスターの誤差なんかもあるので細かく言及しないことにします。

PDトリガはアダプタを騙すような動作をするので負荷側を外しても電圧は出たままになります。このまま別のデバイスをつながないように注意してください

PD3.0 PPSトリガを使ってみる

FNB-58はPPSトリガにも対応しているのでそちらも利用してみます。アダプターはUGREENのNexode 45W(https://amzn.to/3EjJiFU)を使います。PPSで3.3-11Vに対応しているようです。

トリガのやり方としてはPDOの時と同様に一覧に出てくるので選択すればよいです。PPSの規格上20mV単位で設定できるようですが、FNB-58では100mV単位での設定しかできないようです。PPSトリガを行った際の様子を以下に示します。

見た感じ7.6Vをしっかりと出力できているようです。PPS規格はスマートフォンの充電を効率的に行うように策定されたものですが、ここまで細かく出せるとなると電子工作での応用も期待できます。

まとめ

今回はFNIRSIのFNB-58というPDトリガデバイスを使ってみました。PPSトリガに対応していたり、電流モニタ、E-marker検出機能もついているので6500円するのも頷けます。

ハードウエア、ソフトウエアも非常に良く作りこまれていますし電子工作をやる方は持っていてもよいと思う一品でした。

最後に記事で紹介している実験はある程度の電気知識を持ち合わせていることを前提としています。安全に留意し自己責任で行うようにしてください。

追記

その他記事中では紹介しませんでしたがPD以外のプロトコルにも対応しておりAutomatic Detectionという機能もあります。Qualcomm quickchargeなんかのトリガもできるようですね。

*1:EPRケーブルを使用していますがEPR対応である必要はないです。