MATLAB/Simulink/Simscapeで真空管アンプのシミュレーション その1


動機

真空管アンプが好きです。といってもオーディオマニアじゃないのでエレキギター用の真空管アンプです。壊れたアンプをヤフオクで買って、修理して使ってます。Soldanoは入手したけど、BognerのEcstacyとDiezelのVH-4Sが欲しい。

LTSpice使って真空管アンプのシミュレーションとかもやってみたけど、SIN波スイープとか単純なことしかできない。Simulinkでできればもっと面白いことができるんじゃない?

LTSpice

有名なフリーの回路シミュレータ。真空管のシンボルなんかも出回っている。名機と言われるギターアンプの回路図は出回っているので、回路図起こしてシミュレーションするのは容易。下図はMarshall 1987のPre部のSIN波100Hz入力時の応答波形。ギターアンプなのでSIN波も歪んでこんな波形になる。

Simscape Electrical

Simscape ElectricalはSimscapeの電気回路ライブラリ。Simscapeはブロック線図シミュレータSimulinkの物理モデリング用ライブラリ。Simulinkはプログラム環境MATLABのシミュレーション用オプション。MATLABのひ孫みたいなもの。
電気・電子回路ライブラリは一通り揃っているけど、LTSpiceと違うのは、回路シンボルが各社の型番ごとにあるわけではなく、素子ごとにしか無いこと。SimscapeではSPICEのネットリストやシンボルはそのまま使えないのでまたこれが面倒。

例えばLTSpiceだとNPNトランジスタでも2SC1815(東芝)とか2SCR512(ROHM)とかメーカーの型番ごとにライブラリ(シンボル)が用意されているのに対して、Simscape ElectricalではNPN Bipolar Transister1つ。

だから素子ごとの特性は使用する部品ごとに入力してやる必要がある。

真空管シンボルのSimscapeへのインポート

Simscape Electricalにはsubcircuit2sscというコマンドがあって、SPICEライブラリをインポートできる。
これを使ってどこかからダウンロードしたプリ管12AX7Aのシンボルをインポートしてみた。

subcircuit2ssc('12AX7A.lib', '+mylibrary')

これでSimscapeのソースコードができるので、ビルド。

ssc_build('mylibrary')

するとこんなブロックが生成される。

見た目が良くないので、絵を書いてブロックのマスクに設定してとりあえずインポート完了。

シミュレーション用Simscapeモデル作成

シミュレーションするのにモデル(回路図)を作成する。
真空管の代表的な特性Ep-Ip特性を取るために、Plate電圧とGrid電圧を可変にして、Plate電流を測定できるモデルを作った。

MATLABでSimscapeモデルを駆動

パラメータスイープしながら出力特性を取るため、MATLABプログラムでSimscapeモデルを実行。

%% Parameter類
DCSW = 1;
VgStep = (-5:1:0);
VpStep = (0:20:500);
IpTable = zeros(length(VpStep), length(VgStep));
Ip = 0;
%% Simulation実行
set_param(gcs,'FastRestart','on') % 高速スタート
for n = 1:length(VgStep)
    for nn = 1:length(VpStep)
        Vg = VgStep(n);
        Vp = VpStep(nn);
        simOut = sim(gcs);
        tmp = simOut.get('Ip');     % for FastRestart
        IpTable(nn,n) = 1000*tmp(end);  % A =>mA
    end
    plot(VpStep, IpTable(:,n), 'b.-'), grid on, hold on
end
title('Ep-Ip Characteristics')
xlabel('Ep(V)')
ylabel('Ip(mA)')

Simscapeで真空管のEp-Ip特性を取得

上のMATLABコード実行して12AX7AのEp-Ip特性取れた。書籍の特性と比較しても所望の特性が出ている。

続く