2016-12-13 9 views
0

おはよう!マイクロコントローラでエンコーダからパルスをカウントする簡単な方法は何ですか?

申し訳ありません私の質問が世界で最も "尋ねられる"場合は申し訳ありませんが、私はあなたの心を晴らしたいと思います!

私はこのプロジェクトを実行しました。何らかの方法でエンコーダからのパルスをカウントすることです。プログラムは、ユーザが「実行中」に変更できる値(例えば、プログラムがスレッドの入力を読み込み、スレッド「カウンタ」の次のサイクルの変数を格納する)を「入力」として入力値として保持します。周波数は最高100KHzにする必要がありますが、50Khzは十分ですが、わかりません...高性能の方が良いでしょう...スレッドカウンタが限界に達するたびに出力が数字になります。

マイクロコントローラのプログラムはCでなければなりません。カウンタは決してパルスを失うべきではありません(信頼性は必須です)。

これは私が今のプロジェクトについて知っているすべてのですが、私は多くの他の特定の...

本当の問題があるでしょうとは思わないです。私はコマーシャルの 何のマイクロコントローラを使用する必要がありますか? Arduino?ラズベリー?ラズベリーを使用すると、バックグラウンドを失うことで何かをやる危険性がありますか?ビーグルボーンはどうですか? この問題についての暴走経路はありますか(特定のマイクロコントローラに関するドキュメントやチュートリアルの一部)?

私は繰り返しますが、信頼性を除いて信じられないほどの詳細はありません! そして申し訳ありませんが、私は何かが既に議論されているが、私は本当に最高で簡単な解決策について本当に混乱しています!そしておそらく私がいるので、初心者の中で最悪のもののように私を扱ってください!

あなたの優しさのためにたくさんの人に感謝します!

+0

はい、多くの完全に有効なソリューションです。したがって、これは少し広い質問です。ソフトウェアベースでも、一部のチップにタイマーやその他の周辺機器があり、外部ソースから刺激を受けてあなたのためにカウントすることができます。 –

答えて

2

LinuxまたはWindowsオペレーティングシステムを持っているものを使用したくない(つまりラズベリー、Beaglebone。等)は、彼らはリアルタイムではないので、あなたがどんな脈拍を見逃すことはできませんことができないため。

裸のCでプログラムされたほとんどの最新のマイクロコントローラで十分です。あなたがAVR(例えば、Atmega8またはAtmega16、またはAttiny2313)を8MHzでクロックし、目標分解能が100kHzであれば、1パルスにつき80CPUサイクルが必要になります。パルスを検出するためにハードウェア割り込みを使用する場合は、これで十分です。 2つの方法があります。

  1. コンパイル後のコード(アセンブリ)を分析します。インタラプトサービスルーチンでどのくらいの命令があるかがわかります。その後、マイクロコントローラのデータシートを使用すると、実行するサイクルの詳細数をカウントできます
  2. シグナルジェネレータを接続し、方形波に設定して、どの周波数でパルスが緩やかになるかを確認します。あなたの目標周波数が2〜3倍小さい場合、あなたは安全な範囲にいます。

カウントを終了した後、たとえばパルス数を送信することができます。それぞれがUARTまたはSPIを使用して、いくつかの高レベルのコンピュータ/ソフトウェアに秒単位でアクセスします。しかし、これはもちろん設計要件に依存します。

0

Arduino DueにはQuadrature Enoders(QDEC)用の2つのチャネルがありますが、元のものは「在庫切れ」です。それに関するいくつかの質問はArduino SEにありました:How to configure 2nd Quadrature Decoder IO pins in Arduino IDEReading Two Quadrature Encoder using a single Arduino Due

割り込みがないと、しかし、約100kHzの周波数では、より高速のarduinos(ARMベース)または外部ハードウェアデコーダが必要になる場合があります。

何かlike:exmpleため

enter image description here

と双方向カウンタ...

間違い
1

マイクロコントローラ(AVRなど)またはArduino(ほとんどがavrマイクロコントローラを使用します)を使用できます。パルスを読み出すには、外部割り込み機能とタイマ機能を使用できます。エンコーダでトリガされたrpsカウントを上げるために外部割り込みが使用され、 "x"時間(すなわち1秒)の合計回転を計算した後にrpsカウントをリセットするためにタイマ機能が使用されます

関連する問題