エントリーレベルのデータ収集カードとして、USB-6009 は周波数を直接測定できず、単純に外部パルスをカウントすることしかできません。ただし、Windows 上でソフトウェアタイミングを使用し、ハードウェアカウント機能と連携すれば、「周波数測定方式」の周波数測定も実装できます。この方法は、Windows (非リアルタイム オペレーティング システム) ではソフトウェア タイミングが不正確であるため制限があり、周波数測定の結果はそれほど正確ではありませんが、高い精度を必要としないアプリケーションには依然として一定の応用価値があります。この記事では、関連するコード設計のアイデアを示し、この方法の周波数測定誤差を計算する例を示します。以下の内容はご参考までです。転載は歓迎ですが、出典を明記してください。
1. 周波数測定方法
一般的な周波数測定法は、「周波数測定法」(「周波数カウント法」とも呼ばれます)と「週測定法」(「タイミング法」とも呼ばれます)に分けられます。これら 2 つの方法の長所と短所、およびハードウェアの要件については、私の他のブログ投稿 (/p/14107012.html) を参照してください。ここでは詳しく説明しません。ここでは、読者の理解を容易にするために、この記事で使用されている周波数測定方法について簡単に説明します。
周波数測定法の考え方は、もっと長く「標準時間」内の測定信号のパルス数をカウントします。下図に示すように、「標準時刻」を与える標準信号の周期は Tc1、周波数は fc1 です。測定対象の外部入力信号の周期は Tx1、周波数は fx1 です。

図1 周波数測定法の測定原理
カウンタが標準時間 Tc1 内に測定信号内の合計 N1 個のパルスを測定した場合、測定信号の周波数は次のようになります。 $$ f_{x1} = \frac{N_1}{T_{c1}} = N_1 f_{c1}\qquad\qquad \tag 1 $$
カウンタは整数のみをカウントできるため、Tc1 時間ウィンドウ内で測定される信号のサイクルが正確に整数になるとは限りません。カウンタの開始エッジと終了エッジが測定信号の位相と一致していないため、ウィンドウ境界で 1 つのパルスが多かれ少なかれカウントされる可能性があり、最大測定誤差は測定信号 ±1 になります。これは周波数測定方法に固有の誤差であり、ボードの品質とは関係ありません。
2. USB-6009に基づく周波数測定方法とソフトウェアタイミング
USB-6009 にはカウント機能のみがあり、ハードウェア タイミング機能はありません。そのため、周波数を測定するには「周波数測定方式」を使用するしかありません。外部入力パルスは図 1 の測定信号として使用され、USB-6009 の PF0 入力によってカウントされます。一方、図1の標準信号は、Windowsタイミングシステムサービスを呼び出すLabVIEWによってのみ実装できます。
非リアルタイム オペレーティング システムであるため、Windows システム タイマーのタイミング エラーはミリ秒のオーダーです (タスク スケジューリングのジッターは通常 1 ~ 2 ミリ秒です)。周波数測定法によるテスト誤差は、前述の±1パルスの計数誤差だけでなく、Windowsのタイミングによる基準信号周期Tc1の誤差も発生します。
標準信号期間Tc1を長くすると、合計値N1における±1パルスの計数誤差の相対誤差率を低減できるだけでなく、基準信号期間Tc1を長くすることもできる。また、合計タイミング長における Windows ソフトウェア タイミング エラーの相対エラー率を減らすこともできます。一方、基準信号周期 Tc1 が長すぎると、試験結果の応答時間が長くなりすぎます。数十秒ごとに試験結果の周波数を表示するだけの周波数テスターを使いたい人はいません。また、Tc1 の上限は、カウンタのビット幅と測定される信号の最高周波数によっても制限されます。したがって、Tc1 の値もテスト精度とテスト時間の間で妥協する必要があります。
3. 試験手順
下の図は、低周波電圧制御発振器によって出力されるパルスの周波数を測定するために上記の周波数測定のアイデアを使用して作成したLabVIEWプログラムのブロック図とフロントパネル図を示しています(回路図については/p/9833691.htmlを参照)。


図 2 USB-6009 およびソフトウェア タイミングに基づく周波数測定プログラムのブロック図とフロント パネル図
プログラム全体のブロック図の主要な機能実装は、イベント構造体に配置されます。この目的は、[テストの開始]ボタンをクリックするたびにのみテストが実行されるようにすることです。テスト プロセスには次のものが含まれます。
- USB-6009のカウント機能を初期化する
- ソフトウェアを使用して持続時間 Tc1 のテスト「ウィンドウ」を生成し、USB-6009 を使用して「ウィンドウ」内の測定信号をカウントします。
- カウント値 N1 を読み取り、この値をウィンドウ期間 Tc1 で除算して、測定信号の周波数を取得します。
テストウィンドウ Tc1 は LabVIEW の wait 関数によって生成されます。この関数の入力は遅延時間 (ms) です (図 2 のプログラムでは Tc1 を 500ms として使用しています)。このプログラムは、単一の読み取りメソッドを使用して Tc1 テスト ウィンドウ内のパルス数を直接取得しようとしていないことに注意してください。代わりに、Tc1 の開始時と終了時にカウント値を 2 回読み取り、「ウィンドウ」内のパルス数を減算する方法を使用して、必要なカウント値を取得します。これにより、各テストの前にカウント値をクリアする操作が回避されます。さらに、データ収集カードのカウント値を読み取るスレッドが、Tc1 の完了後に 2 回目のパルス数の読み取りのみを実行するようにするために、プログラムはシーケンシャル構造を使用しています。
VI の使用プロセス全体は次のとおりです。プログラムは、実行開始後にデータ収集カードに対して操作を実行しません。 「テスト開始」ボタンをクリックすると、プログラムは USB-6009 のカウント動作の初期化を開始します。周波数測定方法を実装するには、テストプロセスで外部パルスをカウントするために 500ms の遅延が必要です。ユーザー エクスペリエンスを向上させるために、プログラムは 500 ミリ秒のテスト時間内に「Testing…」LED などを点灯し、ユーザーがプログラムの応答が失われたと思われないようにします。遅延の後、プログラムは測定対象の信号の周波数を計算して表示します。
前に分析したように、全体的なテスト エラーは、±1 カウント エラーとテスト ウィンドウ タイミング エラーで構成されます。測定信号が約 100Hz、テストウィンドウが 500ms の場合を例にとると、計数誤差の上限は約 2% (1σ ≒ 1.15%)、ウィンドウタイミング誤差は標準偏差の 1 倍以内で約 0.3% (1σ)、標準偏差の 3 倍以内で約 0.9% (3σ) と推定されます。合成 1σ 母集団誤差推定値:\(\sqrt{(1.15\%)^2+(0.3\%)^2}\約 1.19\%\)。もちろん、ここでの誤差は 500ms 内のパルス数の推定誤差パーセンテージを指します。この質問に示されているように、2 を乗算して 1 秒内のパルス数を取得したい場合は、計数誤差率を 2 倍して、誤差合成用のタイミング誤差と組み合わせる必要があります。
最後に、USB-6009 のカウント パルスは PF0 ピンによってのみ入力できることに注意してください (このピン入力はブロック図では ctr0 としてマークされています)。ユーザーがプログラム上でパルス入力端子を指定することはできません。