AIDT 온디바이스 STEM 초고속 전자 회절(UED) 펨토초 빔 번치 RF 압축 및 비행시간(TOF) 위상 서보 제어기

펨토초 레이저 광음극 방출 전자의 공간전하 팽창 억제, RF 컴프레서 캐비티 위상 속도 제어, 10,000Hz C# 엔진

1. 개요

원자 수준의 초고속 화학반응 및 상전이 메커니즘을 원자 단위 시공간 해상도로 규명하는 펨토초 초고속 전자 회절(Ultrafast Electron Diffraction, UED) 시스템은 극초단 레이저 펄스로 여기된 광음극에서 전자 펄스를 방출시켜 시료를 투과시킵니다. 그러나 전자 번치(Electron Bunch) 내에 밀집된 다수의 전자들은 쿨롱 척력(Space-Charge Repulsion)에 의해 비행 챔버를 통과하는 동안 종방향 및 횡방향으로 급격히 팽창하여 수 피코초 단위로 펄스폭이 확장됩니다. 펨토초(<50 fs) 시간 분해능을 회복하려면 RF 압축 캐비티(Buncher Cavity)를 통과시켜 펄스 선두부 전자를 감속시키고 후미부 전자를 가속시키는 속도 변조(Velocity Modulation / Phase Chirp)를 가해야 합니다. 본 고에서는 비행시간(Time-of-Flight) 검출기와 RF 위상-진폭 검출기 피드백을 10,000Hz 주기로 연산하여 펨토초 도착 시간 지터(Arrival Jitter)와 번치 길이를 동시 억제하는 0-Alloc C# 엔진을 구현합니다.

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

종방향 번치 길이 \(\sigma_z\)와 공간전하(Space-Charge) 반발력에 의한 팽창 방정식은 다음과 같습니다:

\[ \frac{d^2 \sigma_z}{d t^2} = \frac{e Q_{bunch}}{m_0 \gamma^3 \epsilon_0 A_{beam}} g(\sigma_z, r_b) + \frac{e}{m_0 \gamma^3} \frac{\partial E_z^{RF}}{\partial z} \]

RF 압축 캐비티에 의한 종방향 위상 첩(Chirp) 및 에너지 변조식은 다음과 같습니다:

\[ \Delta E(z) = e V_0 \sin\left(\omega_{RF} \frac{z}{v_z} + \phi_0\right) \approx e V_0 \frac{\omega_{RF}}{c \beta} z \cos(\phi_0) \]

드리프트 공간 길이 \(L_{drift}\) 통과 후 시료 타깃에서의 최소 압축 번치 길이 조건식은 다음과 같습니다:

\[ \sigma_{t, target} = \sqrt{\sigma_{t,0}^2 \left( 1 + \frac{e V_0 \omega_{RF} \cos\phi_0}{E_0} \frac{L_{drift}}{c \beta \gamma^2} \right)^2 + \left( \frac{R_{56} \sigma_E}{E_0 c} \right)^2} \le 50\text{ fs} \]

도착 시간 비행시간(TOF) 오차 기반 RF 캐비티 위상 및 전압 실시간 보정식은 다음과 같습니다:

\[ \Delta \phi_{cmd} = -K_p \cdot \Delta t_{TOF} - K_d \cdot \frac{d(\Delta t_{TOF})}{dt}, \quad \Delta V_{cmd} = -K_v \cdot (\sigma_{t, target} - \sigma_{t, target}^{ref}) \]

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

다음은 RF 캐비티 모니터링 픽업과 비행시간 센서 신호를 10,000Hz 주기로 분석하여 RF 앰프 I/Q 위상 변조기를 구동하는 0-Alloc C# 엔진 구현체입니다:

UedBunchCompressionServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.Ued
{
    public readonly ref struct UedSensorFrame
    {
        public readonly double MeasuredBunchDurationFs;
        public readonly double TargetBunchDurationFs;
        public readonly double ArrivalTimeJitterFs;
        public readonly double BeamEnergyKeV;
        public readonly double CavityRfPhaseDegrees;

        public UedSensorFrame(
            double measuredBunchDurationFs,
            double targetBunchDurationFs,
            double arrivalTimeJitterFs,
            double beamEnergyKeV,
            double cavityRfPhaseDegrees)
        {
            MeasuredBunchDurationFs = measuredBunchDurationFs;
            TargetBunchDurationFs = targetBunchDurationFs;
            ArrivalTimeJitterFs = arrivalTimeJitterFs;
            BeamEnergyKeV = beamEnergyKeV;
            CavityRfPhaseDegrees = cavityRfPhaseDegrees;
        }
    }

    public ref struct UedControlCommand
    {
        public double CommandedRfAmplitudeKv;
        public double CommandedRfPhaseTrimDegrees;
        public double BunchDurationErrorFs;
        public bool IsBunchCompressed;
        public bool IsJitterLocked;
    }

    public ref struct UedBunchCompressionServoEngine
    {
        private const double BaseRfVoltageKv = 25.0;
        private readonly double _kpBunch;
        private readonly double _kpJitter;
        private readonly double _kdJitter;
        private readonly double _dt;
        private double _prevJitterFs;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public UedBunchCompressionServoEngine(double kpBunch, double kpJitter, double kdJitter, double dt)
        {
            _kpBunch = kpBunch;
            _kpJitter = kpJitter;
            _kdJitter = kdJitter;
            _dt = dt;
            _prevJitterFs = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeBunchCompression(in UedSensorFrame frame, out UedControlCommand cmd)
        {
            cmd = default;
            double bunchErr = frame.TargetBunchDurationFs - frame.MeasuredBunchDurationFs;
            double dJitter = (frame.ArrivalTimeJitterFs - _prevJitterFs) / _dt;
            _prevJitterFs = frame.ArrivalTimeJitterFs;

            // RF Amplitude control for velocity chirp modulation
            double voltageDelta = _kpBunch * bunchErr;
            double targetVoltage = Math.Clamp(BaseRfVoltageKv + voltageDelta, 10.0, 50.0);

            // RF Phase trim for TOF arrival jitter locking
            double phaseTrim = -(_kpJitter * frame.ArrivalTimeJitterFs + _kdJitter * dJitter);
            phaseTrim = Math.Clamp(phaseTrim, -15.0, 15.0);

            cmd.CommandedRfAmplitudeKv = targetVoltage;
            cmd.CommandedRfPhaseTrimDegrees = phaseTrim;
            cmd.BunchDurationErrorFs = bunchErr;
            cmd.IsBunchCompressed = Math.Abs(frame.MeasuredBunchDurationFs - frame.TargetBunchDurationFs) <= 5.0;
            cmd.IsJitterLocked = Math.Abs(frame.ArrivalTimeJitterFs) <= 10.0;
        }
    }
}

4. 교육 및 실무 적용 방안

  • 한국방송통신대학교 자연과학부: 펨토초 레이저 펌프-프로브 분광학, 상대론적 빔 다이내믹스 및 양자 파속 압축 가상실험 교구.
  • 기초과학연구원(IBS) 및 가속기 연구소: 초고속 전자 회절장치(UED) 빔 번치 길이 최적화 및 펨토초 타이밍 동기화 제어기 탑재.