DC Optimizer
See original GitHub issueIs your feature request related to a problem? Please describe. related to #1581 - a model for systems with DC optimizers and coupled string inverters would be useful
Describe the solution you’d like
- some references
- a specification of the inputs required
- an implementation of a published algorithm
Describe alternatives you’ve considered I think DC optimizers can be considered to be like the MPPT of an inverter. Connected either singly or to pairs of modules, they will find the max power point (Imp, Vmp) of those modules, then convert that to an equivalent operating condition (I, V) that when combined with other optimizers in the string will add up to the a fixed voltage (Vfix) that the string inverter expects, which then converts that to AC like a normal inverter, except it operates at constant input voltage, IE no MPPT, b/c that’s handled by the DC optimizer. Because the DC optimzers are in series they are constrained by their current, they must all have identical current. ~Therefore all of the DC optimizers will have to sweep across a range of currents to find the current for which the sum of voltages (from all the DC optimizers in the string) corresponds to the fixed voltage of the inverter.~
Actually, the current can be solved analytically directly from the total power because it’s a linear relation!
vtest = SUM(Vtest_i) = SUM(Pmp1/itest + Pmp2/itest + ...) = SUM(Pmp_i)/itest
# so
ifixed = SUM(Pmp_i)/vfixed
IE the voltage from each dc optimizer is the power divided by the test current, which is constant for all dc optimizers in the series. This is equivalent to summing the powers from all the optimizers and dividing the sum by the test current. QED
Then the inverter is like a grid-connected SAPM inverter.
There can be additional losses for the DC optimizers:
- a fixed loss
- a variable loss that scales with the voltage, but since this is fixed for a given inverter it can be combined with the fixed loss for a particular DC-optimizers & inverter pair.
Summary algorithm:
- ~Apply the DC loss to the inverter fixed voltage to get V_fixed = V_inverter * (1-DC_loss)~ wrong this goes to power!
- Combine IV curves for pairs of modules.
- For each pair of modules, find MPP and (Pmp = Imp*Vmp) of combined IV curve
- ~for all DC optimizers in a string, loop over a range of currents~
- ~given current (I_i) calculate V_i = (Pmp)/I_i~
- ~calculate SUM(V_i) and check if it is within tolerance of inverter fixed voltage (V_fixed)~
- calculate I_fixed from total power and fixed voltage Pmp*(1-DC_loss) / v_fixed <- loss goes here!
- when V_i for all DC optimizers has been found, use the grid-connected Sandia model to get inverter efficiency based on P_dc = V_fixed * I_i
Additional context If anyone has references, please list them here
Issue Analytics
- State:
- Created 10 months ago
- Comments:14 (14 by maintainers)
Top GitHub Comments
@mikofski I shared this discussion with a colleague who has a deep understanding of inverters and DC-DC optimization algorithms. His response: “looks like an entirely reasonable approach.” One suggestion is to include an MPPT efficiency term unless we want to simplify by accounting for MPPT efficiency in the DC optimizer loss.
PVSC poster perhaps?
DC-DC optimizer datasheets (usually) have two efficiency values (maximum and weighted), so I’d expect users to have those values and probably not the full curve. There’s no list of optimizer parameters, that I’m aware of. Most of the energy production will be at high power, so I think a constant efficiency is OK for many use cases. Perhaps an initial function could accept an array and interpolate (I think that could also work for a length-one array).