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:
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,
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
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.
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
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
- K₁ = 4.47 × 10⁻⁷, K₂ = 4.68 × 10⁻¹¹, F = 0.050 M.
- [H⁺] = √[(K₁K₂F + K₁Kw)/(K₁ + F)] = √[(1.046 × 10⁻¹⁸ + 4.47 × 10⁻²¹)/0.0500004] = 4.58 × 10⁻⁹ M.
- 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.
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}")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
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.
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 microliters 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
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
- Ratio [HPO₄²⁻]/[H₂PO₄⁻] = 10^(7.00 − 6.86) = 1.38.
- Total 0.100 M: [H₂PO₄⁻] = 0.100/2.38 = 0.0420 M; [HPO₄²⁻] = 0.0580 M.
- 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 liter, 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
| Buffer | pKa (25 °C) | Useful pH range | Notes |
|---|---|---|---|
| Phosphate (pK₁) | 2.15 | 1.2–3.1 | Strong acid end; used in chromatography |
| Acetate | 4.76 | 3.8–5.8 | Inexpensive; volatile form (ammonium acetate) for mass spectrometry |
| MES | 6.27 | 5.5–6.7 | Good's buffer; does not bind most metals |
| Phosphate (pK₂) | 7.20 | 6.2–8.2 | Biological work; precipitates calcium and many metals |
| HEPES | 7.5 | 6.8–8.2 | Good's buffer for cell culture |
| TRIS | 8.07 | 7.1–9.0 | Strongly temperature dependent |
| Borate | 9.24 | 8.2–10.2 | Can complex sugars and diols |
| Ammonia/ammonium | 9.25 | 8.3–10.3 | Used in EDTA titrations at pH 10 |
| Carbonate (pK₂) | 10.33 | 9.3–11.3 | Absorbs 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 liter, regardless of its forms in solution.
Practice problems
Work each problem on paper first, then reveal the answer to check.
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.
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.
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.
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.
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.
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.
Create a free account to save your progress, take quizzes and earn a certificate.