PICマイコンを用いた能動騒音制御系の製作

まず,PICを取り外し,三年学生実験の要領でコントローラを設計する:

  1. 制御対象の周波数応答を取得する.
    % insmod freqresp_module.o
    % ./freqresp_app
    % rmmod freqresp_module
  2. ノミナルプラントを求める.
    >> nominal
  3. ロバスト安定のための重み関数を決める.
    >> weight
  4. 離散化 H∞ 制御問題を解き,補償器の状態空間実現を求める.
    >> hinf_discrete_zoh
    コントローラが安定になっていることを確認する.
    >> max(abs(eig(A)))
    1未満なら安定. 不安定の場合は,重み関数の設定からやりなおす.
  5. 補償器の状態空間実現をブロック対角可制御正準形に変換する.
    >> sym_trans
  6. PC で消音制御実験を行い,理想状況下での観測主力 y と制御入力 u および状態変数 x を記録する
    % insmod hinf_module.o
    % ./hinf_app
    % rmmod hinf_module
    結果の確認:
    >> perf_time
    figure(1)...エラーマイク出力の時間応答
  7. 補償器を近似して,PIC 用 C コードを生成する.
    % make codes
  8. PIC 用 C コードのシミュレーションを行う.
    data/S.dat にスケーリングの値を保存しておく.
      % make simu
    以下の条件 a, b が満足されることを確認する.満足されない場合には,simu_shift_binary.c 中のスケーリング S と, gen_binary_code.c 中の有効桁 M を調整し,7 に戻る.
    • a. シミュレーション結果が PC の制御結果にほぼ一致する.すなわち,以下がそれぞれほぼ一致する:
             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
               (以下略)
    • b. シミュレーション結果が,±32768 (符号付き int16 で表現できる整数 の範囲)を超えない
      上記は,以下のようにして確認できる
      >> check
  9. PIC 用 C コードをコンパイルする.
    1. VMware win98 を起動し,ユーザ exp でログインする.
      % vmware &
    2. ネットワークコンピュータで \\GOMANA\exp\WWW\openhouse を開き,以下のファイルを C:\mplab\control にコピーする: ax_0.c, ax_1.c, cx_0.c, cx_1.c, dy.c, def.h
    3. ANCボードとデバッガの電源を入れる
    4. MPLAB を起動し,プロジェクト C:\mplab\control\control.pjt を開く.
    5. C:\mplab\control\control.c を開き,スケーリング S の値に応じて,以下ように適宜編集する:
           ・入力端のスケーリング
      	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 の場合
    6. MPLABで make project を実行.
      Out of ROM となって,コンパイルできない場合には,gen_binary_code.c の SPLIT_A の値を小さく変更して,7 に戻る.(必ずしも,小さい方が out of rom になりにくいわけじゃないので注意.例えば,SPLIT_A が 0.6 だと out of rom で,0.7 だと out of rom にならなかったりすることがある.ページ毎にうまく関数がおさまってむだなく rom を使い切れるかどうかがポイント)
  10. PIC に書き込み
    スタンドアロンで動作させる場合は Enable Debug Mode のチェックを外す.以降の手順のように,MPLAB からプログラムを RUN する場合は,Enable Debug Mode のチェックを入れておく.
  11. PIC の動作を確認する.
    ANC ボードと実験装置の接続を確認する:
    • ANC ボードの出力信号が DTP-64(PC) の 15 番ピンに接続されている.
    • リファレンスマイクの出力信号が ANC ボードの AD IN1 に接続されてい る.
    • ANC ボードの D0 ピンが,DT-4(PC) の 5 番ピンに接続されている.
        % insmod hinf_module.o
      MPLAB でプログラムを RUN する.
        % ./hinf_app
      (PC で消音制御が行われ,PIC の制御入力が記録される)
      MPLAB でプログラムを STOP する.
        % rmmod hinf_module
  12. PC, PIC の制御入力がほぼ一致することを確認する
      % gnuplot
      gnuplot> plot "result.dat" u 1:4 w l, "result.dat" u 1:6 w l
    DC 成分のずれはパワーアンプ入力部のカップリングコンデンサで吸収されるので,無視してよい.
      gnuplot> plot "result.dat" u 1:4 w l, "result.dat" u 1:($6-1.35) w l
    等とすれば,DC 分を無視して比較できる.
  13. PIC で消音制御する.
    DTP-4(PC) の 1 番ピンに接続されている LPF の入力端子を外し,ANC ボードの出力信号に接続しなおす.(PIC が生成した制御入力が LPF に入力されるように接続を変更する)
    後は前と同様の手順で実験を行う.
  14. デバッガを外して,ANCボード単独で動作させる.
    1. PIC に Program を書き込む際のオプション「Enable Debug Mode」を外してから書き込む.
    2. MPLAB を終了.
    3. デバッガの電源 OFF. (この時点でで PIC は start する)
    4. 前と同様に,hinf_app を実行する.

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-04 (木) 18:28:37