program explicit_model_IV_improved
implicit none
! --- Definicion de variables ---
integer :: k, num_puntos
double precision :: q, k_boltz, beta, alpha
double precision :: G, G_ref, CR_PTC, T, T_cell, T_ref
double precision :: Voc_ref, Isc_ref, Jsc_ref, APV
double precision :: Vt, n_min, n_max, coef, n
double precision :: Voc, Isc, I0
double precision :: Vmp, Imp, Pmp, MPPT
double precision :: Rpv
! --- Variables del Nuevo Modelo ---
double precision :: V, I, P_act
double precision :: paso_I, log_term
double precision :: V_thermal_n ! Termino combinado (n * Vt)
! --- Parámetros Físicos ---
q = 1.602e-19
k_boltz = 1.381e-23
beta = -0.0023
alpha = 0.0006
! --- Condiciones Ambientales y del Sistema ---
G = 960.0 ! Irradiancia base
G_ref = 1361 !1353.0 ! Irradiancia referencia
CR_PTC = 20!30!16.92 ! Concentracion
T_cell = 59.4
T = T_cell + 273.15
T_ref = 25.0 + 273.15
Jsc_ref = 14.8e-3 !10.8e-3 !16.8e-3
APV = 12.0
Voc_ref = 2.63 !3.075
Isc_ref = Jsc_ref * APV
! --- Resistencia Serie (Requerida por el nuevo modelo) ---
! Nota: El modelo original no usaba esto explicitamente en el bucle.
! Se asume un valor bajo para CPV. Ajustar si se conoce el dato real.
Rpv = 0.135d0
! --- Cálculo de parámetros dependientes de G y T ---
Vt = (k_boltz*T)/q
! Calculo dinamico del factor de idealidad n
n_max = 2.0
n_min = 1.0
coef = 0.0015
n = n_max + (n_min - n_max)*exp(-coef*G)
! Ajuste de Voc e Isc a condiciones de operacion
Voc = Voc_ref + ((n*k_boltz*T)/q)*log(G/G_ref) + beta*(T - T_ref)
Isc = Isc_ref * (G/G_ref) * (1.0 + alpha*(T - T_ref)) * CR_PTC
! Calculo de corriente de saturacion inversa (I0)
I0 = Isc / (exp(Voc/(n*Vt)) - 1.0)
! Termino agrupado para la ecuacion (n * Vt)
V_thermal_n = n * Vt
! ============================================================
! SECCIÓN INTEGRADA: GENERACIÓN DE TABLA Y BÚSQUEDA DE MPP
! (Adaptada al método de barrido de Corriente)
! ============================================================
! Configuración del barrido
! Aumentamos puntos para mejor resolucion grafica
num_puntos = 50
! IMPORTANTE: Ahora el paso es de CORRIENTE, no de voltaje
paso_I = Isc / dble(num_puntos)
! Inicializar variables de búsqueda de MPP
Pmp = 0.0d0
Vmp = 0.0d0
Imp = 0.0d0
print *, "--------------------------------------------------------"
print *, " TABLA DE RESULTADOS (Modelo Explicito I -> V)"
print *, "--------------------------------------------------------"
print *, " Corriente (I) Voltaje (V) Potencia (W)"
print *, " ------------- ----------- ------------"
DO k = 0, num_puntos
! 1. Definir la Corriente para este paso (Variable Independiente)
I = dble(k) * paso_I
! Protección numérica: Evitar I = Isc exacto para que el logaritmo no de error
! (log(0) es indefinido). Nos quedamos un epsilon por debajo.
if (I >= Isc) I = Isc - 1.0e-6
! 2. Ecuación del Nuevo Modelo Explícito: V = f(I)
! V = n*Vt * ln((Isc - I + I0) / I0) - I*Rs
log_term = (Isc - I + I0) / I0
IF (log_term > 0.0d0) THEN
V = (V_thermal_n * log(log_term)) - (I * Rpv)
ELSE
V = 0.0d0
END IF
! 3. Corrección física (Voltaje no puede ser negativo)
IF (V < 0.0d0) THEN
V = 0.0d0
P_act = 0.0d0
! Imprimimos y salimos del bucle si el voltaje cae a 0 (Cortocircuito)
WRITE(*, '(F10.4, T20, F10.4, T40, F10.4)') I, V, P_act
EXIT
END IF
! 4. Calcular Potencia Instantánea
P_act = V * I
! 5. Buscar el Máximo (MPP Tracking)
IF (P_act > Pmp) THEN
Pmp = P_act
Vmp = V
Imp = I
END IF
! 6. Imprimir fila de la tabla
WRITE(*, '(F10.4, T20, F10.4, T40, F10.4)') I, V, P_act
END DO
print *, "--------------------------------------------------------"
print *, ""
! ============================================================
! FIN DE SECCIÓN INTEGRADA
! ============================================================
! Calculo final de MPPT del sistema (Escalado x40 segun original)
MPPT = Pmp * 40.0d0
print *, " RESUMEN DE PARAMETROS CALCULADOS:"
print *, " Voc (cond. op) = ", Voc, " V"
print *, " Isc (cond. op) = ", Isc, " A"
print *, " Rpv (asumida) = ", Rpv, " Ohms"
print *, " "
print *, " PUNTO DE MAXIMA POTENCIA (MPP):"
print *, " Vmp = ", Vmp, " V"
print *, " Imp = ", Imp, " A"
print *, " Pmp = ", Pmp, " W"
print *, " "
print *, " SISTEMA COMPLETO (40 unidades):"
print *, " Potencia Total = ", MPPT, " W"
print *, " "
end program explicit_model_IV_improved
To embed this program on your website, copy the following code and paste it into your website's HTML: