SSブログ

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

BuckConverter4.png

定電流制御の前に定電圧制御プログラムを作成します。 最初は、P制御からです。

各部分でのゲイン

PWM出力部分では、無次元の変数"duty"を入力として電圧の出力を出しています。 "duty"が1カウント増えるごとに電圧は、VDD/256[V] 増加しています。 そのため、PWMのゲインは VDD/256[V/count]と計算されます。

LCフィルタとアンチエリアス・フィルタでのゲインは、DCの時に 0dB になっており、さらにほぼ既知の周波数特性を持っています。

A/Dコンバータでは、電圧を入力として無次元の変換値を出力しています。 ここでは、処理速度を優先するため、8-bitの変換値を受け取ることにします。 A/Dコンバータの基準電圧は、VDDとVSSになっていますので、 A/Dコンバータのゲインは、 256/VDD[count/V] と計算されます。

エラーアンプとコントローラ以外の部分でのゲインは、DCの時にちょうど "1" になります。

P制御器

以上の計算から、ソフトウェアからみた時のPWMからA/Dコンバータまでのループゲインが "1" になることがわかりました。 この構成で「P制御器」を作るときには、A/Dコンバータから得た値 "vadc" から目標値 "target" を引いて得られるエラーアンプの出力 "err" を定数倍した値を変数 "duty" に設定すればおしまいということになります。 何だ、簡単だね。 目標値は、とりあえず1.5Vとします。

ところで、エラーアンプの計算結果が "0" になった時には、 "duty" の値はいくつにしたら良いのでしょうか? "0" の時には理論的に目標の電圧出力になる "duty" 値を設定することにします。 無負荷の状態の時に5.0V電源から1.5V出力を得るためには、デューティー比は30%になります。 このときの "duty" の値84を中心にしてみます。

err = vdac - target
duty = 84 + err * kp

ゲイン "kp" は、大きくすればするほど、出力の誤差が小さくなりますが、大きくしすぎると発振をおこします。 「P制御器」のゲインと発振の関係については、scilabで遊ぼう (10)で調べました。

処理のタイミング

BuckConverter6.png

今回、ただのCISCマイコンでソフトウェアPWMまでやらせようとしているので、CPUの処理能力の限界まで引き出さなくはなりません。 そこで、割り込みサービスルーチンの時間配分を考えました。

デューティーの更新は、PWM波形と非同期に行おうとしていたのですが、A/D変換時にGND電位が浮くかも知れないという心配が出てきたので、PWMの動作と同期させることにしました。 具体的には、PWM出力がLOWになって、主にショットキーダイオードが電流を流す期間にA/D変換を行います。

この時、問題になるのが、A/D変換に要する時間です。 データシートによると、A/D変換に要する時間は、最短で"20 ADCK + 5 BUSCLK"となっています。 ADCKの周波数は、8MHzが上限です。 20MHzのBUSCLKを4分周した5MHzをADCKに使おうとすると、最短A/D変換時間は"85 BUSCLK"つまり4.25µ秒と計算できます。 少なくともこの期間だけはPWM出力をLOWにしなくてはなりません。 つまり、デューティー比の上限が決まってしまうということになります。

実際の設計では、A/D変換時のサンプリング時間を長めにして変換時間を8.25µ秒とし、PWMデューティー比の上限を50%としてあります。

また、A/D変換時には、PWMの二波形分を使用し、変換開始と変換結果の受け取りを分けて、PWM波形8周期でデューティー比の更新を行うものとしてあります。 このため、サンプリング周波数は、1 / (25.6µsec × 8) = 4880Hz と当初の予定よりも低くなりました。

PHASEお仕事
0AD27(内蔵バンドギャップ)のA/D変換開始
1AD27のA/D変換結果受け取り
2AD2(PTA2)のA/D変換開始
3AD2のA/D変換結果受け取り
4AD3(PTA3)のA/D変換開始
5AD3のA/D変換結果受け取り
6-
7変換結果の転送とフレーム終了の通知

PHASE#7では、一次バッファに貯めた三つのA/D変換結果をまとめて最終バッファに転送します。 そして、メインループにフレームが終了した、つまりA/D変換結果が出揃ったことを通知します。 メインループでは、この通知に同期してデューティー比の計算を開始します。

いや、とにかく、ギリギリいっぱいです。

火入れ式

プログラムができたので、実行させてみます。 使用したコイルは、MC9S08SH4 のギャング出力でバックコンバータ (2)で作成した"35T0870-00H SINGLE"です。

最初のプログラムでは、P制御のゲインはハードコーディングしてあります。 また、変数"duty"の下限と上限をそれぞれ[20,132]としました。 まずは、VDDの0.3倍(77÷256)の値をターゲットにして出力電圧をハンディテスタで測定しました。 VDDは、5.05Vなので、理論的には1.519Vになるはずです。

kp無負荷時15Ω負荷
11.524V1.398V
21.524V1.435V
31.523V1.457V
41.527V1.474V
51.513V1.463V

ゲインを上げていくと負荷をつないだときの電圧の落ち込み(ロードレギュレーション)が改善されていることがわかります。 ただ、"kp"が4以上になると様子が変です。


WS000345.png

実は、この実験では、"kp"を4にした時から発振を起こしてしまいました。 周波数は、200Hzです。


WS000344.png

こちらは、”kp"が3の時です。 激しい発振は観測されないのですが、200Hzにピークがあるので、発振気味であることに変わりはないようです。 スペクトラムを見ると20kHz近辺にもピークがあります。 これは、PWMの周波数です。 LCフィルタでは取りきれなかったようです。

プロジェクト・アーカイブ

稚拙ではありますが、このプロジェクトを公開します。 興味がありましたら、ご覧になったうえでダメ出しをしていただければ幸いです。 このリンクを"SH10.zip"という名前で保存するとZIPファイルが再現できます。

参考文献

HCS08 Unleashed: Designer's Guide to the HCS08 Microcontrollers

HCS08 Unleashed: Designer's Guide to the HCS08 Microcontrollers

  • 作者: Fabio Pereira
  • 出版社/メーカー: Booksurge Llc
  • 発売日: 2007/11/13
  • メディア: ペーパーバック

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

トラックバックの受付は締め切りました

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