- ベストアンサー
フォトインタラプタ出力の入力に関する疑問
- フォトインタラプタ出力を使用してモータの回転数を計測するための回路を作成しています。
- プログラム中のdelay_ms(2)を削除すると正確な計測ができなくなります。
- 正確な計測を行うためには、どのようなプログラムを作成する必要があるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
delay_ms(2); ディレイ=2ms だよって言う意味で 妄想しているが if( input_PIN(C4)==1){ delay_ms(2); 2ms のウエイト }//←これ忘れてるよ if(input_PIN(C4)==0{ 出力;2ms 相当の処理 } } タイミングが合わないと処理ができないんだと思う if( input_PIN(C4)==1){ //delay_ms(2); こうしちゃうと ウエイト 0 }//←これ忘れてるよ if(input_PIN(C4)==0{ 出力;2ms 相当の処理 } } こうしちゃうと 1のときと0のときのタイミングがずれて カウンターが暴走するんだと思う PICの仕様がわからないのでできるかどうかわからないが 普通は タイマーを使うよ http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html ↑ 難しい 危険だが do { //input_PIN(C4)==1 のときは loop しっぱなし } while(input_PIN(C4)==0); 出力; ↑ 危険 処理が開放されないので プログラム全体を見てね なるけど その後の処理時間中に抜けるのでならない 一番いいのは やはりタイマーを使って監視するのが一番正確 プログラム難易度は上がるけどね
その他の回答 (1)
出力をOFFするのはどこでしているのでしょうか。 そのまま出すだけなら if(input_PIN(C4)==1){ 出力OFF; } if(input_PIN(C4)==0{ 出力ON; } ではないでしょうか。 当然このプログラムが走る周期によって遅れはでます。 またチャタリングはハードのみで処理ということになります。 ちなみに(3150rev/min)は52.5パルス/sec デューティが50%として9.5msecのパルス幅になります。 このへんも確認しておいたほうがいいです。
お礼
早速のご回答ありがとうございます。 上記プログラムを試しましたが、カウントアップがかなりの低速になってしまいました... 出力はifの外でoffしています。
お礼
do { //input_PIN(C4)==1 のときは loop しっぱなし } while(input_PIN(C4)==0); 出力; これでしたら、input_PIN(C4)==0 の場合は、ずっと出力状態にならないでしょうか? 無知で申し訳ありません。