AIDT 온디바이스 STEM 초신성 중성미자 검출 액체 아르곤 시분해 TPC 드래프트 전기장 안정화 서보 제어기

음극 수십 kV 고전압 리플 억제, 전하 수명 드리프트 보정, 이온 피드백 제어, 10,000Hz C# 엔진

1. 개요

우주 초신성 폭발(Supernova) 시 방출되는 방대한 양의 중성미자(Neutrino)를 포착하는 액체 아르곤 시분해 투영 챔버(Liquid Argon Time Projection Chamber, LArTPC)는 현대 입자물리학 및 우주론 연구의 정점입니다. 중성미자가 액체 아르곤 원자핵과 충돌할 때 발생하는 전리 전자(Ionization Electrons)는 수 미터에 달하는 표류 영역(Drift Region)을 가로질러 양극 감지 와이어 평면(Anode Plane)으로 이동합니다. 이때 500 V/cm에 달하는 균일한 표류 전기장(Drift Electric Field)을 형성하기 위해 음극 캐소드에는 -180 kV에 달하는 초고전압이 인가됩니다. 그러나 고전압 전원 장치의 스위칭 리플, 극저온 액체 아르곤 내 대류 유동 및 미량의 전기음성도 불순물(산소, 수분)에 의한 전자 포획(Electron Attenuation)은 전자 도달 시간 및 전하량 재구성에 치명적인 왜곡을 초래합니다. 본 고에서는 10,000Hz 주기로 전계 불균일도를 실시간 보정하고 전자 수명 감쇠 계수를 적응적으로 복원하는 0-Alloc C# 엔진을 구현합니다.

2. 수학적 모델링 및 지배 방정식

표류 거리 \(z\)와 표류 속도 \(v_d(E, T)\)에 따른 표류 시간 \(t_{drift} = z / v_d\) 및 전리 전자 수명 \(\tau_e\)에 의한 생존 전하량 감쇠 방정식은 다음과 같습니다:

\[ Q(t) = Q_0 \exp\left( - \frac{t_{drift}}{\tau_e} \right) = Q_0 \exp\left( - \frac{z}{v_d(E_0 + \Delta E(t)) \cdot \tau_e(t)} \right) \]

전기장 왜곡 \(\Delta E(z, t)\)과 공간 전하(Space Charge Effect) 밀도 \(\rho_{ion}(z, t)\)에 관한 1차원 포아송 방정식은 다음과 같습니다:

\[ \frac{d^2 \Phi}{dz^2} = - \frac{\rho_{ion}(z, t)}{\varepsilon_{LAr}\varepsilon_0}, \quad E(z, t) = - \frac{d\Phi}{dz} \]

음극 전압 리플 \(\delta V_c(t)\) 억제를 위한 고속 피드포워드 동적 제어 전압 \(u_{comp}(t)\) 및 전달함수 \(G_c(s)\)는 다음과 같습니다:

\[ u_{comp}(t) = - K_p \delta V_c(t) - K_d \frac{d \delta V_c}{dt} - K_i \int_0^t \delta V_c(\tau) d\tau \]

최종 수신 전하량 교정 팩터 \(\eta_{cal}(z, t)\)는 다음과 같이 닫힌 형태로 계산됩니다:

\[ \eta_{cal}(z, t) = \exp\left( \int_0^z \frac{dz'}{v_d(E(z', t)) \cdot \tau_e(t)} \right) \]

3. 실시간 C# 서보 제어기 구현

다음은 음극 고전압 리플과 공간전하 왜곡을 마이크로초 단위로 추종하여 전하량을 보정하는 고성능 0-Alloc C# 엔진 구현체입니다:

LArTpcDriftFieldServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.LArTPC
{
    public readonly ref struct LArTpcSensorFrame
    {
        public readonly double MeasuredCathodeVoltageKv;
        public readonly double TargetCathodeVoltageKv;
        public readonly double PurityElectronLifetimeMs;
        public readonly double LiquidArgonTempKelvin;
        public readonly double DriftDistanceMeters;
        public readonly double RawIonizationChargeFc;

        public LArTpcSensorFrame(
            double measuredCathodeVoltageKv,
            double targetCathodeVoltageKv,
            double purityElectronLifetimeMs,
            double liquidArgonTempKelvin,
            double driftDistanceMeters,
            double rawIonizationChargeFc)
        {
            MeasuredCathodeVoltageKv = measuredCathodeVoltageKv;
            TargetCathodeVoltageKv = targetCathodeVoltageKv;
            PurityElectronLifetimeMs = purityElectronLifetimeMs;
            LiquidArgonTempKelvin = liquidArgonTempKelvin;
            DriftDistanceMeters = driftDistanceMeters;
            RawIonizationChargeFc = rawIonizationChargeFc;
        }
    }

    public ref struct LArTpcControlCommand
    {
        public double HighVoltageRippleErrorKv;
        public double CorrectionVoltageOutKv;
        public double DriftVelocityMmPerUs;
        public double AttenuationCompensationFactor;
        public double CorrectedIonizationChargeFc;
        public bool IsFieldUniformityOptimal;
    }

    public ref struct LArTpcDriftFieldServoEngine
    {
        private readonly double _kp;
        private readonly double _ki;
        private readonly double _kd;
        private readonly double _dt;
        private double _voltageErrorIntegral;
        private double _prevVoltageError;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public LArTpcDriftFieldServoEngine(double kp, double ki, double kd, double dt)
        {
            _kp = kp;
            _ki = ki;
            _kd = kd;
            _dt = dt;
            _voltageErrorIntegral = 0.0;
            _prevVoltageError = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeCorrection(in LArTpcSensorFrame frame, out LArTpcControlCommand cmd)
        {
            cmd = default;
            double errorKv = frame.TargetCathodeVoltageKv - frame.MeasuredCathodeVoltageKv;
            _voltageErrorIntegral += errorKv * _dt;
            if (_voltageErrorIntegral > 10.0) _voltageErrorIntegral = 10.0;
            else if (_voltageErrorIntegral < -10.0) _voltageErrorIntegral = -10.0;

            double derivKv = (errorKv - _prevVoltageError) / _dt;
            _prevVoltageError = errorKv;

            double vOut = (_kp * errorKv) + (_ki * _voltageErrorIntegral) + (_kd * derivKv);

            // Calculate Drift Velocity based on Electric field E (kV/cm)
            double nominalFieldKvPerCm = Math.Abs(frame.TargetCathodeVoltageKv) / (frame.DriftDistanceMeters * 100.0);
            double vd = (1.6 * nominalFieldKvPerCm) / (1.0 + 0.4 * nominalFieldKvPerCm); // mm / us

            // Attenuation compensation
            double driftTimeMs = (frame.DriftDistanceMeters * 1000.0) / (vd * 1000.0);
            double tau = Math.Max(0.1, frame.PurityElectronLifetimeMs);
            double compFactor = Math.Exp(driftTimeMs / tau);
            double correctedCharge = frame.RawIonizationChargeFc * compFactor;

            cmd.HighVoltageRippleErrorKv = errorKv;
            cmd.CorrectionVoltageOutKv = vOut;
            cmd.DriftVelocityMmPerUs = vd;
            cmd.AttenuationCompensationFactor = compFactor;
            cmd.CorrectedIonizationChargeFc = correctedCharge;
            cmd.IsFieldUniformityOptimal = Math.Abs(errorKv) < 0.05;
        }
    }
}

4. 교육 및 실무 적용 방안

  • 한국방송통신대학교 AI 교구: 물리 전자기학의 정전 차폐, 전하 수송 방정식, 극저온 유체 내 드리프트 속도 모델을 직관적으로 실습.
  • 국가 기초과학연구원(IBS) 및 입자물리 검출기: 대형 암흑물질 탐색 및 초신성 중성미자 시분해 검출기의 실시간 데이터 트리거링 시스템 구축.