目次
18K07は、4点のビーム位置モニター信号を508MHz帯域濾波器及びログアンプ
を通過した後、14ビットAD変換しメモリーにセーブ出来るVME 1幅のモジュールです。
- 入力チャンネル:4チャンネル -70dBmから0dBm
- サンプリング:4チャンネル同時、外部サンプル:最大2.4MHz
- メモリー容量(各チャンネル):256k/128k/64k/32kワード
- 外観
VME 1幅 ダブルハイト
- VMEランプ
VMEアクセスがあったとき緑色に点灯(0.5s)
- A/Dランプ
緑:スタートトリガー許可状態
赤:メモリー書き込み中(メモリーへのアクセス及びトリガー不可)
橙:A/D終了(メモリーの最後まで書き込んだ状態、トリガー不可)
- TRIG IN(QLAコネクタ)
NIMレベル。インピーダンス50Ω。立ち下がりでADスタート。100ns程度の幅があることが望ましい。
- TRIG OUT(QLAコネクタ)
NIMレベルトリガー出力。
- CLK(QLAコネクタ)
サンプルクロック入力。NIMレベル。インピーダンス50Ω。立ち下がりエッジで動作。安定動作のため、DutyはLow(-1V):High(0V)が8:2程度とすること。
- CH1〜CH4 入力(SMA)
インピーダンス50Ω。最大0dBmまでの信号。
18K07ボードの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)0FFFC | | **** | CH3:ここまで(32kワード時) | **** | CH1:32k
|
| | **** | Ch3 | **** | CH1
|
0x**(**00)FFFFC | | **** | CH3:ここまで(256kワード時) | **** | CH1:256k
|
0x**(**01)00000 | (R/W) | **** | CH4:ADデータ | **** | CH2:ADデータ
|
| | **** | CH4 | **** | CH2
|
0x**(**01)0FFFC | | **** | CH4:ここまで(32kワード時) | **** | CH2:32k
|
| | **** | CH4 | **** | CH2
|
0x**(**01)FFFFC | | **** | CH4:ここまで(256kワード時) | **** | CH2:256k
|
0x**(**10)00000 | R/W | * | AD_START
|
0x**(**10)00004 | R/W | * | AD_MEMORY
|
0x**(**10)00008 | R/W | * | TRG_POS
|
0x**(**10)0000C | R/W | * | IRQ_ENB
|
0x**(**10)00010 | R/W | * | Reserved
|
0x**(**10)00014 | R | * | AD_STATUS
|
0x**(**10)00018 | R | * | IRQ_NO
|
0x**(**10)0001C | R | * | IRQ_ID
|
0x**(**11)***** | R | * | トリガポインタレジスタ(R)
|
0x**(**11)FFFFF | N/A | *(NOT USED)
|
ADCのデータフォーマットは、
入力電圧 | ディジタル出力
|
---|
| (MSB) | | (LSB)
|
---|
2V | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
|
1V | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
0V | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
です。
- AD_START: A/Dスタートコマンド。1でA/Dスタート、測定終了後自動で0クリアする。0を書くとADが強制終了する。
- AD_MEMORY: A/Dデータメモリー範囲。
- 0:32768ワード/channel
- 1:65536ワード/channel
- 2:131072ワード/channel
- 3:262144ワード/channel
- TRG_POS: A/Dデータのトリガー位置
- 0: -100% (トリガーでデータ取得終了)
- 1: -50% (トリガー前75%、入力後25%)
- 2: 0% (トリガー入力前50%、入力後50%)
- 3: 50% (トリガー入力前25%、入力後75%)
- 4: 100% (トリガーからメモリーサイズまでデータ取得)
- IRQ_ENB: AD終了時の割り込みの有効・無効
1 | 0
|
---|
5秒タイムアウト(有効=1) | IRQ有効(有効=1)
|
- AD_STATUS:AD処理ステータス。割り込み有効時は、割り込み時にこのレジスターにアクセスする必要あり。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
---|
CH4オーバーフロー | CH3オーバーフロー | CH2オーバーフロー | CH1オーバーフロー | AD CLOCK OK | AD BUSY | AD ERROR | AD正常終了
|
- IRQ_NO: IRQの番号。0は禁止。ボード上の設定の読み出し
- IRQ_ID: IRQベクター設定。ボード上の設定の読み出し。
- read(トリガポインタレジスタ)下位18ビット有効
本デバイスサポートは、EPICS R313のVxWORKS(PowerPC 750)用に開発したものです。EPICSそのものに対する説明、入門出家入道遁世については専門家に帰依するなり、コントロールグループのページをご参照なさるなり、御随意に。動作はForce PPC750でのみ確認しています。MVME5500で使用するときは、デバイスサポート及びシーケンサの書き直しが必要です。
コードを以下に示します。
- 割り込み
AD読み込み終了の割り込みがかかったときは、最初にAD_STATUSを読み込む必要が
あります。このため、割り込みはmbbiDirectのsignal 1を割り当て、これを読んだ
後、flinkでwaveformレコードを読み出すようにします。
なお、mbbiDirectの初期化時に、何も指定せずにintConnectをすると、なぜか分か
りませんが割り込み時に2度AD_STATUSにアクセスされて鬱陶しいので、signal=1
だけにintConnectするようにしています。
- データ読み出し
メモリー上のデータ領域はCH1CH3の組とCH2CH4の組に分かれていますが、面倒なの
でこれらをすべて1つのwaveformにします。但し、あとからcompactSubarrayで読み
出すのが楽になるように、CH1はIndexが0から、CH2はIndexが262144から、CH3は
Indexが524288から、CH4はIndexが786432から始まるように配置します。なので、
読み出しメモリー長がいくつであっても、nordフィールドは1048576です。
読み出しが終わるとすぐにAD_STARTをします。
- dbdファイルの設定
dbdファイルの中で次のように定義します。
device(bo,VME_IO,devBo18k07,"V18K07")
device(mbbiDirect,VME_IO,devMbbi18k07,"V18K07")
device(waveform,VME_IO,devWf18k07,"V18K07")
device(longout,VME_IO,devLo18k07,"V18K07")
device(longin,VME_IO,devLi18k07,"V18K07")
初期化ファイルはdev18k07Configで、ベースアドレスが0x20000000で、IRQ=4、IRQ Vectorが0xF0で10枚使うとすると、
dev18k07Config(10,0x20000000,0x4,0xf0)
の様に指定します。なお、このボードは1枚で2Mバイトもの領域を占有しますので、
他のボードと干渉しないよう特段の注意が必要です。
2枚目のボードはVMEアドレスを0x20400000(A22を1にする)、IRQ Vectorを0xF1にと
順次incrementしていきます。IRQは4のまま変更する必要はありません。
サンプルファイルは以下を参照してください。
mbbiDirectのsignal=1をI/O Intrに設定し、これのFLINKに
waveformレコードを指定、そのFLINKにFanoutを指定して、
EVENT確認用のレコード(Sequencerで利用)及び各compactsubArray
をプロセスします。
10枚の18K07ボードを使用する時のスタートアップファイル(の関係部分)は次のようになります。
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB41: , CHAN=C0")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB42: , CHAN=C1")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB43: , CHAN=C2")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB44: , CHAN=C3")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB45: , CHAN=C4")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB46: , CHAN=C5")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB47: , CHAN=C6")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB48: , CHAN=C7")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB49: , CHAN=C8")
dbLoadRecords("fbppcApp/Db/FB_ADC3.db","USER=FB50: , CHAN=C9")
dev18k07Config(10,0x20000000,0x4,0xf0)
iocInit
dbpf "FB41:ADC4:MEMSIZE","0"
dbpf "FB41:ADC4:TRGPOS","4"
dbpf "FB41:ADC4:IRQENB","3"
dbpf "FB41:ADC4:START","1"
dbpf "FB42:ADC4:MEMSIZE","0"
dbpf "FB42:ADC4:TRGPOS","4"
dbpf "FB42:ADC4:IRQENB","3"
dbpf "FB42:ADC4:START","1"
dbpf "FB43:ADC4:MEMSIZE","0"
dbpf "FB43:ADC4:TRGPOS","4"
dbpf "FB43:ADC4:IRQENB","3"
dbpf "FB43:ADC4:START","1"
dbpf "FB44:ADC4:MEMSIZE","0"
dbpf "FB44:ADC4:TRGPOS","4"
dbpf "FB44:ADC4:IRQENB","3"
dbpf "FB44:ADC4:START","1"
dbpf "FB45:ADC4:MEMSIZE","0"
dbpf "FB45:ADC4:TRGPOS","4"
dbpf "FB45:ADC4:IRQENB","3"
dbpf "FB45:ADC4:START","1"
dbpf "FB46:ADC4:MEMSIZE","0"
dbpf "FB46:ADC4:TRGPOS","4"
dbpf "FB46:ADC4:IRQENB","3"
dbpf "FB46:ADC4:START","1"
dbpf "FB47:ADC4:MEMSIZE","0"
dbpf "FB47:ADC4:TRGPOS","4"
dbpf "FB47:ADC4:IRQENB","3"
dbpf "FB47:ADC4:START","1"
dbpf "FB48:ADC4:MEMSIZE","0"
dbpf "FB48:ADC4:TRGPOS","4"
dbpf "FB48:ADC4:IRQENB","3"
dbpf "FB48:ADC4:START","1"
dbpf "FB49:ADC4:MEMSIZE","0"
dbpf "FB49:ADC4:TRGPOS","4"
dbpf "FB49:ADC4:IRQENB","3"
dbpf "FB49:ADC4:START","1"
dbpf "FB50:ADC4:MEMSIZE","0"
dbpf "FB50:ADC4:TRGPOS","4"
dbpf "FB50:ADC4:IRQENB","3"
dbpf "FB50:ADC4:START","1"
1Hzでトリガーをかけたときの動作の様子(WMV 2MB)
EPICSシーケンサを使って、waveformレコードを全部読み込み、平均値及び標準偏
差を計算させてみました。コードを以下に示します。
LR.st
R313でのアクセス可能なwaveformの長さが2048までの様なので(正確には分からないが、USHORTでこれ以上の長さにするとくたばる模様)、2048毎に読み出し、INDX
フィールドを変更する、という処理が必要です。また、横着をして読み出した時点で値のsumと自乗のsumを取っておいてあとで一括して引き算しようとしていますの
で、floatのままだと激しい桁落ちを起こしsqrtの中がマイナスにまでなってしまうので注意が必要です。また、数学関数はすべてexternal宣言しておかないと
何のエラーも警告もなく大嘘の計算をされるのでこちらも注意が必要です。
iocInitの後に
seq &LR, "USER=FB41"
seq &LR, "USER=FB42"
seq &LR, "USER=FB43"
seq &LR, "USER=FB44"
seq &LR, "USER=FB45"
seq &LR, "USER=FB46"
seq &LR, "USER=FB47"
seq &LR, "USER=FB48"
seq &LR, "USER=FB49"
seq &LR, "USER=FB50"
とします。
4チャンネル同時サンプルの
14ビットログレシオADCモジュール、18K07ボードの
のEPICSデバイスサポートおよびデータベースについて紹介しました。本ボードについてご興味のある方はより詳しい資料がありますので、飛山までご連絡ください。
Makoto Tobiyama
10/Jul/2010
Return to FB Home Page...