ELM Home Page


2003. 2. 14

ユニバーサルカウンタ


400.0000Hz

自作の測定器の中でも最もポピュラーなのが周波数カウンタです。ほとんどデジタル回路で製作・校正が簡単、用途が広い、キット等も豊富などの理由からよく製作されているのだと思います。自作派なら既に製作している方も多いことでしょう。

私も周波数カウンタの製作はこれで2台目です。が、普通の周波数カウンタを2台作ってもしょうがないので、今回は少し機能を欲張ってみました。本物のユニバーサルカウンタほど多機能ではありませんが、周期やパルス幅も測れたりするので、ユニバーサルカウンタと称してみます。

周波数カウンタの基本

周波数とは

いまさら説明するまでもないと思いますが、周波数とは単位時間当たりの電気的・機械的振動数のことです。単位にはヘルツ(Hz)が用いられ、1秒あたりの振動サイクル数を表します。100Hzなら、毎秒100サイクルの振動数です。Hzが普及する前はこの分野でも「サイクル/秒 (c/s)」が使用されていました。

周波数を測定するシステムのうち、特にデジタル回路(カウンタ回路)で実現されているものを「周波数カウンタ」と呼んでいるようです。

直接計数方式

直接計数方式

周波数の定義に従って被測定信号のサイクル数を1秒間数えれば、それだけでカウンタの値に周波数が直接得られます。単純な回路で実現できるので、昔から周波数カウンタの定番の方式でした。便利な専用ICも数多く出ていますし、今も多くの周波数カウンタが採用しています。簡単な反面、低い周波数では有効桁数が限られてきて高分解能の測定が困難になるという欠点があります。有効桁数を確保するにはカウント時間を延長して桁数を増やす必要があり、たとえば1mHzの分解能で測るには、1000秒のゲート時間が必要になります。

レシプロカル方式

レシプロカル方式

直接計数方式の欠点を補うために考えられた測定方法の一つで、最近流行っているようです。被測定信号のサイクル数を数えるのではなく、その周期[T]を測って f = 1/T の公式からマイコンで周波数を算出します。この方式の特徴は、結果の有効桁数が周波数に関係なく周期測定の時間分解能で決まることです。

低い入力周波数でも短時間で高分解に測定できる反面、ノイズなどでトリガジッタのある入力では、大きな誤差になってしまう欠点もあります。また、周波数が上がる(Tが小さくなる)とT相対の時間分解能が落ちるので、十分な分解能を確保するため、複数サイクル分の時間を測るのが普通です。マイコンが安くなったせいか、安価な普及機でもこの方式を採用するものが増えているようです。

実際のカウンタ回路

カウントエラー

どんな方式にしろ、クロックのゲーティングは必要になってきます。しかし、ANDゲートを使う原理図そのままの回路では、ゲート信号と入力信号の位相差によって、右の図のように一定の確率(=入力のデューティ比)で1カウント多く数える欠点があります。クロックが対称波形の場合、平均すると+0.5カウントの誤差となり、これは場合によっては無視できないものになってきます。数MHz以上なら大したことないですが、99.7Hzの信号がタイミングによって101Hzと表示されるのはマズイでしょう。

エラー回避例

この問題は、右の図のように同期カウンタを使うことにより解決します。これなら+1カウントする確率は、入力のデューティ比に関係なく周波数の端数分だけに比例します。ただ、同期カウンタの制御入力に非同期信号(=ts/thを満たさない)を入れると、誤動作を起こす可能性があります。その対策として、ステージを分離してエラーが全体に及ぶのを防ぐとか、ゲート信号を入力信号で同期化して誤動作そのものを防ぐなど、回路上の考慮も必要です。

ハードウェア

Block diagram

コントローラ

MCUには手頃なところでAVRを使ってみました。それほど難しい処理をしているわけではないので、ポート数さえ足りれば8051、H8、78Kなど何でもOKです。主にカウント制御と結果の演算や表示、ホストとの通信などを処理します。

計数回路

要となるメインカウンタは、PLD(U1)MCU(U2)に分割して構成されます。PLD内にあるカウンタは12bitで、4096カウントが可能です。カウンタのMSBはMCUの外部割り込みに入っていて、あふれた分をMCUで受け持ちますので、トータルのビット長は際限なく拡張できます。このシステムでは12+24で36bitカウンタを構成しています。桁あふれの頻度は入力周波数が120MHzのとき30kHz程度になるので、AVRの割り込み処理で十分にカウントが可能です。使用したPLDの動作周波数は84MHz(min)となっていますが、140MHz以上まで動作しました。最近の高速PLDなら軽く300MHz以上いけるでしょうけど(プリアンプの方が大変そうだなぁ(^^;)

PLD内のカウンタの値を読むには、読み出しモードを使います。このモードではMCUからのゲート信号がカウンタのクロックソースとなり、ゲートは解放されます。そしてMSBの立ち下がりを見るまでゲート信号にパルスを出してやれば、「カウンタ値 = 4096 - パルス数」となり、読み出し用の配線無しでカウンタ値を読めるというわけです。しかし、最大4096回プログラムループを回すので、AVRで読み出しに最大4.5msec程かかるのが欠点です。読み出し用にシフトレジスタでも設ければ楽なのですけど、PLDの容量が足りなかったための苦肉の策です。

IN-1プリスケーラ

IN-1のフロントエンドにはプリスケーラIC(MB506)を使用して、入力周波数を64分周しています。MB506は10MHz~2.4GHzの入力が可能です。UHF帯の信号を扱うので、両面基板でベタアースなどプリントパターンにはそれなりの配慮が必要です。

IN-2プリアンプ

IN-2のフロントエンドは、FETとトランジスタによる広帯域・高入力インピーダンスのアンプです。アナログ信号を扱うため、電源のデカップリングは重要です。特に、LEDのダイナミック点灯などしているシステムでは、多かれ少なかれリプル電圧が電源ラインに乗ってくるので、アナログ回路への回り込みには特に注意が必要になってきます。

入力感度-周波数特性をプロットした図を資料に示しておきます。簡単な回路の割にはまずまずといった性能でしょうか。S/Nの悪い信号での安定なトリガのため、適正な入力レベルにできるようアッテネータも欲しいところでしたが、リレーだらけになってしまうので省略しました(プローブ端でドロップさせれば済む)。終端抵抗も切り替えられれば良いのですが、これも省略しました(抵抗内蔵カプラを使えば済む)

IN-2バイパス回路

周波数カウンタの入力は基本的にAC結合ですが、デジタル回路を測定する場合はいろいろ不都合が生じてきます。例えば、非常にデューティ比の大きい信号などはAC結合で安定に入力するのが困難になってきますし、単発パルス幅測定などはAC結合では不可能です。

このため、ほとんどのユニバーサルカウンタはスレッショルド調整付きのDCカップリングモードを持っています。本機でもIN-2のカップリングモードはACとTTLを選択できるようにしてあり、TTLモードではリードリレー(RY1)でプリアンプをバイパスして直接PLDに入れるようにしています。スレッショルドは1.5V程度になるので、5V系と3V系ロジックに対応できます。

IN-2極性選択

周波数モードでは入力信号の極性を反転しても意味がないですが、周期やパルス幅を測るとき必須になってくるので付けた機能です。PLD内のロジックの一部なので、外部回路はありません。

通信ポート

パソコンで測定値を収集・解析したりリモート制御するため、シリアルポートを設けてあります。これでも一応測定器なので、保安上およびノイズ対策上から、通信ポートは必ず絶縁されていなければなりません。一般用のフォトカプラで絶縁したので、通信速度は4800bpsがせいぜいといったところです。まぁ、それだけあれば十分でしょうけど。

ソフトウェア

計測動作

周波数モードでは選択された入力チャネルがカウンタのクロックソースとなります。ゲート信号はMCUのタイマユニットで生成してPLD外部から与えますので、変則なゲート時間も思いのままです(やってどうする)。カウンタをリセットして所定の時間ゲートを開いた後、カウント値を読み出してそのまま周波数として表示します。ゲートを開いている間GATEランプを点灯させますが、測定の間隔は30ms程開けてGATEランプのフラッシュで表示更新のタイミングがよく分かるようにします。

周期・パルス幅モードでは時間を測るので、カウンタのクロックソースとして基準クロックが選択され、入力信号がゲート信号を制御します。カウンタをリセットした後、PLDのステータス(CENとEOC)をモニタしながらGATEランプを制御したりゲート終了を待ったりします。レシプロカル方式もこの計測モードを使います。

動作モード選択[Modeボタン]

Modeボタンで動作モードが順次切り替わります。動作モードや入力モードを切り替えると状態がEEPROMに保存(3秒後の遅延セーブ)され、次に電源を入れたとき前回のモードから動作を開始します。

カップリングモード[Cuplボタン]/トリガ極性[Polボタン]

IN-2の結合方式とトリガ極性を切り替えます。

測定の一時停止[Holdボタン]

計測動作を停止して表示の更新を止めます。停止中は表示がブリンクしてホールド状態であることを示します。モード切替後またはホールド解除後など、結果が表示されていないときは、新たな表示を待ってホールド状態に入ります。

ゲート時間の拡大[Hold+Modeボタン]

モード0,1の直接計数方式のゲート時間が10倍になり、周波数分解能が10倍に拡大されます。が、表示回路に手を抜いて7segLEDの小数点が他のモード表示にほとんど取られてしまっているので、LED表示の小数点はそのままです(つまり10倍に表示される(^^;)。もちろん、通信ポートへの出力にはちゃんと反映しますが。また、結果が8桁を越えた場合、あふれた分は切られて表示されます。

ホストとの通信

本機では、N81, 2400bpsでホストPCと接続するようになっています。測定値は表示更新の度にホストに1行づつ送信されるので、ファイルに落としてからCSVとしてスプレッドシートで読み込めますし、Microsoft ExcelならVBAを使って直接セルに取り込めるでしょう。周期やパルス幅を収集すれば、ちょっとしたタイムインターバルアナライザになります。また、ホストからのコマンドでフロントパネルと同じ操作が可能です。コマンドは次の通りで、カウンタ側からのエコーバックはありません。

資料

ユニバーサルカウンタの仕様
主要IC MCU: AT90S8515 (ATMEL)
PLD: ispLSI2032 (Lattice)
測定機能 モード0: 周波数(IN-1) ~2.4GHz (分解能 100Hz)
モード1: 周波数(IN-2) ~100MHz (分解能 1Hz)
モード2: 周波数(IN-2) ~10kHz (分解能 100μHz)
モード3: 周期(IN-2) ~10秒 (分解能 100ns)
モード4: パルス幅(IN-2) ~10秒 (分解能 100ns)
入力機能 IN-1: ZIN = 50Ω, 10MHz~2.4GHz
IN-2(AC): ZIN = 1MΩ, 10Hz~100MHz
IN-2(TTL): DC~100MHz
基準発振器 発振周波数: 12.8MHz
温度安定度: ±2.5ppm (-30℃~75℃)
長期安定度: ±1.0ppm/年
確度: 校正方法によりけり
通信機能 絶縁型シリアルポート×1。PCへのデータ送信やPCからの制御が可能。
製作費 約6,000円 (部品代)

Sign