| 沼津高専 電子制御工学科 | ||||||
| ||||||
| 改訂記録 | ||||||
|---|---|---|---|---|---|---|
| 版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
| A01 | 2000.10.13 | 田口 | 大庭 | 初版 | ||
| A02 | 2000.10.20 | 田口 | 大庭 | ロータリーエンコーダ・PWMタスクとLCDドライバ部分を一部変更 | ||
| A03 | 2001.1.6 | 田口 | 大庭 | 赤外線・タッチセンサドライバ部分を作成、LCDドライバ部分を修正 | ||
1 .はじめに
本仕様書は、MIRSATLMソフトウェア設計書に規定された動作規定・状態遷移を実現する各タスク・ドライバプログラムの動作を説明するものである。
2 .システム概要
MIRSATLMソフトウェアはRT-Linux上で動作する各タスク・ドライバとユーザプログラムで構成される。Real Timeで動作すべきハードウェアに対してはRTタスクプログラムで、それ以外のハードウェアに対してはデバイスドライバプログラムで処理を行う。ユーザプログラムは、スイッチの状態やセンサ情報をもとに動作を決定しそれに対応したタスク・ドライバの起動を行う。



static struct file_operations irs_ts_fops = {
NULL, /* irs_ts_llseek */
irs_ts_read,
NULL, /* irs_ts_write */
NULL, /* irs_ts_readdir */
NULL, /* irs_ts_poll */
irs_ts_ioctl,
NULL, /* irs_ts_mmap */
irs_ts_open,
NULL, /* irs_ts_flush */
irs_ts_release,
NULL, /* irs_ts_fsync */
NULL, /* irs_ts_fasync */
NULL, /* irs_ts_check_media_change */
NULL, /* irs_ts_revalidate */
NULL, /* irs_ts_lock */
};

static struct file_operations lcd_fops = {
lcd_llseek,
lcd_read,
lcd_write,
NULL, /* lcd_readdir */
NULL, /* lcd_poll */
lcd_ioctl,
NULL, /* lcd_mmap */
lcd_open,
NULL, /* lcd_flush */
lcd_release,
NULL, /* lcd_fsync */
NULL, /* lcd_fasync */
NULL, /* check_media_change */
NULL, /* revalidate */
NULL, /* lock */
};

| 制御関数 |
動作説明 |
| pwm_enco_start(int period) |
実行周期period(単位はμsec)を引数として与える。この関数の中ではFIFO5へSTART指令と実行周期の書き込みを行う。この関数をまず始めに実行しないと、関数encoder_data()やpwm_data()を使用することはできない。 |
| pwm_enco_stop(void) |
RT-タスクを停止させる。この関数の中ではFIFO5へSTOP指令の書き込みを行っている。 |
| pwm_enco_restart(void) |
encorder_stop()により停止したタスクを再スタートさせる。この関数の中ではFIFO5へRESTART指令の書き込みを行っている。 |
| encorder_data(int *l_distance, int *r_distance, int *l_speed, int *r_speed) |
FIFO3からカウント値を読み込んで、それをもとに左右のタイヤの移動距離と左右のタイヤの速度を求めそれを戻り値として返す。 タイヤの速度は、この関数でカウント値を読み込んだ際の最新のカウント値(FIFOから一番最後に取り出したデータを元に計算したもの)から、その一つ前のカウント値を引いたものをRT-タスクの実行周期で割ることにより求める。 また、タイヤの移動距離と速度の単位はそれぞれ、[cm]、[cm/s]である。 |
| pwm_both_data(int l_speed, int r_speed) |
左右の速度データを引数として与える。この関数の中で、与えられたそれぞれの速度データをそれに対応する8ビットのデータに置き換えた後FIFO4に書き込んでRT-タスクに送る。 引数に正の値を入れるとタイヤは正転し、負の値を入れると逆転する。 |
| pwm_left_data(int l_speed) |
左の速度データを引数として与える。pwm_both_data()と同様、与えられた速度データを 8ビットのデータに置き換えた後FIFO4に書き込んでRT-タスクに送る。 |
| pwm_right_data(int r_speed) |
右の速度データを引数として与える。pwm_both_data()と同様、与えられた速度データを 8ビットのデータに置き換えた後FIFO4に書き込んでRT-タスクに送る。 |
| 制御関数 |
動作説明 |
| fc=open("/dev/irs_ts",f_mode) |
タッチセンサ・赤外線センサデバイスファイルをopenし、I/Oポートアドレスのチェックと登録を行う。 |
| read(int file, char buf,size_t count,loff_t offset) |
タッチセンサ・赤外線センサ・パワーオン信号処理モジュールからデータを読み込む。 |
| ioctl(int fc,int cmd,int &ctl_nr) |
タッチセンサ・赤外線センサ・パワーオン信号を、選択したコマンドによってそれぞれ分けて読み込む。 |
| close(fd) |
I/Oポートアドレスを解放する。 |
| 制御関数 |
動作説明 |
| fd=open("/dev/lcd",f_mode) |
LCDデバイスファイルをopenし、I/Oポートアドレスのチェックと登録を行う。 LCDモジュールのディスプレイON等の最低限の初期設定を行う。 |
| read(int file, char buffer,size_t count,loff_t offset) |
LCDモジュール(I/Oポート)に書き込まれている文字データを読み込む。 |
| write(int file, char buffer,int count,loff_t offset) |
表示したい文字データをLCDモジュール(I/Oポート)に書き込む。 |
| ioctl(int fd,int cmd,int &ctl_nr) |
デバイスの初期設定を行う。選択したコマンドによって表示クリアやカーソルなどを設定する。そしてLCDモジュール(I/Oポート)に書き込む。 |
| close(fd) |
I/Oポートアドレスを解放する。 |
| I/Oポート |
使用タスク・ドライバ |
内容 |
| 0100H |
LCDドライバ |
表示設定データの書き込み |
| 0102H |
LCDドライバ |
文字データの書き込み/読み込み |
| 0110H |
ロータリーエンコーダ・PWMタスク |
方向・PWM信号の生成とラッチ確認(右) |
| 0112H |
ロータリーエンコーダ・PWMタスク |
方向・PWM信号の生成とラッチ確認(左) |
| 0120H |
ロータリーエンコーダ・PWMタスク |
ロータリーエンコーダカウントの動作制御 |
| 0122H |
ロータリーエンコーダ・PWMタスク |
ロータリーエンコーダカウント値の読み込み |
| 0130H |
超音波センサタスク |
センサ送信信号 |
| 0132H |
超音波センサタスク |
割り込み信号のマスク・アンマスク&リセット |
| 0140H |
タッチ・赤外線センサドライバ |
赤外線・タッチセンサの状態 |
| 0142H |
タッチ・赤外線センサドライバ |
割り込み信号のマスク・アンマスク&リセット |

| 関連文書 |
|---|