I often do LVDC designs where I power multiple loads in parallel from a single voltage source. I use a single pair cable and connect each load to this in parallel. Each load is separated by some distance, usually 50m-150m, so there can be significant voltage drop. The magnitude of the loads is always known, e.g. a CCTV camera that draws 25W or a PoE switch that will draw 35W or a luminaire that will draw 65W.

I usually do a trial and error process on my spice software to verify that my voltage drop from beginning to end won't exceed the maximum permitted due to regulations (and also for efficiency reasons.) This is typically 5% or 8% voltage drop max.

I want to replace this with an Excel sheet style calculator where I:

  1. Input the amount of loads.
  2. Input the value of each load (50W,75W etc.)
  3. Input the distance between loads.
  4. Input the supply voltage (48VDC, 56VDC etc.)
  5. Input the maximum permissible voltage drop (5%, 8% etc.)

From this I want to get the minimum CSA conductor I can use to stay within these voltage drop limits, and to ensure enough power is available for all loads. Whilst trying to work this out on pen and paper I got stumped with the following:

I will have known load values, but this does not nessecarily mean I can easily represent this load with a resistor. Due to the parllel wiring and distances between loads, there will be a unique voltage at each load due to voltage drops along the cable. I've added a picture from a spice simulation to show help understand this point.


simulate this circuit – Schematic created using CircuitLab

I struggle to see how to use KVL/KCL or similar to get to the bottom of this, given I can't get values for the equivalent load resistances without knowing the voltage drop. This is why currently I use a trial and error style approach.

I am not asking anyone to make this Excel sheet or anything like that, I just want to know how I can represent the loads using resistors or otherwise so I can do a complete circuit analysis which will provide answers in the sheet I will eventually make.

  • \$\begingroup\$ The current flowing through R_wire_3_90m is the sum of those flowing through R_Load4 (and R_wire_4_90m2 as they are in series) and R_Load3. And the current flowing through R_wire_2_90m is the sum of those flowing through R_Load2 and R_wire_3_90m -which is the sum of last two-. So, start from what the acceptable voltage at Load4-side is and determine its current, then come back towards the input at each step. \$\endgroup\$ Commented Feb 21, 2023 at 16:08
  • \$\begingroup\$ @RohatKılıç I have done this (KCL analysis) - and am left with the total current (current through R_wire_1_90m) is equal to the sum of the currents through Loads 1,2 and 3 plus the current through R_wire_40_90m2 (which is the same current then through R_Load4 as you mentioned). Not sure how to use this. After completing KVL I can find voltages about each loop and expand/substitute them to involve the source voltage. Not sure where to go from there. \$\endgroup\$ Commented Feb 21, 2023 at 16:18

4 Answers 4


While an Excel calculator or a Python script aren't a bad idea, a better SPICE model can give instant results in DC simulation as you modify the values.

SPICE allows formulas to be used to determine the component values, and intermediate values to be computed and stored in variables. Most of these computations could be easily factored out, so that you can quickly visualize what's going on. Remember that CircuitLab is bundled in this stack exchange, so you get this simulation "for free". Results are updated instantaneously as you change parameters.


simulate this circuit – Schematic created using CircuitLab

The input parameters are V1 - supply voltage, P1..P4 - loads, l1..l4 - wire lengths, AWG - wire gage.

VM1 displays the percent voltage drop (1%=1mV), VM2 displays the absolute voltage drop, _R1.._R4 display the wire resistances (1Ω=1V).

[In] P1/V(I1.nA) - specifically what the nA is referencing

V(x) is SPICE syntax for voltage at node x. Here, I1.nA is the mnemonic name for the A (upper) node of the current source I1. That name is likely specific to CircuitLab. Other SPICE packages may name nodes in a different convention. In all cases a node can be referenced to by its number as well (every node has one).

So, P1/V(I1.nA) meant "variable P1 divided by voltage at node I1.nA". This way, we made the current source into a voltage-controlled current source that behaves like a constant power load.

CircuitLab also has VCCS (Voltage Controlled Current Source) elements, but they only allow adjustment of conductance, and that's not enough to create a constant power load, since the voltage would have to be inverted.

Nodes may be referenced in various ways: by number, by a node name specific to the component the node is connected to, or by one or more global names/aliases.

Since we've given the current source inputs explicit names v1..v4, we could also write P1/V(v1). I wrote V(I1.nA) before I gave those nodes better names :)

Could you explain what the resistor network is at the bottom right, the 4 individual sources and resistors

The voltage sources VR1..VR4 have values of the variables R1..R4, and thus they output voltages proportional to those calculated resistances. These voltages are then shown on the voltmeters _R1.._R4. CircuitLab doesn't have ohm-meter display instruments, so we implement our own this way. There are no resistors there - just voltmeters showing resistance.

Reference your point "intermediate values to be computed and stored in variables" - can you give an example of this in this case?

Everything on the schematic that reads A = B defines a variable or function a A with the value B. If B is a numeric constant, then A is a simple variable. If B references other variables, it is a function of those variables. Thus, for example, D1 = exp(2.1104-0.11594*AWG1) defines a function D1(AWG1), here meaning the diameter, in mm^2, of wire hawing wire gage AWG1.

You can use the formulas shown in the simulation above to develop an Excel sheet or a Python script to give "easy answers".

I struggle to see how to use KVL/KCL or similar to get to the bottom of this, given I can't get values for the equivalent load resistances without knowing the voltage drop.

Use current sources to represent the loads, and parametrize the currents with node voltages so that the current sources always dissipate the desired load. No trial-and-error needed. The equations are nonlinear, so they have to be solved using a nonlinear solver. Such a solver can be implemented as a couple of iterations of a linearized system.

The node voltages of interest (v1..v4) can be computed as follows:

$$\begin{aligned} v_1 &= v_0-R_1\cdot(I_1+I_2+I_3+I_4)\\ v_2 &= v_1-R_2\cdot(I_2+I_3+I_4)\\ v_3 &= v_2-R_3\cdot(I_3+I_4)\\ v_4 &= v_3-R_4\cdot(I_4)\\ I_1 &= P_1/v_1\\ I_2 &= P_2/v_2\\ I_3 &= P_3/v_3\\ I_4 &= P_4/v_4,\\ \end{aligned}$$

where \$v_0, R_1, \ldots, R_4, P_1, \ldots, P_4\$ are known.


You're right in that since you have a constant power load (switching power supplies) the current will change depending on the available voltage. The wire drop is just a resistor in series with a constant power load.

The only way I see being able to do this in a spread sheet is to have it iterate a few levels.

eg. 54V, 0.3456Ω, 54W
Row A: \$\frac{54W}{54V}=1A\$, \$1A*0.3456Ω=0.3456V\$

Row B: \$\frac{54W}{54V-0.3456V}=1.006448A\$, \$1.006448A*0.3456Ω=0.347828V\$

Row C: \$Vload=54V-0.347828V=53.652V\$

Then the next device will start from Row C voltage, etc.

  • \$\begingroup\$ Understood ref. wire drop, that is what I have modeled in the image attached on the question I believe. With the iteration method you mentioned, what way would you factor in the drop along the wire? For example, would you before going to Row B (or load 3) then also calculate the voltage drop from the wire, before proceeding? Also what is the 0.3456 ohm resistor mentioned? \$\endgroup\$ Commented Feb 21, 2023 at 16:36
  • 1
    \$\begingroup\$ @BrandonKellett The resistor is from your drawing, wire resistance. \$\endgroup\$
    – Aaron
    Commented Feb 21, 2023 at 18:34

One way to do this is by setting the voltage at the end of the line, Rload_4. That will be the minimum allowable voltage. Then calculate the current going through Rload_4. Then calculate the voltage at Rload_3 by adding the voltage across Rload_4 and the voltage drop between Rload_3 and Rload_4. You can continue doing that until you get to the supply voltage. Then you can adjust the wire gauge and make the calculation again until you get supply voltage that is acceptable.


If your loads are driven by DC-DC regulators (as they would be for PoE for example), they can be modeled as constant power. That is, their currents will vary in response to voltage increase or decrease due to your cable IR drop.

This could be very easily modeled with a spreadsheet, no need for Spice.

  • \$\begingroup\$ Yes actually, in the most case this will be the scenario - a higher voltage stepped down at each load to power it. What you are saying then is that if a device needs 50W, it could draw 2A at 25V or 2.2A at 22V etc.? Could you give a brief outline of how you would model this on a spreadsheet? \$\endgroup\$ Commented Feb 23, 2023 at 8:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.