2022 개정 교육과정 연계 온디바이스 그린수소·전기화학 STEM 시리즈 #73

음이온 교환막 수전해(AEMWE) 비귀금속 OER 과전압 억제 서보 엔진

NiFe-LDH 애노드 산소 기포 피독(Bubble Overpotential) 해소 및 0-Alloc C# 전해액 맥동 유량 제어 루프

핵심 연구 개요 및 교과 연계

탄소 중립 그린수소 대량 생산을 위한 차세대 수전해 기술인 음이온 교환막 수전해(AEMWE, Anion Exchange Membrane Water Electrolysis)는 고가의 이리듐($\text{Ir}$) 및 백금($\text{Pt}$) 귀금속 촉매 대신 저렴한 니켈-철 층상 이중 수산화물(NiFe-LDH) 등 비귀금속 전이금속 촉매를 알칼리 환경에서 활용할 수 있는 혁신 공정입니다. 그러나 $1\text{ A/cm}^2$ 이상의 고전류밀도 운전 시 산소발생반응(OER) 전극 표면에 미세 산소 기포($\text{O}_2\text{ microbubbles}$)가 축적되어 유효 촉매 면적을 차단하는 기포 피독 과전압(Bubble Overpotential)과 국소 $\text{OH}^-$ 이온 고갈로 인한 옴 저항 상승이 효율을 급격히 떨어뜨립니다.

본 백서는 2022 개정 화학 II (전기 화학과 물의 전기 분해, 산화-환원 반응, 촉매의 활성화 에너지와 반응 경로), 미적분 (버틀러-볼머 전극 반응 속도식 및 2상 유동 기포 피복률 편미분 적분), 그리고 정보 (C# 13 0-Alloc 스택 연산)를 결합하여, 고주파 교류 임피던스(HFR)로 측정된 기포 저항으로부터 마이크로 펄스 탈기 전압과 전해액 맥동 펌프 유량을 실시간 연동하는 온디바이스 수전해 효율 최적화 서보 엔진을 완성합니다.

1. 알칼리 OER 4전자 반응 기작 및 버틀러-볼머(Butler-Volmer) 과전압 수리 모델

NiFe-LDH 촉매 표면에서 일어나는 산소 발생 4전자 전달 반응은 다음과 같은 단계적 흡착-탈착 경로를 거칩니다:

$$\text{M} + \text{OH}^- \rightarrow \text{M-OH} + e^-, \quad \text{M-OH} + \text{OH}^- \rightarrow \text{M-O} + \text{H}_2\text{O} + e^-$$ $$\text{M-O} + \text{OH}^- \rightarrow \text{M-OOH} + e^-, \quad \text{M-OOH} + \text{OH}^- \rightarrow \text{M} + \text{O}_2 + \text{H}_2\text{O} + e^-$$

전극 표면 기포 피복률 $\theta_b$가 반영된 전류밀도 $j$와 활성화 과전압 $\eta_{act}$의 관계는 버틀러-볼머 식으로 모델링됩니다:

$$j = j_0 (1 - \theta_b) \left[ \exp\left(\frac{\alpha_a F \eta_{act}}{R T}\right) - \exp\left(-\frac{\alpha_c F \eta_{act}}{R T}\right) \right]$$

전극 표면에 부착된 기포로 인한 추가 옴 저항 $\Delta R_{bubble}$은 브루그만(Bruggeman) 유효 매질 이론에 따라 국소 기포 공극률 $\varepsilon_b$에 지수적으로 비례합니다:

$$\Delta R_{bubble} = R_{electrolyte} \left( (1 - \varepsilon_b)^{-1.5} - 1 \right)$$

온디바이스 서보 루프는 기포 저항 분극을 0-Alloc 스택 연산으로 실시간 분리하여 고주파 전해액 펄스 전단력(Shear Stress)을 인가함으로써 기포를 강제 이탈시킵니다.

2. 0-Alloc C# 스택 기반 AEMWE 전극 과전압 억제 서보

셀 전압, 스택 전류, 전해액 입출구 압력차 신호로부터 기포 피독을 진단하고 맥동 펌프를 1,000Hz로 제어하는 ref struct 루프입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.HydrogenElectrochemistry
{
    public readonly ref struct AemweCellTelemetry
    {
        public readonly double CellVoltageV;
        public readonly double CurrentDensityAcm2;
        public readonly double HighFrequencyResistanceMOhmCm2;
        public readonly double ElectrolytePressureDropKpa;
        public readonly double AnodeTemperatureC;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public AemweCellTelemetry(double vCell, double jAcm2, double hfrMwesen, double deltaPKpa, double tempC)
        {
            CellVoltageV = vCell;
            CurrentDensityAcm2 = jAcm2;
            HighFrequencyResistanceMOhmCm2 = hfrMwesen;
            ElectrolytePressureDropKpa = deltaPKpa;
            AnodeTemperatureC = tempC;
        }
    }

    public readonly ref struct ElectrolyzerControlResult
    {
        public readonly double BubbleOverpotentialMv;
        public readonly double TargetPumpFlowRateLpm;
        public readonly double MicroPulseVoltageV;
        public readonly bool IsDegassingPulseActive;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ElectrolyzerControlResult(double etaBubble, double pumpLpm, double pulseV, bool pulseActive)
        {
            BubbleOverpotentialMv = etaBubble;
            TargetPumpFlowRateLpm = pumpLpm;
            MicroPulseVoltageV = pulseV;
            IsDegassingPulseActive = pulseActive;
        }
    }

    public ref struct AemweOverpotentialServo
    {
        private readonly double _baselineHfrMOhmCm2;
        private readonly double _targetVoltageV;
        private double _accumulatedBubbleTimeSec;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public AemweOverpotentialServo(double baselineHfr, double targetV)
        {
            _baselineHfrMOhmCm2 = baselineHfr;
            _targetVoltageV = targetV;
            _accumulatedBubbleTimeSec = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ElectrolyzerControlResult Step(in AemweCellTelemetry telemetry, double dt)
        {
            // 1. 기포 축적으로 인한 옴 저항 증가분 계산 (mOhm*cm^2 -> Ohm*cm^2)
            double deltaHfrOhm = Math.Max(0.0, (telemetry.HighFrequencyResistanceMOhmCm2 - _baselineHfrMOhmCm2) * 1e-3);

            // 2. 기포 옴 과전압 산출: eta_bubble = j * delta_R_bubble (mV)
            double bubbleOverpotentialMv = telemetry.CurrentDensityAcm2 * deltaHfrOhm * 1000.0;

            // 3. 기포 체류 상태 누적 및 탈기 펄스 조건 판별
            bool triggerDegasPulse = false;
            double pulseVoltage = 0.0;

            if (bubbleOverpotentialMv > 80.0) // 80mV 초과 시 기포 피독 경보
            {
                _accumulatedBubbleTimeSec += dt;
                if (_accumulatedBubbleTimeSec > 1.5)
                {
                    triggerDegasPulse = true;
                    pulseVoltage = -0.15; // 50ms 미세 전위 인하로 기포 분리 촉진
                    _accumulatedBubbleTimeSec = 0.0;
                }
            }
            else
            {
                _accumulatedBubbleTimeSec = Math.Max(0.0, _accumulatedBubbleTimeSec - dt);
            }

            // 4. 전해액 펌프 맥동 유량 제어 (전단응력으로 기포 분리 유도)
            double baseFlowLpm = 2.0 * telemetry.CurrentDensityAcm2;
            double boostFlow = (bubbleOverpotentialMv / 100.0) * 1.5;
            double targetFlowLpm = Math.Min(6.0, baseFlowLpm + boostFlow);

            return new ElectrolyzerControlResult(bubbleOverpotentialMv, targetFlowLpm, pulseVoltage, triggerDegasPulse);
        }
    }
}

3. 교육적 가치 및 중고교 실험 시뮬레이션 적용

2022 개정 교육과정 연계 수업 가이드

  • 화학 II [화학 전지와 전기 분해]: 물의 전기 분해 시 이론 전압($1.23\text{ V}$)과 실제 작동 전압($1.8\sim 2.0\text{ V}$)의 차이를 만드는 활성화/옴/농도 과전압의 요인 분석.
  • 화학 II [화학 반응 속도와 촉매]: 귀금속($\text{IrO}_2$)과 비귀금속(NiFe-LDH) 촉매의 과전압 타펠 기울기(Tafel Slope)를 비교하여 촉매 설계의 경제성과 친환경 가치 탐구.
  • 통합과학/공학 일반 [신재생 에너지와 수소 경제]: 재생에너지의 변동성 전력을 수전해 시스템에 안정적으로 공급하기 위한 실시간 제어 엔지니어링 실습.