Tutorial 4 - Modelación módulo PV#
Este es un tutorial para estimar el desempeño de un módulo PV usando pvlib
.
import pvlib
Acá utilizaremos 3 módulos de la librería.
pvlib.irradiance
: para estimación de ángulos de incidencia y niveles de irradiación efectivos sobre el módulo.pvlib.temperature
: para estimación de la temperatura de las celdas en condiciones de operación.pvlib.pvsystem
: para análisis de módulos pv y estimación de curvas IV.
Para mayor información de las funciones de este tutorial, revisar la documentación oficial de
pvlib
Selección de módulo pv (pvsystem.retrieve_sam
)#
La biblioteca de módulos CEC ('CECmod'
)#
El California Energy Commission Comisión (CEC) contrató laboratorios de pruebas autorizados para caracterizar una variedad de módulos pv en condiciones de medición estandar (standard test conditions o STC). Los resultados incluyen: corriente en corto circuito (\(I_\mathrm{sc}\)), voltaje en circuito abierto (\(V_\mathrm{oc}\)); voltaje, corriente y potencia en punto de potencia máxima o mpp (\(V_\mathrm{mpp}\), \(I_\mathrm{mpp}\) y \(P_\mathrm{mpp}\)); coeficientes de temperatura de voltaje y corriente, dimensiones del módulo, número de celdas en serie (\(N_s\)), subcadenas paralelas (\(N_p\)), área del módulo en \(\mathrm{m^2}\) (\(A_c\)), entre otros. La base de datos CEC está disponibles en la Lista de equipos solares y en un archivo CSV incluido en el System Advisor Model (SAM) del National Renewable Energy Laboratory (NREL).
En pvlib
podemos acceder a la biblioteca CEC mediante la función retrieve_sam
del módulo pvlib.pvsystem
, usando el argumento name = 'CECMod'
pv_module_db = pvlib.pvsystem.retrieve_sam(name = 'CECMod')
La información está desplegada en formato dataframe, donde los modelos de paneles están en anexados por columnas.
pv_module_db.T.head() # Trasponemos la lista con ".T", para visualizar los paneles por filas
Technology | Bifacial | STC | PTC | A_c | Length | Width | N_s | I_sc_ref | V_oc_ref | ... | a_ref | I_L_ref | I_o_ref | R_s | R_sh_ref | Adjust | gamma_r | BIPV | Version | Date | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A10Green_Technology_A10J_S72_175 | Mono-c-Si | 0 | 175.0914 | 151.2 | 1.3 | 1.576 | 0.825 | 72 | 5.17 | 43.99 | ... | 1.981696 | 5.175703 | 0.0 | 0.316688 | 287.102203 | 16.057121 | -0.5072 | N | SAM 2018.11.11 r2 | 1/3/2019 |
A10Green_Technology_A10J_S72_180 | Mono-c-Si | 0 | 179.928 | 155.7 | 1.3 | 1.576 | 0.825 | 72 | 5.31 | 44.06 | ... | 1.988414 | 5.316148 | 0.0 | 0.299919 | 259.047943 | 16.418983 | -0.5072 | N | SAM 2018.11.11 r2 | 1/3/2019 |
A10Green_Technology_A10J_S72_185 | Mono-c-Si | 0 | 184.7016 | 160.2 | 1.3 | 1.576 | 0.825 | 72 | 5.43 | 44.14 | ... | 1.984817 | 5.435676 | 0.0 | 0.311962 | 298.424438 | 15.688233 | -0.5072 | N | SAM 2018.11.11 r2 | 1/3/2019 |
A10Green_Technology_A10J_M60_220 | Multi-c-Si | 0 | 219.876 | 189.1 | 1.624 | 1.632 | 0.995 | 60 | 7.95 | 36.06 | ... | 1.673094 | 7.959062 | 0.0 | 0.140393 | 123.168404 | 21.875164 | -0.5196 | N | SAM 2018.11.11 r2 | 1/3/2019 |
A10Green_Technology_A10J_M60_225 | Multi-c-Si | 0 | 224.9856 | 193.5 | 1.624 | 1.632 | 0.995 | 60 | 8.04 | 36.24 | ... | 1.671782 | 8.047206 | 0.0 | 0.14737 | 164.419479 | 20.698376 | -0.5196 | N | SAM 2018.11.11 r2 | 1/3/2019 |
5 rows × 25 columns
Cada módulo está caracterizado por los siguientes parámetros:
parámetro |
tipo de variable |
Unidades o descripción |
---|---|---|
|
string |
one of “Mono-c-Si”, “Multi-c-Si”, “Thin Film”, “CdTe”, or “CIGS” families of cells |
|
boolean |
is bifacial? |
|
float |
nameplate in W at STC |
|
float |
nameplate in W at PVUSA test conditions (1-sun, 20° ambient temperature, 1-m/s windspeed) |
|
float |
module area in m² |
|
float |
module length in m; |
|
float |
module width in m; |
|
int |
number of cells in series |
|
float |
short circuit current in A at reference condition |
|
float |
open circuit voltage in V at reference condition |
|
float |
max power current in A at reference condition |
|
float |
max power voltage in V at reference condition |
|
float |
short circuit current temperature coefficient in A/Δ°C |
|
float |
open circuit voltage temperature coefficient in V/Δ°C |
|
float |
normal operating cell temperature in °C |
|
float |
diode ideality factor |
|
float |
light or photogenerated current at reference condition in A |
|
float |
diode saturation current at reference condition in A |
|
float |
series resistance in Ω |
|
float |
shunt resistance at reference condition in Ω |
|
float |
adjustment to short circuit temperature coefficient in % |
|
float |
power temperature coefficient at reference condition in %/Δ°C |
|
boolean |
is building integrated PV? |
Selección de modelo de panel#
Como vemos, en la biblioteca CEC los módulos se nombran según el esquema
<nombre del fabricante><modelo>
Los espacios en blanco, los guiones y otros caracteres no alfanuméricos se reemplazan por _
en pvlib python. Por ejemplo, “Canadian Solar Inc. CS5M-220M” existe en la base de datos como: Canadiense_Solar_Inc__CS5P_220M
Alternativamente, podemos usar el comando .T.index.str.startswith
para buscar el modelo. Por ejemplo, para buscar e modelo CS6X-300M de Canadian Solar Inc, buscamos todos los modelos cuyo nombre incluye 'Canadian_Solar_Inc__CS6X'
pv_module_index = pv_module_db.T.index.str.startswith('Canadian_Solar_Inc__CS6X')
pv_module_db.T[pv_module_index]
Technology | Bifacial | STC | PTC | A_c | Length | Width | N_s | I_sc_ref | V_oc_ref | ... | a_ref | I_L_ref | I_o_ref | R_s | R_sh_ref | Adjust | gamma_r | BIPV | Version | Date | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Canadian_Solar_Inc__CS6X_255M | Mono-c-Si | 0 | 255.2 | 226.9 | 1.852 | 1.931 | 0.959 | 72 | 7.83 | 44.0 | ... | 1.897111 | 7.846079 | 0.0 | 0.456126 | 222.113968 | 41.39444 | -0.4697 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_255P | Multi-c-Si | 0 | 255.084 | 226.3 | 1.852 | 1.931 | 0.959 | 72 | 7.95 | 43.7 | ... | 1.998586 | 7.966794 | 0.0 | 0.440573 | 208.55162 | 10.336473 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_260M | Mono-c-Si | 0 | 260.161 | 231.4 | 1.852 | 1.931 | 0.959 | 72 | 7.92 | 44.1 | ... | 1.896924 | 7.932119 | 0.0 | 0.449034 | 293.451385 | 40.807045 | -0.4697 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_260P | Multi-c-Si | 0 | 260.005 | 230.8 | 1.852 | 1.931 | 0.959 | 72 | 8.04 | 43.8 | ... | 1.997587 | 8.052831 | 0.0 | 0.434024 | 271.963593 | 9.824679 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_265M | Mono-c-Si | 0 | 265.185 | 236.0 | 1.852 | 1.931 | 0.959 | 72 | 7.98 | 44.3 | ... | 1.900692 | 7.987295 | 0.0 | 0.441648 | 483.153839 | 40.182526 | -0.4697 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_265P | Multi-c-Si | 0 | 265.005 | 235.4 | 1.852 | 1.931 | 0.959 | 72 | 8.1 | 43.9 | ... | 1.999095 | 8.107948 | 0.0 | 0.413359 | 421.288391 | 9.56615 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_270M | Mono-c-Si | 0 | 269.848 | 240.6 | 1.852 | 1.931 | 0.959 | 72 | 8.07 | 44.4 | ... | 1.902148 | 8.074576 | 0.0 | 0.43477 | 766.684692 | 39.816162 | -0.4697 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_270P | Multi-c-Si | 0 | 270.045 | 240.0 | 1.852 | 1.931 | 0.959 | 72 | 8.19 | 44.1 | ... | 2.007003 | 8.196337 | 0.0 | 0.404672 | 522.96991 | 9.463469 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_275M | Mono-c-Si | 0 | 274.944 | 245.2 | 1.852 | 1.931 | 0.959 | 72 | 8.19 | 44.5 | ... | 1.911487 | 8.196024 | 0.0 | 0.410853 | 558.503357 | 40.504654 | -0.4697 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_275P | Multi-c-Si | 0 | 275.48 | 244.6 | 1.852 | 1.931 | 0.959 | 72 | 8.31 | 44.1 | ... | 2.014461 | 8.316535 | 0.0 | 0.367813 | 467.746704 | 10.188554 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_280M | Mono-c-Si | 0 | 280.08 | 254.9 | 1.852 | 1.931 | 0.959 | 72 | 8.3 | 44.6 | ... | 1.842992 | 8.308303 | 0.0 | 0.408332 | 408.185242 | 4.521174 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_280P | Multi-c-Si | 0 | 279.816 | 249.1 | 1.852 | 1.931 | 0.959 | 72 | 8.42 | 44.2 | ... | 2.020161 | 8.42686 | 0.0 | 0.360789 | 442.843506 | 10.296251 | -0.53 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_285M | Mono-c-Si | 0 | 284.829 | 259.6 | 1.852 | 1.931 | 0.959 | 72 | 8.4 | 44.7 | ... | 1.845517 | 8.40672 | 0.0 | 0.401652 | 501.996704 | 4.356724 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_285P | Multi-c-Si | 0 | 284.968 | 261.5 | 1.852 | 1.931 | 0.959 | 72 | 8.53 | 44.3 | ... | 1.773709 | 8.543951 | 0.0 | 0.404497 | 247.321686 | 11.608932 | -0.424 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_290M | Mono-c-Si | 0 | 290.4 | 264.2 | 1.852 | 1.931 | 0.959 | 72 | 8.51 | 44.7 | ... | 1.850541 | 8.516043 | 0.0 | 0.36706 | 516.99353 | 4.913484 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_290P | Multi-c-Si | 0 | 290.072 | 266.2 | 1.852 | 1.931 | 0.959 | 72 | 8.64 | 44.4 | ... | 1.776129 | 8.652257 | 0.0 | 0.397572 | 280.263275 | 11.423009 | -0.424 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_295M | Mono-c-Si | 0 | 295.204 | 268.9 | 1.852 | 1.931 | 0.959 | 72 | 8.63 | 44.9 | ... | 1.857349 | 8.636433 | 0.0 | 0.372605 | 499.878418 | 4.750471 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_295P | Multi-c-Si | 0 | 294.84 | 270.9 | 1.852 | 1.931 | 0.959 | 72 | 8.76 | 44.5 | ... | 1.780924 | 8.772607 | 0.0 | 0.390254 | 271.182129 | 11.520895 | -0.424 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_300M | Mono-c-Si | 0 | 300.03 | 273.6 | 1.852 | 1.931 | 0.959 | 72 | 8.74 | 45.0 | ... | 1.861184 | 8.745869 | 0.0 | 0.366101 | 545.178589 | 4.722239 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_300P | Multi-c-Si | 0 | 299.63 | 274.1 | 1.901 | 1.948 | 0.976 | 72 | 8.87 | 44.6 | ... | 1.549492 | 8.889917 | 0.0 | 0.444732 | 198.055603 | -18.45339 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_300PN | Multi-c-Si | 0 | 299.63 | 274.1 | 1.901 | 1.948 | 0.976 | 72 | 8.87 | 44.6 | ... | 1.549492 | 8.889917 | 0.0 | 0.444732 | 198.055603 | -18.45339 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_305M | Mono-c-Si | 0 | 304.878 | 278.3 | 1.852 | 1.931 | 0.959 | 72 | 8.84 | 45.2 | ... | 1.865584 | 8.844392 | 0.0 | 0.372554 | 749.932678 | 4.3128 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_305P | Multi-c-Si | 0 | 305.283 | 278.8 | 1.901 | 1.948 | 0.976 | 72 | 8.97 | 44.8 | ... | 1.555804 | 8.988042 | 0.0 | 0.436383 | 216.965805 | -18.525284 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_305PN | Multi-c-Si | 0 | 305.283 | 278.8 | 1.901 | 1.948 | 0.976 | 72 | 8.97 | 44.8 | ... | 1.555804 | 8.988042 | 0.0 | 0.436383 | 216.965805 | -18.525284 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_310M | Mono-c-Si | 0 | 309.748 | 283.0 | 1.852 | 1.931 | 0.959 | 72 | 8.95 | 45.3 | ... | 1.869472 | 8.953835 | 0.0 | 0.366197 | 854.628174 | 4.29112 | -0.442 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_310P | Multi-c-Si | 0 | 310.128 | 283.4 | 1.901 | 1.948 | 0.976 | 72 | 9.08 | 44.9 | ... | 1.559073 | 9.097388 | 0.0 | 0.429443 | 224.251984 | -18.547718 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_310PN | Multi-c-Si | 0 | 310.128 | 283.4 | 1.901 | 1.948 | 0.976 | 72 | 9.08 | 44.9 | ... | 1.559073 | 9.097388 | 0.0 | 0.429443 | 224.251984 | -18.547718 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_315P | Multi-c-Si | 0 | 315.126 | 288.1 | 1.901 | 1.948 | 0.976 | 72 | 9.18 | 45.1 | ... | 1.567015 | 9.197887 | 0.0 | 0.421681 | 216.409912 | -18.428658 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_315P_FG | Multi-c-Si | 0 | 315.126 | 290.1 | 1.952 | 1.968 | 0.992 | 72 | 9.18 | 45.1 | ... | 1.808301 | 9.190076 | 0.0 | 0.361158 | 329.052216 | 4.200763 | -0.423 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_315PN | Multi-c-Si | 0 | 315.126 | 288.1 | 1.901 | 1.948 | 0.976 | 72 | 9.18 | 45.1 | ... | 1.567015 | 9.197887 | 0.0 | 0.421681 | 216.409912 | -18.428658 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_320M_FG | Mono-c-Si | 0 | 320.292 | 294.5 | 1.952 | 1.968 | 0.992 | 72 | 9.13 | 45.6 | ... | 1.832869 | 9.135253 | 0.0 | 0.339967 | 590.948608 | 6.351355 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_320P | Multi-c-Si | 0 | 319.792 | 292.8 | 1.901 | 1.948 | 0.976 | 72 | 9.26 | 45.3 | ... | 1.785282 | 9.270503 | 0.0 | 0.362235 | 319.378571 | 5.857377 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_320P_FG | Multi-c-Si | 0 | 319.792 | 294.8 | 1.952 | 1.968 | 0.992 | 72 | 9.26 | 45.3 | ... | 1.816788 | 9.269608 | 0.0 | 0.354581 | 341.73819 | 4.257481 | -0.423 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_320PN | Multi-c-Si | 0 | 319.792 | 292.8 | 1.901 | 1.948 | 0.976 | 72 | 9.26 | 45.3 | ... | 1.574257 | 9.277335 | 0.0 | 0.414898 | 221.625275 | -18.391764 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_325M_FG | Mono-c-Si | 0 | 325.006 | 299.2 | 1.952 | 1.968 | 0.992 | 72 | 9.21 | 45.8 | ... | 1.841385 | 9.21488 | 0.0 | 0.333581 | 629.620239 | 6.409338 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_325P | Multi-c-Si | 0 | 324.86 | 297.5 | 1.901 | 1.948 | 0.976 | 72 | 9.34 | 45.5 | ... | 1.792502 | 9.349058 | 0.0 | 0.355819 | 366.895386 | 5.787566 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_325P_FG | Multi-c-Si | 0 | 324.86 | 299.5 | 1.952 | 1.968 | 0.992 | 72 | 9.34 | 45.5 | ... | 1.824118 | 9.348196 | 0.0 | 0.348214 | 396.818359 | 4.188112 | -0.423 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_325PN | Multi-c-Si | 0 | 324.86 | 297.5 | 1.901 | 1.948 | 0.976 | 72 | 9.34 | 45.5 | ... | 1.580713 | 9.355673 | 0.0 | 0.408153 | 243.238632 | -18.446198 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_330M_FG | Mono-c-Si | 0 | 330.0 | 303.9 | 1.952 | 1.968 | 0.992 | 72 | 9.31 | 45.9 | ... | 1.844092 | 9.313543 | 0.0 | 0.328455 | 863.200317 | 6.268506 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_330P | Multi-c-Si | 0 | 330.336 | 302.2 | 1.901 | 1.948 | 0.976 | 72 | 9.45 | 45.6 | ... | 1.799984 | 9.45929 | 0.0 | 0.33682 | 342.627319 | 6.209896 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_330P_FG | Multi-c-Si | 0 | 330.336 | 304.2 | 1.952 | 1.968 | 0.992 | 72 | 9.45 | 45.6 | ... | 1.831802 | 9.45844 | 0.0 | 0.329234 | 368.637207 | 4.604088 | -0.423 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_330PN | Multi-c-Si | 0 | 330.336 | 302.2 | 1.901 | 1.948 | 0.976 | 72 | 9.45 | 45.6 | ... | 1.586617 | 9.465841 | 0.0 | 0.389084 | 232.106079 | -18.157181 | -0.4002 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_335M_FG | Mono-c-Si | 0 | 335.286 | 308.6 | 1.952 | 1.968 | 0.992 | 72 | 9.41 | 46.1 | ... | 1.858718 | 9.415661 | 0.0 | 0.308086 | 512.156799 | 7.007009 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_340M_FG | Mono-c-Si | 0 | 339.963 | 313.4 | 1.952 | 1.968 | 0.992 | 72 | 9.48 | 46.2 | ... | 1.859307 | 9.482877 | 0.0 | 0.304588 | 1003.516541 | 6.635578 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_345M_FG | Mono-c-Si | 0 | 345.186 | 318.1 | 1.952 | 1.968 | 0.992 | 72 | 9.56 | 46.4 | ... | 1.866701 | 9.561754 | 0.0 | 0.298902 | 1629.640015 | 6.570088 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
Canadian_Solar_Inc__CS6X_350M_FG | Mono-c-Si | 0 | 350.062 | 322.8 | 1.952 | 1.968 | 0.992 | 72 | 9.67 | 46.6 | ... | 1.878479 | 9.673747 | 0.0 | 0.291873 | 753.160706 | 6.977625 | -0.4168 | N | SAM 2018.11.11 r2 | 1/3/2019 |
46 rows × 25 columns
De aquí identificamos que el modelo está bajo el nombre Canadian_Solar_Inc__CS6X_300M
pv_model = pv_module_db.Canadian_Solar_Inc__CS6X_300M
Los parámetros CEC de este módulo son
pv_model
Technology Mono-c-Si
Bifacial 0
STC 300.03
PTC 273.6
A_c 1.852
Length 1.931
Width 0.959
N_s 72
I_sc_ref 8.74
V_oc_ref 45.0
I_mp_ref 8.22
V_mp_ref 36.5
alpha_sc 0.004326
beta_oc -0.15372
T_NOCT 44.3
a_ref 1.861184
I_L_ref 8.745869
I_o_ref 0.0
R_s 0.366101
R_sh_ref 545.178589
Adjust 4.722239
gamma_r -0.442
BIPV N
Version SAM 2018.11.11 r2
Date 1/3/2019
Name: Canadian_Solar_Inc__CS6X_300M, dtype: object
Simulación de curva IV#
Para simular la curva IV de un módulo debemos considerar los siguientes pasos:
Definir las condiciones de operación (niveles de irradiancia y condiciones climatológicas del sitio)
Determinar irradiación sobre el módulo
Determinar la temperatura de las celdas dentro del módulo
Determinar los cinco parámetros del SDM para los niveles de irradiancia y temperatura de la celda.
Caracterizar la curva IV en las condiciones de operación.
Graficar curva IV según condiciones de operación.
Condiciones de operación#
En este caso consideraremos un panel solar con ángulos de inclinación \(\theta = 30°\) y \(\phi = 90°\).
pv_module_zenith = 30 # ángulo cenital
pv_module_azimuth = 90 # ángulo acimutal
Respecto a las condiciones climáticas y de irradiación, consideraremos la siguiente serie de datos.
import pandas as pd
site_conditions = pd.DataFrame(data = {
'ghi': [ 450, 550, 950, 1050], # Irradiación horizontal global (W/m2)
'dni': [ 170, 130, 950, 960], # Irradiación normal directa (W/m2)
'dhi': [ 350, 430, 100, 100], # Irradiación horizonal difusa (W/m2)
'apparent_zenith': [ 44.2, 33.1, 23.3, 17.4], # ángulo cenital aparente (°)
'azimuth': [ 97.4, 110.6, 131.3, 167.9], # ángulo acimutal (°)
'temp_air': [ 13.0, 13.5, 15.0, 16.5], # temperatura del aire (°V)
'wind_speed': [ 6.5, 7.2, 7.6, 8.05]}) # Velocidad del viento (m/s)
site_conditions
ghi | dni | dhi | apparent_zenith | azimuth | temp_air | wind_speed | |
---|---|---|---|---|---|---|---|
0 | 450 | 170 | 350 | 44.2 | 97.4 | 13.0 | 6.50 |
1 | 550 | 130 | 430 | 33.1 | 110.6 | 13.5 | 7.20 |
2 | 950 | 950 | 100 | 23.3 | 131.3 | 15.0 | 7.60 |
3 | 1050 | 960 | 100 | 17.4 | 167.9 | 16.5 | 8.05 |
En este caso, agrupamos todos los datos en un dataframe site_conditions
para facilitar la manipulación posterior. Sin embargo, esto no es obligatorio.
Irradiación sobre el módulo (pvlib.irradiance
)#
La irradiación efectiva sobre la superficie del módulo (\(G_\mathrm{eff}\)), depende del ángulo de incidencia (\(\theta_i\)) y los niveles de irradiación (GHI, DNI y DHI). En general, determinar esto requiere de modelos complejos. Acá, para simplificar, usaremos la relación:
Para determinar el ángulo de incidencia (angle of incidence o AOI), usamos la función aoi
del módulo pvlib.irradiance
. Tal como se discutió en la unidad 7, el ángulo de incidencia depende de los ángulos de inclinación del módulo y del sol. En la función aoi
, estos parámetros son:
surface_tilt
: ángulo cenital del módulo (en grados)surface_azimuth
: ángulo acimutal del módulo (en grados)solar_zenith
: ángulo cenital solar (en grados)solar_azimuth
: ángulo acimutal solar (en grados)
sun_zenith = site_conditions['apparent_zenith'].values
sun_azimuth = site_conditions['azimuth'].values
aoi = pvlib.irradiance.aoi(
surface_tilt = pv_module_zenith,
surface_azimuth = pv_module_azimuth,
solar_zenith = sun_zenith,
solar_azimuth = sun_azimuth)
aoi # mostramos el ángulo de incidencia
array([14.86296973, 11.16380436, 19.26937607, 30.93638479])
Con esto, determinamos la irradiación efectiva sobre el módulo.
import numpy as np
# get irradiance
dni = site_conditions['dni'].values
ghi = site_conditions['ghi'].values
dhi = site_conditions['dhi'].values
# Determinamos irradiación effectiva sobre el módulo
Geff = dni*np.cos(np.radians(aoi)) + dhi
print('Irradiación efectiva:', Geff)
Irradiación efectiva: [514.31215061 557.5400963 996.77859924 923.42907172]
Temperatura de las celdas (pvlib.temperature
)#
Existen distintos modelos para determinar la temperatura de las celdas \(T_\mathrm{cell}\). En este curso usaremos el Sandia Array Performance Model de Sandia National Laboratories. El modelo está compuesto por dos ecuaciones:
donde \(T_a\) es la temperatura del aire, \(G_\mathrm{eff}\) es la irradiancia efectiva sobre el módulo, \(G_0\) es la irradiancia de referencia, \(V_\mathrm{wind}\) es la velocidad del viento, \(T_\mathrm{mod}\) es la temperatura del módulo, y \(a\), \(b\) y \(\Delta T\) son parámetros de ajuste.
Este modelo está implementado en la función sapm_cell
del módulo pvlib.temperature
. La función requiere de los siguientes parámetros:
poa_global
: Irradiación efectiva sobre el módulo (\(\mathrm{W/m^2}\))temp_air
: Temperatura del aire (°C)wind_speed
: Velocidad del viento (m/s)a
: Parámetro \(a\).b
: Parámetro \(b\).deltaT
: Parámetro \(\Delta T\).irrad_ref
: Irradiancia de referencia, \(E_0\) (\(\mathrm{W/m^2}\)).irrad_ref = 1000
, por defecto).
Los parámetros de ajuste \(a\), \(b\) y \(\Delta T\) dependen, en general, de la construcción del módulo pv (protección frontal y trasera) y de su montaje. La variable TEMPERATURE_MODEL_PARAMETERS
del módulo pvlib.temperature
contiene una lista de referencia:
front / backsheet |
montaje |
variable |
---|---|---|
vidrio / vidrio |
rack abierto |
|
vidrio / vidrio |
rack cerrado |
|
vidrio / polímero |
rack abierto |
|
vidrio / polímero |
rack aislado |
|
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS
TEMPERATURE_MODEL_PARAMETERS['sapm']
{'open_rack_glass_glass': {'a': -3.47, 'b': -0.0594, 'deltaT': 3},
'close_mount_glass_glass': {'a': -2.98, 'b': -0.0471, 'deltaT': 1},
'open_rack_glass_polymer': {'a': -3.56, 'b': -0.075, 'deltaT': 3},
'insulated_back_glass_polymer': {'a': -2.81, 'b': -0.0455, 'deltaT': 0}}
En este caso, consideraremos los parámetros de un módulo sin aislar y protegido por un polímero en la parte trasera (open_rack_glass_polymer
); adecuado para la mayoría de los sistemas actuales.
parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_polymer']
Ahora procedemos a determinar la temperatura de la celda.
Nota: usamos el argumento
**parameters
para extraer los parámetrosa
,b
ydeltaT
de forma automática. Omitimos el parámetroirrad_ref
para usar el valor por defecto.
# Extraemos datos de temperatura del aire y viento
temp_air = site_conditions['temp_air'].values
wind_speed = site_conditions['wind_speed'].values
# Calculamos la temperatura de la celda
temp_cell = pvlib.temperature.sapm_cell(
poa_global = Geff,
temp_air = temp_air,
wind_speed = wind_speed,
**parameters)
print('Temperatura de la celda: ', temp_cell)
Temperatura de la celda: [23.52590479 24.41255133 34.02140522 33.62881438]
Parámetros SDM en operación (pvlib.pvsystem.calcparams_cec
)#
Como vimos en la unidad 10, el modelo SDM está caracterizado por 5 parámetros:
Corriente fotoinducida,
IL
(análogo a \(I_\mathrm{ph}\))Corriente de saturación,
I0
.Resistencia en derivación,
Rs
.Resistencia en serie,
Rsh
.Factor de idealidad del diodo, \(n\).
Es importante considerar que los parámetros de la biblioteca CEC fueron determinados en condiciones de operación estandar (o STC). Así, debemos determinar el valor efectivo de estos parámetros en las condiciones de operación del módulo pv.
En pvlib
usamos la función calcparams_cec
del módulo pvlib.pvsystem
para derterminar IL
, I0
, Rs
, Rsh
y nNsVth
en las condiciones de operación. El último parámetro (nNsVth
), corresponde al producto entre \(n\), el número de celdas en serie (\(N_s\)) y el voltaje térmico (\(V_T\)).
Como parámetros de entrada, pvsystem.calcparams_cec
requiere:
effective_irradiance
: Niveles de irradianciatemp_cell
: Temperatura de la celdaalpha_sc
,a_ref
,I_L_ref
,I_o_ref
,R_sh_ref
yAdjust
: Parámetros CEC asociados al módulo seleccionado.EgRef
: Bandgap de la celda (EgRef = 1.121
en todos los casos)dEgdT
: Variación del bandgap con la temperatura (dEgdT = -0.0002677
en todos los casos)
IL, I0, Rs, Rsh, nNsVth = pvlib.pvsystem.calcparams_cec(
effective_irradiance = Geff,
temp_cell = temp_cell,
alpha_sc = pv_model.alpha_sc,
a_ref = pv_model.a_ref,
I_L_ref = pv_model.I_L_ref,
I_o_ref = pv_model.I_o_ref,
R_sh_ref = pv_model.R_sh_ref,
R_s = pv_model.R_s,
Adjust = pv_model.Adjust,
EgRef = 1.121,
dEgdT = -0.0002677)
El resultado de cada variable se almacena en un arreglo asociado a las condiciones de irradiación y temperatura.
# Mostramos resultado en formato dataframe (solo para visualización)
column_values = ['Geff (W/m2)', 'Tcell (°C)', 'IL (A)', 'I0 (A)', 'Rs (Ohm)', 'Rsh (Ohm)', 'nNsVth (V)']
pd.DataFrame(data = np.vstack((Geff, temp_cell, IL, I0, Rs, Rsh, nNsVth)).T,
columns = column_values)
Geff (W/m2) | Tcell (°C) | IL (A) | I0 (A) | Rs (Ohm) | Rsh (Ohm) | nNsVth (V) | |
---|---|---|---|---|---|---|---|
0 | 514.312151 | 23.525905 | 4.494982 | 2.133634e-10 | 0.366101 | 1060.014990 | 1.851982 |
1 | 557.540096 | 24.412551 | 4.874823 | 2.479015e-10 | 0.366101 | 977.828487 | 1.857517 |
2 | 996.778599 | 34.021405 | 8.754759 | 1.194023e-09 | 0.366101 | 546.940504 | 1.917500 |
3 | 923.429072 | 33.628814 | 8.109032 | 1.121840e-09 | 0.366101 | 590.384910 | 1.915049 |
Caracterización curva IV (pvlib.pvsystem.singlediode
)#
Una vez determinados los parámetros IL
, I0
, Rs
, Rsh
y nNsVth
en las condiciones de operación, lo siguiente es resolver el SDM para caracterizar la curva IV del módulo en operación. Es decir, determinar \(V_\mathrm{oc}\), \(I_\mathrm{sc}\), \(V_\mathrm{mpp}\), \(I_\mathrm{mpp}\), etc.
Para esto usamos la función singlediode
del módulo pvlib.pvystem
.
Los parámetros de entrada de pvlib.pvsystem.singlediode
son:
photocurrent
: corriente fotoinducidasaturation_current
: corriente de saturaciónresistance_series
: resistencia en serieresistance_shunt
: Resistencia en derivaciónnNsVth
: producto \(nN_sV_T\).
curve_info = pvlib.pvsystem.singlediode(
photocurrent = IL,
saturation_current= I0,
resistance_series = Rs,
resistance_shunt = Rsh,
nNsVth = nNsVth)
El output de la función es un dataframe con las características principales de la curva IV. Estos son:
i_sc
: corriente de corto circuito (A)v_oc
: voltaje en circuito abierto (V)i_mp
: corriente en punto de potencia máxima, o mpp (A)v_mp
: voltaje en punto de potencia máxima, o mpp (V)p_mp
: potencia en punto de potencia máxima, o mpp (W)i_x
: corriente env = 0.5*v_oc
(A).i_xx
: corriente env = 0.5*(v_oc + v_mp)
(A).
curve_info
i_sc | v_oc | i_mp | v_mp | p_mp | i_x | i_xx | |
---|---|---|---|---|---|---|---|
0 | 4.493430 | 44.006255 | 4.238331 | 36.887448 | 156.341223 | 4.472605 | 3.223348 |
1 | 4.872998 | 44.009772 | 4.594145 | 36.762238 | 168.891041 | 4.850413 | 3.471360 |
2 | 8.748903 | 43.539514 | 8.197781 | 35.017820 | 287.068421 | 8.708590 | 5.821700 |
3 | 8.104007 | 43.456587 | 7.598350 | 35.139783 | 267.004359 | 8.066782 | 5.444804 |
Suponiendo que el módulo opera en el punto mpp (utilizando un mpp tracker, por ejemplo), tenemos que entre la hora 0 y 3 la energía total entregada por el módulo está dada por la suma de los valores p_mp
.
print('Energía total entregada por el módulo: %.3f Wh' % np.sum(curve_info['p_mp']))
Energía total entregada por el módulo: 879.305 Wh
Gráfico de curva IV (pvlib.pvsystem.i_from_v
)#
Para graficar la curva IV podemos usar la función i_from_v
del módulo pvlib.pvsystem
. Esta función calcula la corriente para un voltaje v
dado, en base al SDM. Los parámetros de entrada son:
voltage
: voltaje efectivo.photocurrent
: corriente fotoinducidasaturation_current
: corriente de saturaciónresistance_series
: resistencia en serieresistance_shunt
: Resistencia en derivaciónnNsVth
: producto \(nN_sV_T\).
Primero, generamos un arreglo numpy
para el voltaje \(v\) en el intervalo \(V\in[0,V_\mathrm{oc}]\)
v = np.linspace(0., curve_info['v_oc'], 100)
Luego determinamos la corriente, \(I\), usando los parámetros IL
, I0
, Rs
, Rsh
y nNsVth
en operación, obtenidos anteriormente por calcparams_cec
.
i = pvlib.pvsystem.i_from_v(
voltage = v,
photocurrent = IL,
saturation_current= I0,
resistance_series = Rs,
resistance_shunt = Rsh,
nNsVth = nNsVth)
Ahora graficamos las curvas IV para las 4 condicones de operación.
import matplotlib.pyplot as plt
# Graficamos las curvas IV para cada condición de operación
for idx in site_conditions.index:
# Etiqueta de la curva IV
label = ('$G_{eff}=$ %.1f $W/m^2$\n' % Geff[idx] +
'$T_{cell}=$ %.1f $\\degree C$' % temp_cell[idx])
# Gráfica de la curva IV
plt.plot(v[:,idx], i[:,idx], label=label)
# Marcamos el mpp en el gráfico
v_mp = curve_info['v_mp'][idx] # Valor de V_mp en condiciones de operación
i_mp = curve_info['i_mp'][idx] # Valor de I_mp en condiciones de operación
plt.plot([v_mp], [i_mp], ls='', marker='o', c='k') # punto mpp
# Etiqueta de los ejes y título del gráfico
plt.xlabel('Voltaje [V]')
plt.ylabel('Corriente [A]')
plt.title('Curva IV módulo - %s' % pv_model.name)
plt.legend()
plt.show()
