CHEM-211 · Lesson 7 of 12 · 24 min

Acid-base equilibria and buffers

Acids and bases are everywhere in analysis. Most titrations are acid–base titrations; the extent of complexation, precipitation and many redox reactions depends on pH; chromatographic separations and electrophoresis are controlled by pH; and almost every method begins by putting the sample into a buffer. CHEM-102 introduced Ka, Kb, the Henderson–Hasselbalch equation and computed titration curves for a monoprotic acid. This lesson builds the tools analysts use for any acid–base system: a general way to compute pH exactly, the fractional composition of polyprotic acids, the special case of amphiprotic species, buffer capacity, and the practical design of buffers, including the effect of ionic strength.

Strong acids and bases, exactly

For a strong acid at concentration C, the charge balance [H⁺] = [OH⁻] + [A⁻] with [A⁻] = C gives [H⁺]² − C[H⁺] − Kw = 0. Above about 10⁻⁶ M, [H⁺] ≈ C; below it, water's ionization matters, as lesson 6 showed for 10⁻⁸ M HCl. Strong bases behave symmetrically. Remember that Kw = 1.01 × 10⁻¹⁴ only at 25 °C; it rises to 5.5 × 10⁻¹⁴ at 50 °C, so neutral water at 50 °C has pH 6.63. A pH of 7 means neutral only at 25 °C.

Weak acids: the general picture

For a weak acid HA of formal concentration F, the systematic treatment gives three equations: the charge balance [H⁺] = [A⁻] + [OH⁻], the mass balance F = [HA] + [A⁻], and the two equilibrium expressions for Ka and Kw. Eliminating everything but [H⁺] gives a cubic:

\[[\mathrm{H^+}]^3 + K_a[\mathrm{H^+}]^2 - (K_w + K_aF)[\mathrm{H^+}] - K_aK_w = 0\]

In the usual case, [OH⁻] is negligible and the familiar quadratic x²/(F − x) = Ka follows. The cubic matters only when the acid is very weak or very dilute, so that water contributes comparable H⁺. Rather than memorizing which approximation applies when, an analyst can solve the charge balance numerically, which is always exact.

Fractional composition

The key idea for every acid–base problem is the fraction of a weak acid present in each form, which depends only on pH. For a monoprotic acid,

\[\alpha_{\mathrm{HA}} = \frac{[\mathrm{H^+}]}{[\mathrm{H^+}] + K_a} \qquad \alpha_{\mathrm{A^-}} = \frac{K_a}{[\mathrm{H^+}] + K_a}\]

These follow from the mass balance and Ka: [A⁻] = Ka[HA]/[H⁺], so F = [HA](1 + Ka/[H⁺]), and α_HA = [HA]/F = [H⁺]/([H⁺] + Ka). At pH = pKa the two fractions are equal (0.5 each); one pH unit below pKa, α_HA = 0.91; two units below, 0.99.

For a diprotic acid H₂A with constants K₁ and K₂, the same algebra gives a common denominator D = [H⁺]² + K₁[H⁺] + K₁K₂ and

\[\alpha_{\mathrm{H_2A}} = \frac{[\mathrm{H^+}]^2}{D} \qquad \alpha_{\mathrm{HA^-}} = \frac{K_1[\mathrm{H^+}]}{D} \qquad \alpha_{\mathrm{A^{2-}}} = \frac{K_1K_2}{D}\]

The pattern extends to any number of protons: the term for the species that has lost j protons is the product of the first j acid constants times [H⁺] raised to the power (n − j). Phosphoric acid, with pKa values of 2.15, 7.20 and 12.35, illustrates it well.

Four curves of fraction against pH from 0 to 14 for phosphoric acid species. H₃PO₄ dominates below pH 2.15; H₂PO₄⁻ dominates between 2.15 and 7.20, reaching nearly 1 around pH 4.7; HPO₄²⁻ dominates between 7.20 and 12.35, peaking near pH 9.8; PO₄³⁻ dominates above 12.35. Each adjacent pair crosses at 0.5 at the corresponding pKa, marked with dashed lines.
Fractional composition of phosphoric acid

A fractional composition diagram answers practical questions at a glance. At the pH of blood (7.4), phosphate is about 61 % HPO₄²⁻ and 39 % H₂PO₄⁻; in a soft drink at pH 2.5, it is mostly H₂PO₄⁻ with a good deal of H₃PO₄; and almost no PO₄³⁻ exists below pH 11. Because the pKa values are well separated, at most two species are significant at any pH, a fact used constantly in the approximations that follow.

Amphiprotic species

An amphiprotic species can act as both an acid and a base. HCO₃⁻, H₂PO₄⁻, HPO₄²⁻ and amino acids in their zwitterion form are common examples. What is the pH of a solution of NaHA? The species HA⁻ can lose a proton (K₂) or gain one (Kb = Kw/K₁). Systematic treatment gives

\[[\mathrm{H^+}] = \sqrt{\frac{K_1K_2F + K_1K_w}{K_1 + F}}\]

When F is much larger than K₁ and K₂F is much larger than Kw, this simplifies to the remarkable result [H⁺] ≈ √(K₁K₂), or pH ≈ ½(pK₁ + pK₂), independent of concentration. A solution of NaH₂PO₄ therefore has pH ≈ ½(2.15 + 7.20) = 4.68, and Na₂HPO₄ has pH ≈ ½(7.20 + 12.35) = 9.78. These are the pH values at the first and second equivalence points when phosphoric acid is titrated with base, which is why they reappear in lesson 8.

Worked problem

pH of sodium bicarbonate

Find the pH of 0.050 M NaHCO₃ (carbonic acid pK₁ = 6.35, pK₂ = 10.33).

Show solution
  1. K₁ = 4.47 × 10⁻⁷, K₂ = 4.68 × 10⁻¹¹, F = 0.050 M.
  2. [H⁺] = √[(K₁K₂F + K₁Kw)/(K₁ + F)] = √[(1.046 × 10⁻¹⁸ + 4.47 × 10⁻²¹)/0.0500004] = 4.58 × 10⁻⁹ M.
  3. The simple formula gives pH = ½(6.35 + 10.33) = 8.34.

Answer: pH = 8.34, the familiar pH of baking soda solution; the full formula agrees to the second decimal.

A general pH solver

Any mixture of acids, bases and salts can be handled the same way: write the charge balance using the fractional compositions of every acid–base system, so that it depends only on [H⁺], and find the [H⁺] that satisfies it. Because the charge balance changes sign monotonically as pH increases, a bisection search between pH −1 and 15 always converges. The code below implements this and uses it for several solutions you could otherwise solve only with separate approximations.

One charge-balance solver for every acid–base solution
import math
KW = 1.0e-14

def fractions(Ka, h):
    """Fractions of H_nA, H_(n-1)A, ..., A for acid constants Ka at [H+] = h."""
    terms, p = [1.0], 1.0
    for K in Ka:
        p *= K / h
        terms.append(p)
    tot = sum(terms)
    return [t / tot for t in terms]

def solve_pH(systems, cations=0.0, anions=0.0):
    """systems: list of (Ka list, formal conc, charge of fully protonated form).
    cations/anions: concentrations of spectator charge, e.g. Na+ and Cl-."""
    def balance(pH):
        h = 10 ** -pH
        charge = h - KW / h + cations - anions
        for Ka, F, z0 in systems:
            for j, a in enumerate(fractions(Ka, h)):
                charge += F * a * (z0 - j)
        return charge
    lo, hi = -1.0, 15.0
    for _ in range(100):
        mid = (lo + hi) / 2
        if balance(mid) > 0: lo = mid
        else: hi = mid
    return mid

acetic = [10 ** -4.76]
phos = [10 ** -2.15, 10 ** -7.20, 10 ** -12.35]
carb = [10 ** -6.35, 10 ** -10.33]
nh4 = [10 ** -9.25]
print(f"0.10 M acetic acid:          pH {solve_pH([(acetic, 0.10, 0)]):.2f}")
print(f"1.0e-5 M acetic acid:        pH {solve_pH([(acetic, 1e-5, 0)]):.2f}")
print(f"0.10 M ammonia:              pH {solve_pH([(nh4, 0.10, 1)]):.2f}")
print(f"0.10 M NH4Cl:                pH {solve_pH([(nh4, 0.10, 1)], anions=0.10):.2f}")
print(f"0.050 M NaHCO3:              pH {solve_pH([(carb, 0.050, 0)], cations=0.050):.2f}")
print(f"0.050 M NaH2PO4:             pH {solve_pH([(phos, 0.050, 0)], cations=0.050):.2f}")
print(f"0.050 M Na2HPO4:             pH {solve_pH([(phos, 0.050, 0)], cations=0.100):.2f}")
print(f"0.020 M Na3PO4:              pH {solve_pH([(phos, 0.020, 0)], cations=0.060):.2f}")
print(f"acetate buffer 0.10/0.10 M:  pH {solve_pH([(acetic, 0.20, 0)], cations=0.10):.2f}")
Output
0.10 M acetic acid:          pH 2.88
1.0e-5 M acetic acid:        pH 5.15
0.10 M ammonia:              pH 11.12
0.10 M NH4Cl:                pH 5.12
0.050 M NaHCO3:              pH 8.34
0.050 M NaH2PO4:             pH 4.70
0.050 M Na2HPO4:             pH 9.69
0.020 M Na3PO4:              pH 12.11
acetate buffer 0.10/0.10 M:  pH 4.76

Ammonia is entered as the acid–base pair NH₄⁺/NH₃, with charge +1 for the protonated form. With no spectator ions the solver treats the solution as free ammonia; adding 0.10 M chloride as a spectator anion turns it into ammonium chloride, a weak acid. The phosphate salts show the limits of the amphiprotic shortcut: 0.050 M NaH₂PO₄ comes out at 4.70, close to the 4.68 estimate, but 0.050 M Na₂HPO₄ gives 9.69 rather than 9.78, because for this salt the water term in the full formula (K₂Kw, with K₂ and K₃ playing the roles of K₁ and K₂) is about half as large as K₂K₃F and cannot be neglected. Note that 1.0 × 10⁻⁵ M acetic acid is more than half dissociated, so the quadratic approximation that neglects x would fail badly there.

Buffers revisited

A buffer resists pH change because its weak acid and conjugate base consume added base and acid. The Henderson–Hasselbalch equation, pH = pKa + log([A⁻]/[HA]), is exact if the concentrations are the equilibrium values and activities are ignored. For ordinary buffers of 0.01 to 0.5 M near pH 3 to 11, the formal concentrations of acid and base can be used directly, because the weak acid barely ionizes and the common ion suppresses its ionization further. The equation fails for very dilute buffers, for very strong weak acids (pKa below about 3) and at the extremes of pH, where [H⁺] or [OH⁻] becomes comparable to the buffer concentrations; the general solver handles all of these.

Buffer capacity

Buffer capacity β measures how much strong base must be added to raise the pH by one unit (or strong acid to lower it): β = dC_b/dpH. For a monoprotic buffer of total concentration C, differentiating the charge balance gives

\[\beta = 2.303\Bigl(\frac{K_w}{[\mathrm{H^+}]} + [\mathrm{H^+}] + \frac{C K_a [\mathrm{H^+}]}{(K_a + [\mathrm{H^+}])^2}\Bigr)\]

The first two terms are the buffering of water itself, important only at very high or low pH. The third term has a maximum at [H⁺] = Ka, that is, at pH = pKa, where it equals 2.303C/4 = 0.576C. Capacity is proportional to concentration and falls to about a third of its maximum one pH unit away from pKa.

Curves of buffer capacity β against pH from 2 to 8 for acetate buffers of total concentration 0.20, 0.10 and 0.02 M. Each curve peaks at pH 4.76 (the pKa) with heights about 0.115, 0.058 and 0.012 mol/L per pH unit, and falls off on either side. At the low-pH end all curves rise slightly because of the buffering of H⁺ itself.
Buffer capacity peaks at pH = pKa and scales with concentration

Two design rules follow. Choose a buffer whose pKa is within about one unit of the desired pH, and make it concentrated enough to absorb the acid or base the experiment will produce. A 0.02 M acetate buffer is fine for a spectrophotometric method that adds microlitres of sample, but useless for a reaction that releases millimoles of acid.

Buffers and ionic strength

The Henderson–Hasselbalch equation written with concentrations hides an activity effect. The thermodynamic Ka involves activities, so

\[\mathrm{pH} = \mathrm{p}K_a + \log\frac{[\mathrm{A^-}]\gamma_{\mathrm{A^-}}}{[\mathrm{HA}]\gamma_{\mathrm{HA}}}\]

For a neutral acid and singly charged base, γ_HA ≈ 1 and γ_A⁻ < 1, so the effective pKa (pKa′) decreases as ionic strength rises. For phosphate, where the second ionization goes from a −1 to a −2 ion, the effect is larger: pK₂ falls from 7.20 at zero ionic strength to about 6.86 at μ = 0.1 M. This is why a phosphate buffer made by the formula from tabulated pKa values usually comes out a few tenths of a pH unit off, and why every buffer is adjusted to its final pH with a meter after the components are mixed. Temperature matters too: TRIS (pKa 8.07 at 25 °C) changes by about −0.03 pH units per degree, so a TRIS buffer set to pH 7.5 at room temperature reads near 8.1 in the cold room.

Worked problem

Designing a phosphate buffer

Prepare 1.00 L of a 0.100 M phosphate buffer at pH 7.00 for an enzyme assay, from NaH₂PO₄ and Na₂HPO₄, allowing for an effective pK₂ of 6.86 at the buffer's ionic strength.

Show solution
  1. Ratio [HPO₄²⁻]/[H₂PO₄⁻] = 10^(7.00 − 6.86) = 1.38.
  2. Total 0.100 M: [H₂PO₄⁻] = 0.100/2.38 = 0.0420 M; [HPO₄²⁻] = 0.0580 M.
  3. Weigh 0.0420 mol NaH₂PO₄ (5.04 g anhydrous) and 0.0580 mol Na₂HPO₄ (8.23 g anhydrous), dissolve in about 900 mL water, check the pH with a calibrated meter, adjust with a little NaOH or H₃PO₄, and dilute to 1.000 L.

Answer: About 5.0 g NaH₂PO₄ and 8.2 g Na₂HPO₄ per litre, adjusted to pH 7.00 with a meter. Using the tabulated pK₂ of 7.20 would have given a buffer near pH 6.8.

Choosing a buffer

Common buffers in analytical work
BufferpKa (25 °C)Useful pH rangeNotes
Phosphate (pK₁)2.151.2–3.1Strong acid end; used in chromatography
Acetate4.763.8–5.8Inexpensive; volatile form (ammonium acetate) for mass spectrometry
MES6.275.5–6.7Good's buffer; does not bind most metals
Phosphate (pK₂)7.206.2–8.2Biological work; precipitates calcium and many metals
HEPES7.56.8–8.2Good's buffer for cell culture
TRIS8.077.1–9.0Strongly temperature dependent
Borate9.248.2–10.2Can complex sugars and diols
Ammonia/ammonium9.258.3–10.3Used in EDTA titrations at pH 10
Carbonate (pK₂)10.339.3–11.3Absorbs or loses CO₂ from air

Norman Good and his colleagues introduced the zwitterionic sulfonic acid buffers such as MES and HEPES in 1966 specifically for biological research: they have pKa values near physiological pH, do not cross membranes readily, bind metal ions weakly and absorb little ultraviolet light. Phosphate, the classic biological buffer, precipitates calcium and inhibits some enzymes, and borate complexes sugars, so the right buffer depends on the analysis as well as the pH.

Common mistakes

  • MistakepH 7 is always neutral.

    InsteadNeutral pH is ½pKw, which is 7.00 only at 25 °C.

  • MistakeUse Henderson–Hasselbalch for a 10⁻⁵ M buffer.

    InsteadAt such low concentrations water and dissociation matter; solve the charge balance.

  • MistakeThe pH of NaHA depends strongly on its concentration.

    InsteadFor typical concentrations pH ≈ ½(pK₁ + pK₂), nearly independent of F.

  • MistakeA buffer works equally well at any pH.

    InsteadCapacity is greatest at pH = pKa and useful only within about ±1 unit.

  • MistakeMixing buffer components by formula gives the exact pH.

    InsteadIonic strength and temperature shift pKa; always adjust with a calibrated meter.

  • MistakeInclude coefficients from formulas in fractional compositions.

    InsteadFractions depend only on [H⁺] and the Ka values; the charge of each form enters only the charge balance.

Summary and key terms

  • Exact pH values follow from the charge balance; approximations are shortcuts for special cases.
  • Fractional compositions α depend only on pH and the Ka values; adjacent species are equal at pH = pKa.
  • Amphiprotic salts have pH ≈ ½(pK₁ + pK₂).
  • A bisection search on the charge balance solves any acid–base mixture.
  • Buffer capacity is maximal at pH = pKa, equals 0.576C there, and is proportional to concentration.
  • Ionic strength and temperature shift effective pKa values; buffers are adjusted with a pH meter.
Fractional composition
The fraction of a weak acid present in a particular protonation state at a given pH.
Amphiprotic species
A species that can both donate and accept a proton.
Buffer capacity
The amount of strong acid or base needed to change the pH of a buffer by one unit.
Effective pKa
The pKa that applies at a given ionic strength when concentrations replace activities.
Good's buffers
Zwitterionic buffers designed for biological work with weak metal binding.
Formal concentration
The total amount of a substance added per litre, regardless of its forms in solution.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Find α for acetate at pH 5.76 (pKa 4.76).

    Show answer

    α_A⁻ = 1/(1 + 10^(4.76 − 5.76)) = 1/1.1 = 0.909.

  2. What fraction of phosphate is HPO₄²⁻ at pH 7.40?

    Show answer

    Ratio HPO₄²⁻/H₂PO₄⁻ = 10^0.20 = 1.58; other forms negligible; α = 1.58/2.58 = 0.61.

  3. Estimate the pH of 0.10 M potassium hydrogen phthalate (pK₁ 2.95, pK₂ 5.41).

    Show answer

    pH ≈ ½(2.95 + 5.41) = 4.18.

  4. Find the maximum buffer capacity of a 0.050 M TRIS buffer.

    Show answer

    β_max ≈ 0.576 × 0.050 = 0.029 mol/L per pH unit at pH 8.07.

  5. How much would the pH of a phosphate buffer set at 7.20 change if 1.0 mmol of HCl is added to 100 mL of a 0.10 M buffer (equal components)?

    Show answer

    Moles change from 5.0/5.0 to 6.0 (acid)/4.0 (base) mmol; pH = 7.20 + log(4/6) = 7.02, a change of −0.18.

  6. Why is ammonium acetate preferred to sodium phosphate for liquid chromatography with mass spectrometry?

    Show answer

    It is volatile and leaves no salt deposits in the ion source.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz