沼津高専 電子制御工学科
MIRSATLM 超音波センサ・リアルタイムタスクモジュール取扱い説明書
MIRSATLM-SOFT-1001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2000.10.13 山本 大庭
初版
A02 2000.10.19 山本 大庭
システム構成図の誤り訂正
A03 2000.12.20 山本 山本
タスクの一部動作変更・換算式の誤り訂正

目次

  1. はじめに
  2. システム内の位置
  3. インストール手順
  4. 構成
  5. アプリケーションインターフェース
  6. 動作説明

1.はじめに

本ドキュメントは超音波センサを制御するリアルタイムタスクモジュールの取扱説明書である。

2.システム内の位置

MIRSシステム内で、超音波センサ・リアルタイムタスクモジュールは下図のように位置付けられており、
FIFO1、FIFO2を用いて上位プログラムとコマンド、データのやり取りを行い、超音波センサを制御する。


Fig. 1 システム構成図

3.インストール手順

本モジュールをRT−カーネルに組み込む方法を以下に示す。
  1. 必要なファイル(uss_mod.tar.gz)をダウンロードする。
  2. ファイルを解凍する。
    >tar xzvf uss_mod.tar.gz
  3. コンパイルする。
    >make all
  4. モジュールを組み込む。
    >insmod uss_module
  5. uss_moduleが組み込まれていることを確認する。
    >lsmod
モジュールを削除する場合は以下のコマンドを使う。
>rmmod uss_module

4.構成

本モジュールは以下の6つの関数から構成されている。
関数名引数動作概要
init_moduleint型voidFIFO1、FIFO2の生成
FIFO1とコマンドハンドラのアタッチ
割込みハンドラのIRQ設定(IRQ=3)
cleanup_modulevoid型voidFIFO1、FIFO2の削除
タイムアウト監視タスクの削除
割込みIRQ解放
コマンドハンドラ
(command_handler)
int型int cmdタイムアイト監視タスクの生成
タイムアウト監視タスクを周期タスクに設定
FIFO1に書き込まれたコマンドを、超音波送信関数に引数として渡す
割込みハンドラ
(intr_handler)
unsigned int型unsigned int irq, struct pt_regs *regsタイムアウト監視タスクの削除
時刻データの記憶
時刻データから距離データ(mm)への変換
距離データをFIFO2に書き込む
タイムアウト監視タスク
(timeout)
void型void *tFIFO1、FIFO2にそれぞれエラー値を書き込む
タイムアウト監視タスクの削除
超音波送信関数
(transmit)
unsigned int型int i引数で与えられた番号のセンサの超音波送信アドレスにコマンドを書き込む
Linuxカーネルの割込み許可
時刻データの記憶

5.アプリケーションインターフェース

本モジュールと上位プログラムとのインタフェースには、以下の2つのFIFO(/dev/rtf1、/dev/rtf2)を用いる。

FIFO1 (超音波センサ選択コマンド)


a1、a0にコマンドを書き込むと、コマンドハンドラが起動され、その番号の超音波センサに超音波送信の指示を出す。また、センサ番号以外のコマンドが書き込まれると、すべてエラーになる。

FIFO2 (測定結果 )
本モジュールで得た測定結果(またはエラー値)はこのFIFO2に書き込まれる。

buf[0]にint型・単位mmの距離データが書き込まれる。

使用例
6.動作説明

まず、本モジュールの動作の流れを示した図を以下に示す。


Fig.2 動作流れ図


  1. FIFO1にコマンドが書き込まれると、コマンドハンドラが起動する。コマンドハンドラでタイムアウト監視タスクを生成し、周期タスクとして0.1秒後に起動するよう設定する。また、FIFO1に書き込まれたコマンドを引き取り、超音波送信関数に引数として渡す。
  2. 超音波送信関数は、引数で与えられた番号の超音波センサに超音波送信の指示を出す。また、その時刻をシステムカウンタから記憶し、割込み許可の状態にする。
  3. FIFO2に値が書き込まれると、この一連の動作は終了する。(上位プログラムで、FIFO2に値が入るまで待つような設定をする。)

関連文書