サーボアナライザ
ロックインアンプをユーザ関数化し、 対象となる制御系の開ループ伝達関数を計測します。
ソースコードやプロジェクトファイルのダウンロードはこちら →servo.zip
| ブロック図 | ![]() | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| プログラム |
fn=60;
dp=1;
lockin( in, _sin, _cos )
{
x = bqLpf( in * _cos ); // ミキシング後フィルタ
y = bqLpf( in * _sin ); // ミキシング後フィルタ
amp = sqrt(x*x+y*y); // 振幅
phase = atan2(x,y); // 位相
return amp;
}
proc
{
Sin = w_sin( period, 0, level ); // 正弦波発生
Cos = w_sin( period, 0.25, level ); // 余弦波発生
Aout( 0, 0, 1, Cos ); // ch0: 励振信号出力
input = Ain( 0, 0, 1 ); // ch0: 信号 input 入力
output = Ain( 1, 0, 1 ); // ch1: 信号 output 入力
aIn = lockin( input, Sin, Cos ); // 入力信号の振幅
pIn = auxfunc( phase ); // 入力信号の位相
aOut= lockin( output, Sin, Cos ); // 出力信号の振幅
pOut= auxfunc( phase ); // 出力信号の位相
ratio = aOut / aIn; // 振幅比
shift = pOut - pIn; // 位相差
} | |||||||||||||||||||||||||||||||||||||||
| 説明 |
励振信号の周波数における、計測対象の入出力の振幅比と位相差を計測します。 周波数(または周期)を変化させて記録データを整理すれば、伝達関数のグラフを得ることができます。 以下の関数、信号、パラメータを使っています。
|
