AIDT 온디바이스 STEM 켈빈 프로브 힘 현미경(KPFM) 표면 전위 매핑 서보 제어기

나노스케일 접촉 전위차(CPD) 계측, 정전기력 제2고조파 피드백, 일함수(Work Function) 매핑 10,000Hz C# 엔진

1. 개요

차세대 2나노미터 반도체 소자의 계면 트랩, 페로브스카이트 태양전지의 국소 전하 축적, 2차원 그래핀 박막의 도핑 프로파일을 나노스케일 공간 분해능으로 이미징하는 켈빈 프로브 힘 현미경(Kelvin Probe Force Microscopy, KPFM)은 원자간력 현미경(AFM)의 가장 강력한 전자기적 확장 모드입니다. 전도성 캔틸레버 팁과 시료 표면 사이에 교류(AC) 및 직류(DC) 전압을 동시에 인가할 때 유도되는 정전기력(Electrostatic Force) 중, 기본 진동수(\(\omega\)) 성분은 팁과 시료 간의 접촉 전위차(Contact Potential Difference, \(V_{CPD}\))에 비례합니다. 서보 루프가 이 \(\omega\) 성분의 진폭을 영(0)으로 수렴시키도록 직류 바이어스 전압(\(V_{DC}\))을 피드백 제어함으로써, 시료의 국소 일함수(Work Function)와 표면 전위 분포를 지형 형상(Topography)과 완벽히 분리하여 정밀 매핑할 수 있습니다. 본 고에서는 10,000Hz 주기로 주파수 변조(FM-KPFM) 위상 신호를 복조하고 팁 바이어스를 피드백 제어하는 0-Alloc C# 서보 엔진을 구현합니다.

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

팁-시료 커패시턴스 \(C(z)\) 및 인가 전압 \(V(t) = (V_{DC} - V_{CPD}) + V_{AC}\sin(\omega t)\)에 의해 캔틸레버에 작용하는 정전기력 \(F_{es}(z, t)\) 방정식은 다음과 같습니다:

\[ F_{es}(z, t) = \frac{1}{2} \frac{\partial C}{\partial z} V^2(t) = F_{DC} + F_{\omega}\sin(\omega t) - F_{2\omega}\cos(2\omega t) \]

여기서 제1고조파 정전기력 성분 \(F_\omega\) 및 영점화(Nulling) 조건은 다음과 같습니다:

\[ F_\omega = \frac{\partial C}{\partial z} (V_{DC} - V_{CPD}) V_{AC} = 0 \implies V_{DC}(t) \to V_{CPD} \]

팁-시료 일함수(\(\Phi_{tip}, \Phi_{sample}\))와 접촉 전위차의 관계식은 다음과 같습니다:

\[ V_{CPD} = \frac{\Phi_{tip} - \Phi_{sample}}{-e} \implies \Phi_{sample} = \Phi_{tip} + e V_{CPD} \]

주파수 변조(FM-KPFM) 공진 주파수 편차 \(\Delta f_\omega\) 억제 부등식은 다음과 같습니다:

\[ |\Delta f_\omega| = \left| - \frac{f_0}{2 k_0} \frac{\partial^2 C}{\partial z^2} (V_{DC} - V_{CPD}) V_{AC} \right| \le 0.05\text{ Hz} \quad (|V_{DC} - V_{CPD}| \le 0.5\text{ mV}) \]

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

다음은 록인 증폭기(Lock-in Amplifier)의 정전기력 복조 신호를 10,000Hz 주기로 적분하여 직류 보상 전압을 인가하는 0-Alloc C# 엔진 구현체입니다:

KpfmPotentialMappingServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.ScanningProbe
{
    public readonly ref struct KpfmSensorFrame
    {
        public readonly double LockInOmegaAmplitudeNv;
        public readonly double LockInOmegaPhaseDeg;
        public readonly double AppliedVacVolts;
        public readonly double TipWorkFunctionEv;
        public readonly double CantileverTipZHeightNm;

        public KpfmSensorFrame(
            double lockInOmegaAmplitudeNv,
            double lockInOmegaPhaseDeg,
            double appliedVacVolts,
            double tipWorkFunctionEv,
            double cantileverTipZHeightNm)
        {
            LockInOmegaAmplitudeNv = lockInOmegaAmplitudeNv;
            LockInOmegaPhaseDeg = lockInOmegaPhaseDeg;
            AppliedVacVolts = appliedVacVolts;
            TipWorkFunctionEv = tipWorkFunctionEv;
            CantileverTipZHeightNm = cantileverTipZHeightNm;
        }
    }

    public ref struct KpfmControlCommand
    {
        public double VdcCompensationOutputVolts;
        public double MeasuredContactPotentialDiffVolts;
        public double SampleWorkFunctionEv;
        public double ResidualElectrostaticForcePn;
        public bool IsPotentialNullingConverged;
    }

    public ref struct KpfmPotentialMappingServoEngine
    {
        private readonly double _ki;
        private readonly double _dt;
        private double _vdcAccumulator;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public KpfmPotentialMappingServoEngine(double ki, double dt)
        {
            _ki = ki;
            _dt = dt;
            _vdcAccumulator = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputePotentialFeedback(in KpfmSensorFrame frame, out KpfmControlCommand cmd)
        {
            cmd = default;
            // Signed error signal from lock-in: Error = Amp * cos(Phase)
            double phaseRad = frame.LockInOmegaPhaseDeg * (Math.PI / 180.0);
            double signedErrorNv = frame.LockInOmegaAmplitudeNv * Math.Cos(phaseRad);

            // Integrate to null the electrostatic force
            _vdcAccumulator += (_ki * signedErrorNv * 1e-9) * _dt;
            _vdcAccumulator = Math.Clamp(_vdcAccumulator, -10.0, 10.0);

            double sampleWfEv = frame.TipWorkFunctionEv + _vdcAccumulator; // Phi_sample = Phi_tip + e*V_cpd
            double forcePn = Math.Abs(signedErrorNv) * 0.01;

            cmd.VdcCompensationOutputVolts = _vdcAccumulator;
            cmd.MeasuredContactPotentialDiffVolts = _vdcAccumulator;
            cmd.SampleWorkFunctionEv = sampleWfEv;
            cmd.ResidualElectrostaticForcePn = forcePn;
            cmd.IsPotentialNullingConverged = Math.Abs(signedErrorNv) < 50.0; // < 50 nV
        }
    }
}

4. 교육 및 실무 적용 방안

  • 한국방송통신대학교 AI 교구: 고체물리 일함수, 계면 밴드 굽힘(Band Bending), 정전기력 현미경 직무연수.
  • 나노 반도체 소자 연구소: 첨단 GAA(Gate-All-Around) 트랜지스터 결함 분포 및 국소 페르미 준위 평가.