[KEKB Bunch Feedback Group]

株式会社デジテックス研究所社製12ビット4チャンネルAD変換ボード17K82用EPICS Device Supportの製作(Japanese)


by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ

警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。


If you need contact with the author, please E-mail makoto.tobiyama@kek.jp.
目次

1.はじめに

17K82はシングルターンBPM読み出しなどに適した、4チャンネル同時サンプルの 12ビットADCモジュールで、実績のある17K76モジュールからAD変換等の仕様を引き継ぎながら、トリガー条件設定あるいはメモリー長の設定等、機能を大幅に向上させたものです。。メモリー長は各チャンネル最大256kワードですが、 VMEバスからの設定で、2048、4096、8192、16384、32768、65536、131072、262144と 切り替えることが出来ます。また、データ取得ポイントを、外部トリガーに対して 0%(トリガーポイントから始まる)、12.5%、25%、37.5%、50%、67.5%、75%、 87.5%に設定することが出来ます。最大サンプリングスピードは2MHzです。

2.VMEバスレジスタ

17K76ボードのI/Oマップは以下の通りです。
アドレスWrite/Readデータ
313029282726252423222120191817161514131211109876543210
0x**(**00)00000(R/W)****CH3:ADデータ****CH1:ADデータ
****Ch3****CH1
0x**(**00)1FFC****CH3:ここまで(2kワード時)****CH1:2k
****Ch3****CH1
0x**(**00)FFFFC****CH3:ここまで(256kワード時)****CH1:256k
0x**(**01)00000(R/W)****CH4:ADデータ****CH2:ADデータ
****CH4****CH2
0x**(**01)1FFC****CH4:ここまで(2kワード時)****CH2:2k
****CH4****CH2
0x**(**01)FFFFC****CH4:ここまで(256kワード時)****CH2:256k
0x**(**10)*****R/W*コントロール(W)/ステータス(R)
0x**(**11)*****R*トリガポインタレジスタ(R)

ADCのデータフォーマットは、
入力電圧ディジタル出力
(MSB)(LSB)
+1.25V0000111111111111
0V0000100000000000
-1.25V0000000000000000

です。コントロール・ステータスレジスタのフォーマットは

3.EPICS環境

本デバイスサポートは、EPICS R313改訂版で開発したものです。EPICSそのものに対する説明、入門出家入道遁世については専門家に帰依するなり、コントロールグループのページをご参照なさるなり、御勝手に。動作はForce PPC750でのみ確認しています。A32/D32アクセスなのでForce PPC603ではきっと動作しません。

4.コードの概要

コードを以下に示します。 ADCデータの読み込みは、waveformレコードで要素数524228、データタイプが shortのものを2つ用意し、CH1、CH3を同時に 1つめのwaveform(signal 0)に(前半CH1、後半CH3)で 記録します。なお、データ長が256kワード より小さい時はその途中までしか記録しませんが、CH1とCH3の区切りは同じ場所です。

最初にメモリー書き込みが終了しているか(bit2が1か)、あるいは読み取り状態になっているか(bit0が0)かを判断します。どちらも満たされない場合はエラーで読み取りは行いません。

このボードはリングメモリーになっていますので、デバイスサポート内で、ストップアドレス、およびトリガポインタをもとにデータの並べ替えまでを行っています。このため、waveformになった段階ではarrayの先頭が常に一番古いデータとなります。トリガポイントについては、設定値からユーザーが換算し直してください。

なお、このwaveformレコードのレコード長は大変長大で今のところchannel accessでは直接読めません。データの取り出しは読みとれる長さ(2048)のcompact subarrayをつかい、INDXフィールドを変えながら順次読みとることになります

dbdファイルの中で次のように定義します。

device(bo,VME_IO,devBo17k82,"V17K82")
device(longin,VME_IO,devLi17k82,"V17K82")
device(longout,VME_IO,devLo17k82,"V17K82")
device(mbbiDirect,VME_IO,devMbbi17k82,"V17K82")
device(waveform,VME_IO,devWf17k82,"V17K82")

初期化ファイルはdev17k82Cnfigで、ベースアドレスが0x23000000で1枚使うとすると、

dev17k82Config(1,0x23000000)

の様に指定します。なお、このボードは1枚で2Mバイトもの領域を占有しますので、 他のボードと干渉しないよう特段の注意が必要です。

5.EPICSデータベースサンプル

サンプルファイルは以下を参照してください。

6.スタートアップファイルサンプル

1枚の17K82ボードを使用する時のスタートアップファイル(の関係部分)は次のようになります。
dbLoadRecords("fbppcApp/Db/FB_ADC2.db","USER=FBH: , CHAN=C0")

dev17k82Config(1,0x23000000)

iocInit

7.Delphiを使ったコントロール

デバッグ用にADC制御、データ表示ソフトをDelphi 6で作りました。

trigger position、memory sizeを選び、Trigger SourceをexternalにしてTrigger Enableにします。この場合、トリガーは50%、memory sizeは256にしました。Triggerが入るまでは、ADCはwait状態です。なお、Clockは100kHzです(RF/5120)。

triggerが入ると、AD変換が終わるまでTrigger Busy、またADCもwait状態です。なお、exampleのデータベースですと、statusのscanは1秒周期なので、256kサイズでなければこの状態を見ることはまずなく、すぐにAD終了後の次の画面になります。

AD変換が終了すると、AD変換完了画面になります。まだ、ADCからIOCへのデータ転送は行っていません。

Read ADCボタンをクリックすると、

  1. Triggerをdisableにし
  2. はじめにFBH:ADC4:CH1CH3のwaveformをプロセスします。これにより、ADCからwaveformへデータが転送されます。このとき、同時にデバイスサポート内でデータの並べ替えも行います。
  3. FBH:ADC4:CH1CH3のデータをCompact subarray FBH:ADC4:CH1およびFBH:ADC4:CH3のINDXフィールドを0から2048ステップでメモリーサイズまで変えながらcompact subarrayに移し替え、それをPC側で読み出します。
  4. 以上が終われば今度はFBH:ADC4:CH2CH4のwaveformをプロセスし、同じようにCH2およびCH4を読み出します。

結果を表示します。

8.おわりに

4チャンネル同時サンプルの 12ビットADCモジュール、17K82ボードの のEPICSデバイスサポートおよびデータベースについて紹介しました。本ボードについてご興味のある方はより詳しい資料がありますので、飛山までご連絡ください。
Makoto Tobiyama
29/Aug/2003

Return to FB Home Page...