主题041:电子器件热管理仿真

引言

随着电子技术的飞速发展,集成电路的集成度和工作频率不断提高,电子器件的功耗密度呈指数级增长。现代高性能芯片(如CPU、GPU、AI加速器)的功率密度已超过100 W/cm²,局部热点甚至可达1000 W/cm²以上。有效的热管理已成为制约电子设备性能和可靠性的关键因素。

电子器件热管理的核心挑战包括:

  • 高热流密度:芯片尺寸缩小但功耗增加
  • 温度均匀性:避免局部热点导致性能下降
  • 空间约束:便携式设备对散热系统的尺寸限制
  • 噪声限制:风扇等主动散热方式的噪声控制
  • 可靠性要求:温度循环和热应力对器件寿命的影响

本教程将系统介绍电子器件热管理的理论基础、设计方法和工程应用,并通过Python实现多个典型仿真案例。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

电子器件热特性基础

2.1 半导体器件发热机理

2.1.1 功耗组成

电子器件的功耗主要包括:

动态功耗(开关功耗)

P d y n a m i c = α C V 2 f P_{dynamic} = \alpha C V^2 f Pdynamic=αCV2f

其中:

  • α \alpha α:开关活动因子(0 < α \alpha α ≤ 1)
  • C C C:负载电容
  • V V V:工作电压
  • f f f:时钟频率

静态功耗(漏电流功耗)

P s t a t i c = V D D I l e a k a g e P_{static} = V_{DD} I_{leakage} Pstatic=VDDIleakage

随着工艺节点缩小,漏电流功耗占比逐渐增加,在7nm及以下工艺中可能超过50%。

短路功耗

P s h o r t = β ( V D D − 2 V t h ) 3 τ f 12 P_{short} = \beta (V_{DD} - 2V_{th})^3 \frac{\tau f}{12} Pshort=β(VDD2Vth)312τf

2.1.2 热点形成机理

芯片内部功耗分布不均匀导致热点形成:

  • 功能单元差异:ALU、Cache、控制单元的功耗密度不同
  • 工作负载变化:不同应用程序的功耗模式不同
  • 工艺偏差:制造过程中的参数不均匀性

热点温度可用以下公式估算:

T h o t s p o t = T a m b i e n t + R t h ⋅ P l o c a l + Δ T s p a t i a l T_{hotspot} = T_{ambient} + R_{th} \cdot P_{local} + \Delta T_{spatial} Thotspot=Tambient+RthPlocal+ΔTspatial

其中 Δ T s p a t i a l \Delta T_{spatial} ΔTspatial是由于横向热阻引起的空间温度梯度。

2.2 热阻网络分析

2.2.1 热阻概念

热阻 R t h R_{th} Rth定义为温度差与热流之比:

R t h = Δ T Q R_{th} = \frac{\Delta T}{Q} Rth=QΔT

单位:K/W 或 °C/W

一维导热热阻

R t h , c o n d = L k A R_{th,cond} = \frac{L}{k A} Rth,cond=kAL

其中:

  • L L L:材料厚度
  • k k k:导热系数
  • A A A:截面积

对流热阻

R t h , c o n v = 1 h A R_{th,conv} = \frac{1}{h A} Rth,conv=hA1

其中 h h h为对流换热系数。

接触热阻

R t h , c o n t a c t = 1 h c A R_{th,contact} = \frac{1}{h_c A} Rth,contact=hcA1

其中 h c h_c hc为接触换热系数,取决于表面粗糙度和接触压力。

2.2.2 等效热路模型

电子器件散热路径可用热阻网络表示:

芯片结温 T_j
    |
    R_jc (结壳热阻)
    |
芯片外壳 T_case
    |
    R_tim (热界面材料热阻)
    |
散热器基板 T_base
    |
    R_spreader (扩散热阻)
    |
散热翅片 T_fin
    |
    R_conv (对流热阻)
    |
环境温度 T_ambient

总热阻:

R t h , t o t a l = R j c + R t i m + R s p r e a d e r + R c o n v R_{th,total} = R_{jc} + R_{tim} + R_{spreader} + R_{conv} Rth,total=Rjc+Rtim+Rspreader+Rconv

结温计算:

T j = T a + P ⋅ R t h , t o t a l T_j = T_a + P \cdot R_{th,total} Tj=Ta+PRth,total

2.2.3 瞬态热响应

热容 C t h C_{th} Cth描述器件储存热能的能力:

C t h = ρ c p V C_{th} = \rho c_p V Cth=ρcpV

热时间常数:

τ = R t h C t h \tau = R_{th} C_{th} τ=RthCth

瞬态温度响应:

T ( t ) = T s s + ( T 0 − T s s ) e − t / τ T(t) = T_{ss} + (T_0 - T_{ss}) e^{-t/\tau} T(t)=Tss+(T0Tss)et/τ

其中 T s s T_{ss} Tss为稳态温度。

2.3 材料热物性

2.3.1 常用材料导热系数
材料 导热系数 (W/m·K) 应用场景
148 芯片衬底
400 散热器、热管
237 散热器、外壳
金刚石 2000 高导热衬底
氮化铝 170 陶瓷基板
氧化铍 250 高导热绝缘基板
硅脂 0.5-5 热界面材料
相变材料 0.5-3 热界面材料
2.3.2 各向异性材料

某些材料(如石墨、石墨烯)具有各向异性导热特性:

石墨片

  • 面内导热系数:1000-2000 W/m·K
  • 面外导热系数:5-20 W/m·K

热导率张量

k = [ k x x k x y k x z k y x k y y k y z k z x k z y k z z ] \mathbf{k} = \begin{bmatrix} k_{xx} & k_{xy} & k_{xz} \\ k_{yx} & k_{yy} & k_{yz} \\ k_{zx} & k_{zy} & k_{zz} \end{bmatrix} k= kxxkyxkzxkxykyykzykxzkyzkzz


芯片散热设计

3.1 芯片级热分析

3.1.1 功耗映射

芯片功耗分布通常以功耗图(Power Map)形式给出:

P(x,y) = Σ P_i · rect((x-x_i)/w_i, (y-y_i)/h_i)

其中 ( x i , y i ) (x_i, y_i) (xi,yi)为功能单元中心位置, w i , h i w_i, h_i wi,hi为尺寸。

3.1.2 热扩散方程

芯片内部温度分布满足:

ρ c p ∂ T ∂ t = k ∇ 2 T + Q ( x , y , z , t ) \rho c_p \frac{\partial T}{\partial t} = k \nabla^2 T + Q(x,y,z,t) ρcptT=k2T+Q(x,y,z,t)

边界条件:

  • 顶面:对流或接触散热
  • 底面:通常绝热或接触基板
  • 侧面:对流或绝热
3.1.3 热点缓解技术

动态热管理(DTM)

  • 动态电压频率调节(DVFS)
  • 时钟门控
  • 任务迁移

架构级优化

  • 功能单元分布优化
  • 热感知布局
  • 嵌入式微流道

3.2 封装热设计

3.2.1 封装类型对比
封装类型 热阻 (K/W) 应用场景
塑料DIP 50-100 低功耗IC
陶瓷QFP 20-40 中等功耗
BGA 10-25 高性能芯片
FC-BGA 5-15 高端CPU/GPU
裸片封装 2-8 功率器件
3.2.2 热过孔设计

PCB中的热过孔可降低热阻:

R t h , v i a = L k c u ⋅ n ⋅ π r 2 R_{th,via} = \frac{L}{k_{cu} \cdot n \cdot \pi r^2} Rth,via=kcunπr2L

其中:

  • n n n:过孔数量
  • r r r:过孔半径
  • L L L:板厚

优化参数:

  • 过孔直径:0.2-0.5 mm
  • 过孔间距:1-2 mm
  • 填充材料:铜或导热胶

3.3 先进冷却技术

3.3.1 微流道冷却

在芯片内部或基板中集成微流道:

热阻计算

R t h , m i c r o = 1 ρ c p Q + 1 h A R_{th,micro} = \frac{1}{\rho c_p Q} + \frac{1}{h A} Rth,micro=ρcpQ1+hA1

其中 Q Q Q为冷却液流量。

设计参数

  • 流道宽度:50-500 μm
  • 流道深度:100-1000 μm
  • 壁厚:50-200 μm

可实现热阻<0.1 K/W。

3.3.2 射流冲击冷却

高速冷却液直接冲击芯片表面:

N u = 0.5 R e 0.5 P r 0.4 Nu = 0.5 Re^{0.5} Pr^{0.4} Nu=0.5Re0.5Pr0.4

局部换热系数可达10,000-100,000 W/m²·K。

3.3.3 相变冷却

利用沸腾或冷凝的潜热:

池沸腾

q = μ l h f g [ g ( ρ l − ρ v ) σ ] 1 / 2 ( c p , l Δ T C s f h f g P r l n ) 3 q = \mu_l h_{fg} \left[ \frac{g(\rho_l - \rho_v)}{\sigma} \right]^{1/2} \left( \frac{c_{p,l} \Delta T}{C_{sf} h_{fg} Pr_l^n} \right)^3 q=μlhfg[σg(ρlρv)]1/2(CsfhfgPrlncp,lΔT)3

临界热流密度(CHF):

q C H F = 0.149 h f g ρ v [ σ g ( ρ l − ρ v ) ρ v 2 ] 1 / 4 q_{CHF} = 0.149 h_{fg} \rho_v \left[ \frac{\sigma g (\rho_l - \rho_v)}{\rho_v^2} \right]^{1/4} qCHF=0.149hfgρv[ρv2σg(ρlρv)]1/4


热界面材料

4.1 热界面材料类型

4.1.1 导热硅脂

由硅油和导热填料(氧化铝、氮化硼、银粉)组成:

  • 导热系数:0.5-5 W/m·K
  • 厚度:25-100 μm
  • 热阻:0.1-1 K·cm²/W

Bergman模型

k e f f = k m k d + 2 k m + 2 ϕ ( k d − k m ) k d + 2 k m − ϕ ( k d − k m ) k_{eff} = k_m \frac{k_d + 2k_m + 2\phi(k_d - k_m)}{k_d + 2k_m - \phi(k_d - k_m)} keff=kmkd+2kmϕ(kdkm)kd+2km+2ϕ(kdkm)

其中:

  • k m k_m km:基体导热系数
  • k d k_d kd:填料导热系数
  • ϕ \phi ϕ:填料体积分数
4.1.2 导热垫片

固态弹性材料,易于安装:

  • 导热系数:1-10 W/m·K
  • 厚度:0.5-5 mm
  • 压缩率:10-50%
4.1.3 相变材料

在特定温度下熔化填充空隙:

  • 相变温度:40-80°C
  • 导热系数:0.5-3 W/m·K(固态),2-5 W/m·K(液态)
  • 优点:长期稳定性好
4.1.4 金属基材料

液态金属

  • 导热系数:20-80 W/m·K
  • 导电性:需要绝缘处理

焊料

  • 导热系数:50-80 W/m·K
  • 长期可靠性问题

4.2 接触热阻机理

4.2.1 表面形貌

实际表面存在微观不平度:

  • 粗糙度 R a R_a Ra:0.1-10 μm
  • 峰谷高度差:1-50 μm

接触仅发生在微凸体顶端,实际接触面积约为名义面积的1-10%。

4.2.2 接触热阻模型

Cooper-Mikic-Yovanovich模型

R c o n t a c t = 1 1.25 k s ( P H ) 0.95 m σ A a A n R_{contact} = \frac{1}{1.25 k_s \left( \frac{P}{H} \right)^{0.95} \frac{m}{\sigma} \sqrt{\frac{A_a}{A_n}}} Rcontact=1.25ks(HP)0.95σmAnAa 1

其中:

  • k s = 2 k 1 k 2 / ( k 1 + k 2 ) k_s = 2k_1k_2/(k_1+k_2) ks=2k1k2/(k1+k2):等效导热系数
  • P P P:接触压力
  • H H H:较软材料硬度
  • m , σ m, \sigma m,σ:表面形貌参数

界面热阻

R i n t e r f a c e = R c o n t a c t + δ g a p k g a p A a R_{interface} = R_{contact} + \frac{\delta_{gap}}{k_{gap} A_a} Rinterface=Rcontact+kgapAaδgap

4.3 TIM性能测试

4.3.1 稳态法

R t h = T 1 − T 2 Q R_{th} = \frac{T_1 - T_2}{Q} Rth=QT1T2

ASTM D5470标准

  • 样品尺寸:Φ25.4 mm
  • 热流密度:10-100 W/cm²
  • 压力范围:0.1-3 MPa
4.3.2 瞬态法

激光闪射法测量热扩散系数:

α = L 2 t 1 / 2 ⋅ 1 π 2 \alpha = \frac{L^2}{t_{1/2}} \cdot \frac{1}{\pi^2} α=t1/2L2π21

导热系数:

k = α ρ c p k = \alpha \rho c_p k=αρcp


散热器优化

5.1 散热器类型

5.1.1 型材散热器

挤压铝型材是最常用的散热器形式:

翅片效率

η f = tanh ⁡ ( m L ) m L \eta_f = \frac{\tanh(mL)}{mL} ηf=mLtanh(mL)

其中:

m = 2 h k t m = \sqrt{\frac{2h}{k t}} m=kt2h

t t t为翅片厚度。

优化设计参数

  • 翅片间距:3-10 mm(自然对流),1-5 mm(强制对流)
  • 翅片厚度:1-3 mm
  • 基板厚度:5-15 mm
  • 翅片高度:20-100 mm
5.1.2 热管散热器

利用相变传热的高效散热器:

热管工作原理

  1. 蒸发段:工作液体吸热蒸发
  2. 蒸汽流动:压力差驱动至冷凝段
  3. 冷凝段:放热冷凝
  4. 液体回流:毛细力或重力驱动

热管热阻

R h e a t p i p e = R e v a p + R v a p o r + R c o n d + R w i c k R_{heatpipe} = R_{evap} + R_{vapor} + R_{cond} + R_{wick} Rheatpipe=Revap+Rvapor+Rcond+Rwick

典型值:0.01-0.1 K/W

热管极限

  • 毛细极限: Q m a x , c a p = ρ l h f g σ μ l A w K L e f f Q_{max,cap} = \frac{\rho_l h_{fg} \sigma}{\mu_l} \frac{A_w K}{L_{eff}} Qmax,cap=μlρlhfgσLeffAwK
  • 声速极限
  • 携带极限
  • 沸腾极限
5.1.3 均热板

二维热管,实现面内温度均匀化:

有效导热系数

k e f f = Q L A Δ T k_{eff} = \frac{Q L}{A \Delta T} keff=AΔTQL

可达10,000-50,000 W/m·K。

5.2 散热器优化方法

5.2.1 尺寸优化

在给定空间约束下最大化散热能力:

优化目标

min ⁡ R t h ( b , H , t , n ) s.t. V ≤ V m a x \min R_{th}(b, H, t, n) \quad \text{s.t.} \quad V \leq V_{max} minRth(b,H,t,n)s.t.VVmax

其中:

  • b b b:翅片间距
  • H H H:翅片高度
  • t t t:翅片厚度
  • n n n:翅片数量

解析优化

对于矩形直翅片,最优翅片间距:

b o p t = 2.7 ( ν α g β Δ T ) 1 / 4 b_{opt} = 2.7 \left( \frac{\nu \alpha}{g \beta \Delta T} \right)^{1/4} bopt=2.7(gβΔTνα)1/4

5.2.2 拓扑优化

基于密度法的散热器拓扑优化:

SIMP方法

k ( ρ ) = k m i n + ( k 0 − k m i n ) ρ p k(\rho) = k_{min} + (k_0 - k_{min}) \rho^p k(ρ)=kmin+(k0kmin)ρp

其中:

  • ρ \rho ρ:单元密度(0 ≤ ρ \rho ρ ≤ 1)
  • p p p:惩罚因子(通常p=3)

优化目标

  • 最小化热阻
  • 最小化压降
  • 多目标优化
5.2.3 翅片形状优化

梯形翅片

η t r a p e z o i d a l = tanh ⁡ ( m L e f f ) m L e f f ⋅ 1 1 + t t i p t b a s e \eta_{trapezoidal} = \frac{\tanh(mL_{eff})}{mL_{eff}} \cdot \frac{1}{1 + \frac{t_{tip}}{t_{base}}} ηtrapezoidal=mLefftanh(mLeff)1+tbasettip1

针翅散热器

N u D = C R e D m P r 1 / 3 Nu_D = C Re_D^m Pr^{1/3} NuD=CReDmPr1/3

其中:

  • C = 0.664 C = 0.664 C=0.664(层流)
  • m = 0.5 m = 0.5 m=0.5(层流)

5.3 风扇与风道设计

5.3.1 风扇特性曲线

风扇性能由P-Q曲线描述:

Δ P = P m a x ( 1 − Q Q m a x ) 2 \Delta P = P_{max} \left( 1 - \frac{Q}{Q_{max}} \right)^2 ΔP=Pmax(1QmaxQ)2

工作点:风扇曲线与系统阻力曲线的交点。

5.3.2 系统阻力

Δ P s y s t e m = K 1 2 ρ V 2 \Delta P_{system} = K \frac{1}{2} \rho V^2 ΔPsystem=K21ρV2

其中 K K K为阻力系数,包括:

  • 入口损失
  • 出口损失
  • 沿程摩擦
  • 局部阻力(翅片、拐角等)
5.3.3 风道优化

设计准则

  • 避免急转弯(曲率半径 > 2倍水力直径)
  • 入口导流设计
  • 出口扩散角 < 15°
  • 减少流动分离

热电冷却

6.1 热电效应基础

6.1.1 Seebeck效应

温差产生电势:

α = d V d T \alpha = \frac{dV}{dT} α=dTdV

其中 α \alpha α为Seebeck系数(μV/K)。

6.1.2 Peltier效应

电流产生吸热/放热:

Q P = α I T Q_P = \alpha I T QP=αIT

6.1.3 Thomson效应

电流在温度梯度场中的吸热:

Q T = τ I d T d x Q_T = \tau I \frac{dT}{dx} QT=τIdxdT

6.2 热电制冷器

6.2.1 工作原理

热电制冷器(TEC)利用Peltier效应实现主动制冷:

制冷量

Q c = α I T c − 1 2 I 2 R − K Δ T Q_c = \alpha I T_c - \frac{1}{2} I^2 R - K \Delta T Qc=αITc21I2RKΔT

其中:

  • α I T c \alpha I T_c αITc:Peltier吸热
  • 1 2 I 2 R \frac{1}{2} I^2 R 21I2R:焦耳热(一半流向冷端)
  • K Δ T K \Delta T KΔT:导热漏热

性能系数(COP)

C O P = Q c W = α I T c − 1 2 I 2 R − K Δ T α I Δ T + I 2 R COP = \frac{Q_c}{W} = \frac{\alpha I T_c - \frac{1}{2} I^2 R - K \Delta T}{\alpha I \Delta T + I^2 R} COP=WQc=αIΔT+I2RαITc21I2RKΔT

6.2.2 最大制冷量与最大COP

最大制冷量电流

I m a x , Q = α T c R I_{max,Q} = \frac{\alpha T_c}{R} Imax,Q=RαTc

最大COP电流

I m a x , C O P = α Δ T R ( 1 + Z T m − 1 ) I_{max,COP} = \frac{\alpha \Delta T}{R (\sqrt{1 + ZT_m} - 1)} Imax,COP=R(1+ZTm 1)αΔT

其中 Z = α 2 / ( R K ) Z = \alpha^2 / (RK) Z=α2/(RK)为优值系数。

6.2.3 热电材料
材料 ZT(室温) 应用场景
Bi₂Te₃ 1.0 商用TEC
PbTe 1.2 中温发电
SiGe 0.8 高温发电
SnSe 2.6 实验室阶段
纳米结构 2.0-3.0 研究前沿

6.3 TEC应用设计

6.3.1 级联设计

单级TEC的最大温差约70°C,级联可实现更大温差:

Δ T t o t a l = ∑ i = 1 n Δ T i \Delta T_{total} = \sum_{i=1}^{n} \Delta T_i ΔTtotal=i=1nΔTi

但COP随级数增加而降低。

6.3.2 温度控制

TEC可用于精确温度控制:

PID控制

I ( t ) = K p e ( t ) + K i ∫ e ( t ) d t + K d d e ( t ) d t I(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} I(t)=Kpe(t)+Kie(t)dt+Kddtde(t)

其中 e ( t ) = T t a r g e t − T a c t u a l e(t) = T_{target} - T_{actual} e(t)=TtargetTactual

响应时间

τ T E C ≈ m c p α I − K \tau_{TEC} \approx \frac{m c_p}{\alpha I - K} τTECαIKmcp


Python仿真实现

以下Python代码实现了6个电子器件热管理的工程案例仿真。

案例一:芯片结温计算与热阻网络分析

基于热阻网络模型计算芯片结温,分析各环节热阻贡献。

案例二:微流道冷却性能仿真

模拟芯片内部微流道冷却,分析流道几何参数对散热性能的影响。

案例三:热界面材料性能对比

对比不同类型TIM的导热性能,分析接触压力和厚度的影响。

案例四:散热器优化设计

优化翅片散热器的几何参数,平衡散热性能和压降。

案例五:热电制冷器性能分析

模拟TEC的制冷性能,分析电流、温差对COP的影响。

案例六:瞬态热响应与动态热管理

模拟芯片在负载变化时的瞬态温度响应,评估动态热管理策略。

详细代码见:run_simulation.py


总结与展望

7.1 技术发展趋势

  1. 浸没式冷却:将服务器完全浸入介电液体中,可实现PUE<1.03
  2. 两相冷却:利用沸腾和冷凝的潜热,热流密度可达1 kW/cm²
  3. 热电-对流混合冷却:结合TEC的主动制冷和对流的被动散热
  4. AI辅助热设计:机器学习优化散热结构和控制策略

7.2 设计工具推荐

  • 商用软件:FloTHERM, Icepak, COMSOL, ANSYS
  • 开源工具:OpenFOAM, Elmer, CalculiX
  • 芯片级工具:HotSpot, 3D-ICE

7.3 行业标准

  • JEDEC JESD51:集成电路热测试方法
  • ASTM D5470:热界面材料导热系数测试
  • IEC 62395:电子设备热管理

"""
主题041:电子器件热管理仿真
包含6个工程案例的Python实现
"""

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, FancyBboxPatch
from matplotlib.collections import LineCollection
import matplotlib.patches as mpatches
from scipy.optimize import minimize_scalar, minimize
from scipy.integrate import odeint
import warnings
warnings.filterwarnings('ignore')

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['mathtext.fontset'] = 'stix'

# 物理常数
k_si = 148  # 硅导热系数 W/m·K
k_cu = 400  # 铜导热系数 W/m·K
k_al = 237  # 铝导热系数 W/m·K
k_air = 0.026  # 空气导热系数 W/m·K
rho_air = 1.225  # 空气密度 kg/m³
cp_air = 1005  # 空气比热容 J/kg·K
nu_air = 1.5e-5  # 空气运动粘度 m²/s
Pr_air = 0.71  # 空气普朗特数

g = 9.81  # 重力加速度 m/s²

print("="*60)
print("主题041:电子器件热管理仿真")
print("="*60)

# ============================================================================
# 案例一:芯片结温计算与热阻网络分析
# ============================================================================
print("\n" + "="*60)
print("案例一:芯片结温计算与热阻网络分析")
print("="*60)

# 芯片参数
chip_power = 100  # W
chip_size = 0.02  # m (20mm x 20mm)
chip_thickness = 0.001  # m (1mm)
T_ambient = 25  # °C

# 封装热阻
R_jc = 0.5  # K/W (结壳热阻,FC-BGA封装)

# 热界面材料参数
tim_thickness = 0.05e-3  # m (50 μm)
tim_k = 3.0  # W/m·K
R_tim = tim_thickness / (tim_k * chip_size**2)

# 散热器参数 (铝型材)
heatsink_base_thickness = 5e-3  # m
heatsink_base_area = 0.05 * 0.05  # m² (50mm x 50mm)
n_fins = 20
fin_height = 0.04  # m (40mm)
fin_thickness = 2e-3  # m (2mm)
fin_spacing = (heatsink_base_area**0.5 - n_fins * fin_thickness) / (n_fins - 1)

# 计算翅片效率
h_natural = 10  # W/m²·K (自然对流)
m_fin = np.sqrt(2 * h_natural / (k_al * fin_thickness))
eta_fin = np.tanh(m_fin * fin_height) / (m_fin * fin_height)

# 散热器热阻
A_fins = n_fins * 2 * fin_height * (heatsink_base_area**0.5)
A_base = heatsink_base_area - n_fins * fin_thickness * (heatsink_base_area**0.5)
A_total = eta_fin * A_fins + A_base
R_heatsink = 1 / (h_natural * A_total)

# 扩散热阻 (简化计算)
R_spreader = 0.2  # K/W

# 总热阻
R_total = R_jc + R_tim + R_spreader + R_heatsink

# 结温计算
T_junction = T_ambient + chip_power * R_total
T_case = T_ambient + chip_power * (R_tim + R_spreader + R_heatsink)
T_heatsink_base = T_ambient + chip_power * R_heatsink

print(f"\n热阻分析:")
print(f"结壳热阻 R_jc: {R_jc:.3f} K/W")
print(f"TIM热阻 R_tim: {R_tim:.3f} K/W")
print(f"扩散热阻 R_spreader: {R_spreader:.3f} K/W")
print(f"散热器热阻 R_heatsink: {R_heatsink:.3f} K/W")
print(f"总热阻 R_total: {R_total:.3f} K/W")
print(f"\n温度分布:")
print(f"环境温度: {T_ambient:.1f}°C")
print(f"散热器基板温度: {T_heatsink_base:.1f}°C")
print(f"芯片外壳温度: {T_case:.1f}°C")
print(f"芯片结温: {T_junction:.1f}°C")

# 热阻贡献分析
R_values = [R_jc, R_tim, R_spreader, R_heatsink]
R_labels = ['R_jc\n(结壳)', 'R_tim\n(TIM)', 'R_spreader\n(扩散)', 'R_heatsink\n(散热器)']

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 热阻网络图
ax1 = axes[0]
ax1.set_xlim(0, 10)
ax1.set_ylim(0, 6)
ax1.axis('off')
ax1.set_title('芯片散热热阻网络', fontsize=14, fontweight='bold')

# 绘制热阻网络
y_pos = 5
x_positions = [1, 3, 5, 7, 9]
labels = ['T_j', 'R_jc', 'R_tim', 'R_spreader', 'R_heatsink', 'T_a']
temps = [T_junction, T_case, T_heatsink_base, T_heatsink_base, T_ambient, T_ambient]

for i, (x, label, temp) in enumerate(zip(x_positions, labels[:-1], temps[:-1])):
    if 'R' in label:
        # 绘制电阻符号
        rect = Rectangle((x-0.3, y_pos-0.3), 0.6, 0.6, fill=False, linewidth=2)
        ax1.add_patch(rect)
        ax1.text(x, y_pos+0.6, label, ha='center', fontsize=10)
        ax1.text(x, y_pos-0.6, f'{R_values[i-1]:.2f}', ha='center', fontsize=9, color='blue')
    else:
        # 绘制温度节点
        circle = plt.Circle((x, y_pos), 0.2, fill=True, color='red', alpha=0.7)
        ax1.add_patch(circle)
        ax1.text(x, y_pos+0.5, f'{label}\n{temp:.1f}°C', ha='center', fontsize=10)
    
    # 连接线
    if i < len(x_positions) - 1:
        ax1.plot([x+0.2, x_positions[i+1]-0.3], [y_pos, y_pos], 'k-', linewidth=2)

# 环境温度节点
circle = plt.Circle((x_positions[-1], y_pos), 0.2, fill=True, color='blue', alpha=0.7)
ax1.add_patch(circle)
ax1.text(x_positions[-1], y_pos+0.5, f'T_a\n{T_ambient:.1f}°C', ha='center', fontsize=10)
ax1.plot([x_positions[-2]+0.3, x_positions[-1]-0.2], [y_pos, y_pos], 'k-', linewidth=2)

# 热流标注
ax1.annotate('', xy=(5, 4.2), xytext=(5, 3.2),
            arrowprops=dict(arrowstyle='->', lw=2, color='red'))
ax1.text(5.3, 3.7, f'Q = {chip_power} W', fontsize=11, color='red', fontweight='bold')

# 热阻贡献饼图
ax2 = axes[1]
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']
wedges, texts, autotexts = ax2.pie(R_values, labels=R_labels, autopct='%1.1f%%',
                                     colors=colors, startangle=90)
ax2.set_title('各环节热阻贡献占比', fontsize=14, fontweight='bold')

plt.tight_layout()
plt.savefig('case1_thermal_resistance.png', dpi=150, bbox_inches='tight')
print("\n已保存 case1_thermal_resistance.png")

# 不同散热方案对比
print("\n" + "-"*50)
print("不同散热方案对比:")
scenarios = [
    ('无散热器', 50, 0.5 + 10 + 50),  # 仅自然对流
    ('小型散热器', 15, 0.5 + 0.1 + 0.2 + 15),
    ('中型散热器', 8, 0.5 + 0.1 + 0.2 + 8),
    ('大型散热器+风扇', 3, 0.5 + 0.1 + 0.2 + 3),
    ('水冷', 0.5, 0.5 + 0.05 + 0.1 + 0.5),
]

for name, R_hs, R_tot in scenarios:
    T_j = T_ambient + chip_power * R_tot
    status = "✓" if T_j < 85 else "✗"
    print(f"{name:20s}: R={R_tot:5.2f} K/W, T_j={T_j:5.1f}°C {status}")

print("\n案例一分析完成!")

# ============================================================================
# 案例二:微流道冷却性能仿真
# ============================================================================
print("\n" + "="*60)
print("案例二:微流道冷却性能仿真")
print("="*60)

# 微流道参数
channel_width = 100e-6  # m (100 μm)
channel_depth = 200e-6  # m (200 μm)
channel_length = 0.02  # m (20 mm)
n_channels = 50
wall_thickness = 50e-6  # m (50 μm)

# 冷却液参数 (水)
rho_water = 998  # kg/m³
cp_water = 4186  # J/kg·K
k_water = 0.6  # W/m·K
mu_water = 1e-3  # Pa·s
Pr_water = 7

# 流量
Q_flow = 100e-6 / 60  # m³/s (100 ml/min)

# 单通道截面积和湿周
A_channel = channel_width * channel_depth
P_wet = 2 * (channel_width + channel_depth)
D_h = 4 * A_channel / P_wet  # 水力直径

# 流速
v_channel = Q_flow / (n_channels * A_channel)

# 雷诺数
Re_channel = rho_water * v_channel * D_h / mu_water
print(f"\n流动参数:")
print(f"通道尺寸: {channel_width*1e6:.0f}μm × {channel_depth*1e6:.0f}μm")
print(f"通道数量: {n_channels}")
print(f"流速: {v_channel:.3f} m/s")
print(f"雷诺数: {Re_channel:.2f}")

# 换热系数 (层流或湍流)
if Re_channel < 2300:
    # 层流,充分发展
    Nu = 3.66  # 恒定壁温
    # 入口效应修正
    Gz = D_h / channel_length * Re_channel * Pr_water
    if Gz > 10:
        Nu = 3.66 + 0.0668 * Gz / (1 + 0.04 * Gz**(2/3))
else:
    # 湍流
    f = (0.79 * np.log(Re_channel) - 1.64)**(-2)
    Nu = (f/8) * (Re_channel - 1000) * Pr_water / (1 + 12.7 * (f/8)**0.5 * (Pr_water**(2/3) - 1))

h_channel = Nu * k_water / D_h

print(f"努塞尔数: {Nu:.3f}")
print(f"对流换热系数: {h_channel/1e3:.2f} kW/m²·K")

# 热阻计算
A_heat = n_channels * 2 * (channel_width + channel_depth) * channel_length
R_conv_micro = 1 / (h_channel * A_heat)
R_cond_wall = wall_thickness / (k_si * A_heat)
R_total_micro = R_cond_wall + R_conv_micro

print(f"\n热阻分析:")
print(f"对流热阻: {R_conv_micro*1e3:.3f} mK/W")
print(f"导热热阻: {R_cond_wall*1e3:.3f} mK/W")
print(f"总热阻: {R_total_micro*1e3:.3f} mK/W")

# 温升计算
q_heat = 500e3 * (channel_length * n_channels * (channel_width + wall_thickness))  # W
T_wall = T_ambient + q_heat * R_total_micro
dT_fluid = q_heat / (rho_water * Q_flow * cp_water)

print(f"\n温度分析:")
print(f"热流密度: {q_heat/(channel_length * n_channels * (channel_width + wall_thickness))/1e3:.1f} kW/m²")
print(f"壁面温度: {T_wall:.2f}°C")
print(f"流体温升: {dT_fluid:.2f}°C")

# 流道几何优化分析
print("\n" + "-"*50)
print("流道几何参数优化分析:")

channel_widths = np.linspace(50e-6, 300e-6, 50)
R_values_micro = []
h_values_micro = []

for w_ch in channel_widths:
    A_ch = w_ch * channel_depth
    P_w = 2 * (w_ch + channel_depth)
    D_h_ch = 4 * A_ch / P_w
    v_ch = Q_flow / (n_channels * A_ch)
    Re_ch = rho_water * v_ch * D_h_ch / mu_water
    
    if Re_ch < 2300:
        Nu_ch = 3.66
    else:
        f_ch = (0.79 * np.log(Re_ch) - 1.64)**(-2)
        Nu_ch = (f_ch/8) * (Re_ch - 1000) * Pr_water / (1 + 12.7 * (f_ch/8)**0.5 * (Pr_water**(2/3) - 1))
    
    h_ch = Nu_ch * k_water / D_h_ch
    A_h_ch = n_channels * P_w * channel_length
    R_ch = 1 / (h_ch * A_h_ch)
    
    R_values_micro.append(R_ch)
    h_values_micro.append(h_ch)

R_values_micro = np.array(R_values_micro)
h_values_micro = np.array(h_values_micro)

fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# 热阻随流道宽度变化
ax1 = axes[0]
ax1.plot(channel_widths * 1e6, R_values_micro * 1e3, 'b-', linewidth=2)
ax1.set_xlabel('流道宽度 (μm)', fontsize=11)
ax1.set_ylabel('热阻 (mK/W)', fontsize=11)
ax1.set_title('热阻 vs 流道宽度', fontsize=12, fontweight='bold')
ax1.grid(True, alpha=0.3)

# 换热系数随流道宽度变化
ax2 = axes[1]
ax2.plot(channel_widths * 1e6, h_values_micro / 1e3, 'r-', linewidth=2)
ax2.set_xlabel('流道宽度 (μm)', fontsize=11)
ax2.set_ylabel('换热系数 (kW/m²·K)', fontsize=11)
ax2.set_title('换热系数 vs 流道宽度', fontsize=12, fontweight='bold')
ax2.grid(True, alpha=0.3)

# 微流道结构示意图
ax3 = axes[2]
ax3.set_xlim(0, 10)
ax3.set_ylim(0, 6)
ax3.set_aspect('equal')
ax3.axis('off')
ax3.set_title('微流道结构示意图', fontsize=12, fontweight='bold')

# 绘制流道截面
for i in range(5):
    x = 1 + i * 1.8
    # 流道
    rect = Rectangle((x, 2), 1, 2, fill=True, facecolor='lightblue', edgecolor='blue', linewidth=2)
    ax3.add_patch(rect)
    # 壁面
    if i < 4:
        rect_wall = Rectangle((x+1, 2), 0.8, 2, fill=True, facecolor='gray', edgecolor='black', linewidth=1)
        ax3.add_patch(rect_wall)
    
    # 流动方向箭头
    if i == 2:
        ax3.annotate('', xy=(x+0.8, 3), xytext=(x+0.2, 3),
                    arrowprops=dict(arrowstyle='->', lw=2, color='red'))

ax3.text(5, 0.8, '冷却液流动方向', ha='center', fontsize=10, color='red')
ax3.text(5, 5.2, '芯片基板', ha='center', fontsize=10)

plt.tight_layout()
plt.savefig('case2_microchannel_cooling.png', dpi=150, bbox_inches='tight')
print("\n已保存 case2_microchannel_cooling.png")
print("\n案例二分析完成!")

# ============================================================================
# 案例三:热界面材料性能对比
# ============================================================================
print("\n" + "="*60)
print("案例三:热界面材料性能对比")
print("="*60)

# TIM类型参数
tim_types = {
    '导热硅脂': {'k': 3.0, 'thickness': 50e-6, 'pressure_sensitivity': 0.1},
    '导热垫片': {'k': 6.0, 'thickness': 200e-6, 'pressure_sensitivity': 0.3},
    '相变材料': {'k': 3.5, 'thickness': 100e-6, 'pressure_sensitivity': 0.2},
    '液态金属': {'k': 50.0, 'thickness': 30e-6, 'pressure_sensitivity': 0.05},
    '焊料': {'k': 60.0, 'thickness': 50e-6, 'pressure_sensitivity': 0.0},
}

contact_area = chip_size**2  # m²

print("\n不同TIM性能对比:")
print(f"{'材料类型':<15} {'导热系数':<12} {'厚度(μm)':<12} {'热阻(K/W)':<12} {'温升(°C)':<12}")
print("-" * 70)

tim_results = {}
for name, params in tim_types.items():
    k = params['k']
    t = params['thickness']
    R_tim = t / (k * contact_area)
    dT = chip_power * R_tim
    tim_results[name] = {'R': R_tim, 'dT': dT, 'params': params}
    print(f"{name:<15} {k:<12.1f} {t*1e6:<12.1f} {R_tim:<12.4f} {dT:<12.2f}")

# 接触压力影响分析
print("\n" + "-"*50)
print("接触压力对TIM性能的影响:")

pressures = np.linspace(0.1, 3.0, 30)  # MPa

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 热阻随压力变化
ax1 = axes[0]
colors_tim = ['blue', 'green', 'orange', 'red', 'purple']
for (name, params), color in zip(tim_types.items(), colors_tim):
    # 简化模型:热阻随压力降低
    base_R = params['thickness'] / (params['k'] * contact_area)
    pressure_factor = 1 - params['pressure_sensitivity'] * (1 - np.exp(-pressures))
    R_pressure = base_R * pressure_factor
    ax1.plot(pressures, R_pressure, '-', color=color, linewidth=2, label=name)

ax1.set_xlabel('接触压力 (MPa)', fontsize=11)
ax1.set_ylabel('热阻 (K/W)', fontsize=11)
ax1.set_title('TIM热阻 vs 接触压力', fontsize=12, fontweight='bold')
ax1.legend(loc='upper right')
ax1.grid(True, alpha=0.3)

# 厚度对热阻的影响
ax2 = axes[1]
thicknesses = np.linspace(20e-6, 300e-6, 100)
for (name, params), color in zip(tim_types.items(), colors_tim):
    k = params['k']
    R_thickness = thicknesses / (k * contact_area)
    ax2.plot(thicknesses * 1e6, R_thickness, '-', color=color, linewidth=2, label=f'{name} (k={k})')

ax2.set_xlabel('厚度 (μm)', fontsize=11)
ax2.set_ylabel('热阻 (K/W)', fontsize=11)
ax2.set_title('TIM热阻 vs 厚度', fontsize=12, fontweight='bold')
ax2.legend(loc='upper left')
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('case3_tim_comparison.png', dpi=150, bbox_inches='tight')
print("\n已保存 case3_tim_comparison.png")

# 推荐TIM选择
print("\n" + "-"*50)
print("TIM选择建议:")
print("• 低成本应用:导热硅脂")
print("• 易安装需求:导热垫片")
print("• 长期稳定性:相变材料")
print("• 高性能需求:液态金属(注意绝缘)")
print("• 永久连接:焊料(不可拆卸)")

print("\n案例三分析完成!")

# ============================================================================
# 案例四:散热器优化设计
# ============================================================================
print("\n" + "="*60)
print("案例四:散热器优化设计")
print("="*60)

# 散热器设计空间
base_size = 0.06  # m (60mm x 60mm)
max_volume = base_size**2 * 0.05  # m³ (最大高度50mm)

# 设计变量:翅片数量、高度、厚度
n_fins_range = np.arange(10, 41, 2)
fin_heights = np.linspace(0.02, 0.05, 20)

# 强制对流条件
v_air = 2.0  # m/s
Re_L = v_air * base_size / nu_air

# 平板对流换热系数
if Re_L < 5e5:
    Nu_L = 0.664 * Re_L**0.5 * Pr_air**(1/3)
else:
    Nu_L = (0.037 * Re_L**0.8 - 871) * Pr_air**(1/3)

h_forced = Nu_L * k_air / base_size
print(f"\n强制对流条件:")
print(f"风速: {v_air} m/s")
print(f"对流换热系数: {h_forced:.2f} W/m²·K")

# 优化分析
results = []
for n_f in n_fins_range:
    for h_f in fin_heights:
        # 假设固定翅片厚度
        t_f = 1.5e-3  # m
        
        # 计算翅片间距
        spacing = (base_size - n_f * t_f) / (n_f - 1) if n_f > 1 else base_size
        
        if spacing < 1e-3:  # 最小间距约束
            continue
        
        # 翅片效率
        m_f = np.sqrt(2 * h_forced / (k_al * t_f))
        eta_f = np.tanh(m_f * h_f) / (m_f * h_f)
        
        # 总表面积
        A_fins = n_f * 2 * h_f * base_size
        A_base = base_size**2 - n_f * t_f * base_size
        A_total_hs = eta_f * A_fins + A_base
        
        # 热阻
        R_hs = 1 / (h_forced * A_total_hs)
        
        # 压降估算(简化)
        Dh_channel = 2 * spacing * h_f / (spacing + h_f)
        Re_channel_hs = v_air * Dh_channel / nu_air
        f_hs = 64 / Re_channel_hs if Re_channel_hs < 2300 else 0.316 / Re_channel_hs**0.25
        dp = f_hs * (base_size / Dh_channel) * 0.5 * rho_air * v_air**2
        
        # 体积
        vol = base_size**2 * (5e-3 + h_f)
        
        results.append({
            'n_fins': n_f,
            'fin_height': h_f,
            'spacing': spacing,
            'R_heatsink': R_hs,
            'pressure_drop': dp,
            'volume': vol,
            'eta_fin': eta_f
        })

results = sorted(results, key=lambda x: x['R_heatsink'])
best_design = results[0]

print(f"\n优化结果:")
print(f"最优翅片数量: {best_design['n_fins']}")
print(f"最优翅片高度: {best_design['fin_height']*1e3:.1f} mm")
print(f"翅片间距: {best_design['spacing']*1e3:.2f} mm")
print(f"翅片效率: {best_design['eta_fin']:.3f}")
print(f"散热器热阻: {best_design['R_heatsink']:.4f} K/W")
print(f"压降: {best_design['pressure_drop']:.2f} Pa")

# 可视化
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# 热阻 vs 翅片数量
ax1 = axes[0]
nfins_unique = sorted(set([r['n_fins'] for r in results]))
R_by_nfins = {nf: [] for nf in nfins_unique}
for r in results:
    R_by_nfins[r['n_fins']].append(r['R_heatsink'])

R_min_by_nfins = [min(R_by_nfins[nf]) for nf in nfins_unique]
ax1.plot(nfins_unique, R_min_by_nfins, 'bo-', linewidth=2, markersize=6)
ax1.set_xlabel('翅片数量', fontsize=11)
ax1.set_ylabel('最小热阻 (K/W)', fontsize=11)
ax1.set_title('热阻 vs 翅片数量', fontsize=12, fontweight='bold')
ax1.grid(True, alpha=0.3)

# 热阻 vs 翅片高度
ax2 = axes[1]
hf_unique = sorted(set([r['fin_height'] for r in results]))
R_by_hf = {hf: [] for hf in hf_unique}
for r in results:
    R_by_hf[r['fin_height']].append(r['R_heatsink'])

R_min_by_hf = [min(R_by_hf[hf]) for hf in hf_unique]
ax2.plot(np.array(hf_unique)*1e3, R_min_by_hf, 'rs-', linewidth=2, markersize=6)
ax2.set_xlabel('翅片高度 (mm)', fontsize=11)
ax2.set_ylabel('最小热阻 (K/W)', fontsize=11)
ax2.set_title('热阻 vs 翅片高度', fontsize=12, fontweight='bold')
ax2.grid(True, alpha=0.3)

# 散热器结构示意图
ax3 = axes[2]
ax3.set_xlim(0, 10)
ax3.set_ylim(0, 6)
ax3.set_aspect('equal')
ax3.axis('off')
ax3.set_title('散热器结构示意图', fontsize=12, fontweight='bold')

# 基板
base_rect = Rectangle((1, 1), 8, 0.8, fill=True, facecolor='lightgray', edgecolor='black', linewidth=2)
ax3.add_patch(base_rect)

# 翅片
n_fins_draw = min(best_design['n_fins'], 15)
fin_spacing_draw = 8 / (n_fins_draw + 1)
fin_height_draw = min(best_design['fin_height'] * 100, 3.5)

for i in range(n_fins_draw):
    x = 1 + (i + 1) * fin_spacing_draw - 0.15
    fin_rect = Rectangle((x, 1.8), 0.3, fin_height_draw, fill=True, 
                         facecolor='silver', edgecolor='black', linewidth=1)
    ax3.add_patch(fin_rect)

ax3.text(5, 0.5, f'基板厚度: 5mm', ha='center', fontsize=9)
ax3.text(5, 5.5, f'翅片数量: {best_design["n_fins"]}\n翅片高度: {best_design["fin_height"]*1e3:.1f}mm', 
         ha='center', fontsize=10)

plt.tight_layout()
plt.savefig('case4_heatsink_optimization.png', dpi=150, bbox_inches='tight')
print("\n已保存 case4_heatsink_optimization.png")

print("\n案例四分析完成!")

# ============================================================================
# 案例五:热电制冷器性能分析
# ============================================================================
print("\n" + "="*60)
print("案例五:热电制冷器性能分析")
print("="*60)

# TEC参数 (商用Bi2Te3)
alpha_seebeck = 0.2  # V/K (塞贝克系数,200 μV/K × 1000对热电偶)
R_elec = 0.1  # Ω (电阻)
K_thermal = 0.4  # W/K (热导)

# 工作条件
T_cold = 20  # °C (目标冷端温度)
T_hot = 50  # °C (热端温度)
dT_tec = T_hot - T_cold

# 优值系数
ZT = alpha_seebeck**2 * (T_cold + 273.15) / (R_elec * K_thermal)
print(f"\nTEC参数:")
print(f"塞贝克系数: {alpha_seebeck*1e6:.1f} μV/K")
print(f"电阻: {R_elec*1e3:.1f} mΩ")
print(f"热导: {K_thermal:.2f} W/K")
print(f"优值系数 ZT: {ZT:.3f}")

# 电流范围
I_range = np.linspace(0.1, 20, 200)

# 计算制冷量和COP
Q_cooling = []
COP_values = []
Power_input = []

for I in I_range:
    # 制冷量 (Peltier吸热 - 焦耳热/2 - 导热漏热)
    Q_peltier = alpha_seebeck * I * (T_cold + 273.15)
    Q_joule = 0.5 * I**2 * R_elec
    Q_leak = K_thermal * dT_tec
    Qc = Q_peltier - Q_joule - Q_leak
    
    # 输入功率 (Peltier热 + 焦耳热)
    W_in = alpha_seebeck * I * dT_tec + I**2 * R_elec
    
    # COP
    cop = Qc / W_in if W_in > 0 else 0
    
    Q_cooling.append(max(Qc, 0))
    COP_values.append(max(cop, 0) if Qc > 0 else 0)
    Power_input.append(W_in)

Q_cooling = np.array(Q_cooling)
COP_values = np.array(COP_values)
Power_input = np.array(Power_input)

# 最优工作点
idx_max_Q = np.argmax(Q_cooling)
idx_max_COP = np.argmax(COP_values)

I_max_Q = I_range[idx_max_Q]
I_max_COP = I_range[idx_max_COP]
Q_max = Q_cooling[idx_max_Q]
COP_max = COP_values[idx_max_COP]

print(f"\n性能分析:")
print(f"最大制冷量: {Q_max:.3f} W @ I = {I_max_Q:.2f} A")
print(f"最大COP: {COP_max:.3f} @ I = {I_max_COP:.2f} A")

# 不同温差下的性能
print("\n" + "-"*50)
print("不同温差下的TEC性能:")
dT_values = [10, 20, 30, 40, 50, 60]
for dT in dT_values:
    # 最大制冷量电流
    T_c = T_hot - dT
    I_mq = alpha_seebeck * (T_c + 273.15) / R_elec
    Q_peltier_mq = alpha_seebeck * I_mq * (T_c + 273.15)
    Q_joule_mq = 0.5 * I_mq**2 * R_elec
    Q_leak_mq = K_thermal * dT
    Qc_mq = Q_peltier_mq - Q_joule_mq - Q_leak_mq
    print(f"ΔT = {dT}°C: 最大制冷量 = {max(Qc_mq, 0):.3f} W")

# 可视化
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# 制冷量 vs 电流
ax1 = axes[0]
ax1.plot(I_range, Q_cooling, 'b-', linewidth=2, label='制冷量')
ax1.axvline(I_max_Q, color='r', linestyle='--', label=f'最大制冷量点 (I={I_max_Q:.1f}A)')
ax1.set_xlabel('电流 (A)', fontsize=11)
ax1.set_ylabel('制冷量 (W)', fontsize=11)
ax1.set_title('TEC制冷量 vs 电流', fontsize=12, fontweight='bold')
ax1.legend()
ax1.grid(True, alpha=0.3)
ax1.set_xlim(0, 20)

# COP vs 电流
ax2 = axes[1]
ax2.plot(I_range, COP_values, 'g-', linewidth=2, label='COP')
ax2.axvline(I_max_COP, color='r', linestyle='--', label=f'最大COP点 (I={I_max_COP:.1f}A)')
ax2.set_xlabel('电流 (A)', fontsize=11)
ax2.set_ylabel('COP', fontsize=11)
ax2.set_title('TEC性能系数 vs 电流', fontsize=12, fontweight='bold')
ax2.legend()
ax2.grid(True, alpha=0.3)
ax2.set_xlim(0, 20)

# 输入功率 vs 制冷量
ax3 = axes[2]
ax3.plot(Power_input, Q_cooling, 'm-', linewidth=2)
ax3.set_xlabel('输入功率 (W)', fontsize=11)
ax3.set_ylabel('制冷量 (W)', fontsize=11)
ax3.set_title('制冷量 vs 输入功率', fontsize=12, fontweight='bold')
ax3.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('case5_thermoelectric_cooling.png', dpi=150, bbox_inches='tight')
print("\n已保存 case5_thermoelectric_cooling.png")

print("\n案例五分析完成!")

# ============================================================================
# 案例六:瞬态热响应与动态热管理
# ============================================================================
print("\n" + "="*60)
print("案例六:瞬态热响应与动态热管理")
print("="*60)

# 芯片热模型参数
C_th_chip = 0.5  # J/K (芯片热容)
R_th_chip = 0.5  # K/W (芯片到外壳热阻)
C_th_heatsink = 50  # J/K (散热器热容)
R_th_heatsink = 2.0  # K/W (散热器到环境热阻)

# 动态功耗曲线 (模拟CPU负载变化)
def power_profile(t):
    """时变功耗曲线"""
    # 周期性负载变化
    base_power = 50  # W
    peak_power = 150  # W
    period = 60  # s
    
    # 方波负载
    if (t % period) < period / 2:
        return peak_power
    else:
        return base_power

# 动态热管理策略
def dtm_strategy(T_j, T_target=85, T_max=95):
    """动态热管理策略"""
    if T_j < T_target:
        return 1.0  # 全速运行
    elif T_j < T_max:
        # 线性降频
        return max(0.5, 1.0 - (T_j - T_target) / (T_max - T_target) * 0.5)
    else:
        return 0.5  # 最低频率

# 热路微分方程
def thermal_model(y, t, use_dtm=False):
    """二阶热路模型"""
    T_j, T_h = y  # 结温,散热器温度
    
    P_in = power_profile(t)
    
    if use_dtm:
        throttle = dtm_strategy(T_j)
        P_in *= throttle
    
    # 结温方程
    dTj_dt = (P_in - (T_j - T_h) / R_th_chip) / C_th_chip
    
    # 散热器温度方程
    dTh_dt = ((T_j - T_h) / R_th_chip - (T_h - T_ambient) / R_th_heatsink) / C_th_heatsink
    
    return [dTj_dt, dTh_dt]

# 仿真时间
t_sim = np.linspace(0, 300, 1000)  # 5分钟

# 无DTM的瞬态响应
y0 = [T_ambient, T_ambient]
solution_no_dtm = odeint(thermal_model, y0, t_sim, args=(False,))
T_j_no_dtm = solution_no_dtm[:, 0]
T_h_no_dtm = solution_no_dtm[:, 1]

# 有DTM的瞬态响应
solution_with_dtm = odeint(thermal_model, y0, t_sim, args=(True,))
T_j_with_dtm = solution_with_dtm[:, 0]
T_h_with_dtm = solution_with_dtm[:, 1]

# 计算功耗曲线
P_input = [power_profile(t) for t in t_sim]

# 计算有DTM时的实际功耗
P_actual_dtm = []
for i, t in enumerate(t_sim):
    P_base = power_profile(t)
    throttle = dtm_strategy(T_j_with_dtm[i])
    P_actual_dtm.append(P_base * throttle)

print(f"\n瞬态热分析:")
print(f"无DTM时最高结温: {np.max(T_j_no_dtm):.1f}°C")
print(f"有DTM时最高结温: {np.max(T_j_with_dtm):.1f}°C")
print(f"温度降低: {np.max(T_j_no_dtm) - np.max(T_j_with_dtm):.1f}°C")

# 计算性能损失
energy_no_dtm = np.trapezoid(P_input, t_sim)
energy_with_dtm = np.trapezoid(P_actual_dtm, t_sim)
performance_loss = (energy_no_dtm - energy_with_dtm) / energy_no_dtm * 100
print(f"性能损失: {performance_loss:.1f}%")

# 可视化
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# 温度响应对比
ax1 = axes[0, 0]
ax1.plot(t_sim, T_j_no_dtm, 'r-', linewidth=2, label='无DTM')
ax1.plot(t_sim, T_j_with_dtm, 'b-', linewidth=2, label='有DTM')
ax1.axhline(85, color='orange', linestyle='--', label='目标温度')
ax1.axhline(95, color='red', linestyle='--', label='最高温度限制')
ax1.set_xlabel('时间 (s)', fontsize=11)
ax1.set_ylabel('结温 (°C)', fontsize=11)
ax1.set_title('芯片瞬态温度响应', fontsize=12, fontweight='bold')
ax1.legend()
ax1.grid(True, alpha=0.3)

# 功耗曲线
ax2 = axes[0, 1]
ax2.plot(t_sim, P_input, 'g-', linewidth=2, label='输入功耗')
ax2.plot(t_sim, P_actual_dtm, 'm--', linewidth=2, label='实际功耗(有DTM)')
ax2.set_xlabel('时间 (s)', fontsize=11)
ax2.set_ylabel('功耗 (W)', fontsize=11)
ax2.set_title('功耗曲线', fontsize=12, fontweight='bold')
ax2.legend()
ax2.grid(True, alpha=0.3)

# 散热器温度
ax3 = axes[1, 0]
ax3.plot(t_sim, T_h_no_dtm, 'r-', linewidth=2, label='无DTM')
ax3.plot(t_sim, T_h_with_dtm, 'b-', linewidth=2, label='有DTM')
ax3.set_xlabel('时间 (s)', fontsize=11)
ax3.set_ylabel('散热器温度 (°C)', fontsize=11)
ax3.set_title('散热器瞬态温度', fontsize=12, fontweight='bold')
ax3.legend()
ax3.grid(True, alpha=0.3)

# 热容影响分析
ax4 = axes[1, 1]
C_values = [0.1, 0.5, 1.0, 2.0, 5.0]
tau_values = []
for C in C_values:
    tau = C * (R_th_chip + R_th_heatsink)
    tau_values.append(tau)
    ax4.plot(t_sim, T_j_no_dtm * (0.5/C)**0.5 + T_ambient * (1 - (0.5/C)**0.5), 
             '-', linewidth=2, label=f'C={C} J/K, τ={tau:.1f}s')

ax4.set_xlabel('时间 (s)', fontsize=11)
ax4.set_ylabel('结温 (°C)', fontsize=11)
ax4.set_title('热容对瞬态响应的影响', fontsize=12, fontweight='bold')
ax4.legend()
ax4.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('case6_transient_thermal.png', dpi=150, bbox_inches='tight')
print("\n已保存 case6_transient_thermal.png")

print("\n案例六分析完成!")

# ============================================================================
# 总结
# ============================================================================
print("\n" + "="*60)
print("所有案例仿真完成!")
print("="*60)

print("\n生成的文件:")
print("1. case1_thermal_resistance.png - 芯片结温计算与热阻网络分析")
print("2. case2_microchannel_cooling.png - 微流道冷却性能仿真")
print("3. case3_tim_comparison.png - 热界面材料性能对比")
print("4. case4_heatsink_optimization.png - 散热器优化设计")
print("5. case5_thermoelectric_cooling.png - 热电制冷器性能分析")
print("6. case6_transient_thermal.png - 瞬态热响应与动态热管理")

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐