■ フィルター (KV File: filterx_xxx 

⇒ TO Home Page
内容

デジタルフィルタは、アナログフィルタで実現することができるものよりも高いパフォーマンスの特性を容易に実行できます。
また、フィルタ係数の変更もプログラムから容易に変更可能です。
ここでは、 バタワース特性 の「 低域通過フィルタ 」(LPF)と「 高域通過フィルタ 」(HPF)を「 無限インパルス応答 」(IIR)フィルタで記述しています。
標本化のタイミングは KV-3000 の「定周期モジュール」で行っています。今回は「定周期モジュール」の割込み時間を0.2msに設定して5kHzにしています。
フィルタを検証するには、正弦波発振器とA/Dコンバータユニットが必要になるので、内部に正弦波発振器を実装しました。
実際の信号を取込む際は、ナイキスト周波数を超える周波数成分はアナロ グ的に取り除いておいてください

正弦波発振は、高速カウンタコンパレータ(CTC)と内部クロック(10μs)を32ビット高速カウンタ(CTH)でカウントして割込みをかけて作ってい ます。
クロックが10μsで2πの分可能を200としていますので、正弦波発振最高周波数は500Hzになります。

また、フィルタ入力にパルスを加えるルーチンも実装しました。
この機会に「定周期モジュール」や「割込み」に付いても学習してください。

このサンプルは他と 独立したプロジェクト にしました。
下の「●コードをダウンロード」からダウンロードしてください。検証用のモニタデバイスは「●登録モニタをダウンロード」からダウンロードしてください。
シミュレーションは不可能 ですので、実機にて「リアルタイムチャートモニタ」で検証をお願いします。

●PDF を表示  ● コードをダウンロード   ●登録 モニタをダウンロード
◆ 定周期モジュール 【 DegitalFilter 】 デジタルフィルタルーチン

00064
・サブルーチン20でフィルタ係数を読込んでいます。フィルタ番号[DM0]の値に対応した係数を読込みます。
フィルタ 番号0は遮断周波数30Hz、4次のローパスフィルタです。
フィルタ 番号1は遮断周波数10Hz、8次のハイパスフィルタです。

00081
・係数を読込んだ際に、そのフィルタのセクション数も[TM18]に読込みます。
・不要なセクションの演算をジャンプする様、条件ジャンプ命令に与える条件ビットを作っています。

00024
・セクション数が2ならば[@MR000]と[@MR001]がONします。
・レジスタの0ビット目を立て、それをセクション数分上位へシフトします。(セクション数2なら” 0100”)
・そこから−1してフラグを作ります。(”0100bin”=”Dec”から-1すると”Dec”=”0011Bin”)

00043
・係数がセットされると、後は0.2ms毎に割込みが掛かり演算をします。
・浮動小数点で演算しています。
・浮動小数点 ⇒ 整数 変換時に、小数点以下切捨てと10の−1乗桁四捨五入(負数は五捨六入)を選択[LR000]できます。
・セクション数4の演算で約0.01〜0.02msの時間を要する様です。(スキャンタイムモニタ参照)
・フィルタの演算式は、その手のサイトなどを参照して頂き、ゆっくり読解いてください。

00008
・フィルタの入力に、正弦波を選択するには[MR101]をOFFし、[LR00]をセットしてください。
・正弦波の他に定数やインパルスを与える事ができます。[MR101]をセットしてください。
・[EM0]〜[EM2]に数値を入れて対応する[MR104]〜[MR106]のビットをセットします。

00011
・インパルスを入力するには、上記の状態で[EM3]に出力したい値を、[EM4]に出力したい割込み回数を入力します。
・[MR107]をセットすると、設定した値を設定した割込み回数出力します。

◆ 毎スキャンモジュール 【 Oscillator 】 正弦波発生ルーチン

00043
・このモジュールの基本的なパラメータです。初期化ルーチン、サブルーチン0で設定しています。
・割込み回数(周波数)は10μsで割り込むので100,000Hz(100kHz)です[FRQ_int]
・円周率π[@MR200]
・相の分可能200[@MR1400](カウンタ用)、[@MR1600](浮動小数点演算用)

00029
・発振周波数設定[DM13]を変更すると正弦波の各パラメータを演算します。
・[DM12]の負方向の最大値と、[DM11]の正方向の最大値を元に正弦波の振幅と中心値を算出します。

00036
・発振周波数を元に相を進める割込み回数を演算します。
・1秒間の割込み回数は100,000回、2πの分解能を200にしています。
・たとえば1Hzに設定した場合、割込み500回で相[@MR800]を1進めます。500×200(2π)で100,000回にな ります。
・割込み回数[@MR1200]は、100,000 / 周波数[DM13] × 分可能[@MR1400] です。
・商の余りの2倍を除数で割ったものを商に加えて四捨五入しています。『基本編 丸め』参照

00006
・「毎スキャンモジュール」は毎回スキャンされます。
・[LR001]をセットすると[MR100]がセットされ10μsのクロックのカウントが開始します。
・[CTC0]がアップすると、割込みルーチン”INT CTC0”へジャンプします。

00010
・割込みが設定回数に達すると次行からのコードを実行します。
・カウンタをデクリメントし、0になったら[@MR000]をONします。
・[@MR000]はSTP命令の条件です。
REF

00015
・相カウンタが分解能を超えていたら、相カウンタを0にリセットします。

00016
・相カウンタを1進めます。
・割込み回数カウンタをリセットします。
・SIN関数で正弦波の演算をします。分解能200の相をラジアンに変換します。(相カウンタ[@MR800]÷分解能 [@MR1600]×2π[@MR200]rad)
・正弦値(-1〜1)に振幅[@MR600]を掛けて、オフセット[@MR400]を加算し、整数に変換します。
・発振フラグ[LR001]が偽になった時、振幅が0になるまで発振を止めない様、ゼロクロス処理をしています。
REF

◆ リアルタイムチャートモニタ

■ ローパスフィルタ
バタワース特性
次数    :4 次
標本化周波数:5.000000 kHz
遮断周波数 :0.030000 kHz
 ■ 正弦波形
ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に1/5/10/100/200Hzの波形が記録されています。

・実際に正弦波を発生させて、PLCをモニタするには次の操作をして下さい。
・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。
・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。
・[DM11]で振幅の上限を、[DM12]で下限を設定します。
・[DM13]に発振周波数を設定します。
・[LR001]をON、[MR101]をOFFします。
・周波数を変更すると、振幅の設定は更新されますが、振幅だけを変更したい場合は[MR000]をセットしてください。
・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。


正弦波形のサンプル
Chart DL

□1 . LPF(1Hz)
LPF001
・1Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が30Hzなので信号は通過しています。

□2 . LPF(5Hz)
LPF005
・5Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・出力の振幅が小さくなっていますが目では分りません。実際のチャートで確認してください。

□3 . LPF(10Hz)
LPF010
・10Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が30Hzなので出力はかなり減衰します。

□4 . LPF(100Hz)
LPF100
・100Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・出力はほぼ遮断されています。

□5 . LPF(200Hz)
LPF200
・200Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・出力はほぼ完全に遮断されています。

LPF 

 ・正弦波出力は2πを200分割していますので結構階段状波形です。
 ・ローパスフィルタを通すと滑らかになっているのがわかります。


 ■ 矩形波形

・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に矩形波形が記録されています。

・実際にパルスを発生させて、PLCをモニタするには次の操作をして下さい。
・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。
・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。
・[MR101]をONします。
・[EM3]に入力に与える振幅を設定します。
・[EM4]にパルス幅を設定します。パルス幅は割込み回数です。
・[MR107]をセットするとパルスが発生します。
・定数を与える場合は[EM0]〜[EM2]に任意の数値を設定します。対応するビットデバイス[MR104]〜[MR106]をセットすると、入力に反 映されます。
・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。

矩形波形のサンプル
Chart DL

□6 . LPF(矩形波)
LPFpls
・矩形波入力時の波形です。上(赤)が入力、下(黄)が出力です。
・オーバーシュートはありますが、積分動作をしています。



■ ハイパスフィルタ
バタワース特性
次数    :8 次
標本化周波数:5.000000 kHz
遮断周波数 :0.010000 kHz
 ■ 正弦波形
・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に1/5/10/100/200Hzの波形が記録されています。

・実際に正弦波を発生させて、PLCをモニタするには次の操作をして下さい。
・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。
・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。
・[DM11]で振幅の上限を、[DM12]で下限を設定します。
・[DM13]に発振周波数を設定します。
・[LR001]をON、[MR101]をOFFします。
・周波数を変更すると、振幅の設定は更新されますが、振幅だけを変更したい場合は[MR000]をセットしてください。
・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。

正弦波形のサンプル
Chart DL

□1 . HPF(1Hz)
HPF001
・1Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が10Hzなので出力はほぼ完全に遮断されています。

□2 . HPF(5Hz)
HPF005
・5Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が10Hzなので出力はかなり減衰します。

□3 . HPF(10Hz)
HPF010
・10Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が10Hzなので信号は通過しています。

□4 . HPF(100Hz)
HPF100
・100Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。
・遮断周波数が10Hzなので信号は完全に通過しています。


 ■ 矩形波形
・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に矩形波形が記録されています。

・実際にパルスを発生させて、PLCをモニタするには次の操作をして下さい。
・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。
・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。
・[MR101]をONします。
・[EM3]に入力に与える振幅を設定します。
・[EM4]にパルス幅を設定します。パルス幅は割込み回数です。
・[MR107]をセットするとパルスが発生します。
・定数を与える場合は[EM0]〜[EM2]に任意の数値を設定します。対応するビットデバイス[MR104]〜[MR106]をセットすると、入力に反 映されます。
・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。

矩形波形のサンプル
Chart DL

□5 . HPF(矩形波)
HPFpls
・矩形波入力時の波形です。上(赤)が入力、下(黄)が出力です。
・オーバーシュートはありますが、微分動作をしています。

◆ PLCモニタ

Screen
・登録モニタファイルはここからダ ウンロードしてください。

 ■ フィルタ関連のパラメータ
・[DM0]:フィルタ番号を設定します。0はローパスフィルタ、1はハイパスフィルタです。
・[LR000]:ONすると、フィルタ演算の浮動小数点を整数に変換する時に、小数点第一位を四捨五入します。
・[MR101]:ONすると、フィルタ入力を「正弦波」から「定数」や「パルス」入力に切替えます。

 ■ 正弦波関連のパラメータ
・[LR001]:ONすると発振を開始します。
・[DM11]:方向側の振幅上限を設定します。
・[DM12]:負方向の振幅上限を設定します。
・振幅を大きくとり過ぎると演算がオーバーフローする可能性があります。
・振幅のみを変更した場合、[MR000]をセットしてください。振幅設定が反映します。
・[DM13]:周波数を設定します。

 ■ 定数関連のパラメータ
・[EM0]:入力したい定数をセットします。
・[MR104]:ONすると[EM0]で設定された値がフィルタに入力されます。
・同様に[EM1]〜[EM2]に定数を、[MR105]〜[MR106]ONで値をセットします。

 ■ パルス関連のパラメータ
・[EM3]:フィルタに与えたい数値を設定します。
・[EM4]:パルス幅を設定します。パルス幅は割込み回数です。”32”を設定すると32回割込まれる間、[EM3]で設定した値をフィルタに与えま す。
・[MR107]:ONするとインパルスを発生します。


■ 毎スキャンモジュール「Main」
〔 ENDH 〕以降に関連パラメータを記述しています。

00012

00014

・必要なデバイスを選択し、右クリックで「登録モニタウィンドウ」でもモニタ登録できます。
・ビットデバイスは、カーソルを合わせ、ダブルクリックでもONできます。

●PDFを表示  ●コードをダウンロード   ●登録モニタをダウンロード