AIDT 온디바이스 STEM 나노계측 원자간력현미경(AFM) 켈빈 프로브 힘 현미경(KPFM) 접촉 전위차(CPD) 주파수 변조(FM) 서보 제어기

팁-시료 간 정전기력 구배(Electrostatic Force Gradient) 보상, 일함수(Work Function) 원자 단위 측정, 10,000Hz C# 엔진

1. 개요

차세대 2차원 반도체 이종접합(vdW Heterostructure) 및 태양전지 계면 결함 분석을 위한 켈빈 프로브 힘 현미경(Kelvin Probe Force Microscopy, KPFM)은 원자간력현미경(AFM)의 전도성 탐침과 시료 표면 간의 국소 접촉 전위차(Contact Potential Difference, CPD)를 측정하여 원자 수준의 국소 일함수(Local Work Function)를 매핑합니다. 진폭 변조(AM-KPFM) 방식은 탐침 캔틸레버 지지부와 거시적 전극 간의 표유 정전용량(Stray Capacitance) 효과로 인해 공간 분해능이 수십 나노미터로 저하됩니다. 반면, 주파수 변조(FM-KPFM) 방식은 정전기력의 2차 공간 미분인 정전기력 구배(Electrostatic Force Gradient)에 반응하는 캔틸레버 공진 주파수 변이(\(\Delta f\))의 변조 고조파 성분을 감지하므로 팁 첨단 수 나노미터 영역의 진정한 원자 스케일 전위를 분별합니다. 본 고에서는 10,000Hz 주기로 FM 변조 주파수 에러를 영점화하여 CPD 전압을 고속 추종하는 0-Alloc C# 엔진을 구현합니다.

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

탐침과 시료 간 인가 전압 \(V(t) = (V_{dc} - V_{CPD}) + V_{ac} \sin(\omega_m t)\)에 따른 정전기 에너지 및 힘 구배 방정식은 다음과 같습니다:

\[ F_{es}(z, t) = \frac{1}{2} \frac{\partial C}{\partial z} V(t)^2, \quad \frac{\partial F_{es}}{\partial z} = \frac{1}{2} \frac{\partial^2 C}{\partial z^2} V(t)^2 \]

FM-KPFM에서 캔틸레버 고유 공진 주파수 편차 \(\Delta f\)의 변조 주파수 성분 전개식은 다음과 같습니다:

\[ \Delta f(t) \approx -\frac{f_0}{2 k_c} \frac{\partial^2 C}{\partial z^2} \left[ \frac{1}{2}(V_{dc} - V_{CPD})^2 + \frac{1}{4}V_{ac}^2 + (V_{dc} - V_{CPD})V_{ac}\sin(\omega_m t) - \frac{1}{4}V_{ac}^2\cos(2\omega_m t) \right] \]

락인 앰프의 기본 변조 주파수 성분 \(\Delta f_{\omega_m}\)의 진폭 수식은 다음과 같습니다:

\[ \Delta f_{\omega_m} = -\frac{f_0}{2 k_c} \frac{\partial^2 C}{\partial z^2} (V_{dc} - V_{CPD}) V_{ac} \]

\(\Delta f_{\omega_m} = 0\) 조건을 만족할 때 인가 전압 \(V_{dc} = V_{CPD}\)가 성립하며, 국소 표면 일함수는 다음과 같이 확정됩니다:

\[ \Phi_{sample} = \Phi_{tip} - e V_{CPD}, \quad V_{dc}^{cmd}(t) = V_{dc}(t - \Delta t) + K_p \Delta f_{\omega_m} + K_i \int \Delta f_{\omega_m} dt \]

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

다음은 PLL 주파수 복조기 신호와 락인 앰프의 \(\omega_m\) 성분을 10,000Hz 주기로 분석하여 팁 바이어스 직류 전압을 즉각 보정하는 0-Alloc C# 엔진 구현체입니다:

FmKpfmContactPotentialServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.AfmKpfm
{
    public readonly ref struct KpfmSensorFrame
    {
        public readonly double LockInOmegaHarmonicHz;
        public readonly double CantileverFrequencyShiftHz;
        public readonly double TipWorkFunctionEv;
        public readonly double CurrentDcBiasVolts;
        public readonly double ModulationVoltageVac;

        public KpfmSensorFrame(
            double lockInOmegaHarmonicHz,
            double cantileverFrequencyShiftHz,
            double tipWorkFunctionEv,
            double currentDcBiasVolts,
            double modulationVoltageVac)
        {
            LockInOmegaHarmonicHz = lockInOmegaHarmonicHz;
            CantileverFrequencyShiftHz = cantileverFrequencyShiftHz;
            TipWorkFunctionEv = tipWorkFunctionEv;
            CurrentDcBiasVolts = currentDcBiasVolts;
            ModulationVoltageVac = modulationVoltageVac;
        }
    }

    public ref struct KpfmControlCommand
    {
        public double CommandedDcBiasVolts;
        public double ComputedSampleWorkFunctionEv;
        public double ContactPotentialErrorVolts;
        public bool IsPotentialNullLocked;
        public bool IsWorkFunctionValid;
    }

    public ref struct FmKpfmContactPotentialServoEngine
    {
        private readonly double _kp;
        private readonly double _ki;
        private readonly double _dt;
        private double _harmonicErrorIntegral;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public FmKpfmContactPotentialServoEngine(double kp, double ki, double dt)
        {
            _kp = kp;
            _ki = ki;
            _dt = dt;
            _harmonicErrorIntegral = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputePotentialFeedback(in KpfmSensorFrame frame, out KpfmControlCommand cmd)
        {
            cmd = default;
            double harmErr = frame.LockInOmegaHarmonicHz;
            _harmonicErrorIntegral += harmErr * _dt;
            _harmonicErrorIntegral = Math.Clamp(_harmonicErrorIntegral, -50.0, 50.0);

            // Nulling feedback: adjust DC bias to drive 1st harmonic to zero
            double deltaV = (_kp * harmErr) + (_ki * _harmonicErrorIntegral);
            double commandedVdc = Math.Clamp(frame.CurrentDcBiasVolts + deltaV, -5.0, 5.0);

            // CPD = V_dc when locked
            double sampleWorkFunction = frame.TipWorkFunctionEv - commandedVdc;

            cmd.CommandedDcBiasVolts = commandedVdc;
            cmd.ComputedSampleWorkFunctionEv = sampleWorkFunction;
            cmd.ContactPotentialErrorVolts = harmErr;
            cmd.IsPotentialNullLocked = Math.Abs(harmErr) <= 0.05; // Within 50 mHz
            cmd.IsWorkFunctionValid = sampleWorkFunction >= 1.0 && sampleWorkFunction <= 7.0;
        }
    }
}

4. 교육 및 실무 적용 방안

  • 한국방송통신대학교 나노재료/반도체공학: 고체 표면 일함수 접촉전위차 원리, 정전기력 구배 주파수 변조 해석 교구.
  • 한국기초과학지원연구원(KBSI) 및 반도체 공정 분석실: 2nm 이하 나노소자 게이트 절연막 표면 전위 매핑 FM-KPFM 제어기 실장.