Skip to content
cfd-lab:~/zh/posts/2026-06-25-otto-diesel-a…online
NOTE #085DAY THU 유체역학DATE 2026.06.25READ 4 min readWORDS 1,966#Otto-Cycle#Diesel-Cycle#Thermodynamics#유동현상#Compression-Ratio

汽油发动机为何止步于压缩比12 — 奥托与狄塞尔循环

用空气标准循环看压缩比、发动机效率与爆震之墙

1919年,炼油公司的研究员托马斯·米奇利在追查发动机里那种金属般"嗒嗒"声的来源。压缩比越高,输出越大,但越过某条线后,燃料会在火花塞点火之前自行爆炸。那种金属敲击声就是爆震(knock)。本文把复杂的往复式发动机简化为四个热力学过程——空气标准循环——来追踪压缩比如何决定效率,以及为什么汽油发动机不能一味提高它。最后用 Python 直接测量:相同压缩比下,奥托与狄塞尔谁更高效。

压缩比越高越强,却在哪里停下#

压缩比(compression ratio,气缸最大与最小时的体积之比)是发动机效率的旋钮。把空气压得越紧,就能从同样的燃料中取出更多的功。

麻烦在于温度。绝热压缩在缩小体积的同时也抬高温度。当压缩末端的温度越过燃料的自燃点,混合气会在火焰到达之前一齐爆炸。这就是爆震,它会损坏活塞和轴承。

米奇利在1921年加入四乙基铅来延迟着火。辛烷值(抗爆指数)的概念由此而来。但添加剂也有极限。汽油发动机的压缩比通常停在9到12之间。

把发动机化为四个过程 — 空气标准奥托循环#

真实发动机把进气、燃烧、排气混在一起。为了便于处理,我们把工质设为定量的理想气体(空气),并把燃烧换成"从外部进入的热量"。这样简化后的就是奥托(Otto)循环。

它由四个过程闭合。

  • 1→2:绝热压缩(活塞压缩空气)
  • 2→3:定容加热(体积固定,瞬间燃烧)
  • 3→4:绝热膨胀(空气推动活塞——做功冲程)
  • 4→1:定容放热(经排气丢弃热量)

在绝热过程中,压缩比 r=V1/V2r=V_1/V_2 与温度由下式相连。

T2T1=rk1\frac{T_2}{T_1} = r^{\,k-1}

其中 TT 是温度,kk 是比热比(定压比热/定容比热,空气约为1.4)。压缩比越大,压缩末端温度 T2T_2 上升越陡。爆震的种子正藏在这个式子里。

在下面的模拟中亲手操作一下。改变压缩比和加热量,就能看到 P–V 平面上闭合环如何变化。

Thermal efficiency η = 58.5% (k = 1.4, shaded area = net work)

加大压缩比,环会向左右拉长,阴影面积(一个循环的净功)随之增大。加大加热量,环会向上抬升,但效率数字几乎不动。下一节解释原因。

效率由压缩比一项决定#

热效率是所做的功除以所受的热。在定容加热与放热中,热量正比于温差,于是

η=1QoutQin=1T4T1T3T2\eta = 1 - \frac{Q_{out}}{Q_{in}} = 1 - \frac{T_4 - T_1}{T_3 - T_2}

其中 QinQ_{in} 是所受的热,QoutQ_{out} 是丢弃的热。代入绝热关系 T2/T1=T3/T4=rk1T_2/T_1 = T_3/T_4 = r^{k-1},温度全部约去,只剩下一个惊人简单的结果:

ηOtto=11rk1\eta_{\text{Otto}} = 1 - \frac{1}{r^{\,k-1}}

效率只由压缩比 rr 和比热比 kk 决定。烧了多少燃料(QinQ_{in})消失了。这就是为什么移动加热量滑块时效率数字几乎不变。

压缩比8约为56%,12约为63%。只看数字,会想一直往上提。但爆震在12附近挡住了去路。

狄塞尔用定压加热越过压缩比之墙#

鲁道夫·狄塞尔走了另一条路。他不预先混合燃料。只先压缩空气。把压缩末端温度抬到自燃点之上后,再喷入燃料,燃料一接触就燃烧。没有火花塞。既然没有会爆震的预混气,压缩比就能提到15到22。

不同之处在于加热方式。由于燃料缓慢喷入并燃烧,体积增大的同时压力几乎保持不变。是定压加热,而非定容。

这里出现一个新的无量纲数:截止比(cut-off ratio)rc=V3/V2r_c = V_3/V_2,即定压加热中体积膨胀了几倍。效率变为:

ηDiesel=11rk1rck1k(rc1)\eta_{\text{Diesel}} = 1 - \frac{1}{r^{\,k-1}}\,\frac{r_c^{\,k}-1}{k\,(r_c-1)}

这是奥托式子乘上一个分数的形式。当 rc>1r_c>1 时,那个分数总是大于1。也就是说,相同压缩比下狄塞尔不如奥托。但狄塞尔能把压缩比提得高得多,在真实发动机里反而以更高的效率收场。

相同压缩比下,奥托取胜#

把两条循环沿压缩比轴并排画出来,关系就一目了然。

有三点值得注意。其一,曲线越往右越平缓——压缩比每提高1所换来的效率越来越少(收益递减)。其二,在相同的 rr 下,青色(奥托)位于琥珀色(狄塞尔)之上。其三,红色带是汽油的现实极限。奥托必须在那条带之前停下,而狄塞尔穿过它,活在更右侧。

把截止比滑块往1.2方向拉,狄塞尔曲线就紧贴奥托。当 rc1r_c \to 1,定压加热趋近定容加热,两个式子重合。截止比衡量的是"狄塞尔离奥托走了多远"。

Python — 直接测量两个循环#

用代码确认:闭式真的来自状态温度。

import numpy as np
 
K = 1.4  # 空气的比热比 (cp/cv)
 
def otto_efficiency(r, k=K):
    """奥托循环:定容加热,压缩比 r"""
    return 1.0 - 1.0 / r ** (k - 1)
 
def diesel_efficiency(r, cutoff, k=K):
    """狄塞尔循环:定压加热,压缩比 r,截止比 cutoff"""
    return 1.0 - (1.0 / r ** (k - 1)) * (cutoff ** k - 1) / (k * (cutoff - 1))
 
for r in [8, 12, 18, 22]:
    eo = otto_efficiency(r)
    ed = diesel_efficiency(r, cutoff=2.0)
    print(f"r={r:2d}  Otto={eo*100:5.1f}%  Diesel(rc=2)={ed*100:5.1f}%")

输出:

r= 8  Otto= 56.5%  Diesel(rc=2)= 49.0%
r=12  Otto= 63.0%  Diesel(rc=2)= 56.7%
r=18  Otto= 68.5%  Diesel(rc=2)= 63.2%
r=22  Otto= 71.0%  Diesel(rc=2)= 66.0%

接着从状态温度直接构造效率,与闭式对照。

def otto_from_states(r, alpha, k=K):
    """从状态温度直接计算效率 (alpha = P3/P2,加热量旋钮)"""
    T1 = 300.0                 # K, 进气
    T2 = T1 * r ** (k - 1)     # 1->2 绝热压缩
    T3 = T2 * alpha            # 2->3 定容加热
    T4 = T3 / r ** (k - 1)     # 3->4 绝热膨胀
    q_in = T3 - T2             # cv 约去
    q_out = T4 - T1
    return 1.0 - q_out / q_in
 
print(otto_from_states(9, alpha=3.0))  # 0.5848...
print(otto_from_states(9, alpha=6.0))  # 0.5848...  加热量改变也相同
print(otto_efficiency(9))              # 0.5848...

三行的输出都是同样的 0.5848。把加热量旋钮 alpha 从3翻倍到6,效率纹丝不动。P–V 模拟中加热滑块为何改变不了效率,代码给出了确认。

一格压缩比的价值#

奥托循环的效率式 η=1r(k1)\eta = 1 - r^{-(k-1)} 一行,就装下了本文的一半。效率只由压缩比和比热比决定;烧多少决定的是输出的大小,而非效率。

汽油因预混气而撞上名为爆震的天花板,止步于压缩比12附近。狄塞尔只压缩空气,搬走了那块天花板,虽在相同压缩比下吃亏,却以更高的压缩比把亏损翻转过来。两种发动机的效率之差,归根结底是"在哪里加热(定容还是定压)"与"压缩比能提到多高"之间的拉锯。

如果对您有帮助,请分享。