| 沼津高専 電子制御工学科 | ||||||
| ||||||
| 改訂記録 | ||||||
|---|---|---|---|---|---|---|
| 版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
| A01 | 2000.10.13 | 田口 | 大庭 | 初版 | ||
| A02 | 2000.10.20 | 田口 | 大庭 | ロータリーエンコーダ・PWMタスクとLCDドライバ部分を一部変更 | ||
| A03 | 2001.1.6 | 田口 | 大庭 | 赤外線・タッチセンサドライバ部分を作成、LCDドライバ部分を修正 | ||
| B01 | 2001.3.7 | ソフト全員 | 遠山 | 全てを最終的な仕様に修正 | ||
1 .はじめに
本仕様書は、MIRSATLMソフトウェア設計書に規定された動作規定・状態遷移を実現する各RTタスクモジュール及びデバイスドライバのプログラムの動作を説明するものである。
2 .システム概要
MIRSATLMソフトウェアはRT-Linux上で動作する各RTタスクモジュール及びデバイスドライバと上位プログラムで構成される。即時性が要求されるハードウェアはRTタスクモジュールで、それ以外のハードウェアはデバイスドライバで処理を行う。上位プログラムは、これらの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, int *br) |
FIFO3からカウント値とフラグ(MIRSが停止したかどうかを調べるためのもの)の状態を読み込んで、左右のタイヤの移動距離と速度を求め、移動距離・速度とフラグの値を戻り値として返す。 タイヤの速度は、この関数でカウント値を読み込んだ際の最新のカウント値をRT-タスクの実行周期で割ることにより求める。 また、タイヤの移動距離と速度の単位はそれぞれ、[cm]、[cm/s]である。 |
| pwm_both_data(int l_duty, int r_duty) |
左右のモータのduty比(-100 〜 100)を引数として与える。 引数に正の値を入れるとタイヤは正転し、負の値を入れると逆転する。 |
| pwm_left_data(int l_duty) |
左モータのduty比を引数として与える。 |
| pwm_right_data(int r_duty) |
右モータのduty比を引数として与える。pwm_both_data()と同様、与えられた速度データを 8ビットのデータに置き換えた後FIFO4に書き込んでRT-タスクに送る。 |
| pwm_circle_data(int angle) |
MIRSをその場回転させる際の回転角を引数として与える。MIRSは指定された角度だけ回転した後停止する。 符号は+が時計回り、−が反時計回りである。 |
| pwm_cm_data(int l_distance, int r_distance) |
MIRSを直進させる距離[cm]を引数として与える。MIRSは指定された距離だけ直進した後停止する。 符号は+が前進、−が後進である。 |
| 制御関数 |
動作説明 |
| 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モジュールの表示設定を行う。選択したコマンドによって表示クリアやカーソルなどを設定する。そしてLCDモジュール(I/Oポート)に書き込む。 |
| close(fd) |
I/Oポートアドレスを解放する。 |
| I/Oポート |
使用RTタスクモジュール・デバイスドライバ |
内容 |
| 0100H |
LCDデバイスドライバ |
表示設定データの書き込み |
| 0102H |
LCDデバイスドライバ |
文字データの書き込み/読み込み |
| 0110H |
PWM・ロータリーエンコーダRTタスクモジュール |
方向・PWM信号の生成とラッチ確認(右) |
| 0112H |
PWM・ロータリーエンコーダRTタスクモジュール |
方向・PWM信号の生成とラッチ確認(左) |
| 0120H |
PWM・ロータリーエンコーダRTタスクモジュール |
ロータリーエンコーダカウントの動作制御 |
| 0122H |
PWM・ロータリーエンコーダRTタスクモジュール |
ロータリーエンコーダカウント値の読み込み |
| 0130H |
超音波センサRTタスクモジュール |
センサ送信信号 |
| 0132H |
超音波センサRTタスクモジュール |
割り込み信号のマスク・アンマスク&リセット |
| 0140H |
赤外線・タッチセンサデバイスドライバ |
赤外線・タッチセンサの状態 |
| 0142H |
赤外線・タッチセンサデバイスドライバ |
割り込み信号のマスク・アンマスク&リセット |

| 関連文書 |
|---|