目次
17K76はシングルターンBPM読み出しなどに適した、4チャンネル同時サンプルの
12ビットADCモジュールです。メモリー長は各チャンネル最大256kワードですが、
内部スイッチ切り替えにより128k/64k/32kワードに設定することもできます。
仕様上の最大サンプリングスピードは2MHzですが、10MHz程度までも問題なく動作
するようです。
- 外観
VME 1幅 ダブルハイト
- DECODEランプ
VMEアクセスがあったとき緑色に点灯(0.5s)
- サンプルLED
緑:スタートトリガー許可状態
赤:メモリー書き込み中(メモリーへのアクセス及びトリガー不可)
橙:A/D終了(メモリーの最後まで書き込んだ状態、トリガー不可)
- IN TRIG(QLAコネクタ)
NIMレベル。インピーダンス50Ω。立ち下がりでADスタート。100ns程度の幅があることが望ましい。
- CLK(QLAコネクタ)
サンプルクロック入力。NIMレベル。インピーダンス50Ω。立ち下がりエッジで動作。
100ns程度の幅があることが望ましい。AD変換の有無にかかわらずクロックは常に
供給すること。
- OUT TRIG(QLA)
スタートトリガーのバッファーアウトプット。NIMレベル。スタートパルスと同じ
幅の出力が出るはず。遅延は数ns程度。未使用時は放置してよい。
- CH1〜CH4 入力(SMA)
インピーダンス50Ω。-2V〜+2V。周波数特性は100MHz程度(入力信号の
平坦部が10ns以上あること)。
- アドレス設定スイッチ
ボード上SW1とSW2。A31〜A22を設定。つまり、本ボード1枚で
21ビットアドレススペース(2Mバイト)を占有します。
- AMコード設定スイッチ
ボード上SW3。1-2ショートで拡張特権モード(0x0d)。本デバイスサポートは
拡張特権モード用です。2-3ショートで拡張非特権モード(0x09)に設定できます。
いずれにしてもA32/D32モードのみサポートします。
- メモリー容量設定スイッチ
ボード上SW4。00で32kワード、01で64kワード、10で128kワード、11で256kワード
に設定できます。本デバイスサポートはメモリー容量をスタート時に読み、それに
従った動作をします。
- 動作モード設定スイッチ
ボード上SW5。通常は1-2ショート状態で使用します。
17K76ボードのI/Oマップは以下の通りです。
アドレス | Write/Read | データ
|
---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
---|
0x**(**00)00000 | (R/W) | **** | CH3:ADデータ(最古) | **** | CH1:ADデータ(最古)
|
| | **** | Ch3 | **** | CH1
|
0x**(**00)1FFFC | | **** | CH3:ここまで(32kワード時) | **** | CH1:32k
|
| | **** | Ch3 | **** | CH1
|
0x**(**00)3FFFC | | **** | CH3:ここまで(32kワード時) | **** | CH1:64k
|
| | **** | Ch3 | **** | CH1
|
0x**(**00)7FFFC | | **** | CH3:ここまで(128kワード時) | **** | CH1:128k
|
| | **** | Ch3 | **** | CH1
|
0x**(**00)FFFFC | | **** | CH3:ここまで(256kワード時) | **** | CH1:256k
|
0x**(**01)00000 | (R/W) | **** | CH4:ADデータ(最古) | **** | CH2:ADデータ(最古)
|
| | **** | CH4 | **** | CH2
|
0x**(**01)1FFFC | | **** | CH4:ここまで(32kワード時) | **** | CH2:32k
|
| | **** | CH4 | **** | CH2
|
0x**(**01)3FFFC | | **** | CH4:ここまで(32kワード時) | **** | CH2:64k
|
| | **** | CH4 | **** | CH2
|
0x**(**01)7FFFC | | **** | CH4:ここまで(128kワード時) | **** | CH2:128k
|
| | **** | CH4 | **** | CH2
|
0x**(**01)FFFFC | | **** | CH4:ここまで(256kワード時) | **** | CH2:256k
|
0x**(**1*)***** | R/W | * | コントロール(W)/ステータス(R)
|
ADCのデータフォーマットは、
入力電圧 | ディジタル出力
|
---|
| (MSB) | | (LSB)
|
---|
+2V | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
|
0V | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
-2V | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
です。コントロール・ステータスレジスタのフォーマットは
- Write(コントロール)最下位ビット(bit0)のみ
0:TRIG入力禁止、メモリーアクセス(read/write)可能、A/D終了フラグクリア
1:TRIG入力許可、メモリーアクセス不可
- read(ステータス)下位5ビットのみ有効
Bit0: コントロールレジスタの状態
Bit1: AD BUSY、0がTrigger待ちの状態、1がTriggerあり、AD動作中
Bit2: メモリ書き込み終了、0が未了、1で書き込み終了
Bit3、Bit4:メモリ容量、0が32kワード、01が64kワード、10が128kワード、
11が256kワードで、ボード上のスイッチの状態を反映。
本デバイスサポートは、EPICS R313改訂版で開発したものです。EPICSそのものに対する説明、入門出家入道遁世については専門家に帰依するなり、コントロールグループのページをご参照なさるなりお気の向くままになさってください。動作はPPC750でのみ確認しています。A32/D32アクセスなのでPPC603ではきっと動作しません。
コードを以下に示します。
ADCデータの読み込みは、waveformレコードで要素数524228、データタイプが
shortのものを2つ用意し、CH1、CH3を同時に
1つめのwaveform(signal 0)に(前半CH1、後半CH3)で
記録します。なお、データ長が256kワード
より小さい時はその途中までしか記録しませんが、CH1とCH3の区切りは同じ場所です。
最初にメモリー書き込みが終了しているか(bit2が1か)、あるいは読み取り状態になっているか(bit0が0)かを判断します。どちらも満たされない場合はエラーで読み取りは行いません。
なお、リセットの都合上、必ずCH1CH3を先に読んで、次にCH2CH4(signal 1)を読みます。これは
次の入力用のリセットをCH2CH4を読んだときにしか出さないようにしているからです。
具体的には、データベース上でCH1CH3のレコードのFLNKをCH2CH4に入れておくか、
シーケンサー等で管理すべきです。
いずれにしてもwaveformレコードのレコード長が長大でこのままでは今のところchannel accessに
支障がありますので、データベース上では読みとれる長さ(4095以下)のsubarray
あるいはcompact subarrayに分割する必要があります。compact subarrayについては
データベースの所をご参照ください。
dbdファイルの中で次のように定義します。
device(bo,VME_IO,devBo17k76,"V17K76")
device(mbbiDirect,VME_IO,devMbbi17k76,"V17K76")
device(waveform,VME_IO,devWf17k76,"V17K76")
初期化ファイルはdev17k76Cnfigで、ベースアドレスが0x22000000で1枚使うとすると、
dev17k76Config(1,0x22000000)
の様に指定します。なお、このボードは1枚で2Mバイトもの領域を占有しますので、
他のボードと干渉しないよう特段の注意が必要です。
サンプルファイルは以下を参照してください。
ここで、CH1CH3のwaveformレコードは10秒に1回スキャンしていますが、実際に使用する
時はscanではなく、sequencer等でstatusのbit2を見て1になったら
CH1CH3→CH2CH4の順でプロセスすることになります。
compact subarrayについて
現行EPICSR313ではとても間抜けなことに
長いwaveformをcaput、cagetすることがでけまへん。長いwaveform
自体を作ることは可能ですが、applicationにそのままではもってこれません。そこで、
いくつかの部分arrayに分けてえっちらほっちら持ってくることになりますが、
今まではsubarrayレコードを使用していました。ところが、噂によるとこのsubarray
レコードはとても間抜けなことにもとのwaveformと同じだけのメモリーを食うそうです。
このデバイスサポートで使うようにとても長いwaveformのsubarrayを作ると思うと、
身の毛もよだつようなことに(256k/4k=64、64×0.5M=32MB!!!!)なります。そこで小田切さんが開発されたいう
compact subarray
レコードを使えば、必要なだけしかメモリーを食わないので安心です。この新しい
レコードを使うためには
- base.dbdに以下の2行を追加
include "compactSARecord.dbd"
device(compactSA,CONSTANT,devCSASoft,"Soft Channel")
- baseLIBOBJSに以下の2行を追加
LIBOBJS += $(EPICS_BASE_BIN)/compactSARecord.o
LIBOBJS += $(EPICS_BASE_BIN)/devCSAsoft.o
- gmakeする
ということで出来るそうです(私は色々うまくいかなくてあちこちいじってしまったので
果たして今になって上の手順でうまくいくかどうか自信ない)。データベース自身は
subarrayレコードからレコードタイプを
subArray→compactSAとし、MALMフィールドを除去したものです。
1枚の17K76ボードを使用する時のスタートアップファイル(の関係部分)は次のようになります。
dbLoadRecords("fbppcApp/Db/FB_ADC.db","USER=FBH:TEST , chan=C0")
dev17k76Config(1,0x22000000)
iocInit
4チャンネル同時サンプルの
12ビットADCモジュール、17K76ボードの
のEPICSデバイスサポートおよびデータベースについて紹介しました。本ボードについてご興味のある方はより詳しい資料がありますので、飛山までご連絡ください。
Makoto Tobiyama
6/Jan/2002
Return to FB Home Page...