まず,PICを取り外し,三年学生実験の要領でコントローラを設計する:
% insmod freqresp_module.o % ./freqresp_app % rmmod freqresp_module
>> nominal
>> weight
>> hinf_discrete_zohコントローラが安定になっていることを確認する.
>> max(abs(eig(A)))1未満なら安定. 不安定の場合は,重み関数の設定からやりなおす.
>> sym_trans
% insmod hinf_module.o % ./hinf_app % rmmod hinf_module結果の確認:
>> perf_timefigure(1)...エラーマイク出力の時間応答
% make codes
% make simu以下の条件 a, b が満足されることを確認する.満足されない場合には,simu_shift_binary.c 中のスケーリング S と, gen_binary_code.c 中の有効桁 M を調整し,7 に戻る.
u: simu_shift_binary.dat の 2 列目と,result.dat の 4 列目 * S * 512 / 5 x[0]: simu_shift_binary.dat の 3 列目と,result.dat の 7 列目 * S * 512 / 5 x[1]: simu_shift_binary.dat の 4 列目と,result.dat の 8 列目 * S * 512 / 5 x[2]: simu_shift_binary.dat の 5 列目と,result.dat の 9 列目 * S * 512 / 5 (以下略)
>> check
% vmware &
・入力端のスケーリング y = (read_adc() - 511) << 1; ... S = 16 の場合 y = (read_adc() - 511) << 2; ... S = 32 の場合 y = (read_adc() - 511) << 3; ... S = 64 の場合 y = (read_adc() - 511) << 4; ... S = 128 の場合 ・出力端のスケーリング u_data = (u + 512) >> 2; ... S = 16 の場合 u_data = (u + 1024) >> 3; ... S = 32 の場合 u_data = (u + 2048) >> 4; ... S = 64 の場合 u_data = (u + 4096) >> 5; ... S = 128 の場合
% insmod hinf_module.oMPLAB でプログラムを RUN する.
% ./hinf_app(PC で消音制御が行われ,PIC の制御入力が記録される)
% rmmod hinf_module
% gnuplot gnuplot> plot "result.dat" u 1:4 w l, "result.dat" u 1:6 w lDC 成分のずれはパワーアンプ入力部のカップリングコンデンサで吸収されるので,無視してよい.
gnuplot> plot "result.dat" u 1:4 w l, "result.dat" u 1:($6-1.35) w l等とすれば,DC 分を無視して比較できる.