AIDT 온디바이스 STEM 주사 터널링 전위차계(STP) 나노스케일 전위 강하 서보 제어기

란다우어 탄도 수송 전위 딥 계측, 지형 형상-국소 전위차 완전 분리, 10,000Hz C# 엔진

1. 개요

2차원 양자 물질, 원자 계면, 결정립계(Grain Boundary)에서 전자의 탄도 수송(Ballistic Transport) 및 산란 메커니즘을 나노스케일 공간 분해능으로 매핑하는 주사 터널링 전위차계(Scanning Tunneling Potentiometry, STP)는 주사 터널링 현미경(STM)의 가장 고도화된 계측 기법입니다. 시료 양단에 측면 구동 전류(\(I_{bias}\))를 흘려 전기장 구배를 형성한 상태에서, 금속 탐침을 원자 단위로 근접시켜 터널링 전류(\(I_t\))를 검출합니다. 이때 탐침에 인가되는 전압이 국소 전기화학 전위(\(\mu_{local}(x, y)\))와 일치할 때 순 터널링 전류가 정확히 영(0)이 된다는 영점화(Null-Current) 원리를 활용합니다. 그러나 탐침의 지형 형상 추종 루프(Z-피에조)와 전위 추종 루프(V-바이어스) 사이의 상호 간섭(Cross-talk) 및 열 드리프트는 전위 딥 계측에 치명적인 오차를 유발합니다. 본 고에서는 이중 피드백 루프를 직교 분리하여 10,000Hz 주기로 국소 전위 강하를 서브-마이크로볼트(\(\mu\text{V}\)) 정밀도로 복원하는 0-Alloc C# 서보 엔진을 구현합니다.

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

탐침 전위 \(V_t\)와 시료 국소 전위 \(\Phi_{loc}(x,y)\) 사이의 터널링 전류 \(I_t(z, V_t)\) 방정식은 다음과 같습니다:

\[ I_t(z, V_t) = G_0 \exp\left( - 2 \kappa z \right) \left[ V_t - \Phi_{loc}(x,y) \right], \quad \kappa = \sqrt{\frac{2m_e \bar{\Phi}}{\hbar^2}} \]

터널링 전도도 \(G(z) = dI_t/dV_t\)와 교류 변조(\(V_{mod}\sin\omega t\))에 따른 고조파 분리식은 다음과 같습니다:

\[ I_t(t) = I_{DC} + G(z) V_{mod} \sin(\omega t) \implies I_{DC} = G(z) [V_{DC} - \Phi_{loc}] = 0 \implies V_{DC} = \Phi_{loc} \]

란다우어-도체(Landauer Formula)에 기반한 결정립계 단일 산란 장벽의 국소 전위 강하 \(\Delta \Phi_{GB}\) 방정식은 다음과 같습니다:

\[ \Delta \Phi_{GB} = \frac{h}{2e^2} \left( \frac{1 - \mathcal{T}}{\mathcal{T}} \right) I_{sample} \quad (\mathcal{T}: \text{투과 확률}) \]

지형 피에조와 전위 피드백 간 크로스토크 억제 부등식은 다음과 같습니다:

\[ \left| \frac{\partial z_{piezo}}{\partial \Phi_{loc}} \right| \le 1.0 \times 10^{-12}\text{ m/V} \quad (\Delta z_{crosstalk} \le 1.0\text{ pm}) \]

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

다음은 터널링 전류의 직류 오프셋을 10,000Hz 주기로 추종하여 국소 화학 전위를 고속 추출하는 0-Alloc C# 엔진 구현체입니다:

StpPotentialDropServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.ScanningProbe
{
    public readonly ref struct StpSensorFrame
    {
        public readonly double MeasuredTunnelingCurrentNa;
        public readonly double TargetCurrentSetpointNa;
        public readonly double TipBiasVoltageMv;
        public readonly double AcConductanceMicroSiemens;
        public readonly double SampleCurrentMilliAmps;

        public StpSensorFrame(
            double measuredTunnelingCurrentNa,
            double targetCurrentSetpointNa,
            double tipBiasVoltageMv,
            double acConductanceMicroSiemens,
            double sampleCurrentMilliAmps)
        {
            MeasuredTunnelingCurrentNa = measuredTunnelingCurrentNa;
            TargetCurrentSetpointNa = targetCurrentSetpointNa;
            TipBiasVoltageMv = tipBiasVoltageMv;
            AcConductanceMicroSiemens = acConductanceMicroSiemens;
            SampleCurrentMilliAmps = sampleCurrentMilliAmps;
        }
    }

    public ref struct StpControlCommand
    {
        public double TipNullingVoltageMv;
        public double LocalElectrochemicalPotentialMv;
        public double LocalInterfaceResistanceOhms;
        public double ZPiezoCorrectionNm;
        public bool IsPotentialNullingStable;
    }

    public ref struct StpPotentialDropServoEngine
    {
        private readonly double _kiPotential;
        private readonly double _kpZ;
        private readonly double _dt;
        private double _nullingVoltageAccumulatorMv;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public StpPotentialDropServoEngine(double kiPotential, double kpZ, double dt)
        {
            _kiPotential = kiPotential;
            _kpZ = kpZ;
            _dt = dt;
            _nullingVoltageAccumulatorMv = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeDualLoopFeedback(in StpSensorFrame frame, out StpControlCommand cmd)
        {
            cmd = default;
            // Potential Loop: null the DC current
            double currentErrorNa = frame.MeasuredTunnelingCurrentNa;
            _nullingVoltageAccumulatorMv += (_kiPotential * currentErrorNa) * _dt;
            _nullingVoltageAccumulatorMv = Math.Clamp(_nullingVoltageAccumulatorMv, -500.0, 500.0);

            // Z-Loop: maintain AC conductance setpoint
            double gErr = Math.Max(0.01, frame.AcConductanceMicroSiemens) - 1.0;
            double zCorrectionNm = -_kpZ * gErr;

            // Local Interface Resistance
            double iSampleAmps = Math.Max(1e-6, frame.SampleCurrentMilliAmps * 1e-3);
            double localR = (_nullingVoltageAccumulatorMv * 1e-3) / iSampleAmps;

            cmd.TipNullingVoltageMv = _nullingVoltageAccumulatorMv;
            cmd.LocalElectrochemicalPotentialMv = _nullingVoltageAccumulatorMv;
            cmd.LocalInterfaceResistanceOhms = localR;
            cmd.ZPiezoCorrectionNm = zCorrectionNm;
            cmd.IsPotentialNullingStable = Math.Abs(currentErrorNa) < 0.01; // < 10 pA residual
        }
    }
}

4. 교육 및 실무 적용 방안

  • 한국방송통신대학교 AI 교구: 양자 수송 현상, 란다우어 공식 및 나노스케일 옴의 법칙 한계 시뮬레이션.
  • 차세대 초전도 및 2차원 소자 연구소: 그래핀 결정립계 및 양자 소자 결함부의 국소 접촉 저항 비파괴 초정밀 매핑.