- ベストアンサー
高速でカウントするカウンター回路の製作方法
- 10MHz以下のクロックを使用し、カウンター回路を製作する方法について説明します。
- 出力1を受けて数え始め、presetした値でカウントする回路を製作します。
- 74シリーズのみを使用して、FPGAやCPLDなどのプログラムを使用せずにカウンター回路を作成します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No5を改訂。No4の Delay 回路はそのままです。 入力; 10Hzの信号 TTLレベル。 10MHzのマスタークロック TTLレベル。 出力; 周期 : (N1+1)・0.1sec Delay : (N2+3)・100ns 幅 : (N3+1)・100ns 構成品; N1回路=間引き回路。 N2回路=別掲Dealyブロック。 N3回路=同上。 74HC02…1 2入力NORゲートが4回路 74HC04…2 Inverterが6回路 74HC74…1 DFFが2回路 74HC112…1 JKFFが2回路 クロック分配; 10MHz入力 ↓ 74HC04を1ゲート ├─→ JKJFFのCLK2本 ↓ 74HC04を1ゲート ├─→ N3回路のカウンタCLK ↓ 74HC04を2ゲート直列 ├─→ N2回路のカウンタCLK ↓ 74HC04を2ゲート直列 └─→ 74HC74のCLK2本 10Hz入力 → N1回路のCLK入力 リセット分配; 手動スイッチのリセット配線を、全素子のリセット入力へ。 接続; N1回路出力P1 → DFFのD1入力 DFFのQ1出力 → DFFのD2入力 DFFのQ1bar出力とQ2出力 → NOR1の入力(負のAND) そのNOR1の出力 → JKFFのJ1入力 JKFFのQ1出力 → N2回路のLoad入力 JKFFのQ1bar出力 → NOR2の入力 N2回路のCA出力 → JKFFのK1入力とInverter1 そのInverter1出力 → NOR2の入力 そのNOR2の出力 → JKFFのJ2入力 N3回路のCA出力 → JKFFのK2入力 JKFFのQ2出力 → N3回路のLoad入力 JKFFのQ2bar出力 → Inverter2(出力バッファ) そのInverter2の出力 → 最終出力。 以上; JKFFは set-reset-FF として動いてます。一番最初は全部リセットなのでJKFFのQ出力はLowで、N2とN3回路は Load されっ放しです。 間引きパルスが J1 に来ると JKFF が set されて N2 カウンタは count-up になります。FFFFFまでカウントが進んでキャリーが出ると K2 で reset されて Load しっ放しに戻ります。次の間引パルスが来るまで子の状態で止まってるはずです。 N3 の方も全く同様です。 N2 から N3 に渡るところの Inverter1 と NOR2(負のAND)は、N2 回路の DipSW値が FFFFFのとき J2 にパルス出し放しを防ぐ目的です。 最終出力は一応バッファを通しましたがお任せします。InverterはNORゲートの余りで代用できます。 なお、 駆動対象が電磁部品なので N2+3,N3+1 などの+されてる数値は気にならないとは思いますが 問題がありましたらお知らせください。
その他の回答 (6)
- Teleskope
- ベストアンサー率61% (302/489)
>> N2,N3回路が反復してしまう << いまレスを拝見しました。その通りですね、書いてたとき中断がありまして、そのあと 10Hz を 10MHz と混同して 3回路とも一巡時間が等しいと思い込んだようです。ご免なさいです。シングルショット化したのを乗せます、とりあえず。
- Teleskope
- ベストアンサー率61% (302/489)
全体構成; 間引き回路のDipSW設定値をN1、Delay回路のDipSW設定値をN2、パルス幅回路のDipSW設定値をN3(N3-N2ではなく)と書いてます。 入力; 10Hzの信号 TTLレベル。 10MHzのマスタークロック TTLレベル。 出力; 周期 : (N1-1)・0.1sec Delay : (N2-1)・100ns 幅 : (N3-1)・100ns クロック分配; 10MHz入力 ↓ 74HC04を1ゲート ├─→ JKJFFのCLK ↓ 74HC04を1ゲート ├─→ N3回路のカウンタCLK ↓ 74HC04を2ゲート直列 ├─→ N2回路のカウンタCLK ↓ 74HC04を2ゲート直列 └─→ 74HC74のCLK2本 (これは多数のFFを律するテクの一つで、クロックを 信号の流れ下りと逆向きに昇らせます。これを守ればタイミングマージンが労せず確保されます。) リセット分配; 手動スイッチのリセット配線を、全素子のリセット入力へ。 構成; N1回路=間引き回路。 N2回路=別掲Dealyブロック。 N3回路=同上。 74HC00…1 NAND 74HC04…1 Inverter 74HC74…1 DFF 74HC112…1 JKFF 接続; 10Hz信号 → N1回路のCLK入力 N1回路出力P1 → DFFのD1入力 DFFのQ1出力 → DDFのD2入力 DFFのQ1出力とQ2bar出力 → NANDの入力 NAND出力 → N2回路のLoad入力 N2回路のCA出力 → Inverter入力(NANDで可) そのInverter出力 → N3回路のLoad入力 N2回路のCA出力 → JKFFのJ入力 N3回路のCA出力 → JKFFのK入力 JKFFのQ出力 → 最終出力。 以上; NANDやJKFFの不使用な残りは できるだけ入力をGNDに。 ところで製作は手ハンダですか?ワイヤラッピングですか? 電源パスコンはたっぷり付けてください、今までワンショット回路1個で静かだったのがディジタル雑音で悪さしないようにですね。
お礼
再度ご回答、どうもありがとうございます。 またお返事が遅れてしまい、申し訳ありませんでした。 ただいま解読中なので(JKFFなど全く理解していないので)しばしお待ちください。 GW明けにはお返事できるよう努力します。よろしくお願いいたします。
補足
大変お待たせしました。GW中に自分なりに解釈した限りではなんとかできそうな気がしてきました。 ありがとうございます。 が、まだ一つ問題が残っていると思われます。 たとえば、一周期が1秒の場合、(N1=9) N2=100、N3=110とします。とするならば t=0でN1がhighに立ち上がり、 t=99*0.1μ秒でN2がhighに立ち上がり、 t=109*0.1μ秒でN3がhighに立ち上がることから 確かにご教示いただいた回路でt=99*0.1μ秒から10*0.1μ秒だけhighになる回路は出来そうです。 ですが、その後にN2ならびにN3をunableにしないとプリセット値を数え続けてしまうことから t=99*0.1μ*2秒後に再度N2がhighに立ち上がり、 t=109*0.1μ*2秒でN3がhighに立ち上がり、 ...というのを繰り返し、1周期の間にN2,N3の設定値によって何度も何度も矩形パルスが立ち上がることになってしまいます。今回の場合はN1が立ち上がってから一度しか立ち上がってはいけないので、N2,N3の回路系に関しては一度数え終わったらENPまたはENTをlowにして数えるのをやめねばならなさそうです。 どういう経路でそのようなパルスを加えるのかはただいま思案中です。 もしまだお付き合いいただけるようでしたら、ご教示願います。 上の回路だけでもいかに自分が勉強不足だったかということで非常に勉強になりました。いつもいつも本当にありがとうございます。
- Teleskope
- ベストアンサー率61% (302/489)
Delayブロック; ブロックへの入力; Reset入力 → 全74HC160のReset(1)へ Load入力 → 全74HC160のLoad(9)へ CLK入力 → 全74HC160のCLK(2)へ ブロックからの出力; 74HC160最終段のcarry(15)出力 → Pn出力 内部構成; DipSW → 74HC160のD入力へ DipSW → 74HC160のD入力へ DipSW → 74HC160のD入力へ DipSW → 74HC160のD入力へ DipSW → 74HC160のD入力へ +電源 → 初段160のEt(10)と全160のEp(7)へ 初段160のCarry(15)出力 → 2段目のEt(10)入力へ 2段目160のCarry(15)出力 → 3段目のEt(10)入力へ 3段目160のCarry(15)出力 → 4段目のEt(10)入力へ 4段目160のCarry(15)出力 → 5段目のEt(10)入力へ DipSWのお奨め; 現行はSWがグランドで抵抗が電源側ですが、これをSWが電源側で抵抗がグランドにします。こうすれば、現行は 出力周波数 fout = (入力周波数 fin)/(FFFFF-設定値) なのが、 fout = fin/(設定値-1) になり、 さらに、カウンタICを16進の161や163でなく 10進の160か162を使えば面倒な16進計算が要らなくなります。私は10進16進両方用意してます。 また私事で恐縮ですが、DipSWも http://www.jae.co.jp/product/pdf/42J.pdf の黒や黄色のつまみのあるものを使ってます。これはどのメーカーにもあり、16進だけを持っておけば、10進のときは0~9の間だけ使えばいいです。こうしておけば、設定のたびの計算が全く要らないので実験に集中できます。スライド型のDipSWは全く使ってないです。(しかし、説明に図を使えないと限界がありますね、、、) 以上;
- Teleskope
- ベストアンサー率61% (302/489)
No.1補足 >> (3)少し違います。 << 了解です、それではNo.2の暫定提案は取り下げます。 >> __ __ 所要出力 __| |__....__| |_ ↑ ↑ ↑ ↑ ↑ ↑ 計数値 P1 P2 P3 P1 P2 P3 P1は数え始めに相当します。 << 途中点線で省略してるので周期が読めないので; (5)たぶん P1<P2<P3 だと思いますが合ってますか。20bitアップカウンタが表現する単調増加数列 00000~FFFFFの範囲内の値だと思っていいですか。 (6)だとすれば、P3のあと、どんなイベントで戻るんでしょうか?例えばカウンタがオーバーフローしたとか、間引き回路のカウンタのキャリーに依る(従属同期)とか。 (7)戻るのはP1に戻るのですか。 (8)あるいは質問を変えて、P1から次のP1までの周期はいくつですか。 以下素朴な疑問ですが、 (9)レーザ側からの同期信号(確か周期10Hzでしたよね)はこの回路のどこに入るんでしょうか。 (10)間引きは 1/1 から最大何分の1ほどでしょうか。 (11)光出力と同期信号の関系は明確ですか、 光出力 _____|_____ → ← 同期信号 ____| ̄ ̄ ̄|___ 例えば図のように 光出力が終わった後に同期信号が立ち下がることが保証されてるかです。要するに同期信号の立ち下がりでシャッタが即動していいのか、あるいは何らかの時間を置いてから動くのかですね。
お礼
いつも長文にお付き合いしていただき、真に恐縮です。ありがとうございます。 では、この一連の質問の源についてお話します。 そもそも使用しているdigital delay generatorが諸悪の根源なのです。(1.で紹介した製品です。) 10MHzのマスタークロックを出力しているにも関わらず、パルス幅のほうはアナログで作っているため、パルス幅が長くなるとjitterが激しく大きくなってしまうのです。m秒近い幅を持たせると100μ秒前後で前に後ろにゆれているのです。(もっと長くするとjitterはもっと激しくなります。)これだと他の装置と同期を取ろうとすると問題があるので何とかしたいと思い、結局マスタークロック以外の部分を最初から作る羽目になってしまったのです。1台50万近くもする製品なのに肝心要のところでjitterがあるのです。 レーザーだけ動かすのであれば確かに立ち上がりだけで十分なのですが、立下りも重要な装置が絡んでいるためこのような事態になってしまいました。 何卒よろしくお願いいたします。
補足
再度ありがとうございます。またまた一つずつ回答していきます。 (5)ご指摘の通りです。 (6)むむむ、的確な回答が出来るかどうか怪しいです。戻るのはP1によるものと思います。 動かす装置は以下の通りです。 1,マスタークロック10MHzのdigital delay generator 以前紹介した製品です。http://www.thinksrs.com/products/DG535.htm 2,1.から10Hzの信号がでるのでそれを間引く。(たとえば100パルスごと。これがP1に相当します。この場合は周期が10sになります。) 3,P1から適当なdelayをおき、適当なパルス幅をもつ出力がほしいのです。というわけでマスタークロックとして1.を使用します。つまりP1の立ち上がりから数えて100nsごとに出ているパルスのa個目のところでパルスを立ち上げ、P1の立ち上げりから数えて(a+b)個めのところでパルスを立ち下げます。 P1の立ち上がりから100n*aのdelayを置き、100n*b秒間high levelのTTLパルスがほしいのです。 時間としてはP1=0とするとP2=100n*a,P3=100n*(a+b)です。100n*(a+b)<100(P1の1周期)です。というわけで戻りはP1の入力でと思っておりました。 (10)間引きは10Hzを間引くとして100個前後迄です。 (11)今回の場合100ns*(a+b)のタイミングでシャッターが閉じることになります。光出力が終わった後に同期信号が立ち下がることを保証したいということになると思います。 なぜこのような回路が必要なのかは御礼のところに書きます。
- Teleskope
- ベストアンサー率61% (302/489)
1. 暫定提案; 74HC163をN個、74HC157をN個、74HCを1個、クロックバッファゲート適宜。 全系リセット(手動スイッチ) → 163,107のリセットへ 間引き回路のクロック出力 → 163,107のCKへ invして163のPEへ ↑ 163のCA出力-┴→107のJとKへ P2置数switch → 157のA(Low)側入力へ P3置数switch → 同、 B(High)側入力へ 107のQbar出力 → 157のselectへ 107のQ出力 → この回路ブロックの出力 2. 間引き回路出力のグリッチ対策案 原発振10MHz → inv ┬→ inv → 163のクロックと | 157の4A入力へ ↓ 163のCA出力 → NAND → 157の4B入力へ (回路図を他所に併用した回答はrejectされたので文章で書きました。)
- Teleskope
- ベストアンサー率61% (302/489)
カウンタ1632のキャリー出力を2ラインセレクタで出力する回路でしたね、 (1)その出力を更に別のカウンタのクロックに使うのですか。 (2)一般に、カウンタを多段接続したキャリー出力には、細いヒゲ状の AND漏れ とか グリッチ(Glitch,不具合) と呼んでる余計なものが出ます。細くてビットのパタンに依存します。これをカウンタのクロックに使うと悲惨です。このへん確認できませんか。 (3) 下図のような事ですか。 ___ ___ 所要出力 ___| |___| |__ ↑ ↑ ↑ ↑ ↑ 計数値 P2 P3 P2 P3 P2 (4) ディジタルICの入手は、通販などの小売りでしょうか、半導体メーカの商社サポートあるのでしょうか。 要するにちょっとマイナーな部品を使えるか、ということです。今回は16進カウンタ74HC163、JKFF74HC112、一致比較器74HC688 程度でできそうですが入手は大丈夫でしょうか。
補足
毎度丁寧なご回答、ありがとうございます。一つずつ回答しています。 (1)その通りです。 (2)オシロで確認した限りは特に問題ありませんでした。また別の装置に接続したところ特に問題なくこちらの要求どおりの動作しました。 (3)少し違います。 __ __ 所要出力 __| |__....__| |_ ↑ ↑ ↑ ↑ ↑ ↑ 計数値 P1 P2 P3 P1 P2 P3 P1は数え始めに相当します。 74163でいうなればclear,load,enableP,Tが同時にHighになったときのようなことです。 (4)購入ルートはRSコンポーネンツ、秋葉原のお店などからです。 No.2への回答はしばしお待ちください。検討します。
お礼
すばやいご回答ありがとうございます。 enableP,Tでどうにかしようと思っていたので、Loadで反復を防ぐ手は考え付きませんでした。ありがとうございます。 これでひとまず製作してみます。これで製作できたら今まで問題になっていたことが全て解決されます。ありがとうございました。 ちなみに以前のご質問に答えていなかったことがあるので回答します。 1、製作は手ハンダです。不要な残りをGNDにきちんと落とさなかったためにわけのわからないことになっていたことが以前ありました。ご指摘ありがとうございます。 2、カウンタはOMRON社のサムロータリーを使っています。試作機はご指摘のDipSWを使っていたのですが、うまく動く事がわかってからはこちらを使っています。使いやすいのと購入が楽なのが決め手でした。 http://www.fa.omron.co.jp/data_pdf/cat/355.pdf このスレッドは今週末まであけておきます。何かまたご意見いただけるようでしたらお願いいたします。