その76 フォトリフレクタ40個の扱い方 - ロボボボいじりにうってつけの日

記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

その76 フォトリフレクタ40個の扱い方

OmnimOにはラインセンサとして40個のフォトリフレクタがついています。
今日はその出力をどうやって読み込んでいるのかを紹介します。

フォトリフレクタの出力は電圧から読み取るので、AD変換したいわけですが、40個となるとマイコンのピンが足りません。
そこで方法としてはマルチプレクサを使うかAD変換ICを使うかが考えられます。
OmnimOではマルチプレクサを使う方法を取りました。

<マルチプレクサとは>
wikipedia曰く、「ふたつ以上の入力をひとつの信号として出力する機構である。」
いろいろあるのかも知れませんが、今回は74HC4051DBという素子をつかいました。
簡単にいうとこういうことになっています。
76-1.png
X0~X2に3bitで入力した信号によって、Z端子とY0~Y7のうち好きな端子とを接続できます。
Z端子をマイコンのAD変換できるピンにつなげておいて、Y0~Y7にセンサー出力を接続。
X端子への入力を変えて出力を読みたいセンサーにつなげた状態でAD変換すればひとつのピンで8個分のセンサー値を取得できることになります。
しかしながらちょっとは工夫しないと効率よくセンサー値を取得できません。

<40個の出力を得る方法~工夫なし編~>
本題に入ります。
OmnimOでは40個のセンサーが円状に並んでいます。40÷8=5ということでマルチプレクサは5つです。
マイコンの5つのAD変換ピンにそれぞれマルチプレクサを接続します。
この5つのマルチプレクサを便宜上マルチプレクサA~Eと呼びます。
すると以下のようになります。
76-4.png
そして「マルチプレクサAのY5」のことを「A5」と呼びます。
例えば図の中に「B3」というのが出てきた場合、「マルチプレクサBのY3端子が接続されたセンサー」という風に解釈してください。

さて、なんの工夫もなく接続すると以下のようになります。
76-2.png
シンプルでいいですね。
しかしこれだと問題があります。
その72に書いたように、OmnimOは毎回毎回全てのラインセンサを読み込んでいるわけではありません。
ライン周辺のものだけを読み込んでいます。
そしてそれらは隣同士並んでいるセンサーです。
すると上図のような並べ方だと問題があるんですね。
例えばラインの中心がA5の位置だった場合、まずA3~A7のセンサ出力を読み込みたいわけですが、これらは全て1つのマルチプレクサのチャンネルです。
5つともをマイコンのAD変換ピンAで読み込むので、それら全てを読むためには「AD変換してはチャンネルを切り替えAD変換してはチャンネルを切り替え...」ということになって時間がかかります。
マイコンの処理では同時に3つのピンについてAD変換できるのですが、これだと同時に1つのピンでしか変換できないため効率が悪いのです。
そこで工夫します。

<40個の出力を得る方法~工夫あり編~>
OmnimOでは40個のラインセンサとマルチプレクサは次のように接続されています。
76-3.png
するとどうなるか。例えばラインの中心がA5の位置だった場合、まずはD4,E4,A5,B5,C5を読むことになります。
これらは別々のマルチプレクサなので、5つの出力を同時にマイコンにつなげることができます。
そしたらマイコンではそれらを同時に読み込むことができるので読み込みにかかる時間を節約できますね。
これにはさらに発展編があります。

<ピンを節約する>
OmnimOではピンに余裕があったので、各マルチプレクサへの入力(X0~X2)は3bit×5個で15本のGPIOピンを使って独立に行っています。
しかしマイコンのピン数によっては15本も使ってられない場合もありますし、構想初期段階ではピンに余裕があるかわからなかったのでもうひと工夫ありました。
それは、「各マルチプレクサに同じ入力をする」というものです。
つまり、A-X0~E-X0, A-X1~E-X1, A-X2~E-X2にはそれぞれひとつのピンからの信号をつっこみます。
すると使用するピンの数は3本で済みます。
そうすると当然自由度は減るのですが、被害は少ないのです。
なぜなら先にも書いたとおりOmnimOは隣り合ったラインセンサを読むことが多い。
同じ信号をつっこんだ場合、マルチプレクサのチャンネル指定は[A○~E○]の隣あった5つをセットにしたものになります。
どうせ隣り合ったセンサを読み込むことになるので、同時に隣り合ったセンサにしか接続できなくても大した問題にはなりませんね。
ピンが足りない場合はこの方法がいいでしょう。


接続方法の説明は以上です。
ひとつ明確な問題は配線がすごいことになること。
回路図ではこう。

76-5.png

そしてセンサー基板へのコネクタを四隅に持っていくとなるとパターン図はこう。

76-6.png

右側に5つ縦に並んでるのがマルチプレクサで、四隅にある12ピンのコネクタがセンサー基板につながります。
これは4層にしたくもなりますね。
ノイズ乗りまくりかもしれません。


以上がOmnimOにおける40個のフォトリフレクタの扱い方です。
数個のセンサの値だけを取得する場合にはAD変換ICを使うよりもマルチプレクサの方がいい気がします。
毎回全てのセンサを読み込む場合にはAD変換IC使ってDMA使う方が良さそうです。
OmnimO-2ではIC使う気がします。

以上、その76 フォトリフレクタ40個の扱い方
スポンサーサイト

コメント

コメントの投稿

非公開コメント

プロフィール

たけもり

Author:たけもり
ブログ新設しました-->メカトロニクスにうってつけの日


「しゃれたロボットをつくりたい」と思いながらも大学生になってやっとのんびり勉強始めました.
勉強のためにロボトレースというロボコンに参加して,全方向移動型ロボトレーサー"OmnimO-2"を制作しました.
大学ではヘビ型ロボットについて研究しています.
個人的課外活動としてエンタメ志向のロボットを製作中.最新作のMimebotはこちら

ロボコン時代のロボットはこちらにまとめています.

アクセスカウンター

カレンダー

06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。