沼津高専 電子制御工学科
MIRS9901ソフトウェア詳細設計書
MIRS9901-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2000.5.30 佐田/稲葉/坪井 佐田 初版
A02 2000.6.23 佐田/稲葉/坪井 佐田 他のドキュメントとの整合
B01 2000.10.27 佐田/稲葉/坪井 佐田 実際の動きに合わせてドキュメントを改定。まだ変わる予定


目次

  1. はじめに
  2. 概要
  3. リアルタイムモニタ
  4. タスク詳細
  5. 試験

はじめに

本ドキュメントは、
MIRS9901基本設計書(MIRS9901-PROJ-0001)に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発に必要な事項を述べる。

概要

MIRS9901ソフトウェアはリアルタイムモニタMIRX68KとMIRX68K上で動作するタスクから構成される。タスクは低レベルタスクと高レベルタスクに区別され、基本的には低レベルタスクはハードウェアの制御を高レベルタスクは低レベルタスクを用いてシステムの動作を実現する。
MIRS9901ソフトウェアのタスクを以下に示す。

リアルタイムモニタ

  • タスクテーブル
  • タスク関数の処理の有無と優先度(高0〜6低)
    Oは有り
    Xは無し
    Task No. Initialization Normal Timer Interrupt Norml Priority Interrupt Priority
    00 (MMI) O O O O 0 1
    01 (超音波センサ) O O X O 1(6) 0
    02 (ロータリエンコーダ・タッチセンサ) O 0 O O 4 0
    03 (赤外線センサ) O 0 X 0 6 0
    04 (PWM) O O O X 1(0,3) X
    05 (90度回転タスク) O 0 0 X 2 X
    06 (円回転タスク) O O O X 3 X
    07 (自己位置検出タスク) O O X O 3 O
    08 (ポスト獲得タスク) O O O X 3 X
    09 (障害物回避) O O X X 4 X
    10 (センサ試験) O O X X 4 X

  • 低レベルタスク


    task00:MMI制御モジュールタスク

  • 機能

  • MMIボードのLED表示のコントロールと押しボタンスイッチの割り込みの受け取りを行う。BBに書かれた4桁のデータを4桁7seg-LEDに表示する機能。タイマにより一定時間ごとに表示の更新を行う。ロータリスイッチの値をBBに書き込む。
    BBに各設定値へのポインタを乗せているので、コマンドを使わずにそのポインタを用いることにより設定が即時反映される。
     
  • コマンド仕様
  • コマンド名 コード
    (HEX)
    サブコマンド 機能
    表示 なし なし なし
    マクロ 機能 説明
    DISP_SET(x,y) 表示データ設定 x 番目の表示データを y に設定
    LED_SET(x)LED点灯データ設定 赤緑LEDの点灯データを x に設定
  • BB仕様
  • 番号 内容
    なし なし
  • 初期設定

  • LED周りの初期設定を行う。BBクリア等も行う。
    1. モジュール定義

    2. void inzt00():リアルタイムモニタから呼ばれる初期設定関数。タイマタスクの初期化を行う
    3. HCPチャート

    4. 図1.1 inzt00モジュールHCPチャート
  • 割り込み処理タスク

  • 押しボタンスイッチの割り込みを受け取り、ディップスイッチにより指定されるタスクを実行する。(割り込みがあったかどうかは、各タスク内で値の変化を判断してください)。
    1. モジュール定義

    2. interrupt void intt00():リアルタイムモニタから呼ばれる割り込み関数。
    3. HCPチャート

    4. 図1.2 intt00モジュールHCPチャート
  • コマンド処理

  • なし
    1. モジュール定義

    2. void nrmt00(int,int):各フラグ等の設定を行う。
    3. HCPチャート

    4. 図1.3 nrmt00モジュールHCPチャート
  • タイマ処理

  • 実行するタスクを指定する。MMIの7seg-LEDに実行中のタスクのデータを表示する。赤緑LEDの表示も行う。
    1. モジュール定義

    2. void timt00(int,int):表示する。
    3. HCPチャート

    4. 図1.4 timt00モジュールHCPチャート

    task01:超音波センサ制御タスク

    1.機能

    4個の超音波を入力された順に動作させ距離情報をBBに書き込む。測定開始コマンドによりタスク が起動されると、停止コマンドが実行されるまで測定を行い結果をBBに書き込む。超音波発信したのち 、タスクは開放され割り込み待ちになる。超音波受信もしくはタイムアウトにより割り込み処理が起動 され距離を計算してBBに書き込む。

  • コマンド仕様
  • コマンド名 コード
    (HEX)
    サブコマンド 機能
    超音波1発信 1 なし 超音波センサ1から超音波を発信し、距離を測定する。
    超音波2発信 なし 超音波センサ2から超音波を発信し、距離を測定する。
    超音波3発信 なし 超音波センサ3から超音波を発信し、距離を測定する。
  • BB仕様
  • 番号 内容
    1
    超音波センサ1の測定結果

    接続エラー:888

    測定エラー:999
    2
    超音波センサ2の測定結果

    接続エラー:888

    測定エラー:999
    3
    超音波センサ3の測定結果

    接続エラー:888

    測定エラー:999
  • 初期設定

  • BBの内容を999にする。タイマタスク登録。
    1. モジュール定義

    2. void inzt01():リアルタイムモニタから呼ばれる初期設定関数。
    3. HCPチャート

    4. 図1.5 : inzt01モジュールHCPチャート
  • 割り込み処理タスク

  • 超音波受信があった時、割り込み処理を行う。
    1. モジュール定義

    2. interrupt void intt01():リアルタイムモニタから呼ばれる割り込み関数。超音波センサの測定停止をし、測定結果をBBに書き込む。
    3. HCPチャート

    4. 図1.6 : intt01モジュールHCPチャート
  • タイマ処理タスク

  • なし
    1. モジュール定義

    2. void timt01(int, int):なし
    3. HCPチャート

    4. なし
  • コマンド処理
    1. モジュール定義

    2. void nrmt01(int,int):超音波測定開始を行う関数。
    3. HCPチャート

    4. 図1.7 : nrmt01モジュールHCPチャート

    task02:ロータリーエンコーダ・タッチセンサタスク

    1.機能
    ロータリーエンコーダの値を読み取り左右のタイヤの移動量を導出する。結果をBBに書きこむ。タッチセンサの割り込みによりポスト又は壁の有無も扱う。

    2.コマンド仕様

    コマンド名 コード(HEX) サブコマンド 機能
    なし なし なし なし

    3.BB仕様

    番号 内容
      0 タッチセンサの値
      1 ロータリーエンコーダ左タイヤデータ
      2 ロータリーエンコーダ右タイヤデータ
      3 左タイヤ総移動量データ
      4 右タイヤ総移動量データ
      5 赤外線データ
      6 カウンタの値

    4.初期設定
    void rs_ts_init()をにロータリーエンコーダとタッチセンサのデータを初期化する。割り込みタスク登録・タイマタスクの登録をする。
    1.定義
    void inzt02():リアルタイムモニタから呼ばれる初期設定関数。
    2.HCPチャート


    図1.8.inzt02モジュールHCPチャート

    5.割り込み処理
    タッチセンサによる割り込みによりどのタッチセンサが反応をしているか調べ結果をBBに書き込む。(予)
    1.定義
    interrupt void intt02():タッチセンサの割り込み要求信号により実行される。タッチセンサの反応を調べBBに書き込む。
    2.HCPチャート


    図1.9.intt02モジュールHCPチャート

    6.タイマ処理
    一定時間ごとに起動され、ロータリーエンコーダの値を読み取り、BBに書き込む。
    1.定義
    void timt02():タイマ割り込みによって一定時間ごとに起動される。
    2.HCPチャート


    図1.10.timt02モジュールHCPチャート

    7.コマンド処理
    無し


    task03:赤外線センサタスク

    1.機能
    赤外線センサより割り込み要求信号があるたびにどの赤外線センサが反応したかを調べ、そのデータをBBに書き込む。

    2.コマンド仕様

    コマンド名 コード
    (HEX)
    サブコマンド 機能
    信号受信 01 n 赤外線センサの状態をBBに書き込む。
  • BB仕様
    番号内容
    1赤外線センサのデータ

    4.初期設定
    Hardware Function Library(HFL)のロ赤外線センサの初期化関数void irs_init()を使って赤外線センサのBBのデータを初期化。割り込みタスクの登録を行う。
    1.定義
    inzt03():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート


    図1.11.inzt03モジュールHCPチャート

    5.割り込み処理
    赤外線センサの割り込み要求信号により実行、どの赤外線センサが反応したかを調べBBに書き込む。
    1.定義
    interrupt void intt03():赤外線センサの割り込み要求信号により実行される。
    2.HCPチャート


    図1.12.intt03モジュールHCPチャート

    6.タイマ処理
    無い

    7.コマンド処理
    無い


    task04:PWM駆動タスク

    1.機能
    一定時間毎に起動され、タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。

    2.コマンド仕様

    コマンド名コード
    (HEX)
    サブコマンド機能
    左右モータ駆動 左PWMデータ(rotl) 右PWMデータ(rotr) タスク起動時に受け渡される引数によって指定される左右車輪の速度データをPWMに書き込む。左PWMデータの値により次に起動するタスクが決まる。
    mode 0 b タスク5を起動する
    mode 1 b タスク6を起動する
    mode 2 b タスク7を起動する
  • BB仕様
    番号内容
    1左PWMデータ
    2右PWMデータ

    4.初期設定
    void_pwm_init()を用い、PWMのBBのデータを初期化。タイマタスクの登録。
    1.定義
    void inzt04():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート


    図1.13.inzt04モジュールHCPチャート

    5.割り込み処理
    無し

    6.タイマ処理
    一定時間ごとに実行されHFLのPWM系関数void pwm_data(int r, int l)によって引数のデューティー比をPWMに書き込む。
    1.定義
    void timt04():タイマ割り込みによって一定時間ごとに実行される。
    2.HCPチャート


    図1.14.timt04モジュールHCPチャート

    7.コマンド処理

  • 左右モータ駆動:PWMに左右PWMデータを書きこむ。PWMデータによってほかのタスクを起動する。
  • mode:タスクを起動する。

  • 高レベルタスク


    task05:90度回転タスク

    1.機能
    ポスト(又は壁)にタッチセンサがぶつかった時、ポスト(又は壁)に対して90度横を向くようにする。これより次のポスト周回運動を 容易にしている。

    2.コマンド仕様

    コマンド コード(HEX) サブコマンド 機能
    回転方向の指定。

    3.BB仕様

    なし

    4.初期設定
    task5のタイマタスク登録。
    1.定義
    void inzt05():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート

    図1.15.inzt05モジュールHCPチャート

    5.割り込み処理
    無し

    6.タイマ処理
    task6により起動され、一定時間ごとに超音波センサを起動しポストとの距離を測る 1.定義
    void timt05():タイマ割り込みによって一定時間ごとに実行される。
    2.HCPチャート

    図1.15.timt05モジュールHCPチャート

    7.コマンド処理
    なし
    1.定義
    void nrmt05():task4により起動される。
    2.HCPチャート

    図1.16.intt05モジュールHCPチャート


    task06:円回転タスク

    1.機能
    ポストの周りを回る。途中超音波センサの値によりtask5のタイマタスクを起動し方向修正を行う。

    2.コマンド仕様

    なし

    3.BB仕様

    なし

    4.初期設定
    タイマタスクの登録。
    1.定義
    void inzt06():リアルタイムモニタから呼び出される初期設定タスク。
    2.HCPチャート

    図1.17.inzt06モジュールHCPチャート

    5.タイマ処理
    一定時間ごと左右の超音波センサを起動。その時の左右の超音波センサデータと基準値とを比較して方向修正のためにtask5のタイマタスクを起動する。
    1.定義
    oivd timt06():一定時間ごと起動。
    2.HCPチャート

    図1.18.timt06モジュールHCPチャート

    6.割り込み処理
    無し

    7.コマンド処理
    無し


    task07:自己位置検出タスク

    1.機能
    ロータリエンコーダ・タッチセンサタスクからロータリエンコーダの値を読み取り元の 位置からどれだけX,Y方向に移動したか検出する。また自機の向いている方向も検出できる。

    2.コマンド仕様

    なし

    3.BB仕様

    番号 内容
      1 移動距離X
      2 移動距離Y
      3 自機の方向θ

    4.初期設定
    BBのデータの初期化。タイマタスクの登録。
    1.定義
    void inzt07():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート

    図1.18.inzt07モジュールHCPチャート

    5.割り込み処理
    無し

    6.タイマ処理
    一定時間ごとにロータリエンコーダの値を読み取り、自己移動量及び自機の向いている方向を算出する

    7.コマンド処理
    なし


    task08:ポスト獲得タスク

    1.機能
    ポストを獲得し、赤外線センサにより獲得されたか否かを判断する。 同時に死角にあるポストの探索も行うタスク。

    2.コマンド仕様

    コマンド コード(HEX) サブコマンド 機能
    回転  01  1 反応のあったタッチセンサの位置の値から回転角を計算し回転、その後ポストのまわりを多角形周りする。
    超音波センサ  02  2 ポストを多角形に周りながら、ある範囲で外側の超音波センサによって 死角のポストを発見する。

    3.BB仕様

    番号 内容
      1 前面の赤外線センサ
      2 外側の超音波センサデータ

    4.初期設定
    BBのデータの初期化。割り込みタスクの登録。
    1.定義
    void inzt08():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート

    図1.18.inzt08モジュールHCPチャート

    5.割り込み処理
    1周目は赤外線の割り込み要求信号にたいして発動。スイッチ押下に入る。そしてスイッチ押下後、2周目は超音波の割り込み要求信号に対して発動し、死角にあるポスト獲得に向かう。
    1.定義
    void intt08():赤外線の割り込み要求信号により起動。
    2.HCPチャート

    図1.19.intt08モジュールHCPチャート

    6.タイマ処理
    無し

    7.コマンド処理
    タッチセンサの反応により回転、その後ポストの周りを多角形で周回する。
    1.定義
    void nrmt08():????タスクから呼び出される。
    2.HCPチャート


    task09:障害物回避タスク

    1.機能
    タッチセンサに反応があり、それが障害物であると判断された場合のみ起動。障害物を回避する。

    2.コマンド仕様

    コマンド コード(HEX) サブコマンド 機能
    障害物回避      01   障害物回避行動をとる。
    壁回避      02   壁回避行動をとる.。

    3.BB仕様

    番号 内容

    4.初期設定
    BBのデータの初期化。
    1.定義
    void inzt09():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート

    図1.20.inzt09モジュールHCPチャート

    5.割り込み処理
    今のところ無し。

    6.タイマ処理
    今のところ無し

    7.コマンド処理
    回避を行う。
    1.定義
    void nrmt09():初期設定関数から呼び出される。
    2.HCPチャート

    図1.21.nrmt09モジュールHCPチャート


    task10:センサ試験タスク

    1.機能
    各センサが正常に動作するかを試験する。DIPスイッチによって試験するセンサを選別する。

    2.コマンド仕様

    コマンド コード(HEX) サブコマンド 機能
    センサ試験      01 2  DIPスイッチの状況より試験するセンサを選択し試験する。

    3.BB仕様

    番号 内容
      1 LED表示データ
      2 DIPスイッチ選択データ

    4.初期設定
    BBのデータを初期化。
    1.定義
    void inzt10():リアルタイムモニタから呼び出される初期設定関数。
    2.HCPチャート

    図1.22.inzt10モジュールHCPチャート

    5.割り込み
    無し

    6.タイマ処理
    無し

    7.コマンド処理
    試験項目を参照
    1.定義
    void nrmt10():センサのテストをする。
    2.HCPチャート

    図1.23.nrmt10モジュールHCPチャート


     

    5.試験 ソフトウェア試験


    <システム試験 >

    試験用に作成したプログラムを使用

    ディップスイッチ、押しボタンスイッチにより試験項目を選択する。

    1. 規定動作試験(ディップスイッチを0に設定)

    ディップスイッチを0に設定した後、更に以下に示すように設定する。

    1.1 動きを設定(ディップスイッチ下位2ビットの設定)

    00:その場回転
    01:半径25cmの円を描く
    10:半径50cmの円を描く
    11:1m前進

    1.2 速度を設定(ディップスイッチ上位2ビットの設定)

    00:0.2m/sec
    01:0.5m/sec
    10:0.8m/sec
    11:1.0m/sec

    1.3 タッチセンサの設定(進行方向、回転方向を決定)

    前、右:後退または左回転
    左  :後退または右回転
    後  :前進

    2. 各センサ動作試験(ディップスイッチを5に設定)

    押しボタンスイッチにより、以下の順に試験項目を選択。

    2.1 RTCによるタイマ割り込み

    10分の1秒単位のカウンタを7seg.LEDに表示。

    2.2 自己座標算出

    自己のX座標、Y座標をディップスイッチにより順次切り替えて7seg.LEDに表示。

    2.3 超音波センサ

    使用するセンサを押しボタンスイッチにより順次切り替えて7seg.LEDに表示。

    2.4 タッチセンサ

    反応のあったセンサに対応する番号を7seg.LEDに表示。

    2.5 赤外線センサ

    前方を0°として、ディップスイッチにより切り替えて7seg.LEDに赤外線の方向を角度で表示。

    2.6 ディップスイッチ

    ディップスイッチの状態を7seg.LEDで表示。

    2.7 ロータリエンコーダ

    ロータリエンコーダのカウント値を7seg.LEDで表示。


    <標準MIRS上での試験>

    試験用に作成したプログラムを使用

    MIRS9901システムの基本的な動作を基に試験を行う。

    1. 動作試験

    基本的動作

    超音波で距離を測定,表示しながら直進する。
    タッチセンサに反応があると、右に90度その場回転する。
    その後、超音波を送信せずに1m直進し、右に90度回転する。
    ここでは、どの程度の誤差が生じるか測定する。

    ポスト獲得動作

    ポストの周りを回る。
    赤外線に反応があったら、停止する。
    赤外線に反応がなかった場合、1周して停止する。
    ポストの周りをどの程度の誤差でまわれるか測定する。