内容
デジタルフィルタは、アナログフィルタで実現することができるものよりも高いパフォーマンスの特性を容易に実行できます。 |
●PDF を表示 ● コードをダウンロード ●登録 モニタをダウンロード |
◆ 定周期モジュール 【 DegitalFilter 】 デジタルフィルタルーチン![]() ・サブルーチン20でフィルタ係数を読込んでいます。フィルタ番号[DM0]の値に対応した係数を読込みます。 ・フィルタ 番号0は遮断周波数30Hz、4次のローパスフィルタです。 ・フィルタ 番号1は遮断周波数10Hz、8次のハイパスフィルタです。 ![]() ・係数を読込んだ際に、そのフィルタのセクション数も[TM18]に読込みます。 ・不要なセクションの演算をジャンプする様、条件ジャンプ命令に与える条件ビットを作っています。 ![]() ・セクション数が2ならば[@MR000]と[@MR001]がONします。 ・レジスタの0ビット目を立て、それをセクション数分上位へシフトします。(セクション数2なら” 0100”) ・そこから−1してフラグを作ります。(”0100bin”=”4Dec”から-1すると”3Dec”=”0011Bin”) ![]() ・係数がセットされると、後は0.2ms毎に割込みが掛かり演算をします。 ・浮動小数点で演算しています。 ・浮動小数点 ⇒ 整数 変換時に、小数点以下切捨てと10の−1乗桁四捨五入(負数は五捨六入)を選択[LR000]できます。 ・セクション数4の演算で約0.01〜0.02msの時間を要する様です。(スキャンタイムモニタ参照) ・フィルタの演算式は、その手のサイトなどを参照して頂き、ゆっくり読解いてください。 ![]() ・フィルタの入力に、正弦波を選択するには[MR101]をOFFし、[LR00]をセットしてください。 ・正弦波の他に定数やインパルスを与える事ができます。[MR101]をセットしてください。 ・[EM0]〜[EM2]に数値を入れて対応する[MR104]〜[MR106]のビットをセットします。 ![]() ・インパルスを入力するには、上記の状態で[EM3]に出力したい値を、[EM4]に出力したい割込み回数を入力します。 ・[MR107]をセットすると、設定した値を設定した割込み回数出力します。 |
◆ 毎スキャンモジュール 【 Oscillator 】 正弦波発生ルーチン![]() ・このモジュールの基本的なパラメータです。初期化ルーチン、サブルーチン0で設定しています。 ・割込み回数(周波数)は10μsで割り込むので100,000Hz(100kHz)です[FRQ_int] ・円周率π[@MR200] ・相の分可能200[@MR1400](カウンタ用)、[@MR1600](浮動小数点演算用) ![]() ・発振周波数設定[DM13]を変更すると正弦波の各パラメータを演算します。 ・[DM12]の負方向の最大値と、[DM11]の正方向の最大値を元に正弦波の振幅と中心値を算出します。 ![]() ・発振周波数を元に相を進める割込み回数を演算します。 ・1秒間の割込み回数は100,000回、2πの分解能を200にしています。 ・たとえば1Hzに設定した場合、割込み500回で相[@MR800]を1進めます。500×200(2π)で100,000回にな ります。 ・割込み回数[@MR1200]は、100,000 / 周波数[DM13] × 分可能[@MR1400] です。 ・商の余りの2倍を除数で割ったものを商に加えて四捨五入しています。『基本編 丸め』参照 ![]() ・「毎スキャンモジュール」は毎回スキャンされます。 ・[LR001]をセットすると[MR100]がセットされ10μsのクロックのカウントが開始します。 ・[CTC0]がアップすると、割込みルーチン”INT CTC0”へジャンプします。 ![]() ・割込みが設定回数に達すると次行からのコードを実行します。 ・カウンタをデクリメントし、0になったら[@MR000]をONします。 ・[@MR000]はSTP命令の条件です。 ![]() ![]() ・相カウンタが分解能を超えていたら、相カウンタを0にリセットします。 ![]() ・相カウンタを1進めます。 ・割込み回数カウンタをリセットします。 ・SIN関数で正弦波の演算をします。分解能200の相をラジアンに変換します。(相カウンタ[@MR800]÷分解能 [@MR1600]×2π[@MR200]rad) ・正弦値(-1〜1)に振幅[@MR600]を掛けて、オフセット[@MR400]を加算し、整数に変換します。 ・発振フラグ[LR001]が偽になった時、振幅が0になるまで発振を止めない様、ゼロクロス処理をしています。 ![]() |
◆ リアルタイムチャートモニタ ■ ローパスフィルタ バタワース特性■ 正弦波形 ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に1/5/10/100/200Hzの波形が記録されています。 ・実際に正弦波を発生させて、PLCをモニタするには次の操作をして下さい。 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。 ・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。 ・[DM11]で振幅の上限を、[DM12]で下限を設定します。 ・[DM13]に発振周波数を設定します。 ・[LR001]をON、[MR101]をOFFします。 ・周波数を変更すると、振幅の設定は更新されますが、振幅だけを変更したい場合は[MR000]をセットしてください。 ・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。 正弦波形のサンプル ![]() □1 . LPF(1Hz) ![]() ・1Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が30Hzなので信号は通過しています。 □2 . LPF(5Hz) ![]() ・5Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・出力の振幅が小さくなっていますが目では分りません。実際のチャートで確認してください。 □3 . LPF(10Hz) ![]() ・10Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が30Hzなので出力はかなり減衰します。 □4 . LPF(100Hz) ![]() ・100Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・出力はほぼ遮断されています。 □5 . LPF(200Hz) ![]() ・200Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・出力はほぼ完全に遮断されています。 ![]() ・正弦波出力は2πを200分割していますので結構階段状波形です。 ・ローパスフィルタを通すと滑らかになっているのがわかります。 ■ 矩形波形 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に矩形波形が記録されています。 ・実際にパルスを発生させて、PLCをモニタするには次の操作をして下さい。 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。 ・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。 ・[MR101]をONします。 ・[EM3]に入力に与える振幅を設定します。 ・[EM4]にパルス幅を設定します。パルス幅は割込み回数です。 ・[MR107]をセットするとパルスが発生します。 ・定数を与える場合は[EM0]〜[EM2]に任意の数値を設定します。対応するビットデバイス[MR104]〜[MR106]をセットすると、入力に反 映されます。 ・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。 矩形波形のサンプル ![]() □6 . LPF(矩形波) ![]() ・矩形波入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・オーバーシュートはありますが、積分動作をしています。 ■ ハイパスフィルタ バタワース特性■ 正弦波形 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に1/5/10/100/200Hzの波形が記録されています。 ・実際に正弦波を発生させて、PLCをモニタするには次の操作をして下さい。 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。 ・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。 ・[DM11]で振幅の上限を、[DM12]で下限を設定します。 ・[DM13]に発振周波数を設定します。 ・[LR001]をON、[MR101]をOFFします。 ・周波数を変更すると、振幅の設定は更新されますが、振幅だけを変更したい場合は[MR000]をセットしてください。 ・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。 正弦波形のサンプル ![]() □1 . HPF(1Hz) ![]() ・1Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が10Hzなので出力はほぼ完全に遮断されています。 □2 . HPF(5Hz) ![]() ・5Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が10Hzなので出力はかなり減衰します。 □3 . HPF(10Hz) ![]() ・10Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が10Hzなので信号は通過しています。 □4 . HPF(100Hz) ![]() ・100Hz入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・遮断周波数が10Hzなので信号は完全に通過しています。 ■ 矩形波形 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルには既に矩形波形が記録されています。 ・実際にパルスを発生させて、PLCをモニタするには次の操作をして下さい。 ・ダウンロードした「リアルタイムチャートモニタ」のサンプルを起動させます。 ・PLCをRUNさせ、モニタを開始したら「リアルタイムチャートモニタ」の トレース開始ボタンまたは 〔F5〕キー を押してください。 ・[MR101]をONします。 ・[EM3]に入力に与える振幅を設定します。 ・[EM4]にパルス幅を設定します。パルス幅は割込み回数です。 ・[MR107]をセットするとパルスが発生します。 ・定数を与える場合は[EM0]〜[EM2]に任意の数値を設定します。対応するビットデバイス[MR104]〜[MR106]をセットすると、入力に反 映されます。 ・[DM0]でフィルタの切替ができます。”0”でローパスフィルタ、”1”でハイパスフィルタになります。 矩形波形のサンプル ![]() □5 . HPF(矩形波) ![]() ・矩形波入力時の波形です。上(赤)が入力、下(黄)が出力です。 ・オーバーシュートはありますが、微分動作をしています。 |
◆ PLCモニタ![]() ・登録モニタファイルはここからダ ウンロードしてください。 ■ フィルタ関連のパラメータ ・[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 〕以降に関連パラメータを記述しています。 ![]() ![]() ・必要なデバイスを選択し、右クリックで「登録モニタウィンドウ」でもモニタ登録できます。 ・ビットデバイスは、カーソルを合わせ、ダブルクリックでもONできます。 |
●PDFを表示 ●コードをダウンロード ●登録モニタをダウンロード |