まえがき
先日、デジタル制御のPFCコントローラをプログラムする機会がありました。PFCはAC入力電圧波形に入力電流の波形を近づけるようにスイッチングレギュレータのオンタイミングを制御することで力率を1に近づけます。
そのためにPFCコントローラはAC電圧波形の振幅と瞬時的な位相を知る必要があります。
簡単なPFCコントローラICではピークホールド回路によってAC電圧のピーク値を記録し、現在値とピーク値の比でAC電圧の位相を検出することが行われています。
しかしながらこの方式ではAC電圧波形にノイズが重畳したときにも入力電流はその影響を受けてしまいます。
そこで今回のPFCコントローラではノイズに強くするためSOGI(Second Order Generalized Integrator)を利用したOSG(直交信号生成器)にFLL(周波数ロックループ)を付加した位相推定器を実装し、AC電圧波形の振幅・周波数・位相推定を行うことにしました。
なお、がっつり[1]を参考にしています。
FLL付きSOGI-OSG
ブロック線図を以下に示します。このシステムでは正弦波信号が入力vに与えられると同位相のVαとそれに直交したVβが出力されます。
システムにはパラメータとしてSOGI-OSG部のゲインGOSGとFLL部のゲインGFLL、そして初期角周波数ω0を与えます。
システムに入力を与え始めたとき、vとVαは一致しないため誤差eが大きな値を持ちますが、SOGIのフィードバックにより徐々にvとVαは一致し始め、VβもVαに直交します。
このときω=ω0=ω'であればFLLの出番は無いのですが現実のアプリケーションでは周波数のずれに対応しなければいけません。
ω≠ω'のとき、VβとVαの振幅は一致せず、Vαもvと位相がずれてしまいます。
このω'をωに近づけるのがブロック線図下部のFLLの積分器の働きです。
プログラム
以下にFLL付きSOGI-OSGのC++コードを示します。このプログラムは100Vrms, 50Hzの信号を与えられたときのVα, Vβを0.1秒分ファイルに出力します。
このプログラムの出力をグラフに表すと以下のようになります。
始まりから3,4周期ほど経つとVαはvに同期しVβとも等しい振幅で発振するようになっていることが分かります。
このプログラムにさらに位相検知機能を実装したものが以下のコードになります。
得られたVα, Vβに対しパーク変換を施し、そこから位相情報を取り出します。
Vα, Vβの比から直接的に位相を取り出すこともできますがこのコードにはアークタンジェントが不要だという利点があります。
先ほどの条件で位相検知を行った結果を以下のグラフに示します。
4周期目あたりからvの位相と等しい出力θが得られていることが分かります。
0 件のコメント :
コメントを投稿