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

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

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