液晶表示 高精度周波数カウンタキット (Model Num. TG-16050002)

  • 分解能 1Hz
  • 調整箇所ゼロで高精度な測定が可能
  • 測定範囲:10Hz ~ 30MHz
  • 少ない部品で組立が簡単
  • 9Vアルカリ乾電池で動作
  • オプションの10分周プリスケーラキットで測定範囲を拡大
lcd_counter








 税込価格 \5,400
             ご購入はこちらから
製作資料を見る: 製作マニュアル  回路図

特長:

最高分解能 1Hz
TCXOモジュール採用による実力±1ppm の高精度測定が可能
測定範囲:10Hz ~ 30MHz
部品点数が少なく調整箇所ゼロ、組立が簡単です
9Vアルカリ乾電池での動作 (乾電池は付属しません)
オプションの10分周プリスケーラキットで測定範囲を100MHz まで拡大

キットの概要

TGeS LAB では 、部品点数が少なく調整箇所はゼロ、しかも高級測定器並みの測定精度が得られる、液晶表示器を用いた周波数カウンタキットを開発しました。
本キットでは、測定信号を増幅するプリアンプ部にロジックインバータ IC を採用し、負帰還をかけることによってアナログアンプとして動作させており、これによりアナログアンプ部の無調整化と部品点数の削減を実現しています。
測定精度を決定するクロック発振部には、TCXO を採用して温度依存性を低減し、無調整で実力±1ppm (保証値ではありません) の測定精度を実現しています。
なお、表面実装部品である TCXO はハンダづけ済モジュールとしてキットに添付してあります。
本キットは、9Vの角型アルカリ乾電池での使用を想定して設計しており、9V乾電池用の電池スナップが添付されます。(乾電池は付属しません)
9Vの角型アルカリ乾電池で10時間以上の動作が可能です。

仕様:

周波数測定範囲:10Hz ~ 30MHz
  :10MHz ~ 100MHz (オプションの10分周プリスケーラキットTG-15110003 を使用時)
ゲートタイム :1秒 / 0.1秒
周波数分解能 :1Hz (ゲートタイム 1秒 時)
  :10Hz (ゲートタイム 0.1秒 時)
測定精度 :± 3ppm (実力±1ppm 但し保証値では無い) さらに±1 カウントの誤差が加算されます
電源電圧・電流:DC 9 V +0.6V -2.0 V 50mA max  ( 9V アルカリ乾電池使用 )

技術解説

   マイコン (MCU)
マイコン(MCU)には、PICマイコン 18pin 4kワード ROM の PIC16F88 を使用しています。
pic16f88








   PIC16F88
   周波数基準クロック
周波数基準を生成するクロックジェネレータにはセイコーエプソン製の TG-5021CE を使用しています。
サイズは 3.2 x 2.5 mm の表面実装タイプ(SMD)で非常に小さなものですが 、電源電圧 2.8V で 10MHz の 周波数基準を矩形波で出力します。

tg-5021cg








TCXO セイコーエプソン TG-5021CG
TG-5021CE は TCXO と呼ばれる温度補償された発振器なので、その周波数変動は、-30℃~+80℃の範囲で±2ppm MAX(公称値)、温度に対して安定な周波数を出力します。
TGeS LAB で200個のサンプルを確認したところ、周囲温度 +8℃~+30℃の範囲では、変動幅 ±1ppm 以内に収まっていました。
また周波数の精度も優秀で 21℃ のとき 200個の平均が +0.5ppm でした。 つまり 10MHz の基準発振周波数が 5Hz だけ上にズレているということです。
graph

基準発振周波数のズレがそのまま測定周波数のズレにつながりますので、このクロックジェネレータを使用すれば、高級計測器並みの計測精度を得ることが出来ます。
本キットでは、表面実装タイプ (SMD) である TG-5021CE などを予めハンダづけした TCXO モジュールとしてキットに附属してありますので、面倒な SMD のハンダづけは不要です。

module-tcxo








  TCXO モジュール
   入力プリアンプ部
入力のプリアンプ部にはロジックゲート IC である 74HCU04 を使用しています。

74hcu04








  Hex Inverters 74HCU04
74HCU04 は C-MOS インバータが6個内蔵されており、通常はハイ、ローの 2 値を出力するロジックIC ですが、 これに負帰還をかけることによってハイゲインのアナログアンプとして使用しています。

gogic-gate通常はハイ、ローの2値を出力する


negative-feedback負帰還をかけるとアナログアンプになる


ただ、74HCU04 をアナログアンプとして使用する場合、いくつかの問題点があります。
その1つが周波数高域での入力インピーダンスの低下と、あと一つが無入力時(入力オープン時)にノイズが発生し、それにより無入力にも関わらずランダムな周波数を表示してしまう問題です。

    周波数高域での入力インピーダンスの低下問題について
74HCU04 は C-MOS ロジックなので入力インピーダンスは非常に高いと思われがちですが、実際にはそれほど でもなく、周波数の上昇と共に低下し、しかもかなりキャパシティブになります。
その理由は、C-MOS ロジックの入力容量に起因します。 74HCU04 のデータシートには typ 9pF (東芝製)、typ 3.5pF (Nexperia製) などと比較的小さな値が記載されていますが、 これは入力がロジックレベルのハイかローに固定したときの静的な値です。

下図 にNexperia製のデータシートから転載した入力レベル対ゲート入力容量Ciのグラフを示します。

graph

ゲートの入力レベルにより Ci が変化し、入力レベルが丁度 電源電圧Vcc の1/2の時 (つまりC-MOSゲートのしきい値)、 Ciが最大となります。
この値は結構大きくてVcc 5V の時は、Ci = 35pF にもなります。 35pF とは、10MHz で 455Ω のリアクタンスであり、さらに周波数の上昇とともに段々ゼロに近づきます。
そこで本キットではその対策として周波数高域でも最低1kΩのインピーダンスが確保できるように 74HCU04 の負帰還 アンプ入力に1kΩの抵抗(R01)をシリーズに挿入してあります。

input-impedance
下図に実際に測定してみた 74HCU04 (東芝製) を負帰還アンプとして使用した時の周波数対入力インピーダンス特性を示します。

graph
100kHz程度までは、入力インピーダンスは 約160kΩ程度を維持していますが、それ以上の周波数では急激に インピーダンスが低下します。
しかし、R01 があるため、10MHz以上でも 1kΩ は確保されています。
100kHzを超えると急激に低下する理由は、周波数が高くなると単位時間当たりのしきい値付近を横切る時間の割合が 大きくなるためと推定されます。

またこのインピーダンス低下対策の抵抗 R01 は、静電気や過大入力などから 74HCU04 を保護する役目も担っています。
周波数カウンターの入力端子に外部から静電気 (ESD) や過大入力が印可された場合、抵抗 R01 とダイオード D00 および D01 によりクランプされて74HCU04 の入力ピン(#1pin)を保護します。
esd





    *無入力時にランダムな周波数を表示してしまう問題について
74HCU04 に負帰還をかけたアンプは周波数低域では非常にハイゲインで、感度はすこぶる良いのですが、高感度ゆえに無入力(入力端子オープン)ではノイズによりランダムな信号を出力し、PICマイコンがこれをカウントしてしまい、無入力にも関わらず 60kHz 付近の変な周波数を表示してしまいます。
この現象は、測定しようとする信号を入力するとノイズはキャンセルされて正常な値が表示されるので実用上は問題無いのですが、信号が無いときにパラパラと変な値が表示されるのは、どうも目障りです。

no-hysteresis 無信号時 60kHz 付近の周波数がランダムに表示されてしまう

TGeS LAB では、この対策として 74HCU04 の2段目以降のインバータにヒステリシスを持たせることにより解決しました。
インバータゲートにヒステリシスを持たせる
通常、インバータゲートのしきい値は 74HCU04 などの C-MOS の場合、電源電圧 Vcc の丁度半分、 1/2Vcc がしきい値になります。
つまり、入力レベルが 1/2Vcc より高ければ出力はロー、低ければハイです。

logic-gate
従って、もしノイズっぽい信号が入力された場合、 1/2Vcc 付近にあるノイズの影響で出力が反転し、本来の信号のタイミング 以外のところで出力がハイ・ローにバタバタ切替わってしまうことになります。

no-hysteresis
このノイズの影響を避ける方法としてゲートのしきい値にヒステリシスを持たせます。
ヒステリシスとは、出力がローからハイに変わるときの入力しきい値 (ViH) とハイからローに変わるときの入力しきい値 (ViL) に違いを持たせることです。
インバータゲートにヒステリシスを持たせるには、インバータを2段シリーズに接続して2段目の出力を1段目の入力に抵抗を介して戻します。
インバータ2段なので反転の反転、つまり正帰還をかけるということです。

positive-feedback
このように正帰還をかけるとゲートはヒステリシス特性を持つようになります。
ゲートがヒステリシス特性を持つと 1/2Vcc付近にノイズがあったとしてもその影響はキャンセルされ、出力がバタバタ切替わることが なくなります。

with_hysteresis
ViH と ViL の差、つまりヒステリシスの幅が大きいほどノイズの影響を抑えることが出来ます。ヒステリシスの幅の算出方法はこちら

しかし、インバータゲートにヒステリシスを持たせるとゲートの伝達遅延の影響が大きくなるため周波数特性が悪化して高域での感度が 低下するという新たな問題が発生します。
そこで TGeS LAB では、ヒステリシスは周波数の低域のみ動作させ、高域ではヒステリシスを持たないようにすることにより、無入力時のランダムな周波数を表示してしまう問題とヒステリシスによる高域での感度低下の問題の両方を解決しました。

下図 は、ヒステリシスに周波数特性を持たせる回路です。
ヒステリシスの幅は、R06 と R07 の比率で決まりますが、高域では R06 にパラに接続されたコンデンサ (C06) の影響でヒステリシスの幅が小さくなり、10MHz ではほとんどヒステリシスを持たなくなります。

hysteresis_amp
下図 は、C06 が有る場合と無い場合の入力プリアンプ部の感度特性です。

graph

このように C06 のおかげで高域の感度が大きく改善していることが判ります。
計測に必要な入力レベルは、1MHz までは 20mVrms 以下、10MHz でも 100mVrms 以下を実現しており、非常に高感度です。

一方、無入力時に発生するノイズの周波数は、低域成分が主なので周波数低域に設けたヒステリシス特性によりノイズの影響がキャンセルされ、周波数カウンターの入力端子がオープンの場合でもランダムな周波数を表示してしまうことは無く、表示は 0.000 kHz (または 0.001 kHz) と なります。

c06_effect

ヒステリシスの無いとき







ヒステリシスを持たせると表示はゼロで安定する
    9Vアルカリ乾電池使用時の動作時間について
本キットは、9V角型アルカリ乾電池での使用を想定して設計しています。
下図にPanasonic製の9V角型アルカリ乾電池 (6LR61Y(XJ))を使用して10メガヘルツを測定したときの電池の放電特性を示します。

Panasonic製9V角型アルカリ乾電池 6LR61Y(XJ)


10メガヘルツ測定時の本キットの消費電流は 30mA です。
電池の放電特性は、7.4V 付近と 6.8V 付近の2か所にプラトー (グラフの傾きが平たんな部分)が見られました。
本キットの動作保証電圧は 7V なので約11時間連続使用が可能ということになります。
ただ、実力的には電池電圧が 5.6V まで低下しても液晶の文字がやや薄くなる程度で測定が可能です。

また、電池の放電終止電圧 6V に達するのは18時間なので、この Panasonic製 9V 角型アルカリ乾電池の容量は、30mA定電流負荷において

30mA x 18hrs = 540mAh

ということになります。
   PICマイコン (MCU) のプログラムの概要
計測する信号は、RA4ポートから入力して TIMER0 でカウントします。
TIMER0 は8ビットプリスケーラと合わせて16ビットのカウンタです。
ゲートは、RA4ポートと並列接続しているRA3ポートを使用して開閉を行います。
RA3ポートを入力ポートにするとゲート開、RA3ポートを出力ポートにすることによってゲート閉となります。

TIMER0 のカウントは、TIMER0 のオーバーフロー割込みでオーバーフローの回数をカウントし、ゲート閉後に残ったTIMER0 とプリスケーラの値を合算して総カウント数、即ち測定周波数を求めます。
なお、TIMER0 はプリスケーラの値が読めないのでゲートを閉じた後、RA3ポートからパルスをRA4ポートへ入力して、何パルス入力すると TIMER0に繰上りが発生するかによって間接的にプリスケーラ値を読み出しています。
    ゲートタイムの生成
本キットでは、周波数カウンターのプログラムとしては一般的に使用されるタイマー割込み方式は使わずに、入力信号をカウントするタスクのステップ数から実行時間を正確に求め、ゲートタイムを作り出す方式を採用しています。

プログラムでは、必要なゲートタイムと同じ実行時間となるように入力信号をカウントするタスクのステップ数を設計しています。
本キットの場合、PIC マイコンの基準クロックが 10MHz なので1命令コード (1ステップ) の実行時間は 0.4uSecです。
ステップ数が 250000 のタスクを作っておけば、これを10回実行すること 250000 steps x 10 x 0.4uSec = 1Sec となり、これを1秒のゲートタイムとして利用します。
つまり、ゲートを開いて入力カウントタスクを開始し、丁度10回実行したところでタスクを終了してゲートを閉じる、これでゲートタイム1秒を生成できるわけです。

ところが、このように丁度都合の良いステップ数のタスクを作るのは、結構難しいものです。
プログラムが分岐しても同じステップ数になるように構成する必要があるうえ、同じタスクを何回も呼び出すときの CALL 命令やゲート開閉のオーバーヘッドも含めてステップ数を計算する必要があります。

一方、タイマー割込みを使用する一般的な方式ならゲートタイムの生成が簡単に実現できますが、割込みから戻るときにスタックに退避してあるプログラムカウンタや戻り番地のデータなどを復帰するための余計なステップが必ず入るため、ゲートを閉じるのが遅延してしまいます。
その為、タイマー割込み方式ではゲート閉の遅延分だけゲートを開くタイミングも遅らせて、ゲートタイムが正確になるように合わせ込みが必要となります。

一方、本キットの入力カウントタスクのステップ数でゲートタイムを作り出す方式では、タイマー割込み方式とは違い、タスクのステップ数さえ正しければゲートタイムの合わせ込みは不要で、正確な測定が可能となります。

試しに本キットで自分自身の 10MHz 周波数基準クロック (TCXOモジュールの出力) を測定して見ると正確に 10000.000kHz と表示され、ゲートタイムが正確であることが判ります。

10000.000kHz


TCXOモジュールの #3pin と基板の入力 IN を
接続すると 10000.000 kHz が表示される