Help

Lighting Circuit Voltage Drop

Jump to section

Overview

Calculates voltage drop for single-phase parallel-connected lighting circuits with sequential cable runs per IEC 60364, BS 7671, and AS/NZS 3000. Each light fixture taps off a shared cable that runs from the supply through each light in series. The cable section between any two lights carries the cumulative current of all downstream lights, producing a different voltage drop at each fixture location.

Input Parameters

Circuit Parameters

Parameter Type Default Range Description
supply_voltage Number 230 V 100 – 400 V Nominal single-phase supply voltage
power_factor Number 1.0 0.5 – 1.0 Load power factor (typically 0.95–1.0 for LED)
frequency Enum: 50 / 60 Hz 50 — System frequency
temperature Number 30 °C −10 – 90 °C Cable operating temperature

Conductor Parameters

Parameter Type Default Range Description
conductor_material Enum: copper / aluminium copper — Conductor material
conductor_csa Enum 1.5 mm² 0.75 – 500 mm² Conductor cross-sectional area

Light String Configuration

Parameter Type Default Range Description
lights Array of objects 4 lights 1 – 50 items Sequential light fixtures with cable lengths and power ratings
lights[n].length Number 10 m 0.1 – 1000 m Cable length from previous light (or supply for first light)
lights[n].power Number 20 W 0.1 – 5000 W Light fixture power consumption

Compliance Settings

Parameter Type Default Range Description
voltage_drop_limit Number 3% 0.5 – 10% Maximum allowable voltage drop percentage

Output Results

Summary Outputs

Output Unit Description
total_power W Sum of all light fixture powers
cable_resistance Ω/km Conductor resistance at operating temperature
supply_current A Total current drawn at supply point (first section current)
max_voltage_drop V Maximum cumulative voltage drop at any light
max_voltage_drop_percent % Maximum voltage drop as percentage of supply
max_voltage_drop_location Integer Light number where maximum voltage drop occurs
min_voltage V Minimum voltage at any light fixture
compliant Boolean Whether \(V_{d\%,max} \leq\) voltage drop limit
warnings List Warning messages (over-current, excessive length, etc.)

Per-Light Outputs (light_details array)

Output Unit Description
section_current A Current through cable section feeding this light
section_voltage_drop V Voltage drop across this cable section only
cumulative_voltage_drop V Total voltage drop from supply to this light
voltage_at_light V Actual voltage at this light fixture
voltage_drop_percent % Cumulative voltage drop as percentage of supply

Formulas

Conductor Resistance at Temperature

\[ R(T) = R_{20} \times \bigl(1 + \alpha \times (T - 20)\bigr) \quad (\Omega/\text{km}) \]

Where \(R_{20}\) is the conductor resistance at 20 °C (from lookup table), \(\alpha\) is the temperature coefficient, and \(T\) is the operating temperature in °C.

Material \(\alpha\) (/°C)
Copper0.00393
Aluminium0.00403

Section Current

\[ I_{\text{section},i} = \frac{\displaystyle\sum_{k=i}^{n} P_k}{V_{\text{supply}} \times \cos\phi} \]

Each cable section carries the cumulative current of all downstream lights. Section 1 (supply to first light) carries the total circuit current. Working backwards from the last light, each section adds the power of the next upstream light.

Section Voltage Drop

\[ \Delta V_i = \frac{2 \times I_{\text{section},i} \times L_i \times R(T)}{1000} \]

Where the factor of 2 accounts for active and neutral conductors (go-and-return path), \(L_i\) is the cable section length in meters, and \(R(T)\) is in Ω/km. Division by 1000 converts the length–resistance product from m·Ω/km to Ω.

Cumulative Voltage Drop

\[ \Delta V_{\text{cum},n} = \sum_{i=1}^{n} \Delta V_i \]

The total voltage drop at light \(n\) is the sum of all section voltage drops from the supply to that light.

Voltage at Light

\[ V_{\text{light},n} = V_{\text{supply}} - \Delta V_{\text{cum},n} \]

Voltage Drop Percentage

\[ V_{d\%,n} = \frac{\Delta V_{\text{cum},n}}{V_{\text{supply}}} \times 100 \]

Compliance Check

\[ \max(V_{d\%,n}) \leq V_{d,\text{limit}\%} \implies \text{PASS} \]

Key Lookup Tables

Copper Resistance at 20 °C (Ω/km)

CSA (mm²) R20 (Ω/km)
0.7524.5
1.018.1
1.512.1
2.57.41
4.04.61
6.03.08
101.83
161.15
250.727
350.524
500.387
700.268
950.193
1200.153
1500.124
1850.0991
2400.0754
3000.0601
4000.0470
5000.0366

Aluminium Resistance at 20 °C (Ω/km)

IEC 60228 lists aluminium conductors from 10 mm²; the 2.5, 4 and 6 mm² aluminium values are the component's own (about 1.64× the copper value).

CSA (mm²) R20 (Ω/km)
2.512.2
4.07.56
6.05.08
103.08
161.91
251.20
350.868
500.641
700.443
950.320
1200.253
1500.206
1850.164
2400.125
3000.100
4000.0778
5000.0605

Worked Examples

The 6 examples below are the validation cases for this calculation. Each one was produced by the calculation engine from the inputs shown, every figure was checked against the independent reference quoted at the end of the example, and the same cases are run against every engine build (see validation scorecard, tool fe_calc_voltage_drop; worked examples for every calculation).

#CaseCableLights / loadR(T) (Ω/km)Worst lightMax VDTotal vs limitResult
1Four LED downlights on 1.5 mm² Cu1.5 mm² Cu, 230 V4 / 95 W12.57554 (229.7 V)0.297 V (0.129 %)0.129 / 3 %PASS
2Ten 100 W lights at 75 °C, pf 0.92.5 mm² Cu, 230 V10 / 1,000 W9.011710 (225.2 V)4.789 V (2.082 %)2.082 / 3 %PASS
3Warehouse high-bays, 5 × 250 W on 2.5 mm²2.5 mm² Cu, 230 V5 / 1,250 W8.13805 (219.8 V)10.242 V (4.453 %)4.453 / 3 %FAIL
4Aluminium 4 mm² at 50 °C, three 100 W lights4 mm² Al, 230 V3 / 300 W8.47403 (229.2 V)0.774 V (0.336 %)0.336 / 3 %PASS
5Street lighting, 12 × 150 W on 16 mm² Al, 1.5 % upstream16 mm² Al, 240 V12 / 1,800 W2.217912 (230.4 V)9.611 V (4.005 %)5.505 / 5 %FAIL
6First light at the supply, ten 58 W fittings on 4 mm²4 mm² Cu, 230 V10 / 580 W4.972310 (229.0 V)0.979 V (0.426 %)0.426 / 3 %PASS

Example 1 — Four LED downlights on 1.5 mm² Cu

The help page's basic example: unequal spacing and loads, worst drop at the far light.

Given: 4 lights fed in sequence on 1.5 mm² Cu (active + neutral), 230 V single-phase, cos φ = 1, conductor at 30 °C; (section length, light power) from the supply: (15 m, 20 W), (8 m, 30 W), (10 m, 25 W), (12 m, 20 W); voltage-drop limit 3 % from the point of supply (tool default). Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 12.1 × (1 + 0.00393 × (30 − 20)) = 12.57553 Ω/km
LoadΣP = 95 W; supply current I1 = ΣP / (V × cos φ) = 95 / (230 × 1) = 0.4130 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
115950.41302 × 0.4130 × 15 × 12.5755/1000 = 0.15580.1558229.840.068
28750.32612 × 0.3261 × 8 × 12.5755/1000 = 0.06560.2214229.780.096
310450.19572 × 0.1957 × 10 × 12.5755/1000 = 0.04920.2706229.730.118
412200.08702 × 0.0870 × 12 × 12.5755/1000 = 0.02620.2969229.700.129
Worst lightLight 4: ΣΔV = 0.2969 V → 0.2969 / 230 × 100 = 0.129 %; minimum voltage 229.70 V
Voltage drop check0.129 % ≤ 3 %? → 0.129 vs limit 3.000 % PASS
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.00 / 0.129 = 23.24 × the present load
Result1/1 checks pass → PASS; worst light 4 at 0.129 % total; governing: voltage drop
ReferenceHand calculation: R(30 °C) = 12.1 × (1 + 0.00393 × 10) = 12.5755 Ω/km (IEC 60228 class 2 R20); section currents 95/75/45/20 W ÷ 230 V = 0.41304/0.32609/0.19565/0.08696 A; ΣΔV = 2 × 12.5755/1000 × (0.41304 × 15 + 0.32609 × 8 + 0.19565 × 10 + 0.08696 × 12) = 0.2969 V = 0.129 %; V = 229.70 V (validation case c0015-4-lights-1mm5-230v)

Example 2 — Ten 100 W lights at 75 °C, pf 0.9

Uniformly spaced equal lights (tapered current) with a conservative 75 °C conductor temperature.

Given: 10 lights fed in sequence on 2.5 mm² Cu (active + neutral), 230 V single-phase, cos φ = 0.9, conductor at 75 °C; (section length, light power) from the supply: 10 × (10 m, 100 W); voltage-drop limit 3 % from the point of supply (tool default). Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 7.41 × (1 + 0.00393 × (75 − 20)) = 9.01167 Ω/km
LoadΣP = 1,000 W; supply current I1 = ΣP / (V × cos φ) = 1,000 / (230 × 0.9) = 4.8309 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
1101,0004.83092 × 4.8309 × 10 × 9.0117/1000 = 0.87070.8707229.130.379
2109004.34782 × 4.3478 × 10 × 9.0117/1000 = 0.78361.6543228.350.719
3108003.86472 × 3.8647 × 10 × 9.0117/1000 = 0.69662.3509227.651.022
4107003.38162 × 3.3816 × 10 × 9.0117/1000 = 0.60952.9604227.041.287
5106002.89862 × 2.8986 × 10 × 9.0117/1000 = 0.52243.4828226.521.514
6105002.41552 × 2.4155 × 10 × 9.0117/1000 = 0.43533.9181226.081.704
7104001.93242 × 1.9324 × 10 × 9.0117/1000 = 0.34834.2664225.731.855
8103001.44932 × 1.4493 × 10 × 9.0117/1000 = 0.26124.5276225.471.969
9102000.96622 × 0.9662 × 10 × 9.0117/1000 = 0.17414.7017225.302.044
10101000.48312 × 0.4831 × 10 × 9.0117/1000 = 0.08714.7888225.212.082
Worst lightLight 10: ΣΔV = 4.7888 V → 4.7888 / 230 × 100 = 2.082 %; minimum voltage 225.21 V
Voltage drop check2.082 % ≤ 3 %? → 2.082 vs limit 3.000 % PASS
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.00 / 2.082 = 1.44 × the present load
Result1/1 checks pass → PASS; worst light 10 at 2.082 % total; governing: voltage drop
ReferenceHand calculation: R = 7.41 × (1 + 0.00393 × 55) = 9.01167 Ω/km; I_k = (11 − k) × 100 ÷ (230 × 0.9); ΣI = 5500 ÷ 207 = 26.570 A; ΔV = 2 × 10 × 9.01167/1000 × 26.570 = 4.7888 V = 2.082 %; load at the 3 % limit 3 ÷ 2.082 = 1.44× (validation case c0015-10-lights-2mm5-75c-pf09)

Example 3 — Warehouse high-bays, 5 × 250 W on 2.5 mm²

The help page's long run: the drop passes 3 % from the third light on, so the circuit fails.

Given: 5 lights fed in sequence on 2.5 mm² Cu (active + neutral), 230 V single-phase, cos φ = 0.95, conductor at 45 °C; (section length, light power) from the supply: (50 m, 250 W), 4 × (30 m, 250 W); voltage-drop limit 3 % from the point of supply (tool default). Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 7.41 × (1 + 0.00393 × (45 − 20)) = 8.13803 Ω/km
LoadΣP = 1,250 W; supply current I1 = ΣP / (V × cos φ) = 1,250 / (230 × 0.95) = 5.7208 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
1501,2505.72082 × 5.7208 × 50 × 8.1380/1000 = 4.65564.6556225.342.024
2301,0004.57672 × 4.5767 × 30 × 8.1380/1000 = 2.23476.8903223.112.996
3307503.43252 × 3.4325 × 30 × 8.1380/1000 = 1.67608.5663221.433.724
4305002.28832 × 2.2883 × 30 × 8.1380/1000 = 1.11749.6837220.324.210
5302501.14422 × 1.1442 × 30 × 8.1380/1000 = 0.558710.2424219.764.453
Worst lightLight 5: ΣΔV = 10.2424 V → 10.2424 / 230 × 100 = 4.453 %; minimum voltage 219.76 V
Voltage drop check4.453 % ≤ 3 %? → 4.453 vs limit 3.000 % FAIL
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.00 / 4.453 = 0.67 × the present load
Result0/1 checks pass → FAIL; worst light 5 at 4.453 % total; governing: voltage drop. Voltage drop of 4.45% exceeds limit of 3.0%
ReferenceHand calculation: R(45 °C) = 7.41 × 1.09825 = 8.13803 Ω/km; I = 1250/1000/750/500/250 W ÷ (230 × 0.95) = 5.72082/4.57666/3.43249/2.28833/1.14416 A; ΔV = 2 × 8.13803/1000 × (5.72082 × 50 + (4.57666 + 3.43249 + 2.28833 + 1.14416) × 30) = 4.6556 + 5.5868 = 10.2424 V = 4.453 % > 3 % (validation case c0015-warehouse-5x250w-2mm5-fail)

Example 4 — Aluminium 4 mm² at 50 °C, three 100 W lights

Aluminium conductor resistance and its own temperature coefficient (0.00403 /°C).

Given: 3 lights fed in sequence on 4 mm² Al (active + neutral), 230 V single-phase, cos φ = 1, conductor at 50 °C; (section length, light power) from the supply: (20 m, 100 W), 2 × (15 m, 100 W); voltage-drop limit 3 % from the point of supply (tool default). Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 7.56 × (1 + 0.00403 × (50 − 20)) = 8.47400 Ω/km
LoadΣP = 300 W; supply current I1 = ΣP / (V × cos φ) = 300 / (230 × 1) = 1.3043 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
1203001.30432 × 1.3043 × 20 × 8.4740/1000 = 0.44210.4421229.560.192
2152000.86962 × 0.8696 × 15 × 8.4740/1000 = 0.22110.6632229.340.288
3151000.43482 × 0.4348 × 15 × 8.4740/1000 = 0.11050.7737229.230.336
Worst lightLight 3: ΣΔV = 0.7737 V → 0.7737 / 230 × 100 = 0.336 %; minimum voltage 229.23 V
Voltage drop check0.336 % ≤ 3 %? → 0.336 vs limit 3.000 % PASS
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.00 / 0.336 = 8.92 × the present load
Result1/1 checks pass → PASS; worst light 3 at 0.336 % total; governing: voltage drop
ReferenceHand calculation: R(50 °C) = 7.56 × (1 + 0.00403 × 30) = 8.4740 Ω/km (component R20 for 4 mm² Al); I = 300/200/100 W ÷ 230 V = 1.30435/0.86957/0.43478 A; ΔV = 2 × 8.4740/1000 × (1.30435 × 20 + 0.86957 × 15 + 0.43478 × 15) = 0.4421 + 0.2211 + 0.1105 = 0.7737 V = 0.336 % (validation case c0015-al-4mm2-50c-3x100w)

Example 5 — Street lighting, 12 × 150 W on 16 mm² Al, 1.5 % upstream

A 5 % limit from the point of supply with 1.5 % already used upstream: the run itself is 4.0 %, so the total fails.

Given: 12 lights fed in sequence on 16 mm² Al (active + neutral), 240 V single-phase, cos φ = 0.9, conductor at 60 °C; (section length, light power) from the supply: 12 × (40 m, 150 W); voltage-drop limit 5 % from the point of supply, 1.5 % already used upstream. Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 1.91 × (1 + 0.00403 × (60 − 20)) = 2.21789 Ω/km
LoadΣP = 1,800 W; supply current I1 = ΣP / (V × cos φ) = 1,800 / (240 × 0.9) = 8.3333 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
1401,8008.33332 × 8.3333 × 40 × 2.2179/1000 = 1.47861.4786238.520.616
2401,6507.63892 × 7.6389 × 40 × 2.2179/1000 = 1.35542.8340237.171.181
3401,5006.94442 × 6.9444 × 40 × 2.2179/1000 = 1.23224.0661235.931.694
4401,3506.25002 × 6.2500 × 40 × 2.2179/1000 = 1.10895.1751234.822.156
5401,2005.55562 × 5.5556 × 40 × 2.2179/1000 = 0.98576.1608233.842.567
6401,0504.86112 × 4.8611 × 40 × 2.2179/1000 = 0.86257.0233232.982.926
7409004.16672 × 4.1667 × 40 × 2.2179/1000 = 0.73937.7626232.243.234
8407503.47222 × 3.4722 × 40 × 2.2179/1000 = 0.61618.3787231.623.491
9406002.77782 × 2.7778 × 40 × 2.2179/1000 = 0.49298.8716231.133.696
10404502.08332 × 2.0833 × 40 × 2.2179/1000 = 0.36969.2412230.763.851
11403001.38892 × 1.3889 × 40 × 2.2179/1000 = 0.24649.4876230.513.953
12401500.69442 × 0.6944 × 40 × 2.2179/1000 = 0.12329.6109230.394.005
Worst lightLight 12: ΣΔV = 9.6109 V → 9.6109 / 240 × 100 = 4.005 %; minimum voltage 230.39 V
Point of supplyTotal = upstream + this circuit = 1.5 + 4.005 = 5.505 %
Voltage drop check5.505 % ≤ 5 %? → 5.505 vs limit 5.000 % FAIL
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.50 / 4.005 = 0.87 × the present load
Result0/1 checks pass → FAIL; worst light 12 at 5.505 % total; governing: voltage drop. Voltage drop of 4.00% exceeds limit of 3.5%
ReferenceHand calculation: R(60 °C) = 1.91 × (1 + 0.00403 × 40) = 2.21789 Ω/km; I_k = (13 − k) × 150 ÷ (240 × 0.9), ΣI = 78 × 150 ÷ 216 = 54.1667 A; ΔV = 2 × 40 × 2.21789/1000 × 54.1667 = 9.6109 V = 4.005 %; total 1.5 + 4.005 = 5.505 % > 5 % (validation case c0015-street-al16-240v-upstream-fail)

Example 6 — First light at the supply, ten 58 W fittings on 4 mm²

A zero-length first section (light mounted at the board) and tapered spacing — only the c0015 engine allows it.

Given: 10 lights fed in sequence on 4 mm² Cu (active + neutral), 230 V single-phase, cos φ = 0.95, conductor at 40 °C; (section length, light power) from the supply: (0 m, 58 W), 2 × (6 m, 58 W), 2 × (8 m, 58 W), 2 × (10 m, 58 W), 2 × (12 m, 58 W), (15 m, 58 W); voltage-drop limit 3 % from the point of supply (tool default). Engine c0015.

ResistanceR(T) = R20 × (1 + α(T − 20)) = 4.61 × (1 + 0.00393 × (40 − 20)) = 4.97235 Ω/km
LoadΣP = 580 W; supply current I1 = ΣP / (V × cos φ) = 580 / (230 × 0.95) = 2.6545 A
SectionsIk = ΣPdownstream / (V × cos φ); ΔVk = 2 × Ik × Lk × R / 1000; cumulative from the supply:
kL (m)ΣP (W)Ik (A)ΔVk (V)ΣΔV (V)V (V)VD %
105802.65452 × 2.6545 × 0 × 4.9723/1000 = 0.00000.0000230.000.000
265222.38902 × 2.3890 × 6 × 4.9723/1000 = 0.14250.1425229.860.062
364642.12362 × 2.1236 × 6 × 4.9723/1000 = 0.12670.2693229.730.117
484061.85812 × 1.8581 × 8 × 4.9723/1000 = 0.14780.4171229.580.181
583481.59272 × 1.5927 × 8 × 4.9723/1000 = 0.12670.5438229.460.236
6102901.32722 × 1.3272 × 10 × 4.9723/1000 = 0.13200.6758229.320.294
7102321.06182 × 1.0618 × 10 × 4.9723/1000 = 0.10560.7814229.220.340
8121740.79632 × 0.7963 × 12 × 4.9723/1000 = 0.09500.8764229.120.381
9121160.53092 × 0.5309 × 12 × 4.9723/1000 = 0.06340.9398229.060.409
1015580.26542 × 0.2654 × 15 × 4.9723/1000 = 0.03960.9794229.020.426
Worst lightLight 10: ΣΔV = 0.9794 V → 0.9794 / 230 × 100 = 0.426 %; minimum voltage 229.02 V
Voltage drop check0.426 % ≤ 3 %? → 0.426 vs limit 3.000 % PASS
HeadroomLoad at the limit = (limit − upstream) / max VD = 3.00 / 0.426 = 7.05 × the present load
Result1/1 checks pass → PASS; worst light 10 at 0.426 % total; governing: voltage drop
ReferenceHand calculation: R(40 °C) = 4.61 × (1 + 0.00393 × 20) = 4.97235 Ω/km; I_k = (11 − k) × 58 ÷ (230 × 0.95); section 1 has L = 0 so ΔV1 = 0; ΣI·L = (9 × 6 + 8 × 6 + 7 × 8 + 6 × 8 + 5 × 10 + 4 × 10 + 3 × 12 + 2 × 12 + 1 × 15) × 0.265446 = 371 × 0.265446 = 98.4805 A·m; ΔV = 2 × 4.97235/1000 × 98.4805 = 0.9794 V = 0.426 % (validation case c0015-first-light-at-supply-4mm2)

Standards & References

  • IEC 60364-5-52 — Low-voltage electrical installations — Selection and erection of electrical equipment — Wiring systems
  • BS 7671 (IET Wiring Regulations) — Requirements for electrical installations, Appendix 12 (voltage drop)
  • AS/NZS 3000:2018 — Electrical installations (Wiring Rules), Clause 3.6 (voltage drop)
  • NEC (NFPA 70) — National Electrical Code, Articles 210.19(A) and 215.2(A) (voltage drop recommendations)
  • IEC 60228 — Conductors of insulated cables (resistance values at 20 °C)
  • Standard voltage drop limit for lighting: typically 3% (configurable per local regulations)

Tips & Limitations

Tips
  • The default 3% limit is typical for lighting sub-circuits. Some standards allow up to 5% total (main + sub-circuit combined).
  • The worst voltage drop always occurs at the last (most distant) light because cumulative drops accumulate along the cable run.
  • LED drivers with wide input voltage ranges (e.g., 180–265 V) tolerate higher voltage drops than fluorescent or incandescent loads.
  • For long runs, increasing cable CSA by one standard size often eliminates voltage drop issues cost-effectively.
  • Power factor for modern LED luminaires is typically 0.95–1.0. Older magnetic ballast fluorescents may be 0.5–0.6 without correction.
  • Higher ambient temperatures increase cable resistance — account for ceiling void, roof space, or enclosed luminaire temperatures.
Limitations
  • Single-phase only — three-phase lighting circuits are not supported by this calculator.
  • Resistive model only — cable reactance is not included. For small lighting conductors (≤ 16 mm²) reactance is negligible; for larger conductors this is slightly non-conservative.
  • No inrush current analysis — LED driver inrush currents at switch-on are not modelled. This calculator is for steady-state voltage drop only.
  • Uniform cable — the same conductor material and CSA is assumed for all sections. Mixed cable sizes are not supported.
  • Simplified current capacity check — the built-in over-current warning uses an approximate table. Always verify current capacity separately using the full cable sizing calculator (c0030 / c0031).
  • Balanced loading assumed — each light draws its rated power at the supply voltage. Voltage-dependent load variation is not modelled.

Developer Guide

Architecture

File layout:

  • components/c0015_lighting_voltage_drop/component.py — Component registration, parameter schema, summary cards builder
  • components/c0015_lighting_voltage_drop/calculations.py — Pure math functions and resistance lookup tables (no Django dependencies)
  • components/c0015_lighting_voltage_drop/equations.py — MathJax equation builder for report generation
  • components/c0015_lighting_voltage_drop/excel_generator.py — Excel report generation with detailed light-by-light breakdown

The calculator class is LightingVoltageDropCalculator, extending ElectricalCalculator. The lights array input is decomposed into cable_lengths and light_powers lists before being passed to the pure calculation function calculate_lighting_voltage_drop().

Lookup tables are defined as Python dicts:

  • COPPER_RESISTANCE_20C — Cu R at 20 °C (Ω/km), keyed by CSA (0.75–500 mm²)
  • ALUMINIUM_RESISTANCE_20C — Al R at 20 °C (Ω/km), keyed by CSA (2.5–500 mm²)

Temperature constants:

  • COPPER_TEMP_COEFF = 0.00393
  • ALUMINIUM_TEMP_COEFF = 0.00403

Code Paths

Key functions in calculations.py:

Function Purpose
calculate_conductor_resistance(csa, material, temperature) Lookup R20 from table, apply temperature correction, return Ω/km
calculate_lighting_voltage_drop(data) Main entry point — computes section currents, voltage drops, cumulative drops, compliance, and warnings. Returns complete results dict.

Key functions in component.py:

Function / Class Purpose
LightingVoltageDropCalculator.validate_parameters() Validates supply voltage, CSA, lights array, and power factor
LightingVoltageDropCalculator.calculate() Orchestrates: extract lights array, decompose into lengths/powers, call calculation engine, merge results with parameter echoes
equation_builder(calculation_results) Delegates to equations.build_equations() for report articles
summary_cards_builder(results) Returns 4 summary cards: max VD%, min voltage, total power, supply current
register_component(registry) Registers calc type 'lighting_voltage_drop' with schema, builders, and sidebar template

Calculation flow:

  1. Calculate R(T) from lookup table + temperature correction
  2. Sum downstream powers for each section (reverse iteration)
  3. Divide cumulative power by \(V \times \cos\phi\) for section current
  4. Compute \(\Delta V = 2 \times I \times L \times R / 1000\) per section
  5. Accumulate voltage drops, derive voltage at each light
  6. Check max VD% against limit, generate warnings

Testing

Running tests:

pytest calcs/components/c0015_lighting_voltage_drop/ -v
pytest calcs/test_c0015* -v

How to extend:

  1. To add new conductor materials, define a new resistance table dict (e.g., TINNED_COPPER_RESISTANCE_20C) and temperature coefficient, then update calculate_conductor_resistance() and the conductor_material enum in PARAMETER_SCHEMA.
  2. To support mixed cable sizes per section, refactor calculate_lighting_voltage_drop() to accept a per-section CSA array and call calculate_conductor_resistance() once per section.
  3. To add reactance for larger conductors, introduce an XC_TABLE and modify the section voltage drop formula to use impedance \(Z = \sqrt{R^2 + X^2}\).
  4. Write tests covering edge cases: single light, 50 lights (max), very long runs, aluminium with high temperature, PF < 1.