デジタル制御
デジタル制御を行う方法を解説します。
Note
回路ファイルはTOPページからダウンロードできます。
プログラマブル素子を使ったフィードバック制御
Example
prc_dsp_block/DigitalPidControlPrc.cvt2
プログラマブル素子 PRCブロック
のサンプルを解説します。
PRCブロック
はシミュレーションのメイン周期、あるいは指定した動作周期のはじめ、あるいは終わりに実行することができます。
この例では、 PRCブロック
の中のプログラムで降圧型DCDCコンバーターを制御します。この時、PRCブロックの動作周波数は FRDブロック
で指定しており、50kHzで実行されます。一方、降圧型DCDCコンバーターの動作周波数はメイン周波数で指定され100kHzで実行されます。 +
PRCブロックに記載されているプログラムは以下の通りです。
Vout = output("OUT1","V","AVE");
Vtarget = 3;
setoutvar(Vtarget);
Err = -1 * (Vout - Vtarget);
setoutvar(Err);
p = 0.1 * Err;
i = Err + i0;
i0 = i;
D = p + 0.005 * i ;
if(D < 0) D = 0;
if(D > 1) D = 1;
setoutvar(D);
setparam("Q1","T0",D);
この例では、出力電圧 Vout:OUT1
を入力し、出力電圧が3VとなるようにPI制御を行います。
途中 setoutvar()
によって、実行中の変数の動きを確認することが可能です。
プログラムとしては、以下のSimulinkモデル(SCALE CONNECTチュートリアルの内容)と同等の制御を行っています。
実行結果は以下の様になります。
DSP素子を使ったフィードバック制御
Example
prc_dsp_block/DigitalPidControlDsp.cvt2
DSP素子
のサンプルを解説します。
DSP素子
はプログラマブル素子の様にプログラムを実行することが可能な素子ですが、 DSP素子
の内部に専用のブロックを配置し、その中にプログラムを記述していきます。
以下の例では、 DSP素子
の中に小さなプログラム単位として、ブロックを作成し、先述のプログラマブル素子と同じ制御を DSP素子
を用いて作成しました。
ここで DSP素子
内の ERR
ブロックのプログラムを例に挙げ、プログラムの解説をします。
$OUT = -1 * ($IN1 - $IN2);
各ブロックの入出力の変数名は、それぞれ次のように定義されています。
変数 | 内容 |
---|---|
$IN | 1入力ブロックの入力 |
$INn(nは1~4) | 複数入力ブロックの入力 |
$OUT | 出力 |
これらの変数は、 DSP素子
をコードとして整形した時に、 DSP素子のシンボル名+ブロック名
の変数に置き換えられます。
以下の様に、 DSP素子
の Function:Program
から完成したプログラムを確認してください。
実行結果は、先述のプログラマブル素子と同じ結果となります。