AIDT 온디바이스 국방 MUM-T 6세대 전투기 이중모드 스크램제트(DCR) 흡입구 언스타트(Unstart) 실시간 회피 서보 엔진

마하 5+ 초음속 흡입구 충격파 격리부 압력 센서 배열 및 2ms 고속 블리드 도어 언스타트 회피 서보, 10,000Hz C# 엔진

1. 개요

6세대 유무인 복합전투기(MUM-T)의 장거리 초음속 순항(Supercruise) 및 극초음속 가속을 담당하는 핵심 추진 기관은 마하 3~7 영역에서 램제트와 스크램제트 모드를 매끄럽게 전환하는 이중모드 램/스크램제트(Dual-Mode Ramjet/Scramjet, DMRJ/DCR) 엔진입니다. 초음속 흡입구는 경사 충격파열(Oblique Shock Train)을 통해 유입 공기를 연소실 압력으로 압축합니다. 그러나 급격한 기동이나 연소실 역압(Backpressure) 급증 시 충격파열이 흡입구 격리부(Isolator) 전방으로 밀려나 흡입구 밖으로 배출되는 흡입구 언스타트(Inlet Unstart) 현상이 발생합니다. 언스타트는 순간적인 추력 상실, 극심한 항력 급증, 그리고 비행체 조종 불능을 초래하므로 발생 직전 수 밀리초(ms) 이내에 충격파 전방 이동을 감지하고 흡입구 바이패스 블리드 도어(Bleed Door)와 연료 분사량을 고속 제어해야 합니다. 본 고에서는 10,000Hz 온디바이스 루프에서 다점 고주파 압력 배열을 역산하여 언스타트를 실시간 방지하는 0-Alloc C# 엔진을 구현합니다.

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

초음속 격리부 내부 충격파열의 월츠(Waltrup-Billig) 압력 구배 경험식은 다음과 같습니다:

\\[ \frac{x_{st}}{\theta_{bl}} = \left( \frac{P - P_1}{q_1} \right)^{0.5} \cdot \left( \frac{Re_{\theta}}{M_1^2 - 1} \right)^{0.25} \\]

여기서 \(x_{st}\)는 충기파열 선두 위치, \(\theta_{bl}\)은 경계층 운동량 두께, \(M_1\)은 격리부 입구 마하수입니다.

언스타트 임계 마진 \(\Delta x_{margin} = x_{throat} - x_{st}(t)\) 및 압력 상승 지수 \(\Psi_{press}\)는 다음과 같습니다:

\\[ \Psi_{press}(t) = \sum_{i=1}^N w_i \frac{d P_i(t)}{dt} \\]

2ms 응답 피에조 블리드 도어 개도각 \(\theta_{bleed}[k]\) 및 연료 바이패스 제어 법칙은 다음과 같습니다:

\\[ \theta_{bleed}[k] = \theta_{bleed}[k-1] + \max\left(0, K_u (x_{crit} - x_{st}[k]) + K_p \Psi_{press}[k] \right) \\]

3. C# 고성능 온디바이스 서보 엔진 구현

10,000Hz 주기로 흡입구 충격파를 격리부에 안착시키는 0-Alloc C# 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Defense.ScramjetEngine
{
    /// <summary>
    /// 스크램제트 흡입구 압력 센서 배열 텔레메트리 상태
    /// </summary>
    public readonly ref struct InletIsolatorTelemetryState
    {
        public readonly double FlightMachNumber;         // 비행 마하수 [-]
        public readonly double IsolatorInletPressureKpa; // 격리부 입구 정압 [kPa]
        public readonly double CombustorBackpressureKpa; // 연소실 입구 역압 [kPa]
        public readonly double ShockTrainPositionRatio;  // 충격파 선두 위치 (0: 목, 1: 연소실)
        public readonly double PressureGradientRate;     // 압력 급증률 [kPa/ms]

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public InletIsolatorTelemetryState(
            double mach, double pInlet, double pBack, double posRatio, double gradRate)
        {
            FlightMachNumber = mach;
            IsolatorInletPressureKpa = pInlet;
            CombustorBackpressureKpa = pBack;
            ShockTrainPositionRatio = posRatio;
            PressureGradientRate = gradRate;
        }
    }

    /// <summary>
    /// 스크램제트 블리드 도어 및 연료 서보 명령
    /// </summary>
    public readonly ref struct ScramjetInletCommand
    {
        public readonly double BleedDoorOpeningPercent;  // 블리드 도어 개도율 [%]
        public readonly double FuelEquivalenceRatio;     // 연료 당량비 Phi [-]
        public readonly double UnstartSafetyMarginPercent;// 언스타트 안전 여유도 [%]
        public readonly bool IsUnstartImminent;          // 언스타트 임박 경보

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ScramjetInletCommand(double bleed, double phi, double margin, bool imminent)
        {
            BleedDoorOpeningPercent = bleed;
            FuelEquivalenceRatio = phi;
            UnstartSafetyMarginPercent = margin;
            IsUnstartImminent = imminent;
        }
    }

    /// <summary>
    /// 10,000Hz 주기 스크램제트 흡입구 언스타트 방지 서보 엔진
    /// </summary>
    public ref struct ScramjetInletUnstartServoEngine
    {
        private const double CriticalPositionThreshold = 0.18; // 목 전방 18% 지점 임계
        private double _prevBleedOpening;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ScramjetInletCommand CalculateServoControl(
            in InletIsolatorTelemetryState state, double dtSeconds)
        {
            // 1. 언스타트 안전 여유도 계산
            double safetyMargin = (state.ShockTrainPositionRatio - CriticalPositionThreshold) * 100.0;
            bool unstartImminent = (state.ShockTrainPositionRatio < 0.25) || (state.PressureGradientRate > 45.0);

            // 2. 고속 블리드 도어 개폐 제어 (2ms 응답)
            double targetBleed = 0.0;
            if (unstartImminent)
            {
                // 충격파 전방 돌출 억제: 블리드 개방
                double deltaPos = CriticalPositionThreshold + 0.15 - state.ShockTrainPositionRatio;
                targetBleed = 40.0 + 120.0 * Math.Max(0.0, deltaPos) + 0.8 * state.PressureGradientRate;
            }
            targetBleed = Math.Clamp(targetBleed, 0.0, 100.0);

            // 속도 제한 (초당 최대 500% 개폐 가속)
            double maxDelta = 500.0 * dtSeconds;
            double commandBleed = _prevBleedOpening + Math.Clamp(targetBleed - _prevBleedOpening, -maxDelta, maxDelta);
            commandBleed = Math.Clamp(commandBleed, 0.0, 100.0);
            _prevBleedOpening = commandBleed;

            // 3. 연소실 연료 당량비 조절 (역압 완화)
            double basePhi = 0.95;
            if (unstartImminent)
            {
                basePhi -= 0.35 * (commandBleed / 100.0);
            }
            basePhi = Math.Clamp(basePhi, 0.45, 1.10);

            return new ScramjetInletCommand(commandBleed, basePhi, Math.Max(0.0, safetyMargin), unstartImminent);
        }
    }
}

4. 교육 및 실무 응용 가이드

본 고의 극초음속 흡입구 제어 알고리즘은 다음 분야에 핵심 적용됩니다:

  • 국방 AI 교과서 및 항공우주 직무연수: 압축성 공기역학 충격파-경계층 상호작용(SWBLI) 및 초음속 흡입구 시뮬레이션 교보재.
  • 6세대 무인 전투기 DCR 추진계통: 마하 3에서 마하 6 가속 구간의 램-스크램제트 천이 능동 제어.
  • 극초음속 풍동 시험(AWT): 10,000Hz 주파수 응답의 능동 블리드 밸브 실시간 제어.

5. 결론

마하 5 이상의 극초음속 비행 중 발생하는 복잡한 경사 충격파열 거동을 월츠 모델로 정밀 해석하고, 10,000Hz 온디바이스 0-Alloc C# 엔진으로 2ms 블리드 도어를 구동하여 언스타트를 완벽 차단하는 추진 제어기를 완성하였습니다.