【カウンタ用LSI】
持っている部品のリストアップをしています。 以前ならどこに幾つくらいの手持ちがあるかなんて結構しっかり覚えてました。 しかしもういけません。 覚えるよりも忘れる方が早い年齢になると手持ちがどこにどれだけあるなんて忘れる一方です。(悲)
結局のところまだ使え(使い)そうな在庫部品はリストアップして所在をメモしておく必要に迫られるようになりました。 そうしないと見つけられなくてあちこち探しまわるとか重複した購入などが頻繁に発生するようになります。 そんなニーズから始めたごく単純なデータベース(DB)ですが思った以上に便利です。 忘れっぽくなる前から作っておけば良かったと反省しているくらいです。 Excelの表を使っていますが簡単な機能説明と数量のほかに保管場所が書いてあります。 製作に先立って部品を集める時にはもちろんですが、こうしておくと手持ち部品を使って回路を考えるのにも重宝します。(DB化するまでは厄介ですけれど) それと同時にお宝になりそうなパーツは持ってないことも良くわかりました。(残念)w
☆
DB化は部品整理も兼ねるので分散して保管してあったようなパーツをジャンルごとに寄せ集める効果もあります。 そのような過程でカウンタ用のLSI(写真)が何種類か出てきました。 以前は周波数カウンタといえばこうしたLSIを使うのが一般的だったものです。 いずれでも4桁〜6桁のカウンタが比較的少ない部品で作れます。
今から周波数カウンタを作るならマイコン式が一番だと思います。PICなりAVRなり、もちろん他のチップでもマイコンを使ってFBなものが作れます。特別な専用ICの必要がないため部品集めは簡単です。さらに汎用の文字表示ユニットを使うと少ない配線で済むため製作も容易です。(ただし、プログラムミングのことを忘れてはいけませんが) ですからこうしたLSIで本格的に周波数カウンタを作りたいなどとは少しも思いません。
ところが整理しているうちになんとなく動作させてみたくなってきたのです。この中で使用経験があるのは2つくらいでしょうか。 それであまり深入りしない程度に周波数カウンタ(のようなもの?)を作って遊んでみることにしました。 意図した動きをしたらそれでオシマイでもいいんです。カウンタはすでに間に合ってますから。 しかし予定とは違ってだんだん深みにハマりつつあります。(笑)
☆ ☆
写真のカウンタ用のLSIですが、いずれもディスコン(生産終了)になっています。しかし未だにニーズがあるらしくお店の在庫も枯渇してきたようです。 手持ちでもあるなら別ですが、本来の価値以上に価格高騰していると感じるので新たな入手はお奨めしません。 もちろんこうしたLSIは無くても74HCXXといったスタンダード・ロジックのICを並べて作ることもできます。 必要なICの数はだいぶ増えますけれど。
しかしフレキシビリティの点でもハードウエアだけで実現する周波数カウンタはイマイチですから、遊んでみる程度に留めるのが吉ではないでしょうか? もしもそうした遊びに興味がありましたら暇つぶしがてらにお付き合いください。
【カウンタ制御回路】
周波数カウンタのキモになる部分といえば制御回路でしょう。 要するに、(1)決められた時間だけゲートを開きます。ただちにカウントが始まります。 (2)入力パルスの計数が終わったら一時記憶にデータを移します。同時に表示が更新されます。 そして、(3)カウント値をリセットして次の計数に備えます。 ・・・といった一連の制御シーケンスを作るわけです。
もちろんこの部分には測定の基準となる「基準発振器」も含まれます。 一言で言えば、周波数カウンタとは一定の時間のあいだに入ってきた波の数(=パルス数)をかぞえて表示する測定器です。 例えば1,000Hzと言うのは「一秒間」に1,000個の波が入ってきたわけです。 したがってこの1秒間と言った「一定の時間」をつくる「基準」が大切なことは言うまでもありません。この時間が狂ったら正確な測定にはなりませんから。
写真はカウンタの制御回路を試作している様子です。 簡易に遊ぶのが目的ですからOCXOなりTCXOのような本格的な高精度基準発振器は使いません。 もしも本気が出てきたらグレードアップすれば良いだけですので・・・。 まずは基本的な動作を追ってみれば十分なはずです。
こうした制御回路の設計が周波数カウンタでは一番面白い部分かもしれません。 パルス数をカウントする部分には専用LSIを使うので工夫の余地もないため面白いとは言いかねます。数字表示器の部分も配線が面倒臭いだけです。 ほかに周波数カウンタの回路で面白いとすれば、入力のアンプと波形整形回路くらいのものでしょうか? このあたりは後でやってみたいと思います。 まずは制御回路の設計と実験からスタートしました。
シンプルな実現手段としてはCRとゲートIC等を使った半分アナログっぽい制御回路だろうと思います。 タイムベース用の分周器を除けば数個のゲートICで作ることもできます。
まあ、それでも良かったのですが違う方向で行くことにしました。 探したら以前考えてあったアイディアの手書きメモが出てきたのです。さっそく実際に回路を組んでみました。 参照したメモは机上のものだったので、そのままの回路ではいろいろ旨くないところがあって意図したように動いてくれません。 左図は幾つか問題を解消して取りあえずまともそうに動いている回路です。 このあとPart 2へ続く予定ですが、カウンタLSIと組み合わせた際に何らかの不都合が見つかれば変更する可能性もあります。一通りの検討はしてあるのでまず問題はないとは思うのですが・・・。
簡単な説明です。 ゲートタイムは1mSと1Secが選択できます。 従って表示の最下位桁は1kHzまたは1Hzとなる訳です。 測定レンジとしてはMHz単位とkHz単位の2レンジ切替え式です。なお、下から3桁目と4桁目の間の小数点を点灯させ、小数点以下3桁の表示となります。
単純な回路でやると1Hzまで読むのに2秒のサンプリングタイムを要することになります。表示の更新がのろくて使いにくい周波数カウンタになります。 ここでは11進カウンタを使って1.1秒のサンプリングで済むようにしてみました。倍近く早いので発振器の周波数をHz単位まで合わせ込むと言った用途にはずいぶん使いやすくなります。
ラッチとリセットパルスは言わば常套手段のようになっているのですが、CRによるエッジ微分で取り出す形式はやめておきました。 動作が確実なシフト・レジスタを使った同期微分形式としています。従ってCRの時定数を加減すると言った「調整」の必要はありません。 シフトクロックは1mSですのでラッチ、リセットのいずれも1mS幅のパルスとなります。 すべてクロックに同期して順序よく動きますからタイミングが逆転するといったおかしなことは原理的に起こらないでしょう。
参考・1:デジタル回路の配線図ではICの電源ピンやGNDピンへの配線記載を省くことが良く行なわれます。これはなかば常識でしょうか。 上記の配線図でも74HC02と74HC10などのVdd/電源(ピン14番)とVss/GNDピン(ピン7番)への配線は書かれていません。
もちろん配線図に記載はなくても必ず配線してやります。74HC74、74HC175や74HC161も同様です。 各ICのピン接続を良く確認のうえ電源やGNDへの配線を行ないます。(回路図には注釈として電源とGNDピンの番号を記入してあります)
すべてC-MOS ICを使っていますから余っているゲートなどは空きピン処理が必須です。入力になるピンは遊ばせたままにしないで必ずHigh(=+5V Vdd)もしくはLow(=GND)に固定してやります。言うまでもないでしょうが出力となるピンは開放(オープン)状態にしてどこにも接続せずにしておきます。
また、少なくとも3個のICに一つくらいの割合で電源ピンとGND間にバイパスコンデンサ(= 0.1μF程度のセラコン)を入れておくと動作が安定します。 電源供給端子のあたりにバイパス用の数10μF程度の電解コンデンサもお忘れなく。
参考・2: この回路の改良版がPart 3(←リンク)にあります。以下の説明を一通り読み終えたらリンク先に飛んで参照して下さい。もしこれから新たに製作するならそちらの方が良いかも知れませんが、実用上の性能はほとんど違いません。(2018.05.29追記)
【基準水晶発振はSPG8651B】
ゲートタイムの精度が周波数カウンタの測定精度を決めます。 ここでは100kHzの水晶発振器を内蔵したプログラマブル・オシレータ:SPG8651B(セイコーエプソン製)を基準の発生に使いました。
SPG8651Bの初期精度は±5ppm以内です。既成の水晶発振器としては高精度な方でしょう。また、簡単に様々な周期のパルスが得られるので便利です。 以前使ってみた感触ではSpec値よりもう少し周波数精度は良かったと思います。周波数の安定度もかなり優秀でした。 下手に作った自作水晶発振器なんかよりもずっと安定していました。 データシートを見る範囲では電源電圧を±0.5Vくらい振ってやると発振周波数の微調整もできそうなのですが・・・。それをするくらいなら周波数調整機能付きのTCXOを使うなどの方法がベターでしょう。
SPG8651Bからは1mS周期のパルス・・・周波数でいえば1kHzを取り出しています。この1mSが制御回路の基本になっています。 もしSPG8651Bが入手できなくても代替手段として他の水晶発振器を使って1mSを作ってやれば良いわけです。 その作った1mS周期のパルスを回路図:TP5の位置に5V C-MOSのレベルで与えてやります。
この1mSパルスは後に説明するシフト・レジスタのシフトパルスになります。 また、1mSをさらに10進カウンタが二つ入った:TC4518B(写真左)を使って1/100に分周します。 これで100mS周期(=10Hz)のパルスが得られます。100mSはさらに11進カウンタへ供給します。
【1秒ゲートの作り方】
100mSパルスを11進カウンタで分周します。100mSを元にゲートを開く「1秒間」を作ります。 10mSを101分周とかでも良いのですが、複雑になるので11進でやってみました。 1秒ゲートを開いたら残りの100mSでラッチとリセットの動作を行ないます。
はじめに11進カウンタを74HC74を使った4段のリプルカウンタで作ってみたのですが、各段の出力に遅延があって思ったように動作しません。 少々姑息な手を使えば動きそうですが、どうやらリプルカウンタでは無理がありそうです。 そこで同期式のバイナリ・カウンタ:74HC161を使うことにしました。これなら各段のタイミングがきれいにそろいます。 ただし11進カウンタにするためのデコードとそれに続くリセットは非同期ですから完全なクロック同期動作ではありません。
完全な同期式も可能なのですがますますICが増える懸念があり遊びの域を超えますからやめておきました。実用上支障がないというのも理由です。 まあこうした回路はFPGAでも使って完全同期式の設計・・・それが常識ですが・・・で作るのが良いのでしょう。それ以前にマイコン式の方がプログラムによる自由度がありますから方向違いですネ。
参考:74HC10/U4cの8番ピンに74HC161をリセットするパルスが出ているのですがとても幅の狭いパルスです。 このパルスはゲートタイムの誤差の一因になるので狭い方が良いはずです。 狭いパルスのうえ繰り返し周期は1.1秒ですからアナログオシロでの観測はたいへん困難です。500MHz帯域のデジタルオシロを使いました。 観測によればリセット動作に約20nSほど要するようです。 従ってゲートタイム =1秒に対する誤差は2×10E-8程度考えられるでしょう。これは6桁程度の周波数カウンタではまったく表面化しません。 むしろほかの誤差要因の方がずっと大きいはずです。 プリスケーラを付けて測定範囲を拡大したとしてもその分だけ分解能も悪くなるので影響しません。 念のため検証しておきました。
【ラッチ、リセットパルスを作る】
ラッチとリセットのパルスは、ゲート開閉パルスの後縁の部分を同期微分して得ています。 ラッチとリセットの間には1シフトクロック分の遅延を入れてあるので、タイミング的にクリチカルではありません。
ちなみに、シフトクロックは上記にも書いたように1mSです。 各パルスは動作が遅いスタンダードC-MOS のカウンタLSIでも十分応答するだけの幅があります。 この部分は汎用のシフトレジスタでも構成できますが、ピンの引き出しの点などからQuad D-Flip-Flop:74HC175をシフトレジスタになるよう配線して使います。 段数が足りないので74HC74を一つ補いました。
途中でNORゲートの74HC02で負論理のNANDをとって1mS幅のパルスを得ています。 これを使って1mSのゲートタイムを作るほか、それを遅延させてラッチやリセットパルスも作るわけです。 この1mS幅のゲート開閉パルスは100mS周期で発生しますから、10回/秒のサンプリングになります。 従って1mSゲートに切り替えても表示がやたらにチラつくようなことはありません。 ほかのアイディアとして、1〜2個のICと数個のCRを足すと可変サンプリング式にすることもできますが必要性が低いので省きました。
この部分にはカウンタ部のレンジオーバーを表示するための回路を設けています。カウンタ部で表示オーバーフローが発生したときLEDが点灯します。(74HC02の2/4を使用)
CRとインバータやゲートのICを使ったタイミング回路でも周波数カウンタごときものなら十分なのかもしれません。多少カットアンドトライを行なえばうまく行くでしょう。 シフト・レジスタを使った回路はクロックに基づいて動的に考えるのが面白いのでやってみたまでです。 オシロスコープで動きを確認しながら「デジタル回路」のハードな部分をたっぷり楽しむことができました。
参考:ゲート信号、ラッチパルス、リセットパルスのいずれも正論理で設計しました。High-Activeなわけです。 調べてみたら最初の写真にあるカウンタ用のLSIのうち、μPD851CのみリセットパルスがLow-Activeなので信号の反転が必要です。具体的にはμPD851Cに限ってリセットに端子:J5の方を使います。 そのほかのLSIはいずれもHigh-Activeなのでリセット信号は上記の回路図の端子:J4の方です。 このあと本命(?)のカウンタ用LSIを使って遊びますが、これでどのICにも使うことができる制御回路になっていると思います。
☆ ☆ ☆
今さらカウンタ用のLSIで周波数カウンタを作るなんて流行りませんよね。チープなチャイナ・カウンタ基板も売られているくらいですので。(笑) そんな意味からも遊びの実験とお断りしているようなわけです。作ってみること自体を「遊ぶ」わけです。 遊びとは言っても十分実用になる周波数カウンタが作れそうですから部品の手持ちがあるなら本格的に製作して役立てるのも悪くないと思います。意外に気の利いた周波数カウンタになるはずです。
電子部品は使ってこそ価値が生まれますので死蔵されるよりも何がしかの用途に使われた方が幸せでしょう。 これは何もカウンタ用LSIに限りません。たとえ実験的であっても使って遊んでみたら興味深いのではないでしょうか。
さて、制御回路はできましたから次回はカウンタ用LSIを使った計数部と表示器ドライバをやってみたいと思います。 少々フライングですがこの写真はそんな実験のひとコマです。 ではまた。 de JA9TTT/1
(つづく)←リンク fm