Solid-Propellant Rocket Motors

Solid propellant rocket motors store propellant as a solid grain within the combustion chamber. When the motor is ignited, the surfaces of the propellant grain burn and produce hot gas, which is expelled from the chamber through a nozzle to produce thrust.

However, in most solid rocket motors, no mechanism exists to control the chamber pressure and thrust during flight. Rather, the chamber pressure of a solid rocket motor arises from an equilibrium between exhaust generation from combustion and exhaust discharge through the nozzle.

The rest of this page reviews the fundamentals solid propellants, and demonstrates the use of proptools.solid to predict the performance of a solid rocket motor.

Applications of Solid Rocket Motors

Compared to liquid-propellant rocket engines, solid propellant motors are mechanically simpler, require less support equipment and time to prepare for launch, and can be stored for long times loaded and ready for launch. Therefore, solid motors are preferred for most military applications, which may need to be fired from mobile launchers (e.g. tactical missiles) or be quickly ready for launch after many years of storage (e.g. strategic missiles). The mechanical simplicity of solid motors is also favors their use in some space-launch applications.

Propellant Ingredients

Chemical requirements of solid propellants

A solid propellant contains both fuel and oxidizer mixed together. This is different from most other combustion systems, where the fuel and oxidizer are only mixed just before combustion (e.g. internal combustion engines, torches, liquid bi-propellant rocket engines). This poses a chemistry challenge: the propellant ingredients must react energetically with each other, but also be safely stored and handled while mixed together. Clearly, a formulation which spontaneously ignites during mixing has no practical value as a storable solid propellant. A propellant must also not ignite when exposed to mechanical shock, heat or electrostatic discharges during handling. A propellant which is resistant to these accidental ignition sources is said to have low sensitivity. In chemical terms, low sensitivity roughly requires that the combustion reaction have high activation energy.

A further difference between solid rocket motors and most other combustion devices is that the motor contains all its propellant in the combustion chamber, rather than gradually injecting it as it is to be burned. This means that the rate of propellant consumption is not governed by a throttle or injector, but by the chemical dynamics of the combustion reaction. The propellant must burn at a stable and predictable rate. Ingredient sets which react very quickly may be useful as explosives, but not as propellants.

In summary, the choice of ingredients must produce a solid propellant which:

  1. stores a large amount of chemical potential energy, and reacts to provide hot gas for propulsion
  2. is resistant to accidental ignition during production, storage and handling
  3. burns at a stable and predictable rate

Ammonium perchlorate composite propellant

Ammonium perchlorate composite propellant (APCP) is the most-used solid propellant composition in space launch applications (e.g. the Space Shuttle’s Reusable Solid Rocket Motor, Orbital ATK’s Star motor series). APCP is energetic (up to ~270 seconds of specific impulse), is resistant to accidental ignition, and will burn stably in a properly designed motor.

APCP contains a solid oxidizer (ammonium perchlorate) and (optionally) a powdered metal fuel, held together by a rubber-like binder. Ammonium perchlorate is a crystalline solid, which divided into small particles (10 to 500 μm) and dispersed though the propellant. During combustion, the ammonium perchlorate decomposes to produce a gas rich in oxidizing species. A polymer matrix, the binder, binds the oxidizer particles together, giving the propellant mechanical strength. The binder serves as a fuel, giving off hydrocarbon vapors during combustion. Additional fuel may be added as hot-burning metal powder dispersed in the binder.

_images/composite_propellant.png

A composite propellant consists of crystalline oxidizer particles, and possibly a metal fuel powder, dispersed in a polymer binder.

Combustion Process

The combustion process of a composite propellant has many steps, and the flame structure is complex. Although the propellant is a solid, important reactions, including combustion of the fuel with the oxidizer, occur in the gas phase. A set of flames hover over the surface of the burning propellant. These flames transfer heat to the propellant surface, causing its solid components to decompose into gases. The gaseous decomposition products contain fuel vapor and oxidizing species, which supply the flames with reactants.

Importantly, the combustion process contains a feedback loop. Heat from the flames vaporizes the surface, and vapor from the surface provides fuel and oxidizer to the flames. The rate at which this process proceeds depends on chemical kinetics, mass transfer, and heat transfer within the combustion zone. Importantly, the feedback rate depends on pressure. As we will see in the next section, the rate of propellant combustion determines the chamber pressure and thrust of a solid rocket motor.

_images/flame_structure.png

The typical flame structure of composite propellant combustion. Heat from the flames decomposes the ammonium perchlorate and binder, which in turn supply oxidizing (AP) and fuel (binder) gases to the flames.

Effect of pressure on burn rate

The flame structure described above causes the propellant to burn faster at higher pressures. At higher pressures, the gas phase is denser, causing reactions and diffusion to proceed more quickly. This moves the flame structure closer to the surface. The closer flames and denser conducing medium enhance heat transfer to the surface, which drives more decomposition, increasing the burn rate.

Although this dependence is complicated, it can be empirically described by Vieille’s Law, which relates the burn rate \(r\) to the chamber pressure \(p_c\) via two parameters:

\[r = a (p_c )^n\]

\(r\) is the rate at which the surface regresses, and has units of velocity. \(a\) is the burn rate coefficient, which has units of [velocity (pressure) -n]. \(n\) is the unitless burn rate exponent. The model parameters \(a, n\) must be determined by combustion experiments on the propellant.

Motor Internal Ballistics

The study of propellant combustion and fluid dynamics within a rocket motor is called internal ballistics. Internal ballistics can be used to estimate the chamber pressure and thrust of a motor.

Equilibrium chamber pressure

The operating chamber pressure of a solid motor is set by an equilibrium between exhaust generation from combustion and exhaust discharge through the nozzle. The chamber pressure of a solid rocket motor is related to the mass of combustion gas in the chamber by the Ideal Gas Law:

\[p_c = m R T_c \frac{1}{V_c}\]

where \(R\) is the specific gas constant of the combustion gases in the chamber, \(T_c\) is their temperature, and \(V_c\) is the chamber volume. Gas mass is added to the chamber by burning propellant, and mass flows out of the chamber through the nozzle. The rate of change of the chamber gas mass is:

\[\frac{d m}{d t} = \dot{m}_{combustion} - \dot{m}_{nozzle}\]

Ideal nozzle theory relates the mass flow through the nozzle to the chamber pressure and the Characteristic velocity:

\[\dot{m}_{nozzle} = \frac{p_c A_t}{c^*}\]

The rate of gas addition from combustion is:

\[\dot{m}_{combustion} = A_b \rho_s r(p_c)\]

where :math:’A_b’ is the burn area of the propellant, \(\rho_s\) is the density of the solid propellant, and \(r(p_c)\) is the burn rate (a function of chamber pressure).

At the equilibrium chamber pressure where the inflow and outflow rates are equal:

\[\frac{d m}{d t} = \dot{m}_{combustion} - \dot{m}_{nozzle} = 0\]
\[A_b \rho_s r(p_c) = \frac{p_c A_t}{c^*}\]
\[\begin{split}p_c &= \frac{A_b}{A_t} \rho_s c^* r(p_c) \\ &= K \rho_s c^* r(p_c)\end{split}\]

where \(K \equiv \frac{A_b}{A_t}\) is ratio of burn area to throat area. If the propellant burn rate is well-modeled by Vieille’s Law, the equilibrium chamber pressure can be solved for in closed form:

\[p_c = \left( K \rho_s c^* a \right)^{\frac{1}{1 - n}}\]

Consider an example motor. The motor burns a relatively slow-burning propellant with the following properties:

  • Burn rate exponent of 0.5, and a burn rate of 2.54 mm s -1 at 6.9 MPa
  • Exhaust ratio of specific heats of 1.26
  • Characteristic velocity of 1209 m s -1
  • Solid density of 1510 kg m -3

The motor has a burn area of 1.25 m 2, and a throat area of 839 mm 2 (diameter of 33 mm).

Plot the combustion and nozzle mass flow rates versus pressure:

"""Illustrate the chamber pressure equilibrium of a solid rocket motor."""

from matplotlib import pyplot as plt
import numpy as np

p_c = np.linspace(1e6, 10e6)    # Chamber pressure [units: pascal].

# Propellant properties
gamma = 1.26    # Exhaust gas ratio of specific heats [units: dimensionless].
rho_solid = 1510.    # Solid propellant density [units: kilogram meter**-3].
n = 0.5    # Propellant burn rate exponent [units: dimensionless].
a = 2.54e-3 * (6.9e6)**(-n)    # Burn rate coefficient, such that the propellant
# burns at 2.54 mm s**-1 at 6.9 MPa [units: meter second**-1 pascal**-n].
c_star = 1209.    # Characteristic velocity [units: meter second**-1].

# Motor geometry
A_t = 839e-6    # Throat area [units: meter**2].
A_b = 1.25    # Burn area [units: meter**2].

# Compute the nozzle mass flow rate at each chamber pressure.
# [units: kilogram second**-1].
m_dot_nozzle = p_c * A_t / c_star

# Compute the combustion mass addition rate at each chamber pressure.
# [units: kilogram second**-1].
m_dot_combustion = A_b * rho_solid * a * p_c**n

# Plot the mass rates
plt.plot(p_c * 1e-6, m_dot_nozzle, label='Nozzle')
plt.plot(p_c * 1e-6, m_dot_combustion, label='Combustion')
plt.xlabel('Chamber pressure [MPa]')
plt.ylabel('Mass rate [kg / s]')

# Find where the mass rates are equal (e.g. the equilibrium).
i_equil = np.argmin(abs(m_dot_combustion - m_dot_nozzle))
m_dot_equil = m_dot_nozzle[i_equil]
p_c_equil = p_c[i_equil]

# Plot the equilibrium point.
plt.scatter(p_c_equil * 1e-6, m_dot_equil, marker='o', color='black', label='Equilibrium')
plt.axvline(x=p_c_equil * 1e-6, color='grey', linestyle='--')

plt.title('Chamber pressure: stable equilibrium, $n =$ {:.1f}'.format(n))
plt.legend()
plt.show()

(Source code, png, hires.png, pdf)

_images/equilibrium_pressure.png

The nozzle and combustion mass flow rates are equal at 6.9 MPa: this is the equilibrium pressure of the motor. This equilibrium is stable:

  • At lower pressures, the combustion mass addition rate is higher than the nozzle outflow rate, so the mass of gas in the chamber will increase and the pressure will rise to the equilibrium value.
  • At higher pressures, the combustion mass addition rate is lower than the nozzle outflow rate, so the mass of gas in the chamber will decrease and the pressure will fall to the equilibrium value.

In general, a stable equilibrium pressure will exist for propellants with \(n < 1\) (i.e. burn rate is sub-linear in pressure).

We can use proptools to quickly find the chamber pressure and thrust of the example motor:

"""Find the chamber pressure and thrust of a solid rocket motor."""
from proptools import solid, nozzle

# Propellant properties
gamma = 1.26    # Exhaust gas ratio of specific heats [units: dimensionless].
rho_solid = 1510.    # Solid propellant density [units: kilogram meter**-3].
n = 0.5    # Propellant burn rate exponent [units: dimensionless].
a = 2.54e-3 * (6.9e6)**(-n)    # Burn rate coefficient, such that the propellant
# burns at 2.54 mm s**-1 at 6.9 MPa [units: meter second**-1 pascal**-n].
c_star = 1209.    # Characteristic velocity [units: meter second**-1].

# Motor geometry
A_t = 839e-6    # Throat area [units: meter**2].
A_b = 1.25    # Burn area [units: meter**2].

# Nozzle exit pressure [units: pascal].
p_e = 101e3

# Compute the chamber pressure [units: pascal].
p_c = solid.chamber_pressure(A_b / A_t, a, n, rho_solid, c_star)

# Compute the sea level thrust [units: newton].
F = nozzle.thrust(A_t, p_c, p_e, gamma)

print 'Chamber pressure = {:.1f} MPa'.format(p_c * 1e-6)
print 'Thrust (sea level) = {:.1f} kN'.format(F * 1e-3)
Chamber pressure = 6.9 MPa

Thrust (sea level) = 9.1 kN

Burn area evolution and thrust curves

In most propellant grain geometries, the burn area of the propellant grain changes as the flame front advances and propellant is consumed. This change in burn area causes the chamber pressure and thrust to change during the burn. The variation of thrust (or chamber pressure) with time is called a thrust curve. Thrust curves are classified as regressive (decreasing with time), neutral or progressive (increasing with time).

If we know how the burn area \(A_b\) varies with the flame front progress distance \(x\), we can use proptools to predict the thrust curve. For example, consider a cylindrical propellant with a hollow circular core. The core radius \(r_{in}\) is 0.15 m, the outer radius \(r_{out}\) is 0.20 m, and the length \(L\) is 1.0 m. The burn area is given by:

\[A_b(x) = 2 \pi (r_{in} + x) L\]
_images/example_grain.png

Dimensions of the example cylindrical propellant grain.

Assume that the propellant properties are the same as in the previous example. The nozzle throat area is still 839 mm 2, and the nozzle expansion area ratio is 8.

"""Plot the thrust curve of a solid rocket motor with a cylindrical propellant grain."""

from matplotlib import pyplot as plt
import numpy as np
from proptools import solid


# Grain geometry (Clinder with circular port)
r_in = 0.15    # Grain inner radius [units: meter].
r_out = 0.20    # Grain outer radius [units: meter].
length = 1.0    # Grain length [units: meter].

# Propellant properties
gamma = 1.26    # Exhaust gas ratio of specific heats [units: dimensionless].
rho_solid = 1510.    # Solid propellant density [units: kilogram meter**-3].
n = 0.5    # Propellant burn rate exponent [units: dimensionless].
a = 2.54e-3 * (6.9e6)**(-n)    # Burn rate coefficient, such that the propellant
# burns at 2.54 mm s**-1 at 6.9 MPa [units: meter second**-1 pascal**-n].
c_star = 1209.    # Characteristic velocity [units: meter second**-1].

# Nozzle geometry
A_t = 839e-6    # Throat area [units: meter**2].
A_e = 8 * A_t    # Exit area [units: meter**2].
p_a = 101e3    # Ambeint pressure during motor firing [units: pascal].

# Burning surface evolution
x = np.linspace(0, r_out - r_in)    # Flame front progress steps [units: meter].
A_b = 2 * np.pi * (r_in + x) * length    # Burn area at each flame progress step [units: meter**2].

# Compute thrust curve.
t, p_c, F = solid.thrust_curve(A_b, x, A_t, A_e, p_a, a, n, rho_solid, c_star, gamma)

# Plot results.
ax1 = plt.subplot(2, 1, 1)
plt.plot(t, p_c * 1e-6)
plt.ylabel('Chamber pressure [MPa]')

ax2 = plt.subplot(2, 1, 2)
plt.plot(t, F * 1e-3)
plt.ylabel('Thrust, sea level [kN]')
plt.xlabel('Time [s]')
plt.setp(ax1.get_xticklabels(), visible=False)

plt.tight_layout()
plt.subplots_adjust(hspace=0)
plt.show()

(Source code, png, hires.png, pdf)

_images/thrust_curve.png

Note that the pressure and thrust increase with time (the thrust curve is progressive). This grain has a progressive thrust curve because the burn area increases with \(x\) as the flame front moves outward from the initial core.

Solid motor designers have devised a wide variety of grain geometries to achieve different thrust curves.

_images/thrust_curves.png

Various grains and their thrust curves. Reprinted from Richard Nakka’s rocketry page.