AIDT 온디바이스 국방 MUM-T 스텔스 무인전투기(UCAV) 무다이버터 초음속 흡입구(DSI) 경계층 흡입 및 유동 왜곡 억제 서보 엔진

3D 범프(Bump) 압축 충격파 경계층 전단 및 전압력 왜곡지수(DC60) 실시간 감쇄, 블리드 플랩 서보, 10,000Hz C# 엔진

1. 개요

차세대 가오리형 스텔스 무인전투기(UCAV) 및 유무인 복합 편대기(CCA)는 전방 전자기파 반사 면적(RCS)을 최소화하고 중량을 절감하기 위해 기존의 기계식 경계층 분리기(Diverter)를 제거하고 3차원 유선형 압축 범프를 갖춘 무다이버터 초음속 흡입구(Diverterless Supersonic Inlet, DSI)를 채택합니다. DSI 범프는 유입되는 초음속 기류에 3차원 원추형 경사 충격파를 형성하여 동체 표면의 저에너지 난류 경계층을 흡입구 외부로 자연 편향시킵니다. 그러나 급격한 고받음각(AoA) 선회 기동이나 초음속 급가속 시 범프 충격파와 동체 경계층 간의 상호작용(SWBLI)으로 인해 흡입구 내부 박리(Flow Separation)가 발생하며, 엔진 팬 전방 공력경계면(AIP)의 전압력 왜곡 지수 \(DC(60)\)이 급등하여 제트 엔진 압축기 실속(Stall/Surge)을 유발할 수 있습니다. 본 고에서는 AIP 다지점 동압 센서를 10,000Hz 주기로 분석하여 능동 경계층 흡입(Active Bleed) 플랩을 구동하는 0-Alloc C# 엔진을 구현합니다.

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

3차원 범프 경사 충격파 압축 및 전압력 회복률(Total Pressure Recovery, TPR) 관계식은 다음과 같습니다:

\[ \sigma_{TPR} = \frac{\bar{P}_{t, AIP}}{P_{t\infty}} = \prod_{i=1}^n \left( \frac{(\gamma+1)M_{i-1}^2 \sin^2\beta_i}{(\gamma-1)M_{i-1}^2 \sin^2\beta_i + 2} \right)^{\frac{\gamma}{\gamma-1}} \left( \frac{\gamma+1}{2\gamma M_{i-1}^2 \sin^2\beta_i - (\gamma-1)} \right)^{\frac{1}{\gamma-1}} \]

엔진 서지 방지를 위한 공력 인터페이스 평면(AIP) 60° 원주 전압력 왜곡 지수 \(DC(60)\) 정의식은 다음과 같습니다:

\[ DC(60) = \frac{\bar{P}_{t, AIP} - \min_{\theta} \bar{P}_{t, 60^\circ}(\theta)}{q_{avg, AIP}} \le DC_{crit} \quad (\approx 0.12) \]

충격파-경계층 상호작용 박리 거품(Separation Bubble) 능동 흡입 유량 계수 관계식은 다음과 같습니다:

\[ C_q = \frac{\dot{m}_{bleed}}{\rho_\infty V_\infty S_{intake}} = C_d A_{flap}(\delta) \sqrt{\frac{2(P_{wall} - P_{plenum})}{\rho}} \]

왜곡 지수 억제 및 가변 흡입 플랩 서보 제어 방정식은 다음과 같습니다:

\[ \delta_{flap}^{cmd}(t) = K_p (DC(60) - DC_{safe}) + K_d \frac{d(DC(60))}{dt} + K_\alpha (\alpha_{curr} - \alpha_{trim}) \]

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

다음은 AIP 40채널 고속 피토 레이크 센서와 흡입구 벽면 압력을 10,000Hz 주기로 분석하여 가변 흡입 플랩 서보 액추에이터를 구동하는 0-Alloc C# 엔진 구현체입니다:

DsiIntakeDistortionServoEngine.cs
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Defense.DsiIntake
{
    public readonly ref struct DsiSensorFrame
    {
        public readonly double FlightMachNumber;
        public readonly double AngleOfAttackDegrees;
        public readonly double AverageAipTotalPressureKPa;
        public readonly double MinSector60TotalPressureKPa;
        public readonly double AipDynamicPressureKPa;

        public DsiSensorFrame(
            double flightMachNumber,
            double angleOfAttackDegrees,
            double averageAipTotalPressureKPa,
            double minSector60TotalPressureKPa,
            double aipDynamicPressureKPa)
        {
            FlightMachNumber = flightMachNumber;
            AngleOfAttackDegrees = angleOfAttackDegrees;
            AverageAipTotalPressureKPa = averageAipTotalPressureKPa;
            MinSector60TotalPressureKPa = minSector60TotalPressureKPa;
            AipDynamicPressureKPa = aipDynamicPressureKPa;
        }
    }

    public ref struct DsiControlCommand
    {
        public double BleedFlapAngleDegrees;
        public double ComputedDc60Distortion;
        public double TotalPressureRecoveryRatio;
        public bool IsEngineSurgeSafe;
        public bool IsShockWaveAttached;
    }

    public ref struct DsiIntakeDistortionServoEngine
    {
        private const double MaxSafeDc60 = 0.12;
        private const double TargetDc60 = 0.06;
        private readonly double _kpDistortion;
        private readonly double _kdDistortion;
        private readonly double _dt;
        private double _prevDc60;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DsiIntakeDistortionServoEngine(double kpDistortion, double kdDistortion, double dt)
        {
            _kpDistortion = kpDistortion;
            _kdDistortion = kdDistortion;
            _dt = dt;
            _prevDc60 = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeBleedControl(in DsiSensorFrame frame, out DsiControlCommand cmd)
        {
            cmd = default;
            double qAvg = Math.Max(1.0, frame.AipDynamicPressureKPa);
            double deltaPt = Math.Max(0.0, frame.AverageAipTotalPressureKPa - frame.MinSector60TotalPressureKPa);

            // DC(60) distortion index
            double dc60 = deltaPt / qAvg;

            double dDc60 = (dc60 - _prevDc60) / _dt;
            _prevDc60 = dc60;

            // Bleed flap control logic
            double flapAngle = _kpDistortion * (dc60 - TargetDc60) + (_kdDistortion * dDc60);

            // AoA feedforward compensation (high AoA thickens boundary layer)
            if (frame.AngleOfAttackDegrees > 8.0)
            {
                flapAngle += (frame.AngleOfAttackDegrees - 8.0) * 1.2;
            }

            flapAngle = Math.Clamp(flapAngle, 0.0, 25.0);

            // Estimated pressure recovery (TPR)
            double tpr = frame.AverageAipTotalPressureKPa / (frame.AverageAipTotalPressureKPa + (dc60 * qAvg));

            cmd.BleedFlapAngleDegrees = flapAngle;
            cmd.ComputedDc60Distortion = dc60;
            cmd.TotalPressureRecoveryRatio = tpr;
            cmd.IsEngineSurgeSafe = dc60 <= MaxSafeDc60;
            cmd.IsShockWaveAttached = frame.FlightMachNumber >= 1.1 && dc60 <= 0.15;
        }
    }
}

4. 교육 및 실무 적용 방안

  • 공군사관학교 및 한국항공우주산업(KAI): 스텔스 흡입구 공력 설계, 충격파-경계층 상호작용 및 엔진 서지 마진 제어 교육.
  • 차세대 UCAV / KF-21 유무인복합기 개발 사업: DSI 흡입구 능동 경계층 흡입 제어 소프트웨어 온디바이스 탑재.