SunPower / PVMismatch

An explicit Python PV system IV & PV curve trace calculator which can also calculate mismatch.
http://sunpower.github.io/PVMismatch/
BSD 3-Clause "New" or "Revised" License
79 stars 30 forks source link

PVModule IV curve has no knees #66

Closed sdavila604 closed 6 years ago

sdavila604 commented 6 years ago

Hi!

I am simulating shading on a STD72 module to test microinverter MPPT tracking. I am passing the PVmodule.setSuns function a np.ndarray with values between 0.2 and 1.0 as a shade passes over the module. However, the IV curve produced does not seem to have the "knees" that we would expect.

I am attaching an mp4 file of the animation, as well as the Python script I am using. I apologize for how poorly structured and commented it is. It is a work in progress (scaffolding!).

Any help or insight would be greatly appreciated!

panel_animation.zip

dynamic_shading.zip

chetan201 commented 6 years ago

@sdavila604 I am not sure I follow you about the "knee" of the IV curve. I do see it in the animation you sent. Limiting the axes to [0,Isc] and [0,Voc] would show it better.

sdavila604 commented 6 years ago

Thank you for your very prompt response! What we see on real panels when we shade sections of them is several bends (which we call "knees"). These knees result from the bypass diodes bypassing sections of the panel that are no longer generating current. The microinverter MPPT tracking algorithm must hunt for the best "knee" to maximize power extraction. Here is an image that shows what the IV curves look like with partial shading of panels:

diagonal_shade_75_20_75_oct262016093006

mikofski commented 6 years ago

@sdavila604 I think what your image is showing is that there is:

That's why you see that shade pattern. So reproduce this in pvmismatch:

>>> from pvmismatch import *
>>> pvm = pvmodule.PVmodule()   # initial module has 1.0 suns everywhere
>>> pvm.setSuns(Ee=[0.75, 0.75, 0.75, 0.20, 0.20, 0.20], cells=[0, 1, 2, 92, 93, 94])
>>> fig = pvm.plotMod()
>>> fig.show()

and you get your knees: sdavila_knees

sdavila604 commented 6 years ago

Thank you!

I ran your code and, sure enough, I get the same curve you show.

Just to make sure I am interpreting this correctly, you have cells 0,1,2 getting 0.75 suns and cells 92,93,94 getting 0.25 suns. Correct? I will see if I can get the same using my code and let you know.

Thanks!

sdavila604 commented 6 years ago

So, this is the closest I can get to duplicating your "setSuns" with my code:

Cell idx: 0 Suns: 0.752121440271867 Cell idx: 1 Suns: 0.7480000000000002 Cell idx: 2 Suns: 0.762620925038382 Cell idx: 3 Suns: 1.0 Cell idx: 4 Suns: 1.0 ... Cell idx: 90 Suns: 1.0 Cell idx: 91 Suns: 1.0 Cell idx: 92 Suns: 0.2462432599770664 Cell idx: 93 Suns: 0.2462432599770663 Cell idx: 94 Suns: 0.24624325997706706 Cell idx: 95 Suns: 1.0

Here is the (single frame) animation I get: panel_animation.zip

sdavila604 commented 6 years ago

The problem was my plot! For some reason in pyplot if you only update the y coordinates it gets confused.

Thank you for your help and sorry for the distraction.

panel_animation.zip

mikofski commented 6 years ago

🎉 @sdavila604 does this resolve your conflict? Will you close this issue? Thanks

sdavila604 commented 6 years ago

It does. Thank you.