So-net無料ブログ作成
検索選択

MC9S08SH4 のギャング出力でバックコンバータ (5) [HCS08]このエントリーを含むはてなブックマーク#

BuckConverter4.png

MC9S08SH4 のギャング出力でバックコンバータ (4)でプログラムを書いて実験した結果、ゲインが3から4の範囲で発振を起こすことがわかってきました。 今回は、発振する様子をシミュレーションで確認してみます。 順序は、きっと逆なんだろうな。

前回の記事の訂正

前回の記事を書いた後、いくつか今までの記事と矛盾している点を見つけましたので、訂正しておきます。

  1. LCフィルタのコンデンサは470µFだった。

    設計段階では、100µFのコンデンサを使っていたのですが、リップルを取るために大き目のコンデンサと交換して、そのままにしていました。

  2. マイコンの内蔵発振器が調整されていなかった。

    HCS08マイコンの内蔵発振器は、ソフトウェアでICSTRMレジスタに積極的に値を書き込まない限り、正確な周波数には調整されません。 今回のプログラムでは、このICSTRMレジスタに値を書き込む部分が抜けていたため、内蔵発振器は推定36kHzに調整されていたはずです。

  3. マイコンのBUSCLKが、divide-by-2のままだった。

    今回のアプリケーションでは、厳しいタイミング制約から高速なBUSCLKが要求されます。 にもかかわらず、BUSCLK分周器の設定を最高速の設定にはしていませんでした。 ICSTRMの問題とあわせて、BUSCLKは、9.216MHzになっていたはずです。

    これは、A/D変換やPWM周期の時間にも影響しています。 道理でPWMの周波数が20kHzになっていたはずです。

  4. PCのライン入力をそのまま接続していた。

    出力を観測するために"WaveSpectra"というソフトウェアを使用しているのですが、この時、決して高インピーダンスとは言えないPCのライン入力を直接接続していました。 本当は、エミッタフォロワなどのバッファを間に入れるべきでした。

と、色々と問題が見つかりましたが、シミュレーションの方の条件を合わせて検証していこうと思います。

scilabでシミュレーション

シミュレーションに使用するのは、scilabです。 バックコンバータの部品のモデルをscilabで記述して、シミュレーションを行います。 scilabの使い方調査したを「scilabで遊ぼう」シリーズの記事一覧を作りました。 こういうまとめは、Wikiにでも書きたいね。

諸定義

伝達関数を書くためにszを使った多項式を記述します。 最初は、これらの項を定義します。

//==============================================
//  Primary elements
//==============================================
s = poly(0,'s');
z = poly(0,'z');

続いて、これから解析するシステムの基本的な定数を定義します。

//==============================================
//  Parameter Declarations
//==============================================
fmin = 1;
fmax = 1d4;
ts   = 0.444d-3;

fminfmaxは、ボード線図を描くときの上下限周波数を指定します。 1Hzから10kHzまでの範囲を表示させることにします。

tsは、サンプリング周期です。 本当は、204.8µ秒となるはずだったのですが、マイコンのクロック設定の間違いにより444.4µ秒と長くなってしまいました。

LCフィルタ

//==============================================
//  LC filter
//  LC filter consists of a Toroidal Core Coil
//  and a Chemical Capacitor.
//  The output impedance of the driver is added
//  to the L elements.
//==============================================
L1 = s * 5.8d-3 + 0.2 + 6.46;       // L1 with DCR
C1 = 1 / (s * 470d-6) + 0.07;       // C1 with ESR
R1 = 15;
Z1 = C1 * R1 / (C1 + R1);
lc_cont = syslin('c', Z1 / (L1 + Z1));
scf(1);clf;bode(lc_cont,fmin,fmax);
lc = ss2tf(dscr(tf2ss(lc_cont),ts));

最初にLCフィルタの定義を行います。 このモデルでは、LとCに直列抵抗成分を入れてあります。 L1の抵抗成分には、Lの直流抵抗0.2Ωに加えてギャングポート出力のインピーダンスも加えてあります。 ギャングポート出力のインピーダンスは、MC9S08SH4 でギャング出力の実験で求めた値6.46Ωを入れています。

C1は、東信工業UTWRZシリーズです。 等価直列抵抗の70mΩは、常識的な値として適当に決めたものです。 まあ、こんなもんでしょう。

R1は、出力につないだ15Ωの抵抗負荷です。 1.5Vを出力した時に100mAの電流が流れます。

WS000346.png

LCフィルタの周波数応答をみると、100Hzから-20dB/decでゲインが低下しますが、4kHzから先は-10dB/decになっているのがわかります。 これは、C1の直列抵抗が無視できなくなったためです。

連続時間表現の"lc_cont"に加えて、離散時間表現の"lc"も定義しています。 周波数特性で示したのは連続時間表現の特性ですが、マイコンで実際に使用するのは、離散時間表現です。

アンチ・エリアス・フィルタ

//==============================================
//  Antialias filter
//  Antialias filter consists of an CR filter.
//==============================================
C2 = 1 / (s * 1d-6) + 0.1;          // C2 with ESR
R2 = 470;                           // R2
aa_cont = syslin('c', C2 / (R2 + C2));
scf(2);clf;bode(aa_cont,fmin,fmax);
aa = ss2tf(dscr(tf2ss(aa_cont),ts));

アンチ・エリアス・フィルタは、一次のCRフィルタです。 C2にも等価直列抵抗として100Ωを加えてあります。

WS000347.png

340Hzをカットオフ周波数とする素直な特性です。 この範囲では、等価直列抵抗の影響もないようです。

アンチ・エリアス・フィルタも連続時間表現の"aa_cont"と離散時間表現の"aa"を定義しています。

P制御器

//==============================================
//  P controller
//  P controller is implemented with a software.
//==============================================
kp = 3.12;
p_factor = syslin(ts,kp*(1/(z^2)));
controller = p_factor;

今回作成したのは、比例(P)制御器です。 伝達関数はただの定数になるはずなのです。 ところが、このプログラムでは、A/D変換してから実際にPWM出力に影響が出るまで2サンプリング時間を要する設計にしたため、"z-2"の項をかけてあります。

係数"kp=3.12"は、限界感度法によって求めた「安定して発振を続けるゲイン」です。 実際には、3から4の範囲に目的のゲインがあることがわかりましたから、矛盾しない結果であると言えるでしょう。

開ループ・ゲイン

//==============================================
//  Open loop
//  Calculate the open loop gain.
//==============================================
open_loop = controller*lc*aa
scf(3);clf;bode(open_loop,fmin, fmax);
[G,freqGM] = g_margin(open_loop)
[P,freqPM] = p_margin(open_loop)

開ループ・ゲインは、システムの安定性を見るための重要な要素です。 要するに、P制御器、LCフィルタ、アンチ・エリアス・フィルタの三つを通った時のゲインです。

WS000348.png

同時に利得余裕と位相余裕を計算させました。

 freqGM  =
 
    129.19211  
 G  =
 
  - 0.0031370  
 
 freqPM  =
 
    129.22903  
 P  =
 
  - 0.0412623  

発振をするための条件出しをしているので、利得余裕も位相余裕も"0"になっています。 周波数は、129Hzです。 実際に観測された発振周波数は、200Hzでしたが、桁は合っています。

閉ループ・ゲイン

//==============================================
//  Closed loop
//  Calculate the closed loop gain.
//==============================================
closed_loop = controller*lc/.aa
scf(4);clf;bode(closed_loop,fmin, fmax);

閉ループ・ゲインは、システムの入力から出力までの特性を現します。 このシステムの場合の入力は、基準電圧です。

WS000349.png

129Hzのところに鋭いピークが出ています。 この周波数で発振が起こっているということを意味します。

ステップ応答

//==============================================
//  Step responce
//  Simulate the step responce.
//==============================================
t = [0:ts:ts*100];
x = ones(1,101);
y = flts(x,closed_loop);
scf(5);clf;plot(t,x,t,y);ax5=gca();ax5.grid=[4,4];

100サンプリング周期分のステップ応答シミュレーションを行いました。 先のP制御器のゲインは、このステップ応答の結果を見ながら微調整したものです。

WS000350.png

このように安定して発振します。

次回は、もっと実用的なP制御器プログラムに書き換えて、変動する負荷をつないでみます。

参考文献

Scilab/Scicosで学ぶシミュレーションの基礎―自然・社会現象から、経済・金融、システム制御まで

Scilab/Scicosで学ぶシミュレーションの基礎―自然・社会現象から、経済・金融、システム制御まで

  • 作者: 橋本 洋志
  • 出版社/メーカー: オーム社
  • 発売日: 2008/01
  • メディア: 単行本
Scilabで学ぶシステム制御の基礎

Scilabで学ぶシステム制御の基礎

  • 作者: 橋本 洋志
  • 出版社/メーカー: オーム社
  • 発売日: 2007/04
  • メディア: 単行本

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。