Two 380 W panels in series, 15 meters from the roof to the charge controller, draw only 9.43 A at their operating point. 14 AWG carries 35 A all day without heating past its rating — three and a half times the margin the ampacity table asks for. Run the same run through this project's voltage-drop check and 14 AWG fails: 2.9% drop against a 2% limit for PV circuits. The wire that's more than adequate for current is too thin for voltage. 12 AWG is the actual minimum — one size thicker than the number that "obviously" looks safe, and the ampacity table alone would never have flagged it.

Two unrelated ways a wire can be too thin

Ampacity is about heat: a conductor carrying current dissipates power as I²R loss along its length, and if that heat can't escape fast enough the insulation degrades. A wire's ampacity rating (this project uses the 75°C column, ABYC E-11 Table IV, via each gauge's ampacity_75c) is the current it can carry indefinitely without exceeding that thermal limit — a property of the wire and its insulation, independent of how far the current has to travel.

Voltage drop is about resistance times distance, not heat: V = 2 × length × current × ρ_copper / area — the same current, run through the same gauge, drops more volts the farther it travels, because there's simply more resistive wire in the path. A run can be short enough that heat is a complete non-issue while current is high, or long enough that heat is a non-issue while voltage loss adds up meter by meter. These are two different physical effects with two different formulas, and a wire only has to fail one of them to be the wrong size — satisfying ampacity says nothing about whether it satisfies voltage drop, and vice versa.

This project's selectWire() checks both for every gauge, smallest to largest, and returns the first one that clears both at once. Whichever constraint that turns out to be — ampacity or voltage drop — is the one that actually decided the gauge; the other constraint was already satisfied earlier and contributed nothing to the final answer.

It helps to notice that the two formulas don't even share the same inputs. Ampacity depends on the gauge's cross-sectional area and its insulation's temperature rating, full stop — length never enters the calculation, which is why a 1-meter and a 30-meter run of the same wire carrying the same current have the identical ampacity margin. Voltage drop depends on length, current, and area, but never on the wire's temperature rating — a wire rated for a much higher temperature than the run will ever see carries the exact same voltage-drop penalty as a cooler-rated wire of the same copper cross-section. Two formulas that don't share their sensitive variable are exactly the kind of pair where sizing for one and assuming the other is fine goes wrong silently, because there's no shared number to sanity-check against.

The formula and the limits

vdrop_pct = (2 × length_m × current_a × 1.72×10⁻⁸ / area_mm² × 10⁻⁶) / circuit_v, checked against a percentage ceiling that depends on what the circuit feeds:

Ampacity gets one more adjustment before comparison: bundleFactor(n) derates a wire's rated ampacity when it runs alongside other current-carrying conductors in the same bundle or conduit, because bundled wires trap each other's heat — 1.0 for a single conductor, 0.7 for 2–3, 0.6 for 4–6, 0.5 for 7–24, 0.4 for 25 or more (ABYC E-11's bundling table). selectWire() applies this factor to the wire's ampacity before checking it against the circuit's current, but never touches the voltage-drop calculation — bundling changes how a wire's heat dissipates, not how much resistance the current sees.

A concrete example: PV string, where voltage drop wins

Two REC REC380TP2SM 72 panels in series (string Vmp 80.6 V, Isc 10.05 A, Imp 9.43 A) run 15 meters from a roof array to a charge controller — a realistic distance for a cabin or a van with the array mounted well away from the electronics bay. The PV circuit's ampacity requirement is Isc × 1.56 = 15.68 A (this project's PV_CIRCUIT_FACTOR, which covers irradiance above STC and safety margin); the voltage-drop check runs against Imp = 9.43 A and the 2% PV limit.

Same PV string, five gauges, 15 m one-way run
AWGAmpacity (75°C)Clears 15.68 A?Voltage drop at 9.43 A / 15 mClears 2% limit?
1820 AYes5.93 V (7.36%)No
1625 AYes3.74 V (4.64%)No
1435 AYes2.34 V (2.90%)No
1245 AYes1.47 V (1.83%)Yes

Every gauge from 18 AWG up clears the 15.68 A ampacity requirement — even 18 AWG carries 20 A, well past what this string ever pushes. Ampacity stops being the relevant question after the very first row. Voltage drop is what actually screens out three of the four gauges, and 12 AWG — not 14, and nowhere near 18 — is the real minimum selectWire() returns, entirely on the strength of the 2% PV limit.

A second example: battery-to-inverter, where ampacity wins

The same battery-inverter pairing from this site's inverter/BMS guide — an EG4 280Ah lithium bank feeding a Victron MultiPlus-II 48/8000, real DC-side continuous draw 149.4 A (Calc::inverterDc) — run a 1-meter cable from the battery terminal to the inverter's DC input, a typical distance when both live in the same enclosure. This circuit checks against the 3% critical limit, at 50.4 V loaded system voltage.

Same battery-inverter circuit, four gauges, 1 m one-way run
AWGAmpacity (75°C)Clears 149.4 A?Voltage drop at 149.4 A / 1 mClears 3% limit?
6120 ANo0.39 V (0.77%)Yes
4160 AYes0.24 V (0.48%)Yes
2210 AYes0.15 V (0.30%)Yes

Here the pattern flips completely. Voltage drop is a non-issue at every gauge in the table — even 6 AWG, the thinnest, sits at 0.77% against a 3% ceiling, because one meter of cable barely accumulates any resistance regardless of gauge. Ampacity is the entire story: 6 AWG's 120 A rating can't carry a 149.4 A continuous load no matter how short the run is, and 4 AWG at 160 A is the smallest gauge that can. selectWire() returns 4 AWG here, decided completely by heat, with voltage drop having no influence on the outcome at all.

Put the two examples side by side and the point is exact, not approximate: a low-current, long PV run is decided by voltage drop with ampacity holding no veto; a high-current, short battery run is decided by ampacity with voltage drop holding no veto. Neither constraint is universally the stricter one — which one binds depends entirely on the combination of current and length in front of you, and checking only the constraint that's intuitively "the point" of a given circuit (ampacity for a high-current run, say) will miss the other one silently passing or silently failing.

What bundling changes, and when it doesn't

Route three of these PV strings in parallel through the same conduit — a common way to combine several strings before a single charge controller — and the six current-carrying conductors (three positive, three negative) get a 0.6 bundling factor. For the single-string case above, 12 AWG's ampacity derates from 45 A to 27 A under that factor — still comfortably above the 15.68 A this one string draws, so the gauge selection doesn't change; bundling had margin to absorb here because ampacity was never close to binding in the first place. That won't always be true: a run with three strings combined in parallel before the derate is applied (47.0 A combined ampacity requirement) would need a heavier gauge before bundling is even considered, and the same 0.6 factor applied on top of a already-tight ampacity number can push the selection up a size or two where the single-string case showed no effect at all. Bundling only ever tightens the ampacity side of the check — it has no effect on the voltage-drop calculation, which depends on the wire's cross-sectional area and the run's length, not on what else shares its conduit.

What the fuse has to do with the gauge

selectWire() takes an optional fuse catalog and a required fuse class as its last two arguments, and when they're supplied the gauge selection picks up a third condition beyond ampacity and voltage drop: a fuse must exist that's rated at or above minFuse()'s 1.25×-current minimum and at or below the gauge's own derated ampacity, matching ABYC E-11's rule that a fuse can never be sized to let more current through than the wire behind it can safely carry. Run the battery-inverter example from above through that third check and the answer changes: 4 AWG passes ampacity and voltage drop on their own, but no fuse rating sits between the 186.7 A minimum and 4 AWG's 160 A ampacity ceiling — the minimum needed is already above what the wire is rated for. 2 AWG, at 210 A ampacity, leaves room for a 200 A Class T fuse to fit under that ceiling with margin to spare. The two-constraint story in the table above is the core of the ampacity-vs-voltage-drop question this guide is about, but a circuit that's fused (nearly every DC circuit in a real system is) can have its gauge pushed up a size further still, by a condition neither ampacity nor voltage drop alone would have caught.

Try it with your own circuit

Enter a circuit's operating current (Imp for a PV string, DC-side draw for a battery circuit), its length, the circuit type, and how many current-carrying conductors are bundled with it.

Minimum gauge: 4 AWG

What this means for wiring a system

Three practical consequences follow directly from checking both constraints instead of one:

  1. Never size a wire off ampacity alone. A long, low-current run — a PV string reaching a rooftop array, or a load a good distance from the battery bank — can fail voltage drop while its ampacity looks generously oversized, exactly as the 14 AWG PV example above shows.
  2. Never size a wire off voltage drop alone either. A short, high-current run — battery-to-inverter, battery-to-busbar — can fail ampacity while its voltage drop looks negligible, exactly as the 6 AWG battery example shows.
  3. Apply the bundling derate before comparing ampacity, never to voltage drop. Conductors sharing a conduit or bundle trap each other's heat, which is an ampacity effect only — bundleFactor() has no term in the voltage-drop formula and shouldn't be applied to it by hand either.

The checker runs selectWire() against every circuit in an actual build at its real length and current, so the binding constraint for a specific run is checked directly instead of assumed from which circuit it happens to be.

These results are for reference. Wiring must be installed by a qualified electrician. Mobile installations follow ABYC E-11; stationary ones NEC 690/706.