AIDT 온디바이스 STEM 제만 슬로워(Zeeman Slower) 원자 빔 감속 서보 엔진

루비듐/스트론튬 열 원자 500 m/s에서 30 m/s 포획 속도로 급감속, 포물선 자기장 테이퍼링 \\(B(z)\\) 10,000Hz C# 엔진

1. 개요: 음속으로 날아오는 원자를 빛의 압력으로 멈춰 세우는 원자 감속기

원자 오븐(Oven)에서 분출되는 기체 원자(\(^{87}\text{Rb}\), \(^{88}\text{Sr}\))는 상온 열운동으로 인해 수백 \(\text{m/s}\)의 초음속으로 질주하므로, 자기광학포획(MOT)의 최대 포획 속도(\(v_c \approx 30\\,\text{m/s}\))를 초과하여 직접 포획할 수 없습니다. 정면에서 역방향 공명 레이저 광선을 조사하면 광자의 반동 운동량(\(\hbar k\))에 의해 원자가 감속하지만, 속도가 줄어듦에 따라 도플러 천이(\(\Delta \omega_D = -k v\))가 변하여 더 이상 레이저와 공명하지 않고 투과해 버립니다.

제만 슬로워(Zeeman Slower)는 원자 빔 경로를 따라 권선 수가 변화하는 다채널 솔레노이드 코일을 배치하여 위치에 따라 변화하는 자기장 \(B(z)\)를 인가함으로써, 감소하는 도플러 천이를 제만 천이(\(\Delta \omega_Z = \mu_B B(z) / \hbar\))로 정밀하게 실시간 상쇄합니다. 이를 통해 원자가 1미터 이내의 짧은 구간에서 중력가속도의 10만 배에 달하는 최대 감속도(\(a_{\\max} \sim 10^5\\,\text{m/s}^2\))로 급감속하도록 솔레노이드 전류를 제어하는 10,000Hz 0-Alloc C# 서보 아키텍처를 구현합니다.

2. 제만 공명 조건 및 이상적 포물선 자기장 수식 모델

원자가 전체 감속 경로 \(z \in [0, L]\)에서 레이저와 공명을 유지하기 위한 주파수 일치 조건은 다음과 같습니다:

\\[ \\omega_L - \\omega_0 + k v(z) + \\frac{\\mu_B g_F B(z)}{\\hbar} = 0 \\]

여기서 \(\omega_L - \omega_0 = \Delta\)는 레이저 이조, \(k = 2\pi / \lambda\), \(\mu_B\)는 보어 마그네톤입니다. 원자가 안전 계수 \(\eta = a / a_{\\max} \le 1\) (\(a_{\\max} = \frac{\hbar k \Gamma}{2 M}\))의 등가속도 운동을 할 때, 거리 \(z\)에 따른 원자 속도 \(v(z)\) 및 이상적 자기장 프로파일 \(B(z)\)는 포물선 형태를 따릅니다:

\\[ v(z) = \\sqrt{v_0^2 - 2 \\eta a_{\\max} z}, \\quad B(z) = B_0 \\sqrt{1 - \\frac{z}{L}} + B_{\\text{bias}} \\]

여기서 \(L = v_0^2 / (2 \eta a_{\\max})\)는 최적 감속 길이, \(B_0 = \frac{\hbar k v_0}{\mu_B}\)는 최대 필요 자기장(통상 \(800 \sim 1200\\,\text{Gauss}\))입니다.

3. 0-Alloc C# 10,000Hz 실시간 제만 슬로워 서보 아키텍처

솔레노이드 분할 권선 코일 전류 제어 및 레이저 냉각 파장 이조 드리프트를 가비지 컬렉션 없이 100㎲ 확정 주기로 연산하는 C# ref struct 구현체입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.ZeemanSlower
{
    public readonly ref struct ZeemanSlowerState
    {
        public readonly double ExitVelocityMps;      // 출구 원자 속도 v_exit (m/s)
        public readonly double PeakMagneticFieldG;   // 최대 자기장 B_max (Gauss)
        public readonly double LaserDecelerationA;   // 원자 감속도 a (m/s^2)
        public readonly double ScatteringRatePhotonS;// 자발 방출 광자 산란율 (photons/s)
        public readonly bool IsMotCaptureReady;      // MOT 포획 가능 속도 도달 여부
        public readonly double SolenoidCurrentAmps;  // 메인 코일 구동 전류 (A)

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ZeemanSlowerState(double vExit, double bMax, double acc, double scatterRate, bool captureReady, double current)
        {
            ExitVelocityMps = vExit;
            PeakMagneticFieldG = bMax;
            LaserDecelerationA = acc;
            ScatteringRatePhotonS = scatterRate;
            IsMotCaptureReady = captureReady;
            SolenoidCurrentAmps = current;
        }
    }

    public ref struct ZeemanSlowerEngine
    {
        private const double HBar = 1.054571817e-34;
        private const double MuB = 9.2740100783e-24; // J/T
        private const double MassRb87 = 1.4431606e-25; // kg
        private const double GammaRb87 = 2.0 * Math.PI * 6.065e6; // rad/s (D2 line)
        private const double WavelengthRb = 780.241e-9; // m

        private readonly double _initialVelocityMps; // 초기 열 속도 (m/s, ~500 m/s)
        private readonly double _slowerLengthM;      // 슬로워 물리적 길이 L (m, 예: 0.85 m)
        private double _laserDetuningMhz;            // 레이저 적색 편이 (MHz)
        private double _coilCurrentAmps;             // 솔레노이드 구동 전류 (A)

        public ZeemanSlowerEngine(double v0 = 500.0, double lengthM = 0.85, double initDetuningMhz = -400.0)
        {
            _initialVelocityMps = v0;
            _slowerLengthM = lengthM;
            _laserDetuningMhz = initDetuningMhz;
            _coilCurrentAmps = 25.0; // 25 A
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ZeemanSlowerState StepServo(double currentAdjustmentAmps, double laserPowerIntensityRatio, double dtSec)
        {
            _coilCurrentAmps = Math.Clamp(_coilCurrentAmps + currentAdjustmentAmps, 5.0, 60.0);

            // 1. 최대 이론 감속도 a_max 계산 (m/s^2)
            // a_max = (hbar * k * Gamma) / (2 * M)
            double k = 2.0 * Math.PI / WavelengthRb;
            double aMax = (HBar * k * GammaRb87) / (2.0 * MassRb87); // ~1.1 x 10^5 m/s^2

            // 2. 포화도 파라미터 s0에 따른 유효 감속도
            double s0 = Math.Clamp(laserPowerIntensityRatio, 0.5, 10.0);
            double eta = Math.Clamp(s0 / (1.0 + s0) * 0.70, 0.2, 0.85); // 안전 감속 계수
            double actualAcc = eta * aMax;

            // 3. 출구 속도 계산 v_exit = sqrt(v0^2 - 2 * a * L)
            double vSquared = _initialVelocityMps * _initialVelocityMps - 2.0 * actualAcc * _slowerLengthM;
            double vExit = Math.Sqrt(Math.Max(vSquared, 0.0));

            // 4. 최대 필요 테이퍼 자기장 B_max (Gauss)
            // B0 = hbar * k * v0 / mu_B (Tesla -> Gauss: 1T = 10000G)
            double bMaxTesla = (HBar * k * _initialVelocityMps) / MuB;
            double bMaxGauss = bMaxTesla * 10000.0 * (_coilCurrentAmps / 25.0);

            // 5. MOT 포획 판정 (통상 v_exit < 35 m/s)
            bool isCaptureReady = (vExit <= 35.0);

            // 6. 광자 산란율 (photons/s)
            double scatterRate = (GammaRb87 * 0.5) * (s0 / (1.0 + s0));

            return new ZeemanSlowerState(
                vExit: vExit,
                bMax: bMaxGauss,
                acc: actualAcc,
                scatterRate: scatterRate,
                captureReady: isCaptureReady,
                current: _coilCurrentAmps
            );
        }
    }
}

4. 교육 및 광시계/양자 시뮬레이터 응용 가치

  • 초·중·고 STEM 교구: 기체 분자 운동론 맥스웰-볼츠만 속도 분포와 빛의 방사압, 제만 분열 에너지 준위 이동 교육.
  • 차세대 광격자 원자시계(Optical Lattice Clock): 18자리 정밀도를 위한 스트론튬 원자 빔 고밀도 포획 전치 감속 시스템.
  • 중성 원자 양자 컴퓨터 큐비트 로딩: 3차원 광학 집게 배열로의 단일 원자 고속 연속 공급원.