Darkside(リンクエラー修正しました)

2018年08月の記事

<< 前のページ

2018年8月21日(火) 22:25

突然不調

 レンジファインダーもI2C接続なので、試験基板にI2C用のコネクターを増設する。並列接続だ。起動時に通常の数倍の電力を消費するため、大容量電源を使うか680μF以上のコンデンサーを取り付けることが推奨されている。在庫にあった6.3V2200μFを使うことにした。
 改造した基盤に液晶ディスプレイを接続し、一昨日同様に正常表示されることを確認する。2つのコネクターいずれに接続しても、正常に動作している。これで、ハードは準備完了だ。

 レンジファインダーを使う基本的なI2C通信を行い、結果を液晶表示させる。手早く確認するため、表示は16進数にしておく。
 しかし、動作させても液晶画面には何も表示されない。それどころか、PIC初期化直後のLED点灯さえ行われない。
 レンジファインダーとのI2C通信は、読み出すという行為が発生するため一発で成功するとは限らない。液晶にI2Cで表示させることは成功したが、それは書き込みしか行っていない。
 だが、レンジファインダーがどうあれ1つ目のLEDは点灯してしかるべきだ。

 LEDが点灯しないばかりか、20秒ぐらい放置しておくと一瞬点灯する。その後も、数十秒に1回ぐらい点灯する。
 訳が分からないが、プログラムを一昨日の状態に戻してみる。だが、動作しない。なぜだ。プログラムを書き換える前に、このハードで動作確認を取った。そのときは、順調に想定通りに動作した。それが、ソフトを変えただけでなぜ動かなくなるのだ?
 ここで、電圧低下を疑う。エネループ4本に5Vの三端子レギュレーターという手抜き改造なので、エネループの電圧が下がって来ると入出力電位差を確保できず、三端子の出力が不安定になるのではないか?

 そこで、電源を DC-DC コンバーターに交換。これで、エネループ4本から安定して5Vを得られる。
 だが、症状は変わらない。まずは液晶表示だけでも一昨日の状態に戻そうと、2200μFをバイパスする。容量が大きいためにバッテリーのスイッチを入れても電圧上昇に時間を要するし、逆にスイッチを切っても電圧がすぐには低下しない。これが、PICの起動を不安定にしているかもしれない。
 しかし、それでも症状は変わらない。

 テスターで電源を調べても、PICには一貫して正常に5Vが供給されている。PICが過熱することもない。異臭も無い。

 結局のところ、犯人はMCLRだった。A5をプルアップしていなかったのだ。
 一昨日に動作したのは、A5に残留電荷があって偶然動作したのだろう。
 PIC16F88 を使うのが久しぶりなので、MCLRを安直に考えてしまった。外部クロックを使用せず8MHzで動作させる場合、I/Oを16本も使用可能・・・それだけ記憶していたせいで、MCLRの処理を行わずに済ませてしまった。いや、MCLRも入力ピンとして使用可能だが、そのためには無効化設定を要する。MCLRを有効にするCONFIGになっていたのに、プルアップしていなかった。それで動作しなかった。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年8月20日(月) 21:15

簡易測距

 レンジファインダーを制御するためにデーターシートを確認すると、かなり厄介なことが判明した。スペックは最大値であり、条件により低下する。

 誤差2.5センチは射程5メートル以内であり、通常は誤差1%ある。10メートルなら10センチだ。

 有効射程40メートルは、反射率70%の場合である。反射率が低ければ、有効射程も短くなる。
 ただ、ドップラーセンサーや人感センサーの有効射程は遥かに短かった。せいぜい10メートルぐらいまで有効なら使い物になるので、致命的ではない。常に40メートルを安心して使えるなら、それはそれで使い勝手が凄く良いのだが。
 反射率で有効射程が変化するのは、反射型センサーなら当然ではある。光線を直接受ける対の光センサーを使うのであれば、反射率の問題はない。しかし、使い勝手が桁違いに悪くなる。直接受光方式は、反射型が実用にならなかった場合の最終手段だ。

 更に厄介なのは、射程や反射率などの条件の良し悪しが、測定頻度とトレードオフにあること。
 反射光が強いほど、測定頻度を上げられる。弱い場合は、測定頻度が下がる。
 あるいは、測定精度を犠牲にして、測定頻度を上げられる。
 毎秒500回の測定が可能と言うのは、最大値である。条件が悪ければ、そんな頻度で測定できない。

 つまり、どれぐらいの精度で妥協するかを考えつつ、測定頻度を高めねばならない。

 検出対象の人体が、秒速10メートルで移動すると仮定する。毎秒100回の測定だと、10センチ移動する。これぐらいが、確実に検出できる限界だろう。毎秒500回は無理でも、最悪100回は測定したい。
 それが、どの程度の状況下で可能なのか。試してみなければ、分からない。

 レーザー・レンジファインダーとしてコスパの良い製品であることは確かだが、やはり安さには理由がある。
 反射光の強度パターンを射出光の強度パターンと照合し、最大一致のタイミングを調べているらしい。これはすなわち、受光センサーにアバランシェ・フォト・ダイオード(APD)を使用していない可能性が高い。
 そのため、反射強度の影響が広範囲に及ぶのだろう。

 今回レンジファインダーを使用する目的は、距離の測定ではなく障害物検出である。だから、精度をある程度は犠牲に出来る。最悪、誤差が1メートルぐらいあっても運用は可能である。
 しかし距離測定そのものが目的の場合は、APD を使用した本式レンジファインダーを買うべきだろう。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年8月19日(日) 18:58

I2C成功

 LEDを増設してデバッグし、I2C液晶を表示成功。

 ソフトウェアI2Cは、あっさり機能した。こうなると、dsPIC が謎だ。この液晶は3.3Vと5V両対応だが、3.3Vの方は相性が悪いのかもしれない。
 PIC16F88 を動かす都合で、今回は5V電源だ。

 8MHzなら3.3Vでも動作可能だが、レーザー・レンジファインダーが5V専用なので揃えることにした。速度不足の場合に、16MHz以上で動かすこともできるし。

 オシロで確認したI2C波形は、100KHzより少しだけ遅い。それ以上に、DUTYが50からかなり離れている。これでも動作するのだから、16MHzではなく20MHzでもソフトウェアI2Cは可能だと思われる。

 C言語も実用的ということで、PIC16F88 の価値がアップ。ただし、書き込みは旧世代である。インサーキットでは書き込めない。
 しかし、古い秋月基板は問題なく動作した。コンパイラーが出力したHEXをそのまま読み込んで使用できた。

 だが、古いのでパーツの見た目は劣化が進んでいる。基板上の水晶あんんて、全く刻印が読めない。まだまだ長く活躍して貰いたいので、アルミケースに収める。使用時はフタを外しておき、保存時にフタを閉じる。

 ただ、秋月の店頭にはまだ新品が売っている。最悪壊れても、調達は可能だ。
 逆に未だ新品が買えるというのは、PIC16F88 の書き込み環境が進歩していないということでもある。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年8月18日(土) 20:56

PIC16F88で

 dsPIC では、I2C通信が成功していない。

 STM32F4 では成功しているが、必要な機能に比べて大袈裟過ぎる。

 ならば、PIC16F88 でI2Cは実用的だろうか?
 これは、意外に多くの前例がある。特に、I2Cマスターとして動作させる場合はソフトウェアで簡単に出来る・・・ようだ。

 ここで、少し簡単な計算をしてみる。
 I2C標準には 100KHz と 400KHz がある。低速の 100KHz を使うとすると、1周期10μ秒。つまり、Hが5μ秒でLが5μ秒という波形をソフト生成せねばならない。
 PIC16F88 は4クロックあたり1命令。20MHz動作だと5MIPSすなわち1命令あたり0.2μ秒。HとLそれぞれに25命令を使う余裕がある。8MHz動作でも、10命令ずつだ。

 つまり、100KHz のソフトウェアI2Cであれば、8MHzでも充分に可能と判断できる。
 400KHz だとHとLそれぞれ2.5命令となって無理っぽいが、100KHz では通信速度が遅いようなら16MHz動作にすれば良いだろう。HとLそれぞれ5命令ずつで、400KHz のクロックを生成できる。

 そこで、dsPIC で使用したI2C接続LCDを持ち出した。これを接続できるPIC基板を作成し、動作試験してみよう。

 PIC16F88 で問題になるのは、ソフトウェア作成の厄介さ。マクロが使い物にならないアセンブラなので、精神がガリガリ削られる。
 コンパイラなんか使いものにならないし・・・と思っていたがI2Cの前例はみんなコンパイラーを使っている。そこで、試しにXC8を落として来た。

 PicKit2 を発見したのだが、MPLAB X IDE 4 は対応していない。最近買った PicKit4 だと、PIC16F88 の方が対応していない。
 MPLAB X IDE 2 を使うと、PicKit2 と PIC16F88 の両方が使える。しかし、そもそも PicKit2 と PIC16F88 は相性が悪く、書き込み失敗し易いようだ。

 ここは MPLAB X IDE 4 でコンパイルだけ行い、でき上がったHEXファイルを秋月基板でPICに書き込むのが無難だろう。手間が掛かるが。

 Cコンパイラーなんか論外だと思っていたが、想像以上にコードが小さい。PIC16F88 ってRAMは少ないが、プログラム領域はむしろ dsPIC よりでかいじゃないか!
 if文や引き算や多倍長演算で疲弊せずに済むメリットが極めて大きいので、I2CついでにCコンパイラーの実用性も測るとしよう。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2018年8月17日(金) 21:32

レンジファインダー

 赤外線を走らせる前に、まだ試せることがあったことに気付く。正確に言えば、市販品が使えるのではないか?ということだ。

 屋外で使用するため、赤外線方式の場合は太陽光に対するS/Nが問題になる。それさえクリアできれば、成功は明らかだ。S/Nを大きくしようとすれば、赤外線LEDではなく赤外線レーザーを使うのが妥当となる。更に、バンドパスフィルターで受光周波数を制限したり、太陽光線の中でも放射強度の弱い周波数を選んだり、考えることは多い。
 問題なのは、レーザー関係のパーツは入手性が悪いこと。希望の周波数に対応したバンドパスフィルターが買えるとは限らない。買えたとしても、数万円も取られたりする。また、赤外線レーザーも、周波数を自由に選べる訳じゃない。

 そう考えると、自作は極めて手間が掛かり制約が大きく、コストも膨大だ。
 ここで一息入れて考えると、屋外で赤外線レーザーを飛ばして障害物を検出する装置は、広く市販されているではないか!
 それは、レーザー・レンジファインダーである。赤外線レーザーを照射し、対象物までの距離を測定する。言い換えれば、障害物の有無で測定値が変化する。レーザー・レンジファインダーを障害物検知位置に向け、距離を測定する。距離が変化すれば、障害物が出現したと分かる。

 同様のことは超音波距離計でも可能だが、超音波は低速なので測定頻度を上げられない。秒速340メートルとすると、5メートル先まで往復するのに34分の1秒を要する。測定間隔を、それ以上短くできない。更に有効射程を長くしようとすれば、測定間隔が更に長くなる。この音速問題がキツく、超音波距離計を動体検知には使い辛い。
 レーザーなら光速なので、測定間隔の問題はない。また、極めて狭い範囲を測定できるため、近隣物体により影響も受けない。

 ただし、測定値を人間ではなくマイコンが読めないと困る。市販のレーザー距離計は、大半が人間用だ。測定値は人間が見て分かり易いものの、マイコンに読ませるのは容易ではない。
 そこで、ドローンなどのために以前調査した LIDAR-Lite を使うことにした。スペックは、

・測定距離0〜40メートル。
・測定単位1センチ
・精度2.5センチ
・測定頻度毎秒500回
・ビーム角4×2ミリラジアン
(距離10メートルで4×2センチの範囲)

 と動体検出用途にピッタリだ。有効射程、精度、測定頻度、測定範囲の狭さ、どれをとっても全く不足がない。もちろん市販品なので、レーザーはクラス1である。電源は5V130ミリアンペア。
 もう少し詳しく見ると、同様のものを自作するのは至難であることが分かる。

 クラス1レーザーは出力が低いイメージだが、実はこのレンジファインダーは光出力1.3ワットもある。すなわち、極めて照射時間が短いためクラス1なのだ。
 発光時間は、モノサシでは目盛りの太さに相当する。だから、短ければ短いほど良い。短いほどピーク出力を大きくしてもクラス1に収まり、ピーク出力の大きさは有効射程(あるいは同一距離ならS/N比)に直結する。良いことばかりである。
 だが、パルスレーザーをドライブするのは非常に難しい。CWのように簡単にドライバーを自作できない。

 唯一最大の欠点は、マイコンとの通信がI2Cであることだ。文字を見ただけでやる気が失われる、呪われた最悪の通信方式。しかし、他に適した製品も見つからない。欝だ。何とかI2Cを成功させねばならない。

written by higashino [カメラ] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4