はじめに
TES(Transition Edge Sensor)は、X線などのエネルギーをとても高い精度で測るための検出器で、X線衛星や低温検出器の分野で使われています。
日本語だと、超伝導転移端センサーとも呼ばれることもあります。
TESの読み出し技術は、アイデア自体はかなりシンプルで、超伝導が極低温で抵抗0になる性質を利用します。低温で0ということは、ある程度温度が上がると普通の抵抗がある常伝導になる、ということです。超伝導と常伝導の境目では抵抗がこの温度にとても敏感なので、それを利用して電流の変化を読めば高い精度の温度計を作ることができる、という発想です。
TESを理解するためには、まずは電圧・電流と抵抗の関係を押さえて、温度で抵抗が変わると電流も変わるというところを見ていくのがよさそうです。
この記事ではもっとも基本的な抵抗回路から出発して、温度で抵抗が変わる回路を経由して、最終的にTESの基本回路を眺めることで、TESの仕組みをより深く理解することを目指します。
抵抗と電圧のもっとも基本的な回路
まずは、いちばん基本的な抵抗だけの回路から見ていきます。
回路に電圧をかけると電流が流れますが、その流れやすさを決めているのが抵抗です。
抵抗が大きいと電流は流れにくくなり、同じ電流を流すためにより大きな電圧が必要になります。
この関係を表しているのが、オームの法則
$$
V = IR
$$
です。ここで $V$ は電圧、$I$ は電流、$R$ は抵抗を表しています。
Schemdraw
import schemdraw
import schemdraw.elements as elm
with schemdraw.Drawing(fontsize=14) as d:
d.config(inches_per_unit=0.6)
# Note: for a vertical element (going up), loc="top" places the label
# on the LEFT side in world coordinates.
V = d.add(elm.SourceV().up().length(4).label("V", loc="top", ofst=0.15))
d.add(elm.Line().right().length(1.5))
d.add(elm.CurrentLabel(ofst=0.15).at(d.here).label("I"))
d.add(elm.Line().right().length(0.5))
d.add(elm.Resistor().right().length(3).label("R", loc="top"))
d.add(elm.Line().right().length(1.5))
d.add(elm.Line().down().length(4))
d.add(elm.Line().left().tox(V.start))
d.add(elm.Ground().at(V.start))
d.save("circuit1.png", dpi=150, transparent=False)
上のトグルにある通り、この回路図はPythonの
Schemdrawというやつで書きました。
Pythonのコードで回路記号を配置して、回路図を描くことができるライブラリです。
生成系AIとの相性も完璧で、例えばプロンプトで「この回路図を画像で出して」とだけ要求すると怪しい画像が生成される可能性が高いのですが、「Schemdrawのコードを書いて」とお願いすると叶う確率が上がります。
横軸を電流、縦軸を電圧として見ると、直線の傾きが抵抗 $R$ に対応します。
高校でも習う、回路の基本です。
温度で抵抗が変わる回路
次に、抵抗の値が一定ではなく温度によって変わる場合を考えてみます。
先ほどの回路では抵抗 $R$ はただの定数でしたが、ここでは右側の抵抗を $R(T)$ と書いて、温度 $T$ によって抵抗値が変わる素子として扱います。図中の $R_{\rm sh}$ は、回路全体に流れる電流を決めるために入れている固定抵抗です。
Schemdraw
import schemdraw
import schemdraw.elements as elm
with schemdraw.Drawing(fontsize=14) as d:
d.config(inches_per_unit=0.6)
Vb = d.add(elm.SourceV().up().length(4).label("Vb", loc="top", ofst=0.15))
d.add(elm.Line().right().length(0.8))
d.add(elm.CurrentLabel(ofst=0.15).at(d.here).label("I"))
d.add(elm.Line().right().length(0.3))
d.add(elm.Resistor().right().length(2.8).label("Rsh", loc="top"))
d.add(elm.Line().right().length(0.3))
d.add(elm.Dot())
# Note: for a downward element, loc="bottom" places the label
# on the RIGHT side in world coordinates.
d.add(elm.Resistor().down().length(4).label("R(T)", loc="bottom"))
d.add(elm.Line().left().tox(Vb.start))
d.add(elm.Ground().at(Vb.start))
d.save("circuit2.png", dpi=150, transparent=False)
このような回路だと、温度が変わるたびに $R(T)$ が変わって、その結果として回路に流れる電流も変わることになります。温度の変化が電流の変化として見えている、というわけです。
例えば、$R(T)$ が温度が上がるほど抵抗が大きくなる、という単純な関数だと上のようなグラフになります。実際のTESの抵抗はこのようにゆっくり直線的に変わるわけではないですが、まずはわかりやすい直線のモデルで考えてみます。
この図では、$R(T)$ の値をいくつか変えたときに、回路の電流と $R(T)$ にかかる電圧がどこで決まるのかを見ています。
青・赤・緑の直線は、それぞれの抵抗値に対する
$$
I = \frac{V}{R(T)}
$$
を表しています。黒い点線は電源電圧と直列抵抗によって決まるこの回路で取りうる電圧と電流の組み合わせで、よくロードラインと呼ばれているものです。
実際に回路が落ち着くのは、この2つの線が交わる点です。温度が上がって $R(T)$ が大きくなると交点は右下に動き、$R(T)$ にかかる電圧は大きくなりますが、回路を流れる電流は小さくなります。
TESの基本回路を見てみよう
TESカロリメーターの動作原理
さっきの回路で、温度によって抵抗が変わる素子を回路に入れると動作点が動くことを見てきました。TESでは、この「温度で抵抗が変わる」という性質を、超伝導から常伝導へ移るごく狭い領域で使います。光子などのエネルギーがTESに入ると、そのエネルギーは熱として吸収されてTESの温度が少しだけ上がります。このときTESは超伝導と常伝導のちょうど間の温度に置かれているので、わずかな温度変化でも抵抗が大きく変わります。

引用 : Mario De Lucia et al., “Transition Edge Sensors: Physics and Applications” Instruments 8(4), 47 (2024), Licensed under CC BY 4.0.
図の右側に描かれている曲線は、TESの抵抗が温度によって急激に変わる様子を表しています。赤い点で示された動作点は、超伝導でも常伝導でもない、そのちょうど途中のような場所にいます。ここに光子が入ってTESが少し温まると、動作点が曲線上を移動してTESの抵抗が変化します。
つまり、さっきの回路で見た温度が変わると $R(T)$ が変わるという話が、実際のTESでは非常に鋭い形で起こっている、というわけです。
Schemdraw
import schemdraw
import schemdraw.elements as elm
import matplotlib.patches as mpatches
# ── Step 1: schemdraw で主回路を描く ───────────────────────────────────────
with schemdraw.Drawing(fontsize=14) as d:
d.config(inches_per_unit=0.6)
# Current source (left branch)
Ib = d.add(elm.SourceI().up().length(5).label("Ib", loc="top", ofst=0.15))
d.add(elm.Line().right().length(0.5))
d.add(elm.CurrentLabel(ofst=0.15).at(d.here).label("I"))
d.add(elm.Line().right().length(0.5))
d.add(elm.Dot())
d.push() # save junction point
# Shunt branch
d.add(elm.Resistor().down().length(5).label("Rsh", loc="bottom"))
bot_R = d.here
d.add(elm.Dot())
d.add(elm.Line().left().tox(Ib.start))
d.add(elm.Ground().at(Ib.start))
# TES branch: L + R_TES (SQUID is magnetically coupled, NOT in series)
d.pop() # return to junction
d.add(elm.Line().right().length(3.0))
d.add(elm.Dot())
# Note: for a downward element, loc="top" places the label on the LEFT side
L_elem = d.add(elm.Inductor2().down().length(2.0).label("L", loc="top", ofst=0.15))
d.add(elm.Resistor().down().length(2.0).label("R_TES", loc="bottom"))
d.add(elm.Line().down().length(1.0))
d.add(elm.Line().left().tox(bot_R.x))
d.add(elm.Dot())
# SQUID output wire (the circle itself is drawn below with matplotlib)
Lx = float(L_elem.start.x)
L_mid = (float(L_elem.start.y) + float(L_elem.end.y)) / 2
r_sq = 0.42
sq_cx = Lx + 1.00 # place SQUID circle close to L
sq_cy = L_mid
d.add(elm.Line().at((sq_cx + r_sq, sq_cy)).right().length(0.9))
# ── Step 2: SQUID 円を matplotlib で重ね描き ──────────────────────────────
# After the with-block, d.fig.ax gives access to the underlying matplotlib Axes.
# Schemdraw and matplotlib share the same coordinate space (schemdraw units).
ax = d.fig.ax
# SQUID loop (white-filled circle so the output wire appears to exit cleanly)
ax.add_patch(mpatches.Circle(
(sq_cx, sq_cy), r_sq,
fill=True, facecolor="white", edgecolor="black", linewidth=1.5, zorder=5
))
# Josephson junctions (× symbols inside the loop)
for xj in [sq_cx - 0.15, sq_cx + 0.15]:
ax.text(xj, sq_cy, "×", ha="center", va="center",
fontsize=12, fontweight="bold", color="black", zorder=6)
# Labels
ax.text(sq_cx + r_sq + 0.95, sq_cy, "SQUID",
ha="left", va="center", fontsize=12, color="black", zorder=7)
ax.text(sq_cx, sq_cy + r_sq + 0.10, "magnetic coupling",
ha="center", va="bottom", fontsize=8.5, fontstyle="italic",
color="#555", zorder=8)
# Save via the underlying matplotlib Figure
d.fig.fig.savefig("circuit3.png", dpi=150, bbox_inches="tight", facecolor="white")
この図は、TESカロリメーターの読み出し回路をかなり単純化して描いたものです。
左側の $I_b$ はバイアス電流を流すための電流源で、中央の $R_{\rm sh}$ はシャント抵抗です。
シャント抵抗はTESと並列に入っている小さな抵抗で、TESにほぼ一定の電圧がかかるようにする役割を持っています。
ここで重要なのは、TESを電圧バイアスのような状態で使っているという点です。
TESにかかる電圧 $V_{\rm TES}$ はあまり変わらないで、TESの抵抗 $R_{\rm TES}$ が変わるとTESを流れる電流 $I_{\rm TES}$ が変わります。
$$
I_{\rm TES} \simeq \frac{V_{\rm TES}}{R_{\rm TES}}
$$
TESに光子が入ると、TESの温度が少し上がって転移領域にある $R_{\rm TES}$ が増加します。すると、ほぼ一定の電圧のもとでは $I_{\rm TES}$ が小さくなります。
この電流の変化を読み出すために使われるのがSQUIDです。TES電流が作るごく小さな磁束変化を、非常に高感度な増幅器で読み取っています。
また、TESの抵抗が増えると、ジュール発熱
$$
P_J = \frac{V_{\rm TES}^2}{R_{\rm TES}}
$$
は小さくなります。つまり、光子でTESが温まると回路側の発熱が自然に弱まり、TESを元の動作点へ戻そうとする効果が働きます。これを電熱フィードバックと呼びます。
この図は、TESにかかる電圧 $V_{\rm TES}$ と、TESを流れる電流 $I_{\rm TES}$ の関係を模式的に描いたものです。右側の緑の直線は、TESが完全に常伝導になっている領域を表しています。この領域では、TESは普通の抵抗のようにふるまうので、おおよそ
$$
I_{\rm TES} = \frac{V_{\rm TES}}{R_N}
$$
という関係になります。1番最初の回路で見たやつです。
左側の高電流側は、TESが超伝導に近い領域です。超伝導では抵抗が非常に小さいので、わずかな電圧でも大きな電流が流れやすくなります。
その間にある赤い曲線が、TESを使う上で一番重要な転移領域です。ここではTESが超伝導と常伝導のちょうど中間のような状態にあり、温度が少し変わるだけで抵抗が大きく変化します。
黒い点は、実際にTESを動かす動作点を表しています。TESはこの転移領域の途中に動作点を置くことで、光子が入ったときの小さな温度変化を、電流の変化として読み出せるようになります。
◇
この図で特徴的なのは、転移領域の曲線が右下がりになっていることです。これは、TESが温まって抵抗が大きくなると、ほぼ一定の電圧のもとで電流が小さくなって、その結果ジュール発熱も小さくなる、という電熱フィードバックの効果を表しています。
破線のロードラインは、このバイアス回路で取りうる電圧と電流の組み合わせを表したものです。実際の動作点は、TES自身のI-V特性とロードラインが交わる場所として決まります。
R_sh = 5 mΩにしていますが本当は1~3 mΩくらいです。ロードラインを見やすくするためにR_shの値をいじりました。本当はもっと急峻になっています。
この図は、TESに光子が入ったときに、TES電流がどのように変化するかを模式的に描いたものです。
光子が来る前は、TESは動作点で安定していて、電流もほぼ一定です。
図では、この通常時の電流を $1$ として規格化しています。
$t=0$ で光子がTESに入ると、そのエネルギーによってTESの温度が少し上がります。すると転移領域にある $R_{\rm TES}$ が増加し、ほぼ電圧バイアスされているTESでは電流 $I_{\rm TES}$ が下がります。そのため、光子が検出されると、電流は一度ストンと小さくなります。
その後、TESに入った熱は熱浴へ逃げていき、TESの温度は元の状態へ戻っていきます。それにともなって抵抗も元に戻り、電流もゆっくり元の値へ回復します。
図中の $\tau_{\rm eff}$ は、この回復の速さを表す有効時定数です。
つまり、TESでは光子のエネルギーを直接見ているというより、光子によって生じた小さな温度上昇を、抵抗変化に変え、さらに電流パルスとして読み出している、ということになります。
まとめ
私たちは、エネルギーなどの物理量を直接測定できるわけではありません。基本的には、電流か電圧を測ることによって間接的に求めます。

TESの入力回路とテブナン等価回路。Iwrin & HiltonのFigure 3より引用。
TESの回路は本来、豊富な話題を含んでいる複雑なものです。しかし、TESのアイデアがシンプルだったように、回路自体も本質は比較的シンプルなはずです。段階的に回路のレベルを上げて、いずれはIrwin & Hiltonの内容を理解できるように頑張ります。







