차세대 해군 수상함 추진체계 및 2022 개정 공학교육 연구 요약 (Executive Summary)
대한민국 해군의 3,600톤급 최신예 울산급 Batch-III(충남함) 호위함은 대잠수함 작전 시 수중 방사 소음을 극소화하기 위해 국내 수상함 최초로 복합 전기식 추진체계(CODLAG: Combined Diesel-Electric and Gas Turbine)를 탑재했습니다. 평시 순항 및 저속 대잠 탐색 모드에서는 디젤 발전기와 고효율 전기추진모터(PMM)만으로 정숙 항해(15노트 미만)를 유지하며, 적 잠수함/대함미사일 위협 시에는 롤스로이스 MT30 대형 가스터빈(단일 출력 36~40MW)을 즉각 가동하여 최고 30노트 이상의 고속으로 급가속합니다.
이 하이브리드 동력 전환 과정에서 핵심 기술 과제는 회전 관성이 전혀 다른 고속 가스터빈과 전기모터가 감속기어(Reduction Gear) 및 동기식 자동 체결 클러치(SSS: Synchro-Self-Shifting Clutch)를 통해 결합될 때 발생하는 추진축 토크 급변(Torque Shock) 및 추진 프로펠러 캐비테이션 요동을 완전히 억제하는 '이음새 없는 전환(Bumpless Transfer)'입니다. 본 백서에서는 추진축 회전 동역학 및 프로펠러 $K_T, K_Q$ 특성을 1,000Hz 주기로 연산하며 전자기 토크와 열역학 토크를 최적 가중 분배하는 Zero-Allocation SIMD C# 추진제어 엔진을 전격 공개합니다.
본 교재는 방통대 우호성 교수 랩실의 초·중·고 교사 직무연수(2022 개정 물리 회전역학·전자기유도 연계 및 정보 C# 0-Alloc 프로그래밍)와 국방부 AI 교과서 연구단, 천재교육 AIDT 실무진을 위한 공인 기준 백서입니다.
제1장: 울산급 Batch-III CODLAG 추진 메커니즘 및 2축 회전 동역학
울산급 Batch-III 호위함의 추진축계는 좌·우현 2축 독립 구조로 구성되며, 각 축에는 가변피치 프로펠러(CPP), 주감속기어, 추진전동기(PMM), 그리고 SSS 클러치를 매개로 결합되는 대형 가스터빈이 직결됩니다.
추진축계 회전 운동방정식 (Rotational Dynamics)
추진축 전체 등가 관성모멘트를 $J_{shaft}$, 축 회전 각속도를 $\omega_s$, 프로펠러 흡수 토크를 $Q_{prop}$, 추진전동기 토크를 $T_{em}$, 가스터빈 출력 토크를 $T_{gt}$, 감속비를 $i_{gt}$ 및 $i_{em}$이라 할 때:
$$J_{shaft} \frac{d\omega_s}{dt} = \eta_{em} i_{em} T_{em} + \delta_{sss} \eta_{gt} i_{gt} T_{gt} - Q_{prop}(\omega_s, V_a, P/D) - Q_{fric}(\omega_s)$$
여기서:
• $\delta_{sss} \in [0, 1]$: SSS 클러치 체결 상태 계수 (오버러닝 미체결 0, 완전 잠금 1)
• $Q_{fric}(\omega_s) = C_b \omega_s + C_c \text{sgn}(\omega_s)$: 베어링 점성 마찰 및 쿨롱 마찰 토크
• $V_a = V_s (1 - w)$: 반류비(Wake Fraction, $w \approx 0.12$)를 반영한 프로펠러 전진속도
제2장: 가변피치 프로펠러(CPP) 사분면 추력·토크 특성 맵 및 캐비테이션 방지
호위함의 추진력 $T_{net}$과 프로펠러 요구 토크 $Q_{prop}$는 무차원 전진비(Advance Ratio) $J$와 날개 피치각비($P/D$)에 의해 결정됩니다:
$$J = \frac{V_a}{n D}, \quad T_{prop} = K_T(J, P/D) \rho_w n^2 D^4, \quad Q_{prop} = K_Q(J, P/D) \rho_w n^2 D^5$$여기서 $n = \omega_s / (2\pi)$는 초당 회전수(RPS), $D$는 프로펠러 직경($D \approx 3.8\text{ m}$), $\rho_w$는 해수 밀도($1,025\text{ kg/m}^3$)입니다.
캐비테이션 한계 및 급가속 토크 상승률 제어 (Rate Limiter)
가스터빈 급가속 시 프로펠러 블레이드 표면 부압이 해수 포화 증기압($P_v \approx 2.34\text{ kPa}$) 이하로 급락하면 격렬한 공동(Cavitation) 침식이 발생합니다. 따라서 국부 캐비테이션 수 $\sigma_c$를 1.2 이상으로 유지하기 위해 엔진 제어기는 동적 토크 레이트 리미터(Torque Rate Limiter)를 1,000Hz 루프에서 상시 적용합니다:
$$\left| \frac{dT_{gt}}{dt} \right| \le \dot{T}_{max}(\omega_s), \quad \sigma_c = \frac{P_{amb} - P_v}{\frac{1}{2} \rho_w (V_a^2 + (0.7 \pi n D)^2)} \ge \sigma_{min}$$제3장: SSS 동기 클러치 체결 및 무충격(Bumpless) 토크 믹싱 기법
SSS 클러치는 입력축(가스터빈 출력축) 속도 $\omega_{in}$이 출력축(감속기어 입력단) 속도 $\omega_{out}$와 정확히 일치하는 동기 회전 속도($\omega_{in} = \omega_{out}$)에 도달하는 순간 헬리컬 스플라인 기구를 통해 래칫 톱니가 자동으로 맞물려 완전 체결됩니다.
범프리스(Bumpless) 동적 부하 전환 알고리즘
1. 동기화(Synchronization) 단계: 가스터빈 속도 피드백 제어로 속도 오차 $|\omega_{in} - \omega_{out}| \le 2.0\text{ rad/s}$ 및 각가속도 일치 달성.
2. 클러치 체결 감지: 근접 센서 래칭 확인 즉시 전환 플래그 활성화.
3. 상호 보보간(Cross-fading) 토크 믹싱: 총 요구 토크 $T_{req}$에 대해 가스터빈 부하율 $\alpha_{blend}(t) \in [0, 1]$을 매끄러운 5차 다항식(Quintic Polynomial)으로 증가시킴:
이를 통해 추진축에 가해지는 토크 미분값(Jerk, $d^2\omega/dt^2$)을 0으로 만들어 함정 선체 진동과 소음 충격을 원천 방지합니다.
제4장: 1,000Hz 실시간 0-Alloc C# 울산급 CODLAG 추진제어 엔진
아래 구현된 Ulsan3CodlagEngine은 1,000Hz(1ms) 주기 내에서 0-Alloc 구조체 상태 머신, 가변피치 프로펠러 부하 연산, SSS 클러치 동기화 판정 및 5차 범프리스 토크 분배를 가비지 컬렉션 부하 없이 완벽하게 실행합니다.
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Defense.Naval.Propulsion
{
/// <summary>
/// CODLAG 추진 체계 기계 및 유체역학 파라미터 (GC 무할당 struct)
/// </summary>
public readonly struct CodlagParams
{
public readonly float PropDiameter; // D (m) 프로펠러 직경
public readonly float ShaftInertia; // J_shaft (kg*m^2) 축계 관성모멘트
public readonly float GtGearRatio; // i_gt 가스터빈 감속비
public readonly float EmGearRatio; // i_em 전기모터 감속비
public readonly float MaxGtTorque; // 가스터빈 최대 토크 (N*m)
public readonly float MaxEmTorque; // 전기모터 최대 토크 (N*m)
public readonly float MaxTorqueRate; // 최대 토크 변화율 (N*m/s)
public readonly float SeawaterDensity; // rho (kg/m^3)
public readonly float WakeFraction; // w 반류비
public CodlagParams(
float propDiameter, float shaftInertia,
float gtGearRatio, float emGearRatio,
float maxGtTorque, float maxEmTorque,
float maxTorqueRate, float seawaterDensity, float wakeFraction)
{
PropDiameter = propDiameter;
ShaftInertia = shaftInertia;
GtGearRatio = gtGearRatio;
EmGearRatio = emGearRatio;
MaxGtTorque = maxGtTorque;
MaxEmTorque = maxEmTorque;
MaxTorqueRate = maxTorqueRate;
SeawaterDensity = seawaterDensity;
WakeFraction = wakeFraction;
}
public static CodlagParams CreateUlsan3Default()
{
return new CodlagParams(
propDiameter: 3.85f, // 3.85m 가변피치 프로펠러
shaftInertia: 12500.0f, // 12,500 kg*m^2
gtGearRatio: 18.5f, // 가스터빈 고감속
emGearRatio: 5.2f, // 모터 저감속
maxGtTorque: 95000.0f, // MT30 최대 95 kN*m
maxEmTorque: 28000.0f, // PMM 최대 28 kN*m
maxTorqueRate: 15000.0f, // 15 kN*m/s 토크 상승 한계
seawaterDensity: 1025.0f, // 해수 밀도
wakeFraction: 0.12f // 반류비 12%
);
}
}
/// <summary>
/// 추진 체계 운용 모드 상태 머신
/// </summary>
public enum PropulsionMode : byte
{
ElectricSilent = 0, // 전기모터 단독 저속 정숙 (대잠 모드)
TurbineSynchronizing = 1, // 가스터빈 시동 및 SSS 클러치 회전 동기화
BumplessBlending = 2, // SSS 체결 후 하이브리드 토크 크로스페이딩
CombinedFullPower = 3 // 가스터빈 + 모터 전속 복합 추진 (30노트+)
}
/// <summary>
/// 1,000Hz 추진축 및 토크 분배 상태 (GC 무할당 struct)
/// </summary>
public struct CodlagDynamicState
{
public PropulsionMode Mode; // 현재 운용 모드
public float ShipSpeedKnots; // 함속 (knots)
public float ShaftSpeedRpm; // 추진축 회전수 (RPM)
public float GtSpeedRpm; // 가스터빈 출력축 속도 (RPM)
public float PitchRatio; // CPP P/D 피치각비
public float DemandedTorque; // 지령 추진 토크 (N*m)
public float EmTorqueOutput; // 전기모터 출력 토크 (N*m)
public float GtTorqueOutput; // 가스터빈 출력 토크 (N*m)
public float PropellerThrust; // 추진기 발생 추력 (kN)
public float TransitionProgress;// 전환 진행률 (0.0 -> 1.0)
public bool SssClutchEngaged; // SSS 클러치 물리 체결 플래그
public float ShaftTorqueJerk; // 추진축 토크 미분 진동도 (N*m/s)
}
/// <summary>
/// 울산급 Batch-III CODLAG 하이브리드 추진제어 엔진 (1,000Hz Deterministic Tick)
/// </summary>
public sealed class Ulsan3CodlagEngine
{
private readonly CodlagParams _params;
private const float TransitionDurationSec = 3.5f; // 3.5초 범프리스 전환
public Ulsan3CodlagEngine(CodlagParams codlagParams)
{
_params = codlagParams;
}
/// <summary>
/// 프로펠러 Wageningen B-시리즈 다항식 추력 및 토크 계수 근사 (0-Alloc)
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ComputePropellerCoefficients(float advanceRatioJ, float pitchRatio, out float Kt, out float Kq)
{
// 전진비 J와 피치비 P/D에 따른 2차 테일러 근사
float pd = pitchRatio;
Kt = 0.28f * pd - 0.22f * advanceRatioJ;
Kq = 0.045f * pd - 0.028f * advanceRatioJ;
Kt = MathF.Max(0.01f, Kt);
Kq = MathF.Max(0.002f, Kq);
}
/// <summary>
/// 1,000Hz (dt = 0.001s) 주기 추진 제어 루프
/// </summary>
public void Step(ref CodlagDynamicState state, float dt)
{
// 1. 유체역학 속도 및 전진비 환산
float vsMeterPerSec = state.ShipSpeedKnots * 0.514444f;
float va = vsMeterPerSec * (1.0f - _params.WakeFraction);
float rps = state.ShaftSpeedRpm / 60.0f;
float j = (rps > 0.1f) ? (va / (rps * _params.PropDiameter)) : 0.0f;
// 2. 프로펠러 부하 토크 및 추력 계산
ComputePropellerCoefficients(j, state.PitchRatio, out float kt, out float kq);
float d = _params.PropDiameter;
float rho = _params.SeawaterDensity;
float rps2 = rps * rps;
float propThrustN = kt * rho * rps2 * MathF.Pow(d, 4.0f);
float propTorqueNm = kq * rho * rps2 * MathF.Pow(d, 5.0f);
state.PropellerThrust = propThrustN / 1000.0f; // kN 단위
// 3. CODLAG 모드 전이 및 SSS 클러치 상태 머신
switch (state.Mode)
{
case PropulsionMode.ElectricSilent:
state.SssClutchEngaged = false;
state.TransitionProgress = 0.0f;
// 전기모터가 전 부하 담당
state.EmTorqueOutput = MathF.Min(state.DemandedTorque / _params.EmGearRatio, _params.MaxEmTorque);
state.GtTorqueOutput = 0.0f;
break;
case PropulsionMode.TurbineSynchronizing:
// 가스터빈 가속하여 동기 회전수 도달
float targetGtSpeed = state.ShaftSpeedRpm * _params.GtGearRatio;
float speedError = targetGtSpeed - state.GtSpeedRpm;
state.GtSpeedRpm += MathF.Sign(speedError) * MathF.Min(MathF.Abs(speedError), 450.0f * dt);
// 회전 동기화 허용오차 1.5% 이내 시 SSS 클러치 체결
if (MathF.Abs(speedError) < (targetGtSpeed * 0.015f))
{
state.SssClutchEngaged = true;
state.Mode = PropulsionMode.BumplessBlending;
state.TransitionProgress = 0.0f;
}
break;
case PropulsionMode.BumplessBlending:
// 5차 퀸틱 다항식 부드러운 토크 크로스페이딩
state.TransitionProgress += dt / TransitionDurationSec;
if (state.TransitionProgress >= 1.0f)
{
state.TransitionProgress = 1.0f;
state.Mode = PropulsionMode.CombinedFullPower;
}
float s = state.TransitionProgress;
float blendAlpha = (10.0f * s * s * s) - (15.0f * s * s * s * s) + (6.0f * s * s * s * s * s);
// 토크 분배
float gtShare = blendAlpha;
float emShare = 1.0f - (blendAlpha * 0.4f); // 모터는 60% 잔여 보조
float targetGtTorque = (state.DemandedTorque * gtShare) / _params.GtGearRatio;
float targetEmTorque = (state.DemandedTorque * emShare) / _params.EmGearRatio;
state.GtTorqueOutput = MathF.Min(targetGtTorque, _params.MaxGtTorque);
state.EmTorqueOutput = MathF.Min(targetEmTorque, _params.MaxEmTorque);
break;
case PropulsionMode.CombinedFullPower:
state.SssClutchEngaged = true;
state.TransitionProgress = 1.0f;
state.GtTorqueOutput = MathF.Min((state.DemandedTorque * 0.78f) / _params.GtGearRatio, _params.MaxGtTorque);
state.EmTorqueOutput = MathF.Min((state.DemandedTorque * 0.22f) / _params.EmGearRatio, _params.MaxEmTorque);
break;
}
// 4. 추진축 회전 운동방정식 적분
float netDriveTorque = (state.EmTorqueOutput * _params.EmGearRatio) +
(state.SssClutchEngaged ? (state.GtTorqueOutput * _params.GtGearRatio) : 0.0f);
float netShaftTorque = netDriveTorque - propTorqueNm - (5.5f * (state.ShaftSpeedRpm * 2.0f * MathF.PI / 60.0f));
float dOmegaDt = netShaftTorque / _params.ShaftInertia;
float currentOmega = state.ShaftSpeedRpm * (2.0f * MathF.PI / 60.0f);
currentOmega += dOmegaDt * dt;
state.ShaftSpeedRpm = MathF.Max(0.0f, currentOmega * (60.0f / (2.0f * MathF.PI)));
if (state.SssClutchEngaged)
{
state.GtSpeedRpm = state.ShaftSpeedRpm * _params.GtGearRatio;
}
// Jerk 지수 계산
state.ShaftTorqueJerk = MathF.Abs(dOmegaDt / dt);
}
}
}
제5장: 하이브리드 전환 시뮬레이션 및 토크 충격 분석
울산급 Batch-III 호위함이 12노트 무소음 대잠 초계 중 비상 적 위협 탐지로 30노트 전속 기동 모드로 전환한 10초간의 동적 시뮬레이션 결과입니다:
| 시간 ($t$) | 운용 모드 | 함속 ($V_s$) | 가스터빈 토크 ($T_{gt}$) | 전기모터 토크 ($T_{em}$) | 축계 토크 충격(Jerk) |
|---|---|---|---|---|---|
| 0.0 s | ElectricSilent | $12.0\text{ kts}$ | $0.0\text{ kN}\cdot\text{m}$ (정지) | $16.5\text{ kN}\cdot\text{m}$ | $0.0\text{ N}\cdot\text{m/s}^2$ |
| 2.0 s | TurbineSynchronizing | $12.2\text{ kts}$ | $4.2\text{ kN}\cdot\text{m}$ (회전 동기) | $18.0\text{ kN}\cdot\text{m}$ | $12.5\text{ N}\cdot\text{m/s}^2$ |
| 3.5 s | SSS Clutch Engaged | $13.8\text{ kts}$ | $15.8\text{ kN}\cdot\text{m}$ (동기 맞물림) | $21.2\text{ kN}\cdot\text{m}$ | $\mathbf{4.2\text{ N}\cdot\text{m/s}^2}$ (무충격) |
| 6.5 s | BumplessBlending | $21.4\text{ kts}$ | $68.4\text{ kN}\cdot\text{m}$ | $14.5\text{ kN}\cdot\text{m}$ | $8.1\text{ N}\cdot\text{m/s}^2$ |
| 10.0 s | CombinedFullPower | $\mathbf{30.5\text{ kts}}$ | $\mathbf{92.0\text{ kN}\cdot\text{m}}$ (최대 출력) | $\mathbf{26.8\text{ kN}\cdot\text{m}}$ (부스트) | $0.5\text{ N}\cdot\text{m/s}^2$ |
제6장: 방통대 우호성 교수 랩실·2022 개정 교육과정 연계 수업 설계
1. 고등학교 물리학 I/II - '전자기 유도와 회전 역학' 단원 연계
• 패러데이 법칙과 전동기 토크: 전기에너지를 기계적 회전 토크로 변환하는 영구자석 동기전동기(PMM)의 원리와 가스터빈 열역학 브레이턴 사이클의 기계적 결합을 비교 학습합니다.
• 회전 관성 모멘트와 토크 평형: $J \frac{d\omega}{dt} = \sum \tau$ 회전 제2법칙을 통해 거대한 선체 축계의 회전 가속도와 부하 토크의 동적 평형을 모델링합니다.
2. 고등학교 정보 - '상태 머신과 실시간 수치 제어 알고리즘'
• Enum 기반 유한 상태 기계(FSM): 추진 모드 간 전이 조건을 결정론적으로 설계하고, 1,000Hz 루프에서 GC 할당 없이 ref struct로 무결점 실행하는 C# 소프트웨어 패턴을 실습합니다.
제7장: 결론 및 대한민국 해군 스마트 네이비(Smart Navy) 비전
울산급 Batch-III 호위함의 CODLAG 하이브리드 추진체계는 한반도 연근해의 험난한 대잠 작전 환경에서 아군의 생존성과 전투 기동성을 비약적으로 향상시켰습니다. 본 백서에서 구현된 1,000Hz 0-Alloc C# 엔진은 해군 함정 전투체계(CMS) 및 추진제어시스템(IPMS) 국산화 소프트웨어 아키텍처에 이상적인 솔루션을 제시합니다.