デジタル制御

デジタル制御を行う方法を解説します。

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 から完成したプログラムを確認してください。

実行結果は、先述のプログラマブル素子と同じ結果となります。