Resultados 1 al 3 de 3
- 01/08/2017, 13:25 #1Forero
- Fecha de ingreso
- ene 2017
- Ubicación
- Zaragoza
- Mensajes
- 386
MPP para sistemas de inyección cero
Hola a todos,
Como ya se ha tratado un par de veces este tema, os voy a dejar el codigo que permite saber la potencia maxima de los paneles cuando existe limitacion por parte del sistema de inyeccion cero.
El primero es en el caso en el que tengamos medida de la temperatura del panel, y el segundo en el caso en que tengamos medida de radiacion.
En la parte de caracteristicas del panel, las variables Rs, Rsh y n son parte del modelo matematico equivalente de un modulo, son especificas para cada panel, asi que hace falta calcularlas.
El codigo esta en R pero no creo que cueste mucho pasarlo a Arduino u otros...
Código:# Localizar la curva de funcionamiento y el MPP: # Caracteristicas del panel: { Pmax <- 200 # en W Vmp <- 26.3 # en V Imp <- 7.61 # en A Voc <- 32.9 # en V Isc <- 8.21 # en A Ns <- 54 kv <- -0.123 # en V/ºC ki <- 0.00318 # en A/ºC Rs <- 0.2172 # en ohmios Rsh <- 951.9317 # en ohmios n <- 1.3417 k <- 1.380648E-23 # Constante de Boltzmann q <- 1.602176E-19 # Carga del electron } # Inicializar variables { Vop <- 25.3 # Entrada de medida de la tension DC Iop <- 5.3 # Entrada de medida de la corriente DC ev = 1 ei = 1 I <- integer() V <- integer() Ig <- integer() Vg <- integer() } # Temperatura conocida: { Top <- 47 # Entrada de la medida de temperatura de panel Vt <- k*(Top+273.15)/q Gop = 0 G = 1100 while (G > 0) { i = 2 Voc1 <- Voc+kv*(Top-25)+log(G/1000) V <- seq(0,Voc1*(1+1/500),Voc1/500) Isc1 <- G/1000*(Isc+ki*(Top-25)) Io <- (Isc+ki*(Top-25))/(exp((Voc+kv*(Top-25))/(Vt*n*Ns))-1) I[1] <- Isc1 - Io*(exp((Isc1*Rs)/(n*Vt*Ns))-1) - (Isc1*Rs)/Rsh for (V1 in seq(0,Voc1,Voc1/500)) { I[i] <- Isc1 - Io*(exp((V1+I[i-1]*Rs)/(n*Vt*Ns))-1) - (V1+I[i-1]*Rs)/Rsh ev <- abs(Vop-V[i]) ei <- abs(Iop-I[i]) if (ev < 0.05 && ei < 0.05) { Gop <- G } i = i + 1 } G <- G - 10 } } # Hallar la potencia maxima: { i = 2 Vocop <- Voc+kv*(Top-25)+log(Gop/1000) Vg <- seq(0,Vocop*(1+1/500),Vocop/500) Iscop <- Gop/1000*(Isc+ki*(Top-25)) Ioop <- (Isc+ki*(Top-25))/(exp((Voc+kv*(Top-25))/(Vt*n*Ns))-1) Ig[1] <- Iscop - Io*(exp((Iscop*Rs)/(n*Vt*Ns))-1) - (Iscop*Rs)/Rsh for (V1 in seq(0,Vocop,Vocop/500)) { Ig[i] <- Iscop - Ioop*(exp((V1+Ig[i-1]*Rs)/(n*Vt*Ns))-1) - (V1+Ig[i-1]*Rs)/Rsh i <- i + 1 } Pmpp <- max(Vg*Ig) show(Pmpp) }
Código:# Localizar la curva de funcionamiento y el MPP: # Caracteristicas del panel: { Pmax <- 200 # en W Vmp <- 26.3 # en V Imp <- 7.61 # en A Voc <- 32.9 # en V Isc <- 8.21 # en A Ns <- 54 kv <- -0.123 # en V/ºC ki <- 0.00318 # en A/ºC Rs <- 0.2172 # en ohmios Rsh <- 951.9317 # en ohmios n <- 1.3417 k <- 1.380648E-23 # Constante de Boltzmann q <- 1.602176E-19 # Carga del electron } # Inicializar variables { Vop <- 25.3 # Entrada de medida de la tension DC Iop <- 5.3 # Entrada de medida de la corriente DC ev = 1 ei = 1 I <- integer() V <- integer() Ig <- integer() Vg <- integer() } # Radiación conocida: { Gop <- 800 # Entrada de medida de la radiacion Top = 0 T = 80 while (T > 0) { i = 2 Voc1 <- Voc+kv*(T-25)+log(Gop/1000) V <- seq(0,Voc1*(1+1/500),Voc1/500) Isc1 <- Gop/1000*(Isc+ki*(T-25)) Vt <- k*(T+273.15)/q Io <- (Isc+ki*(T-25))/(exp((Voc+kv*(T-25))/(Vt*n*Ns))-1) I[1] <- Isc1 - Io*(exp((Isc1*Rs)/(n*Vt*Ns))-1) - (Isc1*Rs)/Rsh for (V1 in seq(0,Voc1,Voc1/500)) { I[i] <- Isc1 - Io*(exp((V1+I[i-1]*Rs)/(n*Vt*Ns))-1) - (V1+I[i-1]*Rs)/Rsh ev <- abs(Vop-V[i]) ei <- abs(Iop-I[i]) if (ev < 0.05 && ei < 0.05) { Top <- T } i = i + 1 } T <- T - 1 } } # Hallar la potencia maxima: { i = 2 Vocop <- Voc+kv*(Top-25)+log(Gop/1000) Vg <- seq(0,Vocop*(1+1/500),Vocop/500) Iscop <- Gop/1000*(Isc+ki*(Top-25)) Ioop <- (Isc+ki*(Top-25))/(exp((Voc+kv*(Top-25))/(Vt*n*Ns))-1) Ig[1] <- Iscop - Io*(exp((Iscop*Rs)/(n*Vt*Ns))-1) - (Iscop*Rs)/Rsh for (V1 in seq(0,Vocop,Vocop/500)) { Ig[i] <- Iscop - Ioop*(exp((V1+Ig[i-1]*Rs)/(n*Vt*Ns))-1) - (V1+Ig[i-1]*Rs)/Rsh i <- i + 1 } Pmpp <- max(Vg*Ig) show(Pmpp) }
-
- 03/08/2017, 12:12 #2Forero
- Fecha de ingreso
- ene 2011
- Ubicación
- madrid
- Mensajes
- 393
re: MPP para sistemas de inyección cero
Gracias por tu aportación Adriancm.
En mi caso yo no veo claro tu modelo.
Por centrar el tema:
1) Se basa en predecir la potencia que daría el panel en instante dado midiendo:
a) Tensión y corriente sobre el campo solar de producción (que estará afectado por la carga que presente el inversor para conseguir la limitación de inyección de energía a la red.)
b) Complementariamente la "radiación" y "temperatura" con ayuda de los correspondientes sensores
2) Parece que considera que radiación y temperatura son variables dependientes la una de la otra (por eso planteas dos algoritmos). ¿es esto correcto?
3) Para qué se necesita medir las dos variables tensión e intensidad. ¿no bastaría con una de ellas?
4) El campo solar puede estar compuesto por decenas de paneles (centenares de celdas) nominalmente idénticas pero con mucha dispersión en sus características. Esto puede afectar a la fiabilidad de la predicción.
Estoy interesado en el tema, pero veo no fácil hacer un cálculo mínimamente preciso de la potencia máxima entregable sin recurrir a la "caracterización" del campo solar concreto. Además esta caracterización debería irse actualizando conforme el campo envejezca.
Saludos.
- 04/08/2017, 08:11 #3Forero
- Fecha de ingreso
- ene 2017
- Ubicación
- Zaragoza
- Mensajes
- 386
Re: MPP para sistemas de inyección cero
Mas o menos.
Solo haría falta medir radiación o temperatura.
Lo que plantea el algoritmo es, a partir de una de las dos variables, generar muchas curvas I-V posibles en función de la variable que no se ha medido, y quedarse con la que incluye el punto de funcionamiento que hemos medido (tensión y corriente).
Ahí tienes razón, cuanto más grande sea la instalación más complicado resulta aplicar esto, habría que añadir algunos coeficientes de pérdidas...