Mindstorms RCX の光センサーの動きをハードウェア面から調査した結果を下記に公開します。
光センサー動作中の入力ポート電圧測定結果
測定対象:白 |
---|
brickOS測定値:49 (0x31) |
測定対象:グレー |
---|
brickOS測定値:41 (0x29) |
測定対象:黒 |
---|
brickOS測定値:31 (0x1F) |
brickOSにおいて光センサーをアクティブ・モードに設定したとき、入力ポートの電圧は約160マイクロ秒の短い周期で、High – Low を繰り返しています。
この仕組みは次の通りです。
Mindstorms RCX の光センサーブロックは、対象を照らすLEDと反射光を受ける受光素子(フォトトランジスター)の主に2つのモジュールから構成されています。一般的な回路構成であれば、LEDに電力を供給する「電源ライン」、受光素子の電圧を測定するための「信号ライン」、電源ラインと信号ライン共通の「グラウンド(GND)ライン」の3本の配線が必要になります。
しかし、RCXでは配線をシンプルにするためにセンサーブロックとRCXは2線(2芯)のラインで接続されています。そこで光センサーには蓄電器(コンデンサー)が組み込まれており、短い周期、つまり上記の160マイクロ秒周期で「電力供給(コンデンサー充電)」と「センサー読み取り」を切り替えることにより2線のラインで3線の機能を実現しています。
brickOSのシステムプログラムは割り込み処理を使って、上記の動作をユーザープログラムのバックグラウンドで実行しています。
ちなみにbrickOSは(モーターの疑似PWM制御やSOUND機能を実現するために)複数の割り込みを利用しています。したがって下記の測定結果からも見て取れる通り、光センサーのコントロールが、しばしば遅延しています。(必ず160マイクロ秒おきに光センサーの読み取り値が更新される訳ではない。)
以上の結果から、光センサーの更新周期をより短く、より連続的にしようとすると、光センサーへの給電(充電)時間を短くする必要があり、LEDの発光性能を低下させるリスクが予想されます。
以上です。
‘Mindstorms’, ‘Mindstorms RCX’ は、レゴグループの登録商標です。
参考URL
静岡大学 EE-Lab
http://eelab2.eng.shizuoka.ac.jp/mindstorms/rcx/mindstorms_rcx.html
このページを作成するために上記のWEBサイトの情報を参考にさせていただきました。