ZYNQ搭載 ADCボード「Cosmo-Z」>開発日記>2016年4月

2016年4月

MCAで得られたスペクトルが

2016.04.23

TFAと、ベースライン再生回路を使ったら、MCAで計測されたスペクトラムが綺麗になっていた。バックグラウンドを17時間半くらい計測。

Blrmca1

生の波形はこれ。

Blrmca2


そろそろMCAのソフトウェアも更新していかねば。

 

ベースライン回復回路

2016.4.22

ベースライン回復回路(Base Line Restorer)という回路を作っています。

こういうパルスの高さを計測する場合を考えてみます。

Blr1

0Vからのパルスの高さを図りたいのですが、交流結合していると、ベースラインがシフトしてしまいます。

Blr2

ベースラインがずれると、パルスの高さが減ってしまうわけです。

放射線の信号は不定期に入ってくるので、真の値から少し減った値(しかも毎回異なる)が計測されることになります。

これでは都合が悪いので、ベースライン回復回路というものが間に入ることになります。Knoll本とかによればこういう回路なのですが、

Blr3

このスイッチを入れる条件がどうもわかりませんでした。

先日、市販のBLRハイブリッドICの回路図を見つけ、ようやくわかりました。

sun

出力電圧が負になったときにスイッチをONにし、出力電圧が正の場合にはスイッチをOFFにすればよいのです。単純です。

つまり、出力が正の場合はCRの時定数が大きいのでゆるゆるにすべて通し、出力が負になったらスイッチを閉じてCを急速に充電し、0V付近にとどめるというわけです。

これをFPGA内のディジタル信号処理でやってみました。

Blr4

茶色が入力信号、緑が出力信号です。茶色の信号はTFAの出力で、0.1Vのバイアスが乗っていますが、BLRを通すとバイアスも消えます。

拡大すると、

Blr5

緑の線がちょこっとだけ持ち上がりますが、速やかに0Vに戻っています。

一方、台形波形整形回路の出力にBLRを通した場合は、

Blr6

一見、大丈夫なように見えますが・・・

Blr7


平らな部分でサグが出ています。時定数がある回路なので、正確な波形にはならないです。

sun

今回実装したBLR回路は、絵に描けば、ダイオードを使ったような簡単なものです。

Blr8

ほかにも、いろいろなアルゴリズムがあるようです。この回路はShaperの後ろではなくTFAの後ろに入れるのが正しいのではないかと思います。

 

フォトマル用のプリアンプを入れてみた

2016.4.19

最近のCosmo-Zは、入力のアンチエイリアシングフィルタの遮断周波数を60MHzに上げたので、高周波特性が良くなりました。

しかし、その分、幅の鋭いパルスの計測が難しくなりました。

例えば、プラスチックシンチレータとフォトマルから出てくる信号は数nsくらいの幅しかないそうなのですが、この鋭いパルスをCosmo-Zで受け取ると何が何だかわからない結果となります。

sun

現在、特電でCosmo-Zの実験に使っているβ線、γ線、ミューオン用の検出器はこんな感じです。

Pmt

上の写真の真ん中にある円柱の中に、プラスチックシンチレータとフォトマルが入っています。いままではフォトマルからCosmo-Zまで直結していたので信号レベルが弱くて困っていました。

今回、フォトマルの下にある四角い箱の中にアンプを入れてみました。フォトマルの近くにアンプがあれば、ノイズの影響を受けにくいと考えたからです。

まず、フォトマルからCosmo-Zへ直結した場合の波形。

Direct


幅がだいたい30ns、電圧も30mV程度でした。

酷い時には信号が1クロック分しかないなど、これでは信号処理のしようがありません。

sun

ですが、この信号をCosmo-Zの基板上のゲインをいじって、単純に増幅すると、ケーブルがノイズをひろっているらしくて、S/Nがあまり向上しないのです。

そこで、フォトマルの近くにアンプを入れました。

結果

Amplifier

直結した場合に比べて波形がはっきりしてきました。

幅が50nsくらい、高さが250mV程度です。

できればパルスストレッチャーを入れて、もう少し良く見えるようにしたいところです。

この波形ならMCAも使えるようです。

Mca

さあ、意味のあるデータが取れればよいのですが・・

 

ピークホールド回路

2016.4.18

Cosmo-Zを、フルディジタルな放射線計測用信号処理システム(DSP)とするため、FPGAの開発を続けています。

今日はピーク・ホールド(Peak Hold)回路を作りました。ピーク・ホールド回路とは、その名のとおり最大値を保持する回路です。

Peakhold

トリガが入っている間の最大値(あるいは最小値)を保持します。なお、茶色の線が入力信号。赤の線がピークホールド出力。灰色の線がトリガ期間を示します。

いろいろな高さの波形が入ったときの動作は、こんな感じです。

Peakhold_2

この波形は、FPGA内で作り出したテスト波形でしたが、実際にプラスチックシンチレータとフォトマルをつないで、バックグラウンドの波形でやってみました。

Peakhold2

横の1ポイントは12.5nsに相当します。ちゃんとピークをホールドしてくれているのがわかります。

Cosmo-Zのデジタルパルス整形機能がだいたいできた

2016.4.13

ZYNQ搭載のADCボード「Cosmo-Z」に、放射線計測用のデジタルパルス整形機能がだいたいできてきました。

現在のCosmo-Zの内部構造はだいたいこのような感じになりました。

 

Cosmozstr

入力された信号にオフセットとゲインと遅延を与え、TFAでパルスを鋭くしてCFDでタイミングを確定させ、台形整形回路で弾道欠損を補正して波形モニタで取るという感じです。

ただ、普通はCFDの出力をTrapezoidal Shaperに入れることはしないので、このデータパスについては、まだまだ検討の余地はありそうです。

 

任意のチャネルでRise/Fallのトリガもかけられるようになりました。トリガレベルの設定は画面上でマウスでクリックすればよいので簡単です。

Cosmozdsp

TFAやCFDの設定も、Windows上で設定できるようになったので、とても操作が楽になりました。下の図では緑が入力信号、青がTFA出力、茶色がCFD出力です。

Cosmozdspctrl

台形型波形整形回路も無事に動くようになりました。

Cosmoztrapezoid

これで、Cosmo-Zのディジタル波形整形回路はひとまず完成です。

次はプログラマブル・ゲート・ジェネレータを作りたいと思います。

 

TFAのディジタル化

2016.4.9

放射線の計測、特にゲルマニウム検出器(HPGe)などでは、TFA(Timing Filter Amplifier)という回路がよく使われます。TFAというのは、入ってきたパルスの幅を鋭くしてタイミングをはっきりさせるためのもので、市販のモジュールではORTEC社の474などが有名です。

Ortec474

(ORTECのカタログのPDFより引用)

このモジュールでは、ゲインの調整、積分時定数の調整、微分時定数の調整、ポールゼロの調整、反転・非反転の切り替えなどができます。微分・積分の時定数は、なし~500nsまで段階的に調整できるようです。

そもそもTFAはどんな回路かというと、

Tfa1

このような、CR微分回路とRC微分回路をくっつけたものです。間にバッファが入っていて、インピーダンスの隔離ができています。

これをディジタル回路で実現しようとしているのですが、昨日は微分回路のディジタルフィルタ化ができたので、今日は積分回路をディジタル化しようとしています。

sun

RCの積分回路をディジタルで実現すると、

y[k] = by[k-1] + a[k] ・・・ (1)

ただし、a=1/(1+τ)、b=τ/(1+τ)、τ=CR/T ※T=サンプリング周波数

で実現できます。つまり、1個前の出力結果と、新しい入力を適当な比で足し合わせたものになります。

 

Tfa2_3

なお、回路全体にゲインを持たせたい場合は、aの代わりにa×Gにすればよいでしょう。

sun

実際にFPGAに実装して、やってみました。

こんなコントロールパネルから、時定数やゲインを滑らかに変えられるようにしました。

Tfa3

まず、微分の時定数が0.5usで積分の時定数が0(積分なし)の場合。微分のみの出力が得られています。

Tfa0500

sun

次は微分が0.5us、積分も0.5usの場合。積分はLPFなので出力振幅が減ってしまうので、ゲインを2倍にしています。なんとなくパルスが広がったのがわかります。

Tfa0505

今度は積分の時定数を1.5usにした場合。

Tfa0515

せっかく鋭くしたパルスを広げてどうするのかと言われそうですが、あくまでも動作テストなので。

sun

最後に、TFAとCFD(Constant Fraction Discriminator)を通した波形を示します。

Tfacfd_3


データの点に■を付けてみました。最初の10個くらいの部分が重要なのがわかります。緑の波形が乳慮kう波形。青がTFA出力、茶色がCFDの出力です。

入力された長いテイルの波形が鋭くなって、ゼロクロスによってタイミングがはっきりと確定しています。

このように、TFA+CFDという、放射線計測でよく使われる波形整形回路がディジタル化できました。

Tfacfd_4


sun

ディジタルフィルタってのは実際に作ってみると面白いですね。パラメータを滑らかに変更できるのが最高です。

CR微分回路のディジタルフィルタ化

2016.4.8

放射線計測などの分野では、指数関数的に減衰するパルスを扱うことがあります。減衰の時定数が長いと、1回目のパルスの尾の部分で2回目のパルスが入る(パイルアップするという)ってパルス高さの正確な測定ができなくなるので、CR微分回路とRC積分回路を使ってパルスを鋭く整形します。

まずは、次の図の普通のCR微分回路を考えてみます。

Cr1

入力がステップ関数であれば、出力は指数関数的に減衰する波形となります。

Cr2

ですが、指数関数の減衰というのは意外と遅いので、もっと鋭くしたくなります。

実際には放射線のパルスは(電荷を収集する時間がゼロではないので)瞬時には立ち上がらず、プリアンプの前に微分回路が入っていることなどが多いので、回路への入力時点で指数関数的に減衰するカーブになっています。

もともと減衰している信号を微分回路に入れると、出力にはアンダーシュートが生じてしまいます。

 

Cr3_2

そこで、微分回路のコンデンサに並列に補償抵抗を入れます。これをRpzとします。

Cr4


詳しい理由は後述しますが、Rpzをうまく設定するとアンダーシュートが消えるのです!これがポールゼロ補償というものです。

sun

なぜアンダーシュートが生じるかと、どうすればアンダーシュートが消えるかは、ラプラス変換で考えるとわかります。CR微分回路の伝達関数は、

sτ/(1+sτ) ・・・ (1)

です。時定数τ1と時定数τ2の微分回路を2回通すと、伝達関数は

s^2τ_1τ_2/{(1+sτ_1)(1+sτ_2)} ・・・ (2)

となって、ポールが2個出てきます。この伝達関数は指数関数的には減衰しません。

 

ところで、コンデンサと並列にポールゼロ補償抵抗Rpzを追加した回路

Cr4

の伝達関数は、

τ(1+sRpzC1)/{(RpzC1sτ+RpzC1+τ)} ・・・ (3)

ですが、この回路の前に時定数τ2を持つ、別の微分回路があるならば、全体の伝達関数は、

τ1(1+sRpzC1)sτ2/{(1+sτ2)(RpzC1sτ1+RpzC1+τ1)} ・・・ (4)

となります。ここでτ1は上の図の微分回路の時定数=CRで、τ2は入力信号の減衰の時定数です。

RpzとCで作られる時定数CRpzをτ2と等しくなるように設定すると、式(4)は簡略化されて、

s/{s+(τ1+τ2)/τ1τ2} ・・・ (5)

となります。つまり、s/(s+k)の形になるので、指数関数の減衰波形となるわけです。

時間軸的に考えれば、CRだけだとアンダーシュートしてしまいますが、RpzとRの抵抗分圧によって減衰された入力波形を足し合わせることによって、アンダーシュートしないように持ち上げているともいえます。

sun

このCR微分回路の伝達関数をZ変換を使って表現すると、

y[k]= x[k]- (1-τpz )×x[k-1]+(1-τ-τpz )×y[k-1] ・・・ (5)

となります。

※τ=T/CR、τpz=T/(CRpz )で、Tはサンプリング周期

図で表すとこうなります。

Cr5
つまり、入ってきた信号から、1クロック遅らせた信号と(1-τpz)を掛けたものを引き、出力に(1-τ-τpz)を掛けたものを1クロック遅らせて足します。

わかりにくいかもしれませんが、手を動かして計算すれば理解できるでしょう。

sun

これを実際にFPGAに実装して試してみました。

まず、入力信号を時定数τ=0.5usの微分回路に通した場合の図をご覧ください。緑が入力信号で、茶色が出力信号です。

Cr_tau05

確かにパルスは0.5usくらいで減衰して、出力信号は緑の入力信号に比べて鋭くなりましたが、派手なアンダーシュートを生じています。ここではτpz=10usという大きな値に設定しているのでRpzがほぼ機能していないような状態だからです。

sun

さて、τpz=2.2usにしてみると、だいぶん、アンダーシュートは減りました。

Cr_taupz22

sun

もう少し減らして、τpz=1.4usくらにすると、アンダーシュートは全くなくなりました。

Cr_taupz14

sun

さらにτpzを減らして1.0usにすると、アンダーシュートは出ませんが、尾を長く引いてしまいます。

Cr_taupz10

すなわち、τpzには最適な値があるというわけです。

sun

微分回路の時定数を滑らかに変えることができるというのは、ディジタルフィルタならではの特長と言えます。

Cosmo-ZのWindows版コントロールアプリでは、スクロールバーで時定数を滑らかに設定できるようにしました。

Cr8


例えば、τ=0.1us、τpz=1.4usとして整形すると、入力パルスはこんなに鋭くなります。これならパイルアップにも強くなるでしょう。

Cr6

sun

ディジタル微分回路の各部分がどういう動作をしているかは、次の図をご覧ください。

Cr7

緑が入力信号、紫が1つ目の減算器の出力(つまり1つ前との差分)です。青が乗算器の出力で、茶色が最終的な出力です。

1つ前との差分(紫)と、現在の出力値(茶)係数を乗じて足したもの(青)を次の出力とするという動作をしています。

Constant Fraction Discriminator(CFD)の実装

2016.4.7

Cosmo-Zに放射線計測用の信号処理回路を実装しています。

ディジタル版のTFAとCFDと波形整形回路を作ろうとしているのですが、まずはCFDから作り始めています。

CFDというのは、入ってきたパルス(指数関数で減衰する波形)でトリガをかけようとした際に、パルスの高さによってトリガが発生する時刻が変わってしまうことを防ぐための回路です。

Whatiscfd

放射線の波形は、上の図のように、有限の時間で立ち上がったあと、指数関数的に減衰します。放射線のエネルギーによってピークの高さが違うのですが、立ち上がりや減衰の時定数は同じです。

このような波形に対してレベルでトリガをかけると、ピークの高さによってトリガがかかる時刻がずれてしまいます。

そのため、何時何分何ナノ秒でそのイベントが起きたかというのが、正確ではなくなってしまいます。

この問題に対処するのがConstant Fraction Discriminator(CFD)という回路です。

CFDの動作は簡単で、ある入力信号を減衰させた波形から、入力信号を一定時間遅延させた波形を引く、というものです。

Whatiscfd2

 

負のパルスが入ると、出力はマイナスからプラスに転じるタイミングがあるのですが、そのタイミングは元の信号の高さに関わらず常に一定になるというのです。

実際にFPGAに実装して、試してみました。

下の図で、緑の波形が元の入力波形です。これは実際のシンチレータからの信号ではなく、FPGAの中で作り出したテスト波形です。茶色の波形が、CFDの出力です。遅延時間は5クロック(63ns)、減衰は×0.5にしています。

Cfd_1_2

一度波形が下がったあと、急激に立ち上がって、ゼロをクロスしているのがわかります。

いくつもの波形を重ねて描いてみると・・・

Cfd_2_2

たしかに、ピークの高さに関わらず、同じ場所でクロスしているような気がします。

Cfd_3

うむ。完璧ですね。

さらに、ゼロクロスする前後の点の値から計算すれば、ゼロクロスする時刻を、クロック周期以上の精度で良く求められるはずです。

Cosmo-ZのADCクロックは最高125MHzなので、4nsの時間分解能ですが、CFDを使えば1nsくらいでイベントが生じた時刻を推測できるかもしれません。

 

Cosmo-Z winでFFT機能

2016.4.2

Cosmo-ZのWindows版ネイティブコントロールアプリでFFTができるようにした。

Cszwin0402_2

FFTの計算はZYNQのPS(CPU)でやって、TCP/IPで結果を転送している。

画像の描画はホストPCで行う。

4096ポイントのFFTなら2chで毎秒30回程度表示できる。

一応、ROI(Region of Interest)を設定して、好きな部分を拡大できるようにしている。

 


© 2015 TokushuDenshiKairo Inc. All rights reserved