Comments
Transcript
CPLD による簡易型パルスジェネレーター ver.7 取説 2015/8 細田 CPLD
CPLD による簡易型パルスジェネレーター ver.7 取説 2015/8 細田 CPLD (MAX-II EPM240)を使った簡易型パルスジェネレーターの最新版の取説を示す。本 バージョンは ver.7 であり、初期型 ver.1 と次の公開改良 ver.3 の改良版。いわば、勢いで作っ た ver.3 以前をいろいろ使用してみてよくなかった点やバグの改良版が ver,7。回路図、CPLD の設計図、および BASCOM プログラムも、かなり変わっている。詳細は本節に添付した各ファ イルを参照されたい。加えて、同じ節に外部オプションの 50-ohm ドライバーも掲せておいた。 これにより、数十 ns のパルス応用にも対応できるようになった。 以下、仕様を示す。 (1)仕様と履歴 (ver.7 = ver.3 からの継続改良) 10ns 分解能のパルス設定可能。最高繰り返し周波数= 50MHz。最大時間幅= 5 秒。 出力レベル:3.3V LVTTL、5V 系 TTL にも利用可能。 (出力= CMOS gate = 74AS04) 同じ節に述べた 50-ohm 変換器を経由すれば、50-ohm 負荷も可能。 (ただし、最小パルス幅= 20ns、保証繰り返し周波数 max. = 25MHz。 ) 外部トリガー入力:3.3V LVTTL or 5V TTL(入力バッファー IC = 74LCX125) 電源= 1.5V 単2電池1本。(DC-DC コンバータで 3.3V へ昇圧) 。電池寿命= 15 時間以上(連 続使用時)。 (AC 入力電源で設計すれば、この制限は無し。 ) 外部パルス・トリガー動作を改良。 外部トリガーから、パル出力までのジッター= 0 〜 10ns 。 (デジタル型で 100MHz でサンプ リングしているため。) 写真1 簡易型パルスジェネレーター(写真は ver.3 だが、小さな Slide-SW2 が追加されている。 ) 詳細は回路図参照。シャーシ裏側には BNC コネクターがある。 -1- 外部トリガーからパルス出力が出るまでの遅延時間= 10ns +上記ジッター。 (2)特徴 小型、軽量、電池駆動でポータブル。高精度に長時間(5 秒)から短時間までのパルスを発生 できる。2パルス出力。外部トリガーからの遅延時間も高精度設定可能。 (分解能= 10ns なの で、例えば外部トリガーパルスから 4.00000002 秒遅れた 30ns パルス幅のパルス発生も可能。 ただし、回路上の問題で遅延には max. 10ns のジッターがある。 ) (3)取説 写真1のように4つのプッシュスイッチとロータリエンコーダ、およびパネル前面のスナッ プスイッチによってパラメータ設定を行う。 写真に示したパネル前面のトグルスイッチは以下の機能。アルミシャーシ前面の左側スイッ チ=電源の ON/OFF。最右側スイッチ=外部/内部トリガー切り替え、右から2番目のスイッ チ=外部トリガー極性選択(トリガー=立ち上がり / 立ち下がりエッジ) 。右側2つのスイッ チは CPLD のピンに直接つながっている。それに対応する CPLD のピンは 10k ohm の抵抗で +3.3V にプルアップされており、スイッチ ON によって GND に接続される事により、H/L レベ ルが切り替わる。これによって CPLD の動作モードが切り替わる。外部トリガー・パルス入力 レベルは 3.3V-LVTTL か 5V-TTL レベル。 パルス周期やパルス幅等は AVR ボード上の SW1 〜 SW4 のプッシュスイッチ、およびロー タリエンコーダによって設定する。 注:回路図にある SW2 というスライドスイッチ(プッシュスイッチ SW2 とは異なる、もう 一つのスイッチ。回路図参照。)は AVR のプログラミングが終わった後、AVR の PB4 (MISO) ピンで Internal/External trigger のどちらのモードにあるかのトリガー選択スイッチの状態を読 むのに使用するので、AVR プログラムコネクターの 1 番ピンから、トリガー選択スイッチの方 を読めるように切り替えておくこと。また、プログラミング時には、その逆側にスイッチして プログラミング信号が AVR に入るようにしてやること。このスイッチを正しく切り替えておか ないと、AVR にプログラムが書き込めなかったり、AVR がプログラム実行時に突然、リセット がかかってしまうなどのトラブルに見舞われる。 以下、各スイッチの働きを示す。 3-1 プッシュスイッチ2(SW2):メインパルス(すぐ出る)とサブパルス(遅延パルス)の 設定画面の切り替えを行う。押すごとにトグル切替動作となる。 3-2 プッシュスイッチ3(SW3) :パラメータ選択。SW3 を押すごとに選択項目は切り替わっ て行く。選択された項目の最初の文字の下にはカーソルマークが表示される。選択した項目の 値はロータリーエンコーダーで変えられる。 -2- 3-3 プッシュスイッチ4(SW4) :パラメータの増減値を選択。SW4 を押し続けながら、ロー タリーエンコーダーを回すと、SW3 で選択した項目の増減値を設定できる。この点は旧バージョ ンの動作と異なる。 3-4 SW2 で切り替えて、メインパルス画面が表示されている場合は、SW3 で選択項目が次の 順で切り替わる。 メインパルス周期設定。ロータリエンコーダで増減。 メインパルス幅設定。ロータリエンコーダで増減。 メインパルスの発生モード設定。ロータリエンコーダで Continuous 発生/ Single 発生を選択。 (右回しで Continuous(連続発生)、左回しで Single(単発発生) 。 ) メインパルス極性の選択。ロータリエンコーダで変更。Pol+ で正論理、 Pol - で負論理パルス。 (右 回しで Pol+、左回しで Pol-。) SW2 で切り替えて、サブパルス画面が表示されている場合は、SW3 で選択項目が次の順で切 り替わる。 サブパルス遅延時間。トリガーがかかった後、どれぐらいの時間遅延でサブパルスを発生する かを決定。ロータリエンコーダで増減。 サブパルス幅。ロータリエンコーダで増減。 サブパルス極性。ロータリエンコーダで切り替え。 選択したパラメーター数値(OLED 画面でパラメーター文字の最初の文字に下線が追加される。 ) をロータリエンコーダで変更できる場合、SW4 を押すしながらロータリーエンコーダーを回す と、増減値を切り替えることができる。右回転で増加、左回転で減少。 3-5 パルス発生(SW1、およびパネル前面スナップスイッチ) SW1 を押すとパルス発生を ON/OFF できる。 パネル前面の Ext/Int トリガー選択スイッチが Internal であった場合、以下の動作となる。 SW1 によって、発巣発生の ON/OFF がトグルされる。押すと LED が点灯すれば、ON。消 灯 し て い れ ば、 パ ル ス 出 力 は OFF。SW1 を 押 す ご と に 切 り 替 わ る。 パ ル ス 発 生 モ ー ド が Continuous(Conti)か Single の場合によって、かつ、トリガーが内部/外部の選択により、 以下に述べる動作の違いが生じる。Conti ならば、連続にパルスが発生する。Single なら一発 のみ発生する。パルス発生時でもパルスパラメーターは変更できる。SW2 や SW3 によって項 目を切り替え、パラメーター設定をロータリーエンコーダー等によって変えると、即、その変 更は反映される。 パ ル ス の 発 生 は 図 1 の よ う に な る。 メ イ ン パ ル ス(P1) は CPLD の counter-cnt = 0 を サ ン プ リ ン グ し て、 そ こ か ら P1 を ON す る。 し た が っ て、 ス タ ー ト か ら 1CK (10ns) 遅 -3- 図 1 パルス発生とパラメーター れ て 出 力 さ れ る。(Quartus フ ァ イ ル 参 照。 )P1 パ ル ス の 幅 は T1 パ ラ メ ー タ ー(10ns の 数 ) に よ っ て 決 定 さ れ、CPLD 内 部 の カ ウ ン タ ー(cnt) が T1 に 達 し た 後、10ns サ ン プ リングにより、OFF される。したがって、P1 パルス幅は T1 パラメーターで決定される。 第 2 パ ル ス( 遅 延 パ ル ス = P2) の ス タ ー ト は T3 値( サ ブ パ ル ス 遅 延 時 間 ) に よ り 決 定 さ れ る。 そ の OFF タ イ ミ ン グ は T4 パ ラ メ ー タ ー で 決 定 さ れ る。 (T4 - T3 が サ ブ パ ル ス の 幅 に な る。 ) 両 者 は CPLD 内 部 の cnt 値 で ON/OFF さ れ る。 全体の周期は T2 パラメーターで決定される。CPLD 内部のカウンターである cnt(10ns お き に 更 新 ) が T2 に 達 す る と、cnt を ゼ ロ ク リ ア ー し て、 次 の 連 続 パ ル ス 周 期 に 入 る。 以上は連続パルス発生の Conti モードであったが、Single(単パルス)モードでは、SW1 を プッシュするごとに 1 パルスのみを出力する。遅延パルスである P2 も、遅延して出力される。 ここで、パルス出力を中断したい場合は、いつでも SW1 を再度押せば、パルス出力を取り 消せる。パルス出力がイネーブルされている際は LED1 が点灯しているが、いつでも SW1 を 押せば、出力をディスエーブルできる。 (これは、SW1 を AVR のインタラプト;INT0 に割り 写真2 シャーシ裏側。Eagle の回路図にある 74LCX125 はシャーシ裏面にある。その他、単 2 乾電池と それを 3.3V にする Strawberry-Linux の MCP1640 モジュールが見える。黒く見えるのはリレーで電源が 立ち上がらない時にはパルスを出さないようにリレーがパルス出力を OFF するようしてある。 -4- 当てているため。)パルス出力の中断は、例えば 5 秒間のように長い周期を設定した場合に有 効である。 パネル前面の Ext/Int トリガー選択スイッチが External であった場合は、以下の動作となる。 Continuous 発生の場合は、SW1 によってパルス発生が ON になると、LED が点灯する。パネ ル前面の外部トリガー極性スイッチが H 側の場合、外部トリガー入力が立ち上がりエッジにな るとパルス(P1, P2)が出力される。極性スイッチが L 側の場合は、トリガー信号が立下がる と、パルスが出力される。以後、外部トリガーパルスが来るごとに、上記動作を繰り返す。ト リガーパルスの周期は T2 で設定された発生周期よりも長いことが望まれる。それよりも短いと、 再トリガーの開始がランダムに起こり、パルス発生にジッターが発生するので T2 や T4 を適切 に設定すること。 External 選択で Single 出力の場合、SW1 によってパルス発生状態を表す LED が点灯してい る場合、極性スイッチが H 側である場合は外部トリガーの立ち上がりエッジで1発のパルスが 出力される。極性スイッチが L 側の場合は立ち下がりエッジでパルスが出力される。Single の 場合は、一発、P1 と P2 のパルスが発生し終わった時に LED は消灯し、次の外部トリガーでは パルスは発生しない。この場合、再度、パルス発生したい場合は、SW1 を押して LED を点灯し、 外部トリガーパルス待ちとすること。 Single モードで外部トリガーの場合、外部トリガーが来て、パルス発生が終了した場合は、 CPLD から、その終了信号(CPLD 側では EndN2、AVR では EndN)によって、AVR に INT1 イ ンタラプトがかかり、それによって LED を消灯し、パルス発生が終了したことを知らせる。 外部トリガー選択で Single モードの場合、もし、あまりに長時間、トリガーパルスが来ないこ とが LED の点灯しっぱなしによって分かる場合には、再度 SW1 を押せば、外部トリガーによ るパルス発生を取り消せる(LED は消灯する) 。 (4)パルス設定パラメーターと発生パルスとの関係(図 1 参照) 全体の周期= T2:T2 を CPLD 内部のカウンター(cnt:10ns おきに増加)を越えると次の周期。 メインパルス消滅までの時間= T1:cnt = 0 から T1 まで、Pulse1 を ON。実際には 10ns サン プルのクロックサンプル遅れがあるので、10ns 遅れる。 サブパルス発生までの時間 =T3:遅延パルスである pulse-2 の開始時間を cnt 値で示す。この 値を超えると第 2 パルスが ON になる。 サブパルスの幅を決める時間 = T4:第 2 パルスを OFF する時間を cnt 値で示す。T4>T2 の場合は、 T2 になった段階で OFF される。 CPLD の内部には 30-bit のカウンター(Quartus project ファイルの block-diagram 回路の cnt)があり、100MHz (=10ns) のクロックでカウントアップしている。パルス発生が AVR 側 から指令される(StartN=L)前はゼロクリアされている。パルス発生 enable 線(StartN)が AVR によって enable されるとカウンター値は 10ns おきに増加していく。CPLD 内部には別に 4個の比較器(T1 ~ T4 に対応:Quartus project: PGen1_5.v 参照)がある。 図の P1 パルス(メインパルス)は cnt >= 1 になると H になる。その後、cnt = T1 に達する -5- と P1 値はゼロクリアされる。パルス発生周期は T2 で決まり、cnt がそこに達すると cnt=0 と なり、また最初からカウントアップを始める。以上より、T1 と T2 のカウント値を設定する事 により、メインパルスの周期と時間が決まる。 サブパルス(P2)の場合は、周期はメインパルスの T2 で決まっているので、T3 と T4 を設 定してサブパルスをメインとは別に出力させる事ができる。発生法はメインと同様、cnt 値の 比較であり、cnt >= T3 で H になり、cnt >= T4 で L となる。P2 の幅がゼロ(P2 を発生させな い選択)の場合は、T3 = T4 = T2 + 2 と設定する。サブパルスのパルス幅がゼロに設定された 場合はサブパルスを出さない設定なので、その場合は BASCOM プログラム側で、T3 = T4 = T2 +2 などとして、サブパルス出力を Disable する。 (BASCOM のプログラム参照。 ) T1 ~ T4 をどのように設定しているかは BASCOM-AVR のソースファイル PulGenSimple_ CPLD7.bas 、および Quratus Project フォルダー PulGen1_5 を参照。 (5)その他、使用上のヒントなど その他の解説は同じ章にある ver.3 以前の解説やそれらの PDF ファイル等も参照。 パルスの設定に矛盾があると SW1 でパルス発生起動時にエラーメッセージが出て、パルス 発生はされない。パラメーターを正しく設定し直し、SW1 を押すとエラーメッセージは消えて、 正しくパルス発生が起こる。 サブパルスを出力したくない場合は、サブパルス幅をゼロに設定すること。 サブパルスをメインパルスと同時に出すことも出来、その際は遅延時間=0を設定すればよ い。 周期 T2 よりも T4 時間が長い場合は、サブパルスは中途(T2)で打ち切られる。 メインパルスを pre-pulse として使用し、サブパルスを本体のパルスとする使用法もある。 本 器 は 10 ns 幅 の パ ル ス ま で 出 力 で き る が、3.3V CMOS レ ベ ル の 出 力 で あ り、200 オ ー ム 程 度 の 負 荷 ま で し か ド ラ イ ブ で き な い。200 オ ー ム 負 荷 で は 若 干 の 反 射 が あ る が、 ど う し て も 10ns パ ル ス が 欲 し い 場 合 に は、 そ の よ う に し て 使 う 手 も あ る。 50 オームの負荷をドライブする場合は、 同じ章で紹介した別ユニットの 50 オームドライバー を介してドライブする。その場合、ドライバーの応答速度の問題で、最低パルス幅は 20 ns ま でとなる。 -6-