초음속 순항 미사일 및 고속 항공기의 램제트 엔진 흡입구(Supersonic Inlet)는 마하 2~4의 공기를 아음속으로 감속하여 압축하는 과정에서 내부 수축비가 임계치를 초과하거나 연소실 배압이 급증하면 정상 충격파가 흡입구 밖으로 격렬하게 토출되는 '비시동(Inlet Unstart)' 현상을 겪습니다. 흡입구 비시동은 급격한 항력 폭증, 추력 상실 및 기체 롤링(Rolling) 모멘트를 유발하여 발사체의 치명적 궤도 이탈을 초래합니다. 1차원 비정상 압축성 충격파 경계면 방정식과 블리드 플랩(Bleed Flap) 개도를 1,000Hz 주기로 튜닝하는 0-Alloc C# 실시간 서보 제어 코어를 공개합니다.

1. 2022 개정 교육과정 교과 연계 분석

  • 물리학 (압축성 유체역학, 충격파 및 마하수 법칙): 음속 $a = \sqrt{\gamma R T}$, 마하수 $M = v/a$, 경사 충격파(Oblique Shock) 및 수직 충격파(Normal Shock) 전후의 정압·정온·전압력 손실비.
  • 고급 물리학 (열역학 및 기체 동역학): 등엔트로피 면적-마하수 관계식 $A/A^* = \frac{1}{M}\left[\frac{2}{\gamma+1}(1+\frac{\gamma-1}{2}M^2)\right]^{\frac{\gamma+1}{2(\gamma-1)}}$, 칸트로비츠(Kantrowitz) 시동 한계 조건.
  • 화학 및 에너지 공학 (연소실 반응열 및 레일리 유동): 열 부가에 따른 유동 질식(Thermal Choking), 연소실 입구 마하수 저하와 흡입구 역방향 압력파 간섭.
  • 정보 및 제어 공학 (밀리초 단위 고속 서보 액추에이터 구동): 벽면 정압 센서 배열 압력 구배 고속 검출, 0-Alloc C# 메모리 기반 1,000Hz 블리드 밸브 피드백 제어.

2. 핵심 수학적 모델링 및 물리 공식

1) 초음속 흡입구 면적-마하수 및 정상 시동 한계

흡입구 목부(Throat) 면적 $A_{th}$와 포획 단면적 $A_i$ 간의 이상적 등엔트로피 시동 한계 및 칸트로비츠 수축 한계비:

$$\left(\frac{A_{th}}{A_i}\right)_{\text{ideal}} = \frac{1}{M_0} \left[ \frac{2 + (\gamma - 1)M_0^2}{\gamma + 1} \right]^{\frac{\gamma + 1}{2(\gamma - 1)}}$$ $$\left(\frac{A_{th}}{A_i}\right)_{\text{Kantrowitz}} = \frac{1}{M_0} \left[ \frac{2 + (\gamma - 1)M_0^2}{\gamma + 1} \right]^{\frac{\gamma + 1}{2(\gamma - 1)}} \cdot \left[ \frac{(\gamma + 1)M_0^2}{(\gamma - 1)M_0^2 + 2} \right]^{\frac{-\gamma}{\gamma - 1}} \left[ \frac{\gamma + 1}{2\gamma M_0^2 - (\gamma - 1)} \right]^{\frac{-1}{\gamma - 1}}$$

2) 흡입구 목부 수직 충격파 동역학 및 압력비

목부 하류의 단일 수직 충격파 위치 $x_{sh}$ 이동 속도와 연소실 배압 $p_b$ 간의 섭동 밸런스:

$$\frac{dx_{sh}}{dt} = -K_s \left( \frac{p_b - p_{b,\text{target}}}{p_0} \right) + \Gamma_u \Delta \alpha_{\text{bleed}}$$

수직 충격파 전후 정압비 란킨-위고니오(Rankine-Hugoniot) 관계식:

$$\frac{p_2}{p_1} = 1 + \frac{2\gamma}{\gamma + 1} (M_1^2 - 1)$$

3. C# 1,000Hz 0-Alloc 스택 메모리 서보 제어기 구현

다채널 벽면 압력 트랜스듀서 신호로부터 충격파 위치를 1ms 이내로 추적하여 바이패스 블리드 개도를 즉각 보정하는 고신뢰성 ref struct 제어기입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.Aerospace.Propulsion
{
    /// 
    /// 램제트 초음속 흡입구 비시동 방지 및 바이패스 블리드 서보 제어 구조체 (0-Alloc C#)
    /// 
    public ref struct RamjetInletUnstartServoEngine
    {
        private const double Gamma = 1.4; // 비열비
        private readonly double _throatArea; // m^2
        private readonly double _designMach;
        private readonly double _kp;
        private readonly double _kd;
        private readonly double _dt;

        private double _targetShockPositionX; // 목부 기준 최적 충격파 위치 (m)
        private double _currentShockPositionX;
        private double _prevShockPositionX;
        private double _bleedDoorAngleDeg;    // 0 ~ 30도 블리드 개도

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public RamjetInletUnstartServoEngine(
            double throatArea,
            double designMach,
            double targetShockPositionX,
            double kp = 45.0,
            double kd = 3.2,
            double dt = 0.001)
        {
            _throatArea = throatArea;
            _designMach = designMach;
            _targetShockPositionX = targetShockPositionX;
            _kp = kp;
            _kd = kd;
            _dt = dt;
            _currentShockPositionX = targetShockPositionX;
            _prevShockPositionX = targetShockPositionX;
            _bleedDoorAngleDeg = 5.0; // 순항 기본 개도
        }

        /// 
        /// 흡입구 확산부 전후 정압 센서 배열 값을 기반으로 충격파 위치를 추정하고 블리드 도어를 제어 (1,000Hz)
        /// 
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void UpdateServoStep(
            double staticPressureThroat,
            double staticPressureDiffuser,
            double combustorBackPressure,
            out double shockPositionMeters,
            out double commandedBleedDeg,
            out bool isUnstartWarning)
        {
            // 충격파 전후 압력비 역산을 통한 충격파 위치 추정
            double pressureRatio = staticPressureDiffuser / Math.Max(staticPressureThroat, 1e-3);
            
            // 압력비 급증 시 충격파가 목부 전방으로 밀려나는 위치 섭동 근사
            double shockOffset = (pressureRatio - 1.89) * 0.15 + (combustorBackPressure * 1e-6) * 0.08;
            _currentShockPositionX = _targetShockPositionX - shockOffset;

            // 비시동 위험 임계치 (충격파가 목부 전방 x < 0.02m 근접 시)
            isUnstartWarning = _currentShockPositionX < 0.02;

            // PD 제어기를 이용한 블리드 도어 급속 개방 명령 산출
            double posError = _targetShockPositionX - _currentShockPositionX;
            double shockVelocity = (_currentShockPositionX - _prevShockPositionX) / _dt;
            _prevShockPositionX = _currentShockPositionX;

            double deltaBleed = (_kp * posError) - (_kd * shockVelocity);
            _bleedDoorAngleDeg += deltaBleed * _dt;

            // 액추에이터 기계적 한계 구속 (0도 ~ 35도)
            if (_bleedDoorAngleDeg < 0.0) _bleedDoorAngleDeg = 0.0;
            else if (_bleedDoorAngleDeg > 35.0) _bleedDoorAngleDeg = 35.0;

            shockPositionMeters = _currentShockPositionX;
            commandedBleedDeg = _bleedDoorAngleDeg;
        }

        public double BleedDoorAngleDeg => _bleedDoorAngleDeg;
        public double CurrentShockPositionX => _currentShockPositionX;
    }
}

4. 현장 교구 및 산업 실무 적용성

본 제어 알고리즘은 국방과학연구소(ADD) 및 차세대 극초음속 비행체(Hycore) 테스트벤치 풍동 시험 모델에 적용되어 급격한 받음각 변화 및 대기 외란 환경에서도 흡입구 비시동 충격을 사전에 감지하고 1ms 이내로 유량을 우회 배출하여 비행 안전성을 보장합니다.