Skip to content
cfd-lab:~/ko/posts/2026-06-25-otto-diesel-a…● online
NOTE #083DAY THU 유체역학DATE 2026.06.25UPDATED 2026.10.19READ 5 min read#Otto-Cycle#Diesel-Cycle#Thermodynamics#Flow-Phenomena#Compression-Ratio

가솔린 엔진은 왜 압축비 12에서 멈추는가 — 오토와 디젤 사이클

가열량 alpha를 3에서 6으로 올려도 r=9 효율은 0.5848에 붙어 있다. 움직이는 손잡이는 압축비다.

1919년, 정유회사의 토머스 미즐리는 엔진의 '딸깍' 소리를 쫓고 있었다. 압축비를 올리면 출력은 커진다. 선을 넘으면 점화 플러그보다 연료가 먼저 터진다. 금속을 두드리는 소리가 노킹(knock)이다. 왕복엔진을 네 개의 열역학 과정으로 접으면, 압축비가 효율을 어디서 고정하는지 식이 남는다. 같은 압축비에서 오토와 디젤 중 누가 위인지는 끝의 Python이 재 준다.

압축비를 올릴수록 세지는데, 어디서 멈췄나#

압축비(compression ratio, 실린더가 가장 클 때와 가장 작을 때 부피의 비)는 엔진 효율의 손잡이다. 공기를 더 세게 누를수록 같은 연료에서 일이 더 나온다.

온도가 먼저 한계다. 단열 압축은 부피를 줄이면서 온도를 올린다. 압축 끝 온도가 연료의 자연 발화점을 넘으면, 불꽃이 닿기 전에 혼합기가 한꺼번에 폭발한다. 노킹이다. 피스톤과 베어링이 먼저 나간다.

압축비 슬라이더를 올리면 P–V 고리가 좌우로 길어지고, 가열량 슬라이더는 그 고리를 위로만 민다.

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

색칠된 넓이가 한 사이클의 순일이다. 가열량을 올려도 효율 숫자는 거의 안 움직인다. 노킹이 보는 쪽은 고리의 왼쪽 끝, 압축이 끝난 온도다.

미즐리는 1921년 테트라에틸납으로 발화를 늦췄다. 옥탄가(antiknock 지수)가 여기서 나왔다. 첨가제도 끝이 있다. 가솔린 압축비는 보통 9~12에 머문다.

엔진을 네 과정으로 — 공기 표준 오토 사이클#

실제 엔진은 흡입·연소·배기가 뒤섞여 있다. 이를 다루기 위해 작동 유체를 고정된 양의 이상기체(공기)로 두고, 연소를 '외부에서 들어오는 열'로 바꾼다. 이렇게 단순화한 것이 오토(Otto) 사이클이다.

네 과정으로 닫힌다.

  • 1→2: 단열 압축 (피스톤이 공기를 누른다)
  • 2→3: 정적 가열 (부피 고정, 순간 연소)
  • 3→4: 단열 팽창 (공기가 피스톤을 민다 — 출력 행정)
  • 4→1: 정적 방열 (배기로 열을 버린다)

단열 과정에서는 압축비 r=V1/V2r=V_1/V_2와 온도가 다음으로 묶인다.

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

여기서 TT는 온도, kk는 비열비(정압비열/정적비열, 공기는 약 1.4)다. 압축비가 클수록 압축 끝 온도 T2T_2가 가파르게 오른다. 노킹의 씨앗이 이 식에 있다. 앞에서 압축비를 키울 때 고리가 좌우로 길어진 이유가 여기 있다. 그 팽창으로 속도를 사는 노즐은 목 뒤에서 넓어져야 빨라지는 흐름 쪽이다. 엔진의 팽창은 피스톤을 미는 일로 쓴다.

효율은 압축비 하나가 정한다#

열효율은 받은 열 대비 한 일이다. 정적 가열과 방열에서 열량은 온도차에 비례하므로,

η=1−QoutQin=1−T4−T1T3−T2\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=rk−1T_2/T_1 = T_3/T_4 = r^{k-1}을 대입하면 온도가 모두 약분되고, 놀랍도록 단순한 식만 남는다.

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

효율은 압축비 rr과 비열비 kk만 남는다. 연료를 얼마나 태웠는지(QinQ_{in})는 식에서 빠졌다. 가열량 슬라이더를 밀어도 효율이 버틴 이유다.

출력에 찍힌 56.5%는 r=8r=8의 1−8−0.41-8^{-0.4}이고, 63.0%는 r=12r=12다. k=1.4k=1.4라 손실항이 r−0.4r^{-0.4}다. 온도비는 T2/T1=1/(1−η)T_2/T_1 = 1/(1-\eta)로 뒤집힌다. r=8r=8이면 약 2.30, r=12r=12이면 약 2.70이다. 코드의 흡기 300 K를 그대로 쓰면 압축 끝은 대략 690 K와 810 K다. 압축비를 8에서 12로 네 칸 올리는 동안 효율은 6.5포인트, 온도는 약 120 K가 더 오른다. 효율 기울기는 눕고 온도 기울기는 남는다. 노킹이 효율보다 먼저 켜지는 자리다.

r=9r=9의 닫힌 식은 0.5848이다. 손실항 1−0.5848=0.41521-0.5848=0.4152이므로 T2/T1T_2/T_1은 약 2.41, T2T_2는 약 722 K다. 가열 손잡이 alpha는 T3=T2αT_3 = T_2 \alpha라서 3이면 T3T_3가 약 2170 K, 6이면 약 4330 K다. T4=T1αT_4 = T_1 \alpha라 방열도 같은 배수로 커진다. qout/qin=T1/T2q_{out}/q_{in} = T_1/T_2에서 alpha는 약분된다. 열을 두 배 넣어도 0.5848이 고정되는 계산이다.

압축비 8이면 약 56%, 12면 약 63%다. 숫자만 보면 계속 올리고 싶다. 노킹이 12 근처에서 길을 막는다.

디젤은 정압 가열로 압축비의 벽을 넘는다#

루돌프 디젤은 다른 길을 택했다. 연료를 미리 섞지 않는다. 공기만 먼저 압축한다. 압축 끝 온도를 자연 발화점 위로 올린 뒤, 연료를 분사하면 닿는 즉시 탄다. 점화 플러그가 없다. 노킹을 일으킬 예혼합기가 아예 없으니, 압축비를 15~22까지 올릴 수 있다.

다른 점은 가열 방식이다. 연료가 천천히 분사되며 타기에, 부피가 늘어나는 동안 압력이 거의 일정하게 유지된다. 정적이 아니라 정압 가열이다.

여기서 새 무차원수가 등장한다. 차단비(cut-off ratio) rc=V3/V2r_c = V_3/V_2, 정압 가열로 부피가 몇 배 늘었는지다. 효율은 이렇게 바뀐다.

ηDiesel=1−1r k−1 rc k−1k (rc−1)\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 쪽으로 내리면 정압 가열이 정적 가열에 가까워진다. rc→1r_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%

차단비 슬라이더를 움직이면 호박색 곡선만 오르내리고, 가로축은 표의 압축비다.

기본값 rc=2r_c=2에서 차이는 r=8r=8에서 7.5포인트(56.5 대 49.0), r=12r=12에서 6.3포인트(63.0 대 56.7), r=22r=22에서도 5.0포인트(71.0 대 66.0)다. 간격은 줄지만 부호는 안 바뀐다. 슬라이더를 1.2로 내리면 두 곡선이 붙는다. rc=2r_c=2, k=1.4k=1.4일 때 디젤 식의 분수는 (21.4−1)/1.4(2^{1.4}-1)/1.4이다. 21.42^{1.4}는 약 2.639라 분수는 약 1.171이다. r=12r=12의 오토 손실 37.0%에 1.171을 곱하면 43.3%, 효율 56.7%가 표와 맞는다.

이제 상태 온도로 직접 효율을 만들어 닫힌 식과 대조한다.

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 시뮬레이션에서 가열 슬라이더가 효율을 바꾸지 못했던 이유가 코드로 확인된다.

12에서 멈출지, 차단비를 깎을지#

r=12r=12에서 오토는 63.0%, 차단비 2인 디젤은 56.7%다. 같은 압축비라는 조건만 보면 오토 쪽이다. 가솔린은 그 조건을 유지하지 못한다. 예혼합기가 노킹에 막혀 12 근처가 끝이다. 효율식 η=1−r−(k−1)\eta = 1 - r^{-(k-1)}은 압축비와 비열비만 남기고, 태우는 양은 출력의 크기만 정한다.

디젤은 공기만 압축해 천장을 치운 뒤 15~22로 간다. r=18r=18의 디젤은 63.2%라서 압축비 12의 오토 63.0%와 같은 줄에 선다. r=22r=22면 66.0%로 앞선다. 같은 압축비의 손해는 차단비 분수가 만든 것이고, 그걸 뒤집는 결정은 압축비를 더 허용하는 쪽이다. 압력이 떨어져 액체가 먼저 끓는 벽은 증기압이 온도보다 먼저인 캐비테이션에서 따로 본다.

도움이 됐다면 공유해주세요.