※ ChatGPTを利用し、要約された質問です(原文:dsPIC33E でのインプットキャプチャについて)
dsPIC33Eでのインプットキャプチャの問題点と解決方法
このQ&Aのポイント
dsPIC33Eでのインプットキャプチャを用いてラインカメラの出力の幅を計測する際に、問題が発生しています。
現在のプログラムでは、カメラ出力が無い場合でもキャプチャが行われてしまい、正しい計測ができません。
解決策として、インプットキャプチャを特定の条件下でのみ行うように改良する必要があります。
dsPIC33E でのインプットキャプチャについて
問題点 概要:
インプットキャプチャを用いて、ラインカメラの出力の幅を計測しようと考えています。
しかし、カメラ出力が無い場合でも、キャプチャをしてしまいます。
SHOEISHAの「組込みマルチタスクプログラミング」等の書籍でも勉強していますが
分かりません。
何かアルゴリズムのお勧めの書籍等も教えて頂けると幸いです。
添付画像のような信号図になります。
仕様:
ラインカメラ:投光器を用いて、物体を検知すると信号が「L」になる。
そのエッジをキャプチャし、パルス幅を計測する。
※但し、現状はエッジを検出すると、あるピンを反転させてキャプチャしたかの点検をしています。(オシロにて確認)
動作詳細:
・動作は120MHzです。
・カメラはPICからクロックパルスを送り、それに応じて出力を返す。
1MHzのクロック(T=1[us])で129発。
その後は出力はOFFになり、リセットパルスが入力させるまで、信号を出力しない。
・タイマ2にて上記クロックパルスをカウントし、130回目で、割込み。
(後にデータ送信等を行う)
・タイマ3にて500[us]毎にリセットパルスを送信を、割込みにて行う。
これでカメラがリセットされる。
上記のタイマ2での割込み後です。
・メインループ内では、インプットキャプチャフラグを見ており、フラグONで
RB13ピンを反転させる。
(後に、タイマ1を用いたキャプチャ値の計算を実装予定)
問題点 詳細:
カメラの前に物体が無いと、信号は「H」です。
しかし、129回クロックパルスを与えると、カメラ出力は「L」になります。
この部分も検知してしまい、冒頭に述べたように、「カメラ出力が無い場合でもキャプチャをする」事態になっています。
(1)物体を検知していない状態のカメラ出力
ここでは、本来であればキャプチャは行わない
____________|¯¯¯¯¯¯¯¯¯|_________________
(2)物体を検知した状態
____________|¯¯¯|___|¯¯¯¯ |_________________
現状のプログラムでは、(1)の場合のエッジを検知してしまいます。
目的は(2)の状態の中央部のエッジ2つのみをキャプチしたいのです。
考察 調査した点:
(1)main内のwhile(1)内で、無限にキャプチャのフラグを見ていますので
タイマ2の値でのifを付けた。
TMR2が、1<TMR2<129の間のみキャプチャフラグを見る
!
(1-1)上記の改良で、キャプチャフラグ検知後に、TRM2の条件分岐
(2)キャプチャを行うタイミングでのみ、インプットキャプチャをONにする。
リセットパルス後、インプットキャプチャON、クロックパルス130回目でインプットキャプチャOFF
いずれも、うまくいきませんでした。(カメラが物体を検知していないのに、キャプチャをすると出力反転するピンが反転している)
要約は、
mainの無限ループ内でインプットキャプチャを行っており、それを条件に合わせてON/OFFしたいのですが、上手く行きません。
長文になりましたが宜しくお願い致します。
参考文献等の案内でも大歓迎ですのでお願いします。
お礼
TAOS社のイメージセンサの仕様書までご確認頂きありがとうございます。 頂いたアドバイスを基に試してみます。 今度もお時間があれば宜しくお願い致します。