A series-parallel resistor network combines series and parallel elements to achieve non-standard equivalent resistances, distribute power dissipation, and provide redundant failure paths. If you need to step down a 24V truck battery to read on a 3.3V ESP32 ADC, pure series dividers often fail because standard E24 resistor values cannot hit the exact ratio required, and single resistors may exceed safe localized power limits. The direct solution is a series-parallel topology: use an 82kΩ series resistor feeding a parallel pair of 18kΩ and 20kΩ resistors to ground. This yields a precise 9.47kΩ lower leg, keeping the ADC safely below saturation while using cheap, readily available 1/4W 1% metal film parts.
The Series-Parallel Topology: Node Layout and Behavior
To design resistance in parallel series configurations, we must first define the physical nodes. In a standard voltage divider application, the circuit consists of three distinct nodes:
- Node A (Vin): The high-voltage input (e.g., 24V battery positive).
- Node B (Vout): The junction point connecting the series element to the parallel bank. This feeds the microcontroller ADC.
- Node C (GND): The common ground reference shared by the battery and the microcontroller.
Resistor R1 bridges Node A and Node B. Resistors R2 and R3 bridge Node B and Node C in parallel. The equivalent resistance of the lower leg ($R_{lower}$) is calculated as $(R2 \times R3) / (R2 + R3)$.
Behavior Matrix: Element Drift and Change
Understanding how the network reacts to component drift is critical for sensor calibration. Here is how the topology behaves when a single element changes:
| Element Changed | Change Type | Effect on $R_{lower}$ | Effect on Vout (Node B) |
|---|---|---|---|
| R1 (Series) | Resistance Increases | No change | Decreases (reads low) |
| R2 (Parallel) | Resistance Increases | Increases | Increases (reads high) |
| R3 (Parallel) | Resistance Decreases | Decreases | Decreases (reads low) |
| R2 (Parallel) | Fails Open | Becomes exactly R3 | Spikes dangerously high |
Why Choose Series-Parallel Over Pure Series or Parallel?
Most hobbyists default to a pure series divider (R1 and R2). However, the series-parallel approach solves three specific bench-level problems that pure topologies cannot:
| Criteria | Pure Series (R1 + R2) | Pure Parallel (R1 || R2) | Series-Parallel (R1 + [R2 || R3]) |
|---|---|---|---|
| Precision Tuning | Limited to standard E24/E96 values; often requires trimming pots. | Only useful for lowering total resistance; cannot divide voltage. | Allows fine-tuning of $R_{lower}$ using common E24 values to hit exact ratios. |
| Power Dissipation | Heat concentrates in single physical packages. | Current splits, but cannot step down voltage. | Lower leg splits $I^2R$ heat across two physical resistor bodies. |
| Failure Redundancy | Single open failure kills the circuit entirely. | Single open failure shifts total resistance drastically. | If one parallel leg opens, the other maintains a partial voltage divider, preventing immediate 0V or Vin at the ADC. |
Failure Modes at the Extremes: Opens and Shorts
When designing for 24V or 48V systems, a resistor failure can send raw battery voltage straight into a 3.3V GPIO pin, instantly destroying the silicon. Here is the failure-mode contrast you must design around:
- R1 (Series) Shorts: Fatal. Node B is pulled directly to Node A. 24V hits the ESP32 ADC. The microcontroller dies. Mitigation: Always use a physically larger, higher-wattage resistor for R1, or add a 3.3V Zener diode (e.g., BZX84C3V3) at Node B to clamp overvoltage.
- R1 (Series) Opens: Safe. Node B is disconnected from Vin. The ADC reads 0V. The system assumes the battery is dead, which is a safe fail-state.
- R2 or R3 (Parallel) Shorts: Safe. Node B is pulled directly to Node C (GND). The ADC reads 0V. R1 now dissipates the full system power ($P = V^2 / R1$). Ensure R1 is rated for this continuous short-circuit condition.
- R2 or R3 (Parallel) Opens: Dangerous. The equivalent resistance of the lower leg shifts to the value of the surviving resistor. Vout rises. If the surviving resistor value is high enough, Vout may exceed 3.3V. Mitigation: Size R2 and R3 such that if one fails open, the remaining resistor still keeps Vout under 3.6V at maximum Vin.
The ESP32 ADC is notoriously non-linear near the 0V and 3.3V rails. Never design your divider to output exactly 3.3V at maximum battery voltage. Design for a maximum output of 3.1V to keep the reading in the linear sweet spot of the silicon, sacrificing a tiny bit of resolution for massive gains in accuracy.
Design Walkthrough: 24V LiFePO4 to 3.3V ADC Divider
Let us pick real component values for a 12V nominal truck battery that peaks at 14.4V during alternator charging, or a 24V system peaking at 28.8V. We will design for a 30V absolute maximum to provide headroom for load-dump spikes.
- Define Targets: $V_{in(max)} = 30V$. Target $V_{out(max)} = 3.1V$ (respecting the ESP32 linear zone).
- Calculate Required Ratio: $Ratio = 3.1 / 30 = 0.1033$.
- Pick R1 (Series): We want high impedance to minimize parasitic battery drain. Let us select 82kΩ (a standard E24 value).
- Calculate Target $R_{lower}$: $R_{lower} = R1 \times (V_{out} / (V_{in} - V_{out})) = 82k \times (3.1 / 26.9) = 9.449k\Omega$.
- The Problem: 9.45kΩ is not a standard 1% resistor value. The closest E24 values are 9.1kΩ and 10kΩ, both of which introduce unacceptable scaling errors.
- The Series-Parallel Solution: We will build $R_{lower}$ using R2 and R3 in parallel. We need $(R2 \times R3) / (R2 + R3) \approx 9.45k\Omega$.
- Select R2 and R3: Let us test 18kΩ and 20kΩ.
$R_{eq} = (18 \times 20) / (18 + 20) = 360 / 38 = 9.473k\Omega$. - Verify Max Vout: $V_{out} = 30V \times (9.473 / (82 + 9.473)) = 30V \times 0.1035 = 3.107V$. This is perfect.
- Verify Power Dissipation: Total current $I = 30V / 91.47k\Omega = 0.32mA$. Power in R1 = $I^2 \times 82k = 8.9mW$. Power in lower leg = $1mW$. Standard 1/4W (250mW) resistors are operating at less than 5% of their rated capacity, ensuring zero thermal drift.
Breadboard Testing and Verification Steps
Do not apply 24V to a freshly wired breadboard without verifying the network first. Follow this exact sequence to prevent bricking your microcontroller:
- Visual Inspection: Verify R1 (82kΩ - Grey, Red, Black, Red, Brown) is in series, and R2 (18kΩ - Brown, Grey, Black, Red, Brown) and R3 (20kΩ - Red, Black, Black, Red, Brown) share both Node B and Node C rails.
- Cold Resistance Check: With the circuit completely unpowered and disconnected from the ESP32, place your multimeter probes across Node B and Node C. You must read 9.47kΩ ± 1%. If you read 82kΩ, your parallel branch is open. If you read ~0Ω, you have a shorted rail.
- Low-Voltage Test: Connect a 5V USB breakout to Node A and Node C. Measure Node B with your multimeter. You should read exactly $5V \times 0.1035 = 0.517V$.
- Microcontroller Integration: Connect Node B to ESP32 GPIO 34 (ADC1_CH6). Connect Node C to ESP32 GND.
- Live High-Voltage Test: Connect the actual 24V battery to Node A and C. Monitor the ESP32 serial output. The raw ADC reading should be approximately $3.1V / 3.3V \times 4095 = 3835$ (assuming 12-bit resolution and no attenuation).
Decision Path: Selecting Your Resistor Topology
Use this decision tree to determine if a series-parallel network is actually required for your specific design, or if a simpler topology will suffice. Follow the path down to your concrete pick.
| Condition / Constraint | If YES | If NO |
|---|---|---|
| Does your required $R_{lower}$ fall exactly on a standard E24 or E96 value? | Use Pure Series (R1 + R2). | Proceed to next question. |
| Is the total power dissipation in the lower leg greater than 150mW? | Use Pure Parallel for the lower leg to split heat, combined with a series upper leg (Series-Parallel). | Proceed to next question. |
| Do you need to protect an ADC from total signal loss if one resistor fails open? | Use Series-Parallel to provide a redundant current path. | Use Pure Series. |
| Are you tuning a precision reference voltage where a 2% E24 error is unacceptable? | Default Pick: Use the Series-Parallel topology. | Use Pure Series. |
Final Concrete Recommendation: For 90% of hobbyist and prosumer DC voltage monitoring tasks (solar banks, battery packs, automotive), the Series-Parallel topology is the superior choice. Default to an 82kΩ upper series resistor paired with an 18kΩ || 20kΩ parallel lower bank using Yageo MFR-25 1% metal film resistors. This specific bill of materials guarantees you stay within the linear ADC range of 3.3V microcontrollers, eliminates the need for expensive E96 precision resistors, and provides built-in thermal and failure redundancy for under $0.10 in total component cost.






