Hydrogen-Fuel-Cell-Stack-Thermal

質子交換膜燃料電池堆的熱管理系統:水熱平衡策略、集總參數熱模型與冷啟動控制邏輯的深度解析。

氫燃料電池的「體溫」之困

質子交換膜燃料電池(PEMFC)被視為氫能經濟的核心轉換裝置,其原理是將氫氣的化學能直接轉化為電能,副產物僅為水與熱。然而,正是看似無害的「熱」成為了限制燃料電池堆性能與壽命的主要瓶頸。一個典型的 100 kW 車用燃料電池堆在滿載運行時,產生的熱量大約等於其電功率輸出——即額外 100 kW 的廢熱需要通過冷卻系統移除。相比之下,內燃機的廢熱可通過排氣管直接排放,而燃料電池堆的工作溫度通常限制在 60-80℃,這使得其散熱面積需求遠大於內燃機散熱器。

更為複雜的是,PEMFC 的「水管理」與「熱管理」深度耦合。膜的質子傳導率高度依賴於含水量(濕度),而含水量又隨溫度與電流密度變化。溫度過高會導致膜脫水、電阻急劇上升;溫度過低則導致液態水積聚、電極淹沒(Flooding)。因此,精確的熱管理系統並非簡單的冷卻,而是對電堆內部熱場、濕度場與電流密度分佈的協同控制。

OPERATING TEMP 60 – 80 ℃ PEM 燃料電池堆的典型工作溫度區間
SYSTEM EFF. ~55 % 電堆 LHV 效率,其餘約 45% 轉化為廢熱
POWER DENSITY 4.5 kW/L 最新一代車用金屬雙極板電堆的體積功率密度
LIFETIME > 30,000 h 穩定熱管理下電堆的目標運行壽命

PEM 電堆的熱生成與傳遞機制

燃料電池內的熱源主要來自三個方面:電化學反應的熵變、活化極化損失以及歐姆極化損失。總發熱量 Q_gen 可表示為 Q_gen = (E_th − V_cell) × I,其中 E_th 為熱中性電壓(約 1.48 V),V_cell 為實際工作電壓,I 為電流。在典型工況下,電堆效率每下降 1%,廢熱量就增加約 1.8%。

熱量在電堆內的傳遞路徑極其複雜:在面內方向,熱量通過雙極板(石墨或金屬)與氣體擴散層(GDL)橫向傳導;在垂直方向,熱量需要穿過膜電極組件(MEA),而 MEA 的厚度僅數百微米,熱導率卻極低(約 0.2 W/m·K),形成了主要的熱阻。溫度在 MEA 兩側可能產生超過 5℃ 的梯度,影響膜中水分的分佈。為了建立有效的控制系統,通常採用集總參數熱模型(Lumped Thermal Model)來近似電堆的平均溫度動態,以便於實時控制器設計。

Hydrogen Fuel Cell Stack
Fig 1. 水冷型 PEM 燃料電池堆模組與熱管理系統示意 Source: Unsplash

水熱平衡:膜加濕與冷卻液策略

PEM 燃料電池的「水熱平衡」指的是在維持膜充分濕潤的同時,避免電極淹沒。這一平衡由以下三個並行子系統共同實現:

  • 冷卻液迴路:去離子水與乙二醇混合液經水泵流經電堆內部的冷卻流道,帶走反應生成熱。流量與入口溫度的調節由 PID 控制器根據電堆出口溫度與電流密度動態計算。
  • 氣體增濕系統:入口氫氣與空氣需經過膜式增濕器(Membrane Humidifier),利用電堆出口廢氣的濕度與熱量對入口乾氣進行預增濕。增濕不足導致膜脫水,增濕過度則引發淹沒。
  • 吹掃與排水策略:低負載時,電壓降低不足以驅動液態水通過 GDL 排出,需要定時脈衝吹掃。控制器需根據電堆阻抗譜或壓降特徵判斷淹沒程度,觸發吹掃循環。

這三個子系統的時間常數差異巨大:電流變化在毫秒級,溫度變化在數十秒級,而膜的濕度平衡則需要數分鐘。因此,熱管理控制器必須採用多時間尺度的分層控制架構。

Hydrogen Fuel Cell Cooling System
Fig 2. 燃料電池堆冷卻系統架構:水泵、散熱器與去離子器迴路 Source: Unsplash

冷啟動熱管理與集總參數模型

低溫冷啟動是燃料電池系統最具挑戰性的工況之一。當環境溫度低於 0℃ 時,電堆內殘餘的水可能結冰,阻塞氣體通道並破壞 MEA 結構。成功的冷啟動要求在電堆溫度達到 0℃ 之前,產生的熱量足以熔化冰層而非使其增長。這需要精確的「熱慣性」規劃:在啟動初期以較小的電流密度運行,平衡產熱率與熱容的升溫速率。

以下 Python 程式碼展示了一個簡化的集總參數熱模型,用於模擬冷啟動過程中電堆溫度的上升曲線與熱平衡狀態。

StackThermalModel.py PYTHON 3.10 / THERMAL
import numpy as np

class StackThermalModel:
    def __init__(self):
        # Physical parameters
        self.C_th = 8500.0    # Thermal capacity [J/K]
        self.R_th = 0.08      # Thermal resistance to ambient [K/W]
        self.T_amb = -10.0    # Ambient temperature [°C]
        self.n_cells = 400     # Number of cells in stack
        self.E_th = 1.48       # Thermoneutral voltage [V]

    def heat_generation(self, current_a, v_cell):
        """
        Calculate waste heat from polarization loss.
        Q_gen = (E_th - V_cell) * I * n_cells
        """
        return (self.E_th - v_cell) * current_a * self.n_cells

    def thermal_dynamics(self, t, state, current_a, v_cell, coolant_temp, coolant_flow):
        """
        ODE: dT/dt = (Q_gen - Q_cool - Q_loss) / C_th
        state[0]: stack temperature [°C]
        """
        T_stack = state[0]

        # Heat generated
        Q_gen = self.heat_generation(current_a, v_cell)

        # Heat removed by coolant: Q = m_dot * cp * (T_stack - T_coolant_in)
        cp_coolant = 3500.0  # J/kg·K (water-glycol)
        Q_cool = coolant_flow * cp_coolant * (T_stack - coolant_temp)

        # Heat loss to ambient
        Q_loss = (T_stack - self.T_amb) / self.R_th

        # Temperature rate of change
        dT_dt = (Q_gen - Q_cool - Q_loss) / self.C_th
        return [dT_dt]

    def cold_start_simulation(self, current_profile, v_profile, dt):
        """
        Simulate stack warm-up from -10°C.
        current_profile: list of current setpoints [A]
        v_profile: list of cell voltages [V]
        dt: time step [s]
        """
        T = self.T_amb
        history = [T]
        coolant_temp = 20.0  # Coolant preheated for startup
        coolant_flow = 0.5    # kg/s

        for i in range(len(current_profile)):
            dT = self.thermal_dynamics(
                0, [T], current_profile[i], v_profile[i],
                coolant_temp, coolant_flow
            )[0]
            T += dT * dt

            # Switch to active cooling above 0°C
            if T > 5.0:
                coolant_flow = 2.0  # Increase cooling once above freezing

            history.append(T)

        return np.array(history)

# Simulation: 120 seconds of cold start, 400-cell stack
model = StackThermalModel()
currents = [50] * 120   # 50 A constant during warm-up
voltages = [0.72] * 120  # Average cell voltage
T_profile = model.cold_start_simulation(currents, voltages, dt=1.0)
# T_profile[-1] shows stack temperature after 120s
print(f"Stack temperature after 120s: {T_profile[-1]:.1f} °C")

結語:熱管理決定商業化上限

氫燃料電池的熱管理不僅僅是散熱問題,它從根本上決定了電堆的功率密度、耐久性與系統成本。從材料層面的高導熱 MEA 研發,到系統層面的多變量預測控制(MPC),再到整車層面的熱泵協同管理,每一層級的熱優化都直接影響氫能系統的商業競爭力。隨著重型卡車與船舶領域對氫燃料電池系統需求的增長,熱管理將成為決定 PEMFC 能否在交通運輸領域大規模替代內燃機的關鍵技術壁壘。

免責聲明 (Disclaimer):
本文內容僅供技術探討與工程教育參考。文中提及之燃料電池性能數據(效率、功率密度、壽命等)以學術文獻與產業公開報告為參考,實際表現因電堆設計、操作條件與系統整合程度而異。實施相關系統設計應遵循國際氫能安全標準(ISO 19880等)與當地法規。