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

目次

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

1.はじめに

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

2.システム内の位置

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


Fig. 1 システム構成図

3.インストール手順

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

4.構成

本モジュールは以下の5つの関数から構成されている。
関数名引数動作概要
init_moduleint型voidFIFO1、FIFO2の生成
FIFO1とコマンドハンドラのアタッチ
割込みハンドラのIRQ設定(IRQ=3)
cleanup_modulevoid型voidFIFO1、FIFO2の削除
割込みIRQ解放
コマンドハンドラ
(command_handler)
int型int cmdFIFO1に書き込まれたコマンドを、超音波送信関数に引数として渡す
割込みハンドラ
(intr_handler)
unsigned int型unsigned int irq, struct pt_regs *regs時刻データの記憶
時刻データから距離データ(mm)への変換
距離データを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にコマンドが書き込まれると、コマンドハンドラが起動する。コマンドハンドラは、FIFO1に書き込まれたコマンドを引き取り、超音波送信関数に引数として渡す。
  2. 超音波送信関数は、引数で与えられた番号の超音波センサに超音波送信の指示を出す。また、その時刻をシステムカウンタから記憶し、割込み許可の状態にする。
  3. 割込み信号が入ると、割込みハンドラが起動する。割込みハンドラはその時刻をシステムクロックより記憶する。その後、送信時の時刻データと先の受信時の時刻データから距離に換算する。換算式を以下に示す。

      距離 = (受信時の時間 − 送信時の時間) * (331.5 + 0.61t) / (1000000 * 2)

    ここでtは温度であり、本モジュールではこれを20℃としている。
    換算された距離データはFIFO2に書き込まれる。
    FIFO2に値が書き込まれると、このモジュールの一連の動作は終了する。(上位プログラムで、FIFO2に値が入るまで待つような設定をする。)
7.単体試験

本モジュールは以下の手順で行う。
  1. ダウンロードしてきたファイルを新しいディレクトリ(uss)のなかで解凍し、uss_module.c及びuss_app.cをMakefileを使ってコンパイルする。
    >cd uss
    >ls
    Makefile uss_app.c uss_module.c
    >make all
    >ls
    Makefile uss_app uss_app.c uss_module.c uss_module.o
  2. rtlinux-2.3のディレクトリで必要なモジュールを組み込む。
    >cd /use/src/rtlinux-2.3/
    >./insrtl
  3. uss_module.oを組み込む。
    >insmod uss_module.o
  4. uss_appを実行する。
    >make test
    または
    >./uss_app
  5. その後、uss[1]からuss[4]までの距離が表示される。タイムアウトの場合、999の値が表示される。
    これでエラーが表示されなければ、本モジュールの動作は正常である。

関連文書