2016-11-10 6 views
0

私は、IRQセンサー(Sharp GP2Y0A21YK0F)からADC MPC3008を介してデータを取得し、PyQtgraphライブラリーを使用してリアルタイムで表示する、Raspberry Pi 3 Bを使用するプロジェクトに取り組んでいます。ADCからデータを取得する際のPythonのサンプルレートを測定するにはどうすればよいですか?

しかし、サンプルがほとんど得られていないように見えますが、グラフは期待通りに「滑らか」ではありません。

私はAdafruit Python MCP3008ライブラリと関数mcp.read_adc(0)を使用してデータを取得しています。

Pythonでサンプルレートを測定する方法はありますか?

ヒューゴ・オリベイラ

+0

「サンプル数が非常に少なくなっているようですが、これはあなたが何を意味するのですか? ADCチャンネルを読み込むとサンプルが得られます。どのくらいの頻度でADCを読んでいますか?いくつかのコードを表示できますか? –

+0

100(または1000?)のサンプルを取得し、その時間を測定する時間を使用します。 – barny

+0

Piを使ってMCP3008から200kspsを得る方法について別の質問をしたと思います。あなたが近くにいるとは思わないでください。 Pi/Linuxはリアルタイムプラットフォームではありません – barny

答えて

0

ありがとう私はより良いあなたがデータにアクセスすることができますどのくらいの速のハンドルを取得する(multiprocessing and GUI updating - Qprocess or multiprocessing?を参照)、理想的マルチプロセッシングを経由して、いくつかの次のレベルのバッファリングを設定することをお勧め。現在QTimerを使って投票していますが、これは50ミリ秒毎に3回の生の読み込みを取得するだけなので、本当にあなたはタイマーを介して人為的に自分自身を制限しています。私はMCP3008を使用していませんが、いくつかのコードを素早く見ていくと、いくつかのサンプルを試して試してみるか、さらに詳しい文書を調べる必要があるようです。問題は、mcp.read_adc(0)メソッドの動作であり、ブロッキングかノンブロッキングかどうかです。ノンブロッキングの場合、新しいデータがない場合は古いデータが返されます...などです。理想的ですそれがタイミングセンスからブロックしていた場合は、新しいサンプルをどれくらい早く得ることができるかを判断するために、それにループを設定し、それぞれの連続したリターンをデルタで設定するだけです。ノンブロッキングの場合は、新しいサンプルがない場合はnullを返し、何かを返す場合は新しいサンプルのみを返します。あなたはそれを使って遊んで、それがどう動くかを見なければならないでしょう。いずれにしても、セカンダリスレッドがmcp.read_adc(0)をポーリングするように設定すると、update()タイマーを使用して最新のバッファを収集してプロットすることができます。私はまた、RaspPI上でのマルチスレッド/マルチプロセッシングの影響を知ることはできません(ここでの一般的な説明:Multiprocessing vs Threading Pythonを参照)。しかし、QTimerのポーリングより優れたものがあればいいはずです。

+0

ありがとうあなたの答えは大変です! –

関連する問題