1. 개요
제4세대 방사광가속기 빔라인 및 고성능 연/경X선 현미경에서 10nm 이하의 나노스케일 3차원 투과 영상을 렌즈 수차의 한계 없이 비파괴적으로 획득하는 혁신적 기법은 X선 타이코그래피(Ptychography)입니다. 결맞는(Coherent) X선 빔을 인접 조사 영역과 60% 이상 공간적으로 중첩(Overlap)되도록 시료를 스캐닝하며 원거리 회절 패턴을 기록하고, 컴퓨터 위상 복원 알고리즘(ePIE)을 통해 위상 정보를 역산합니다. 그러나 수 시간 동안 수만 번의 스캔이 진행되는 동안 피에조 스캐닝 스테이지의 열표류(Thermal Drift)와 간섭계 척도 오차는 조사 위치의 불확실성을 초래하여 재구성 이미지의 해상도를 심각하게 뭉개뜨립니다. 이를 방지하려면 회절 강도 오차로부터 위치 오차 구배(Position Gradient)를 실시간 역추정하고, 나노미터 단위의 피에조 스테이지 위치 보정 지령을 고속 피드백해야 합니다. 본 고에서는 10,000Hz 주기로 스캐닝 오차를 수렴시키는 0-Alloc C# 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
시료의 2차원 복소 투과함수 \(O(\vec{r})\)와 X선 조사 프로브 함수 \(P(\vec{r})\)의 출사파면 및 원거리 회절 파동함수 방정식은 다음과 같습니다:
원거리 측정 회절 강도 구속조건(Modulus Constraint) 적용 출사파면 갱신식은 다음과 같습니다:
확장 타이코그래피 반복 엔진(ePIE) 시료 투과함수 및 프로브 함수 동시 업데이트 점화식은 다음과 같습니다:
스캐닝 스테이지의 위치 오차 벡터 \(\Delta \vec{R}_j\) 구배 하강법 추정 및 서보 보정식은 다음과 같습니다:
3. 실시간 C# 서보 제어기 구현
다음은 레이저 간섭계 피에조 스테이지 좌표와 회절 위상 오차 잔차를 10,000Hz 주기로 분석하여 피에조 X/Y 위치 보정 지령을 생성하는 0-Alloc C# 엔진 구현체입니다:
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.XrayPtychography
{
public readonly ref struct PtychoScanSensorFrame
{
public readonly double CommandedStageXNm;
public readonly double CommandedStageYNm;
public readonly double InterferometerStageXNm;
public readonly double InterferometerStageYNm;
public readonly double PhaseRetrievalErrorMetric;
public readonly double DiffractionPhotonCount;
public PtychoScanSensorFrame(
double commandedStageXNm,
double commandedStageYNm,
double interferometerStageXNm,
double interferometerStageYNm,
double phaseRetrievalErrorMetric,
double diffractionPhotonCount)
{
CommandedStageXNm = commandedStageXNm;
CommandedStageYNm = commandedStageYNm;
InterferometerStageXNm = interferometerStageXNm;
InterferometerStageYNm = interferometerStageYNm;
PhaseRetrievalErrorMetric = phaseRetrievalErrorMetric;
DiffractionPhotonCount = diffractionPhotonCount;
}
}
public ref struct PtychoScanControlCommand
{
public double CorrectedPiezoXNm;
public double CorrectedPiezoYNm;
public double PositionErrorMagnitudeNm;
public bool IsPositionSubNanometerAccurate;
public bool IsPhaseReconstructionConverged;
}
public ref struct XrayPtychographyPositionServoEngine
{
private readonly double _kpStage;
private readonly double _kdStage;
private readonly double _dt;
private double _prevErrX;
private double _prevErrY;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public XrayPtychographyPositionServoEngine(double kpStage, double kdStage, double dt)
{
_kpStage = kpStage;
_kdStage = kdStage;
_dt = dt;
_prevErrX = 0.0;
_prevErrY = 0.0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ComputePositionCorrection(in PtychoScanSensorFrame frame, out PtychoScanControlCommand cmd)
{
cmd = default;
double errX = frame.CommandedStageXNm - frame.InterferometerStageXNm;
double errY = frame.CommandedStageYNm - frame.InterferometerStageYNm;
double dErrX = (errX - _prevErrX) / _dt;
double dErrY = (errY - _prevErrY) / _dt;
_prevErrX = errX;
_prevErrY = errY;
// Servo compensation for piezo positioning drift
double corrX = (_kpStage * errX) + (_kdStage * dErrX);
double corrY = (_kpStage * errY) + (_kdStage * dErrY);
corrX = Math.Clamp(corrX, -50.0, 50.0);
corrY = Math.Clamp(corrY, -50.0, 50.0);
double targetX = frame.CommandedStageXNm + corrX;
double targetY = frame.CommandedStageYNm + corrY;
double errMag = Math.Sqrt(errX * errX + errY * errY);
cmd.CorrectedPiezoXNm = targetX;
cmd.CorrectedPiezoYNm = targetY;
cmd.PositionErrorMagnitudeNm = errMag;
cmd.IsPositionSubNanometerAccurate = errMag <= 0.8; // Sub-nanometer precision
cmd.IsPhaseReconstructionConverged = frame.PhaseRetrievalErrorMetric <= 0.02;
}
}
}
4. 교육 및 실무 적용 방안
- 한국방송통신대학교 나노영상/방사광물리: 결맞는 X선 회절 간섭 이론, 타이코그래피 반복 위상 복원 및 나노위치제어 교구.
- 포항가속기연구소(PAL) 및 오창 차세대방사광가속기: 4세대 X선 빔라인 나노단층촬영 타이코그래피 스캐닝 스테이지 서보 실장.