物理学実験
単一光子や電子の実験がしてみたいので、とりあえずそれに繋がりそうなことを積み重ねていく。
この前Kindle Unlimitedでどうせ大した書籍がないんだろうなと思って探したら、結構良さげなのを発見。
Kindle Unlimitedはもっと検索機能を充実させてほしい。
発見したのは「実践! 腑に落ちる放射線の計測 : ~作って学ぶスペクトロメータ~ 前編「放射線の基礎と基本設計」 Kindle版 前川立行 (著)」
この本すごく良さそう。ということで、この本に基づいて、まずは作ることを目指して作業を積み重ねていくことにした。
Fritzingのインストール
この本ではユニバーサル基板上に回路を実装するようで、ユニバーサル基板用回路図エディタ「marmelo」を紹介していた。だが、これはWindowsでしか使えないようなので、Ubuntu 22.04.5 LTSで使えるユニバーサル基板用回路図エディタを探したところ「Fritzing」なるものを発見した。まずは、インストールしてみる。
# fritzingのインストール
sudo apt install fritzing
Fritzingで回路図作成
の図5-14の回路図を作成していく
Fritzingの起動
# Fritzingの起動
fritzing
(当時の感想:起動しても初めて使うので、全然使い方がわからない。まずはGUIを見て使い方を推測してみる。
- GUI上のタブに回路図なるものを発見、選択してみる。
- 回路図エディタが起動したようだ。
- どうやって、コンデンサなどのシンボルを配置するのだろう?
- GUI右側にパーツ > CORE > Basicに抵抗、セラミックコンデンサ、タンタルコンデンサ、電解コンデンサなどのイラストのアイコンがあるので、それを回路図エディタにドラッグ&ドロップしたところ、回路図にシンボルが配置された。
- グランドはどこだろう?
- パーツ > CORE > 回路図表示にあった。回路図に配置する。
- 配線はどうやるのだろう?
- とりあえずシンボルの端点からドラッグ、別のシンボルの端点にドロップでできた
とりあえず、これで回路図作成のキホンは抑えたっぽい)
回路図の保存・再起動時保存した回路図を開く
とりあえず、回路図の作成方法はわかったので、保存して、プログラム停止して再開してみる
GUIのメニューバーに「ファイル」メニューがあったので、後は他のプログラムと同じように保存、開くができるようだ。
フォトダイオードからの信号取り出し部分(回路図)
フォトダイオードからの信号取り出し部分をFritzingで作成した結果のスクリーンショット
ここの部分の回路は何を考えて設計されたのか現時点では全然わからないので勉強する必要がある
フォトダイオードからの信号取り出し部分(回路の勉強)
まずは「実践! 腑に落ちる放射線の計測 : ~作って学ぶスペクトロメータ~ 前編「放射線の基礎と基本設計」 Kindle版 前川立行 (著)」の 92ページの◆フォトダイオードの等価回路動作というセクションから詳細に読んでいく
フォトダイオードの等価回路
「実践! 腑に落ちる放射線の計測 : ~作って学ぶスペクトロメータ~ 前編「放射線の基礎と基本設計」 Kindle版 前川立行 (著)」の 92ページの図4-3 cをLTSpiceを使って自分用に焼き直した
フォトダイオードの等価回路
覚えるべきこと
等価回路図の各要素の実体
フォトダイオードから発生する電流の時間波形概算
フォトダイオードの等価回路の電流源からの波形を模擬したいのでそれを概算したい。
※本と違ってかなり簡略化しているし、結果も違うが、より簡易的な考え方を抑えておきたいので自分で理解しやすいように変更した。本の95ページ〜96ページを参考にした。
γ線の入射によって発生したシンチレーション光パルスを受けたフォトダイオードが出力するパルス信号がどんなものか推測する
1回のシンチレーションパルスによる電荷量を算出
- ・CsI(Tl)の発光量と入射するγ線から光子数を算出する
CsI(Tl)の発光量=56000(photons/MeV)
想定しているγ線は662keV
光電吸収(全エネルギー吸収)により、56000 x 0.662 = 37072個の光子が発生 - ・シンチレーター内部の光子数の損失を算出する(フォトダイオードに入射する高指数を算出)
特にこれといった根拠はないがフォトダイオードの光電面に入射するのは
発生した光子数の50%とする 37072 x 0.5 = 18536個の光子が入射 - ・フォトダイオードの量子効率から光子が電子・正孔対数を算出する
特にこれといった根拠はないがフォトダイオードの量子効率は75%とする
18536 x 0.75 = 13902 - ・電子・正孔対数から電荷量を算出する
電子1つあたりの電荷は1.602E-19[C]なので
1.602E-19 x 13902 = 2.227e-15 [C]
1回のシンチレーションパルスで発生する電荷量の時間分布を算出
・CsI(Tl)の発光は680nsecでの指数関数減衰が支配的なので、大雑把に矩形パルスとして
Q = I Δt ⇛ I = Q/Δt = 2.227e-15 / 680e-9 = 3.275e-9 [A]と大まかに考える
(ホントは全然違う算出、わかりやすさ優先)
フォトダイオードのPN接合容量と逆バイアス電圧の関係について
まだ、後段の回路は出てきてないが、ノイズに関係する量となるフォトダイオードのPN接合容量は
あるていど逆バイアス電圧でコントロールできるようだ。
どういうことかというと
逆バイアス電圧が高い→PN接合の空乏層厚さが増える→平行平板コンデンサとしてみたとき電極間距離=PN接合の空某層厚さ、なので容量が減る
ということらしい。参考までに平行平板コンデンサの式を記載する。
フォトダイオードのバイアス抵抗値の選定
ジョンソンノイズ(熱雑音)や分圧ノイズ電圧に関する記述が135ページにあったのだが、どうも納得できないので
あたりをじっくりと勉強してみる
UbuntuでLTSpiceを使えるようにセットアップ
を参考にセットアップした。
wineのインストール
sudo apt install wine-stable
LT Spiceのダウンロード
cd /tmp
#すでにサポートは終了しているバージョンだけど、しかたない
wget https://ltspice.analog.com/software/LTspice64.exe
LT Spiceのインストール
wine LTspice64.exe
#インストールが終わったらインストーラー削除
rm LTspice64.exe
LT Spiceの実行
wine ~/.wine/drive_c/Program\ Files/LTC/LTspiceXVII/XVIIx64.exe
起動できた
LT Spiceで熱雑音のシミュレート
を参考に実行してみる。
手順1:こんな感じの回路をLTSpiceで作成する
電源だけの回路
手順2:電源に直列抵抗を設定する
電源を右クリックすると電源の直列抵抗値を入力できる
Series Resistance[Ω]がその欄
右クリックして直列抵抗を1kΩに設定
手順3:ノイズシミュレーションの設定をする
メニューバー>Simulate>Edit Simulation Cmd をクリックすると、シミュレーションの設定画面が出てくる
その際にタブ Noiseを選択すると下の画像のような設定画面がでてくる
こんな感じで設定する。着目すべきはInputとOutputの項目、下の図で意味を推測する
*
注意点は
赤は測定したい箇所のnet labelを指定するであろうこと
緑はノイズを発生させる電源名を指定するであろうこと*
手順4:ノイズシミュレーションする
メニューバー>Simulate>Runをクリック でシミュレーション開始
シミュレーション結果、ジョンソンノイズの式を満たしていることがわかる
ジョンソンノイズの式
としてノイズ電圧を手計算すると
結局何がわかったか
熱雑音源としての抵抗は電圧源のシンボルを配置しなくちゃならない。
ちょっとまてよ?
今回設定した限りじゃ、1電源にしか設定してない。どういうことか?
複数の抵抗がノイズ源となったときのシミュレーションできないのでは?
このあと、もう少し動作について掘り下げる
LT Spiceで熱雑音のノイズシミュレーションを少し掘り下げる
ノイズシミュレーションの特性を掘り下げるため以下のような回路を組んでシミュレーションした
PARA_Rでのノイズの大きさと、各抵抗からの熱雑音の寄与
このような回路を組んでPARA_Rの点でのノイズの大きさをシミュレーションした結果、
回路図上のそれぞれの抵抗をクリックすると、シミュレーション結果にグラフが追加される。
推測するに、それぞれの抵抗のPARA_Rの点でのノイズの大きさの寄与が示されている。
実際抵抗からの電源の二乗の和はPARA_Rのノイズの二乗と等しくなっている。
また、抵抗R1,R2のPARA_Rのノイズの大きさへの寄与はほとんど0のはずで、実際それを反映している。
ということで、ノイズシミュレーションでは、各抵抗をノイズ源としたときにノイズの大きさを評価したい場所を指定すると、その場所でのノイズと各抵抗からのノイズの寄与が与えられることがわかる
OUT_OPAのノイズの大きさと各抵抗からの熱雑音の寄与
まあ、ここまで、ジョンソンノイズの勉強をしたが、結局135ページに記述しているジョンソンノイズに関する記述は納得できなかった。
フォトダイオードの暗電流
使用するフォトダイオードはS6775
1ページ目に暗電流の温度係数(倍/℃)がある。
暗電流の温度係数は1.15なので基準の温度からのズレを
暗電流-電圧特性のグラフから20℃のとき200pAとしたときのグラフを作成してみる
ついでにログスケールと実際のログの対応を忘れてしまったので、同時に描画
左はログスケールで値をそのまま、右は値を常用対数にしたものをリニアスケールで描画したもの
import matplotlib.pyplot as plt
import numpy as np
T_list = np.arange(-20,80,1)
T_CID = 1.15 # 暗電流の温度係数
T20 = 200E-12 #200pA - 20℃
T0 = T20 * T_CID**(-20) #?A - 0℃
I_list = list(map(lambda T: T0*1.15**T, T_list))
fig , axes = plt.subplots(1,2,figsize=[8,4])
axes[0].plot(T_list, I_list)
axes[0].set_yscale('log')
axes[0].set_xlabel('Temperature [℃]')
axes[0].set_ylabel('Dark current [A]')
axes[0].set_title('S6775:Dark current - Temperature')
logI_list = list(map(lambda I:np.log10(I), I_list))
axes[1].plot(T_list, logI_list)
axes[1].set_xlabel('Temperature [℃]')
axes[1].set_ylabel('Dark current Log10')
axes[1].set_title('S6775:Dark current Log10 - Temperature')
fig.tight_layout()
さて、フォトダイオードは50℃くらいまでの環境まで使うことを想定すると
T_CID = 1.15 # 暗電流の温度係数
T20 = 200E-12 #200pA - 20℃
T0 = T20 * T_CID**(-20) #?A - 0℃
T = 50
I = T0*1.15**T
print(I)
の結果13nAくらい暗電流が流れる。
理由は今のところ理解できないが、フォトダイオードの逆バイアス電圧を印加する電源からのインピーダンスをできるだけ高くしたほうが良いらしいので、50℃での暗電流と逆バイアス抵抗による電圧降下が1%程度となるように1MΩとする。
回路図にオペアンプを配置したいが、いい感じのシンボルがない
fritzingで回路図にオペアンプを配置したいがいい感じのシンボルがない
自分でパーツを作成する方法を調べる
とりあえず
の動画を見るのが良さそう