AIDT 온디바이스 STEM 방사광 X선 극저온 광 파라메트릭 발진기(OPO) PPLN 준위상정합(QPM) 파장 서보 제어기

주기 분극 니오브산 리튬(PPLN) 중적외선 3~5um OPO 공진기 위상정합 온도 제어 및 에탈론 피에조 서보, 10,000Hz C# 엔진

1. 개요

온실가스 동위원소 비율 측정, 연소 진단, 그리고 나노 적외선 현미경의 광원으로서 분자 진동 지문 영역(Molecular Fingerprint Region, 3~5 \(\mu\text{m}\))을 탐침하는 최첨단 코히런트 광원은 연속파 단일 주파수 광 파라메트릭 발진기(Optical Parametric Oscillator, OPO)입니다. 1064nm 펌프 레이저가 주기적으로 분극된 산화마그네슘 첨가 니오브산 리튬(MgO:PPLN) 비선형 결정 내부를 통과할 때, 2차 비선형 광학 감응률(\(\chi^{(2)}\))에 의해 신호광(Signal, ~1.5 \(\mu\text{m}\))과 유휴광(Idler, ~3.6 \(\mu\text{m}\))으로 하향 변환됩니다. 중적외선 유휴광의 파장 안정도는 PPLN 결정의 준위상정합(Quasi-Phase-Matching, QPM) 분극 주기(\(\Lambda \approx 30\,\mu\text{m}\))와 온도, 그리고 버터플라이 OPO 링 공진기 길이에 절대적으로 종속됩니다. 그러나 결정 내부의 광열 효과(Photothermal Effect)와 펌프 광 굴절률 변화는 주파수 모드 홉(Mode Hop)을 유발합니다. 본 고에서는 10,000Hz 온디바이스 루프에서 파브리-페로 에탈론 투과 신호를 분석하고 초정밀 PZT 미러와 열전소자(TEC)를 이중 제어하는 0-Alloc C# 엔진을 구현합니다.

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

OPO 파라메트릭 3광자 에너지 보존 및 1차원 준위상정합(QPM) 파수 결손식은 다음과 같습니다:

\\[ \omega_p = \omega_s + \omega_i, \quad \Delta k_Q = k_p - k_s - k_i - \frac{2\pi}{\Lambda} = 0 \\]

여기서 굴절률 \(n_j(T, \lambda)\)는 셀마이어(Sellmeier) 분산 방정식 및 열팽창 계수 \(\alpha_{T}\)를 따릅니다.

OPO 링 공진기의 공진 조건 및 모드 홉 방지 에탈론 자유 스펙트럼 영역(FSR) 정합식은 다음과 같습니다:

\\[ L_{cavity}(t) = m \lambda_s, \quad \Delta f_{mode-hop} = \frac{c}{L_{cavity}} \approx 650\,\text{MHz} \\]

에탈론 투과 전압의 미분 오차 신호 \(V_{err}[k]\)에 따른 PZT 미러 및 TEC 전압 듀얼 서보 법칙은 다음과 같습니다:

\\[ V_{pzt}[k] = V_{pzt}[k-1] + K_{p,fast} V_{err}[k] + K_{i,fast} \sum V_{err} \Delta t \\]
\\[ I_{tec}[k] = I_{tec}[k-1] + K_{slow} (V_{pzt}[k] - V_{pzt,mid}) \Delta t \\]

3. C# 고성능 온디바이스 서보 엔진 구현

10,000Hz 주기로 OPO 모드 홉을 방지하고 중적외선 파장을 유지하는 0-Alloc C# 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.OpticalParametricOscillator
{
    /// <summary>
    /// OPO 공진기 에탈론 투과 텔레메트리 상태
    /// </summary>
    public readonly ref struct OpoCavityTelemetryState
    {
        public readonly double EtalonTransmissionVoltageMv; // 에탈론 투과 오차 전압 [mV]
        public readonly double IdlerWavelengthMicrons;      // 중적외선 유휴광 파장 [um]
        public readonly double PplnCrystalTemperatureC;     // PPLN 결정 온도 [degC]
        public readonly double PumpLaserPowerWatts;         // 1064nm 펌프 파워 [W]

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public OpoCavityTelemetryState(double vEtalon, double lambdaIdler, double temp, double pPump)
        {
            EtalonTransmissionVoltageMv = vEtalon;
            IdlerWavelengthMicrons = lambdaIdler;
            PplnCrystalTemperatureC = temp;
            PumpLaserPowerWatts = pPump;
        }
    }

    /// <summary>
    /// OPO 서보 제어 명령
    /// </summary>
    public readonly ref struct OpoServoCommand
    {
        public readonly double CavityPiezoVoltageVolts;     // 공진기 PZT 전압 [V]
        public readonly double CrystalTecCurrentAmps;       // PPLN TEC 전류 [A]
        public readonly double MidIrFrequencyDriftMhz;      // 중적외선 주파수 편차 [MHz]
        public readonly bool ModeHopFreeLocked;             // 모드 홉 프리 잠금 성공 여부

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public OpoServoCommand(double vPzt, double iTec, double drift, bool locked)
        {
            CavityPiezoVoltageVolts = vPzt;
            CrystalTecCurrentAmps = iTec;
            MidIrFrequencyDriftMhz = drift;
            ModeHopFreeLocked = locked;
        }
    }

    /// <summary>
    /// 10,000Hz 주기 중적외선 OPO 파장 안정화 서보 엔진
    /// </summary>
    public ref struct OpticalParametricOscillatorServoEngine
    {
        private const double PztSensitivityMhzPerV = 8.5; // 8.5 MHz/V
        private double _accumulatedPztVolts;
        private double _accumulatedTecAmps;
        private double _prevEtalonError;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public OpoServoCommand CalculateServoControl(
            in OpoCavityTelemetryState state, double dtSeconds)
        {
            double errorMv = state.EtalonTransmissionVoltageMv;
            double errorDiff = (dtSeconds > 1e-9) ? (errorMv - _prevEtalonError) / dtSeconds : 0.0;
            _prevEtalonError = errorMv;

            // 1. 고속 PZT 공진기 길이 제어
            _accumulatedPztVolts += 0.35 * errorMv * dtSeconds;
            _accumulatedPztVolts = Math.Clamp(_accumulatedPztVolts, -20.0, 20.0);

            double commandPzt = 60.0 + _accumulatedPztVolts + 0.05 * errorMv + 0.002 * errorDiff;
            commandPzt = Math.Clamp(commandPzt, 0.0, 120.0);

            // 2. 완만한 TEC 온도 제어 (PZT 중앙 전압 60V 유지 유도)
            double pztOffset = commandPzt - 60.0;
            _accumulatedTecAmps += 0.005 * pztOffset * dtSeconds;
            _accumulatedTecAmps = Math.Clamp(_accumulatedTecAmps, -1.5, 1.5);

            double commandTec = 1.85 + _accumulatedTecAmps;
            commandTec = Math.Clamp(commandTec, 0.0, 3.5);

            // 3. 주파수 표류량 및 잠금 판정
            double driftMhz = (commandPzt - 60.0) * PztSensitivityMhzPerV;
            bool isLocked = Math.Abs(errorMv) < 2.5;

            return new OpoServoCommand(
                commandPzt,
                commandTec,
                driftMhz,
                isLocked
            );
        }
    }
}

4. 교육 및 실무 응용 가이드

본 고의 OPO 파라메트릭 파장 제어 기법은 다음 연구에 적용됩니다:

  • 방통대 및 비선형광학 직무연수: 2차 비선형 광학 준위상정합 셀마이어 방정식 수치해석 및 모드 홉 제어 교구.
  • 대기 온실가스(CH4, CO2) 초미세 분광: 3.3um 대역 메탄 흡수선의 도플러 프리 분광 측정.
  • 초정밀 적외선 나노 광학(s-SNOM): 20nm 공간 분해능 중적외선 화학 결합 나노 맵핑 광원 서보.

5. 결론

PPLN 결정의 준위상정합과 링 공진기 모드 특성을 정밀 수치화하고, 10,000Hz 온디바이스 0-Alloc C# 엔진으로 고속 PZT와 저속 TEC를 상호 연동 제어하여 모드 홉 없는 안정적인 3~5um 중적외선 방출을 달성하였습니다.