Mostrando entradas con la etiqueta MPPT Solar. Mostrar todas las entradas
Mostrando entradas con la etiqueta MPPT Solar. Mostrar todas las entradas

domingo, 6 de abril de 2014

MPPT solar funcionando.

Después de un par de fines de semana que aquí en Valencia salieron nublados, y no pude hacer los ensayos al aire libre necesarios, por fin luce el sol, y he podido trabajar en el proyecto de colaboración con la tienda IteadStudio. De hecho estas dos mañanas me han cundido bastante, y con la colaboración de mi novia, E. Fernández, he podido terminar el proyecto!! Esta mañana lo he montado todo, y lo he puesto a funcionar a pleno rendimiento, o por lo menos todo el pleno rendimiento que podía con la placa solar de 5W que dispongo, y que solo hacia medio día he conseguido obtener una potencia cercana a la nominal.
El proyecto, como todos sabéis consistía en la realización de un cargador de baterías que funcionara con energía solar. Este cargador de baterías, mediante un algoritmo de búsqueda del máximo punto de potencia, obtiene la máxima potencia que puede dar la placa solar y la mantiene, de forma que no se desperdicia energía. Además del convertidor de potencia, el sistema gestiona una página web en la cual podemos ver los parámetros de salida del convertidor, y  el estado de este.


En la imagen se pueden ver los componentes del proyecto, que son de izquierda a derecha, la placa Iteaduino Due con la Ethernet shield para la comunicación ethernet, lo siguiente es la etapa de potencia, que como ya dije se trata de una fuente SEPIC, abajo de esta se ve la fuente de alimentación que coge energía de la batería para alimentar el circuito, arriba de la etapa se ve el sensor de corriente, por último a la derecha de la imagen se ve la batería que queremos cagar. Aunque en la imagen no se ve, hay una resistencia de 150 ohmios en paralelo con la tensión de entrada, y esta resistencia es necesaria ponerla por un error en el diseño de la fuente SEPIC, y es que el driver del MOSFET se alimenta desde este punto, y admite una tensión máxima de 15 voltios, mientras que la placa solar, sin carga puede llegar a dar hasta 20 voltios, Con esta resistencia en paralelo nos aseguramos de que esa tensión nunca supere los 15 voltios,en cambio estamos perdiendo potencia. También he puesto una resistencia en paralelo con los bornes de la batería, de forma que se simula un consumo externo. Esta resistencia no es necesaria en el funcionamiento normal, pero si la batería esta muy cargada, o muy descargada es recomendable ya que estabiliza la tensión de salida.
En general el funcionamiento del sistema es bastante bueno, aunque debido a que las corrientes de carga son pequeñas, nunca superiores en el ensayo a 50mA, el sistema no lee bien la corriente y oscila, pero en ensayos con más potencia, con corrientes superiores a 100mA, el sistema no oscila, y este problema se resuelve. 
En cuanto al funcionamiento del Iteaduino Due, es muy bueno. Hasta ahora solo había trabajado con las placas Arduino UNO y MEGA, y he de decir que el salto que hay hasta las nuevas DUE es muy grande. En cuanto a la placa Iteaduino DUE su funcionamiento es muy bueno.
En el siguiente vídeo podéis ver el funcionamiento final del proyecto:


Todo el proyecto será de código abierto y lo podéis encontrar en el siguiente repositorio de GitHub.
Esto es todo, por ahora, respecto al cargador de baterías. Quiero dar las gracias a Iteadstudio por haberme dado la oportunidad de conocer más a fondo sus productos y facilitarme el material del que disponían para poder realizarlo.
IteadStudio

domingo, 23 de marzo de 2014

Algoritmo MPPT funcionando.

Hola a todos! durante esta semana he estado programando el algoritmo del MPPT en una placa Arduino Mega, que, aunque no es la que voy a utilizar finalmente, ya que la definitiva es un Iteaduino DUE, esta me va a servir para verificar el correcto funcionamiento del programa. 
Hace ya dos entradas os presenté el método que voy a utilizar para obtener el punto de máxima potencia, el cual se trababa de ir variando el ciclo de trabajo y observar la respuesta del sistema, de forma que si la potencia aumentaba, significa que voy en la buena dirección, mientras que si la potencia disminuye, debo de cambiar de dirección. El diagrama de bloques del algoritmo es el siguiente:


Si traducimos este algoritmo a un código ejecutable por Arduino, nos quedaría algo así:

Declaramos una variable llamada dir, la cual almacena la dirección en la que nos estamos moviendo en la curva. En cuanto detectamos que la potencia ha disminuido, significa que vamos en la dirección errónea, por tanto negamos esta variable, y empezamos a ir en la dirección contraria buscando en nuevo punto de máxima potencia. Este algoritmo, tal y como comentó Litox, se podría mejorar haciendo que el incremento, o decremento, del ciclo de trabajo dependa de la diferencia entre la potencia anterior y la actual, de esta forma llegaríamos antes al punto de máxima potencia. En principio el algoritmo que he implementado no lleva esta mejora ya que la fuente conmutada, el regulador, que he escogido no tiene una respuesta lineal, de forma que conforme nos acercamos al punto de máxima potencia, con pequeños cambios en el ciclo de trabajo se producen grandes cambios en la potencia, entonces al aplicar esta mejora el sistema oscilaba mucho respecto a este punto, mientras que si dejo el incremento fijo, la oscilación es menor. Hay que decir también que por ahora estoy trabajando con valores del ADC, valores entre 0 y 1024 (4096 para el DUE), entonces los incrementos de potencia son mayores. Para la siguiente versión ya tendré listas las ganancias de los sensores de forma que el controlador vea tensión y corriente reales. A continuación os dejo un vídeo con el funcionamiento de este algoritmo, pero funcionando sobre una fuente de alimentación, la cual vario la potencia máxima ajustando el control de corriente. En el vídeo se puede ver como conforme la potencia va aumentando, su incremento es cada vez mayor.

domingo, 16 de marzo de 2014

RTOS para Arduino DUE.

Hola a todos!! en esta entrada os voy a mostrar como hacer funcionar un pequeño sistema operativo en tiempo real (RTOS). En primer lugar os voy a intentar contar la necesidad que me ha llevado a utilizar un sistema de estos a pesar de que no sean eficientes. Para el proyecto que estoy realizando en colaboración con la página Itead Studio, necesitaba que en el procesador Iteaduino DUE manejara 2 procesos básicamente. Uno de ellos es el propio algoritmo para obtener el punto de máxima potencia el cual tiene que ejecutarse cada 200 o 300 ms. Además de ese proceso, el otro que debe ejecutarse es el de la actualización de la página web, que en este caso se actualizará cada 1s, por tanto tenemos dos procesos que funcionan con periodos diferentes.
La opción más rápida hubiera sido ejecutar la página web en el bucle principal, dentro de la función loop, y luego programar una interrupción del timer para que se ejecute cada 100 o 200ms, y dentro de esta interrupción ejecutar el algoritmo del MPPT. Para poder hacer el programa de esta forma estuve buscando como activar y configurar las interrupciones en las placas Arduino DUE y compatibles y aunque no es muy complicado, me resultaba un poco lioso ya que hay que combinar instrucciones del ARM con instrucciones de Arduino, así empecé a investigar otra forma de hacerlo, y entonces recordé FreeRTOS, mediante el cual ya estuve haciendo algunas pruebas con los PIC18, así que lo primero que hice fue ver si FreeRTOS estaba disponible para el IDE de Arduino, y no encontré nada en claro, así que busqué otros RTOS que sí qu estuvieran diseñados para Arduino, y además que fueran compatibles con las placas DUE, ya que el IDE de estas no es exactamente el mismo que para las demás, y después de un rato googleando encontré ChibiOS, que aunque en principio no es compatible con Arduino, desde el blog JeeLabs han modificado esta versión inicial de forma que cumple con todo lo que yo necesitaba, compatible con Arduino, tanto las placas normales como las DUE, fácil de implementar, documentado y con ejemplos! que más puedo pedir! En el mismo archivo de descarga podéis ver algunos ejemplos, y también veréis que sigue la misma filosofía que FreeRTOS. A continuación os pongo el código que he desarrollado para el proyecto.

En primer lugar, en la función setup() iniciamos la comunicación ethernet e iniciamos el sistema operativo mediante la función chBegin(mainThread), de esta forma le decimos que la función Idle es la que se llama mainThread, y es la siguiente función que ejecutará. En esta función, lo primero que se hace es declarar los procesos o hilos que vamos a ejecutar, en este caso 2, asignándoles una prioridad, la cual se define por la prioridad de la función mainThread + n, siendo más prioritario cuanto mayor sea n, así vemos que el hilo del MPPT es más prioritario que el servicio web, y esto lo he hecho así porque el servicio web es mucho más lento, que el cálculo del MPPT, de esta forma aseguramos que el MPPT se calcule a tiempo. Luego en cada una de las funciones introducimos un retardo del tipo chThdSleepMilliseconds(ms); de forma que mientras este retardo esté parando la ejecución de ese hilo, otro hilo puede ejecutarse, os i no hay hilos pendientes de ejecutarse, se ejecutará la función idle, en nuestro caso, mainThread.
Como veis el proyecto va cogiendo forma ya que tenemos diseñado y montado el regulador, que recordad que se tratará de una fuente SEPIC, el algoritmo que controlará el regulador también lo tenemos planteado, además del programa base para empezar. Solo queda empezar a ensamblarlo todo y ver funcionar el regulador MPPT!

domingo, 9 de marzo de 2014

Algoritmo MPPT y fuente SEPIC.

Hola! Una vez que ya os expliqué la necesidad de utilizar el regulador en los paneles solares, ha llegado el momento de definir 2 puntos muy importantes del proyecto. En primer lugar la topología del regulador, que como ya os comenté, será un regulador conmutado por el alto rendimiento que estos ofrecen. El segundo punto es el algoritmo que vamos a utilizar para obtener ese punto de máxima potencia, que como veréis mas adelante, existen principalmente 2.
Vamos con el regulador. Para este tipo de algoritmos de pueden utilizar prácticamente todas las topologías de fuentes conmutadas que existen, y la elección de esta dependerá básicamente de la tensión de entrada que tengamos en el sistema y la tensión de salida que necesitamos para nuestra aplicación. En el caso de paneles solares de 12 voltios, la tensión de salida en el punto de máxima potencia suele estar en torno a los 18 voltios, así que si queremos cargar una batería de 12 voltios necesitamos una fuente reductora. Pero como dije en la entrada anterior, esta tensión solo existe en condiciones de irradiación solar máxima, por lo que nos podemos encontrar con tensiones más bajas. En mi caso, como regulador solar voy a utilizar una fuente del tipo SEPIC. Estas fuentes son elevadoras - reductoras, con la ventaja de que si las utilizamos en modo reductoras (ciclo de trabajo menor a 0,5), el transistor tiene su drenador a masa, de forma que es fácil dispararlo con drivers normales, sin tener que recurrir a los drivers con Bootstrap.


La función de transferencia que tiene esta fuente es la misma que la que tenemos en una fuente Buck - Boost, con la diferencia de que en este caso la tensión de salida no está invertida. He decidido utilizar esta fuente por varios motivos, el primero de ellos es la versatilidad, ya que necesitaba para otros proyectos una fuente elevadora, y para este en particular necesitaba una fuente reductora, así que decidí montar una de estas. Una desventaja que tiene esta fuente es el número de componentes, ya que necesitamos 2 bobinas y 2 condensadores como mínimo, al contrario de las otras en las que solo necesitamos una bobina y un condensador.


En la imagen podéis ver la fuente conmutada ya montada. Los componentes que he utilizado son los siguientes:
  • Transistor: MOSFET N-CH 60V 23A STF40NF06.
  • Diodo: Schottky 40V 3A 1N5822
  • Bobina: 220uH 3A.
  • Condensadores: 100uF, 50V (200u condensador serie y 200u condensador de salida)
  • Rsense: 0.1ohm, 1W
Con estos componentes y con una frecuencia de conmutación de 33kHz, consigo un rendimiento del 75%, que aunque es algo bajo es se puede mejorar. 
En cuanto al control, como ya os dije, lo realizará un Iteaduino Due. Y dentro de este microcontrolador es donde se alojará el algoritmo. Ya he dicho que principalmente hay dos formas de obtener el punto de máxima potencia de un panel solar. El primero de ellos, y más complejo, es el de controlar la tensión de salida del panel, manteniéndolo siempre en la tensión del punto de máxima potencia, ya que esta tensión, en ciertas condiciones, se mantiene estable, como se ve en la gráfica.


Como he dicho, esta gráfica es válida para una temperatura, es decir, necesitamos saber la temperatura del panel para saber que tensión de entrada se corresponde con el MPP. Esta técnica se utiliza en muchos reguladores, aunque no es la que voy a utilizar yo por dos motivos. El primero es lo que ya he comentado, necesito saber la temperatura del panel para poder saber la tensión a la que debo regular, y la segunda es que con el entorno de arduino es muy difícil poder realizar un control que funcione correctamente para una fuente conmutada, ya que estos controles deben funcionar como mínimo a 10 0 15 kHz.
Desestimado este método, nos queda el segundo, que al contrario de este, se basa en medir la potencia que está dando el panel en cada momento. El método se conoce como P&O (Perturb & Observe), y trata de eso, de perturbar al sistema, y ver como reacciona. La implementación de este método es muy sencilla, y se basa en el flujograma siguiente:


Se trata de hacer pequeñas variaciones del ciclo de trabajo del regulador, y comprobar si la potencia de salida ha aumentado, o ha disminuido. Si la potencia ha aumentado seguimos en la misma dirección, si ha disminuido cambiamos de dirección. Un ejemplo. Imaginemos que nuestro panel está sacando 2,3W, en ese momento aumentamos el ciclo de trabajo y volvemos a medir la potencia, que en este caso es de 2,4W. La potencia ha aumentado, por tanto seguimos en la misma dirección y volvemos a aumentar el ciclo de trabajo, y medimos en este caso 2,35W, la potencia ha disminuido, por lo que ya nos encontramos en la rampa de bajada de la curva de potencia, así que debemos cambiar de dirección, por tanto disminuimos el ciclo de trabajo y volvemos a los 2,4W. El algoritmo una vez ha encontrado el MPP no se detiene, sino que oscila respecto a este. Esto es necesario ya que la irradiancia que tenemos en cada momento es diferente, y por tanto la potencia que podemos obtener también va variando. Como veis este algoritmo será sencillo de implementar en el Arduino. En la siguiente entrada espero ver funcionando algunas partes del sistema.

sábado, 1 de marzo de 2014

Introducción MPPT Solar.

Hola! Una vez que tengo ya la mayoría de materiales necesarios para poder montar y el regulador solar, lo único que queda es eso, montarlo y probarlo, pero antes, me gustaría explicaros la necesidad de implementar un regulador de este tipo. 
Si tenemos una placa solar cuya tensión nominal es de 13 voltios, y queremos cargar una batería de 12 voltios... ¿porque no lo conectamos directamente?. Esta podría ser la pregunta que muchos de vosotros os hacéis, ya que la solución sería muy sencilla, simplemente conectamos el positivo de la placa solar con el positivo de la batería, y el negativo de la placa solar con el negativo de la batería, ponemos un diodo para que la corriente solo fluya en un sentido y ya está! tenemos un cargador de baterías solar, y así es, funcionaría, pero como todo, es mejorable. 
Para que lo veáis claro, vamos a poner el ejemplo de una fuente de alimentación, cuya tensión de salida máxima es de 15 voltios, y puede dar una corriente de hasta 3 amperios. Aplicando la ecuación de la potencia nos sale que la fuente de alimentación puede dar hasta 45 vatios (15V x 3A = 45W). Ahora bien, esta fuente no tiene una limitación de potencia, sino de corriente y de tensión, por tanto, la potencia máxima solo la podremos obtener con la tensión máxima de salida, pero ¿que pasa si nuestro receptor no soporta esa tensión?, obviamente deberíamos bajar la tensión, de forma que, por ejemplo, establecemos una tensión de 10 voltios... en este caso... ¿cual es la potencia que vamos a obtener?, solo 30 vatios (10V x 3A), estamos infrautilizando la fuente. El caso de los paneles solares es igual, con la diferencia de que la potencia que podemos sacar en cada caso depende de 3 factores, la radiación solar que esté incidiendo sobre la placa, la temperatura de la placa y la carga, y puesto que no podemos modificar la luz solar en cada caso, y controlar la temperatura de grandes paneles no es algo sencillo, lo único que nos queda es variar la carga... pero la carga es la que es... o no?
Bien, obviamente, si existen elementos que nos permiten obtener la máxima potencia en cada caso, la carga, no es la que es, sino que podemos hacer que la carga sea lo que nosotros queramos que sea, y es ahí donde entran los reguladores. Dicho todo esto, podemos pasar este ejemplo a una placa solar, que como he dicho es muy parecido al caso de una fuente de alimentación. En las placas solares tenemos 4 parámetros básicos, tensión en circuito abierto (Vmax), corriente de cortocircuito (Imax), tensión en punto de máxima potencia (Vmp), y corriente en punto de máxima potencia (Imp). A diferencia de la fuente, una placa solar no puede dar al mismo tiempo Vmax e Imax, por lo que estos valores no nos valdrán para calcular la potencia máxima, sin embargo si que puede dar al mismo tiempo Vmp e Imp, así que multiplicando estos dos valores obtenemos la potencia máxima de nuestra placa. Y cuando digo máxima no es la máxima en cualquier caso, sino la máxima cuando estemos recibiendo la radiación máxima, por lo que solo llegaremos a este valor en condiciones optimas, y lo que habitualmente sucede con estos valores es que son diferentes a los que necesitamos, igual que la fuente de alimentación. Aún así, para cada nivel de radiación, existirá un punto de máxima potencia, que es el que queremos alcanzar de forma continua. En la siguiente imagen podéis ver para un panel solar determinado, el conjunto de curvas, y el punto de máxima potencia para cada una de ellas.


Todo esta explicación está genial, pero ¿como llegamos a esto?. Como he dicho, lo que necesitamos es variar el comportamiento de nuestra carga, y esto lo podemos hacer poniendo antes de la carga una fuente conmutada, de forma que variamos la corriente (potencia), que necesitamos de forma que nos movemos por la curva hasta alcanzar el punto de máxima potencia. Para llegar a esto se pueden utilizar varios algoritmos de control muy sencillos basados en una técnica llamada Perturb & Observe, que básicamente lo que hace es modifica las condiciones de trabajo, y mira como reacciona el sistema, y en función de la reacción aplica otro cambio, aunque esto lo veremos más a fondo en la próxima entrada.
Ahora que sabemos como funciona el panel solar, y como podemos influir en su comportamiento, lo siguiente es ver que pasa con la carga real!, en nuestro caso, la batería. Lo más importante que debemos tener claro es que corriente de carga queremos en nuestra batería. Para ello, una forma fácil de calcularla es dividir entre 10 la capacidad de la batería, por ejemplo si tenemos una batería de 5Ah, la corriente de carga será de 0,5 amperios hasta alcanzar la tensión de absorción, que suele estar en torno a los 13,5 voltios para baterías de 12 voltios. Una vez obtenida la corriente, y la tensión máxima de carga podemos calcular la potencia máxima que necesita nuestro sistema, que serán 7,75 W. Si tenemos en cuenta que el rendimiento del regulador no será de 100%, sino de 90%, la potencia de entrada que necesitamos es de 8,61 W. Paneles solares hay de muchas potencias diferentes, y es importante que si nuestro panel solar puede dar una potencia mayor a la que necesitamos, podemos estropear la batería. En este caso necesitamos controlar 2 procesos diferentes, el MPPT y la carga. En caso contrario, por ejemplo que necesitemos 8,61 W, y nuestro panel solar es de 10 W, si tenemos en cuenta que esa potencia la dará en condiciones óptimas, no deberemos hacer nada mas que poner el regulador MPPT. En la próxima entrada os explico el diseño que he escogido, y el algoritmo de búsqueda del punto de máxima potencia.

lunes, 24 de febrero de 2014

Proyecto de colaboración con Itead Studio.

Hola! a principio de año os comenté que tenia acordadas unas colaboraciones con algunas tiendas online, y hoy por fin una de esas colaboraciones ha comenzado formalmente. La tienda de electrónica online IteadStudio me ha enviado unas muestras de sus productos para que realice un proyecto que, como ya les comenté cuando se lo propuse, es muy escalable, y muy útil en estos tiempos que corren, se trata de un MPPT (Maximum Power Point Tracking) solar para cargar una batería.  Esto se traduce en, una fuente conmutada la cual controlamos con un algoritmo sencillo. 
Además del control de la fuente conmutada, el equipo también gestiona una página web sencilla en la cual se pueden monitorizar las variables del sistema. Como procesador principal del sistema voy a utilizar una placa Iteaduino Due la cual lleva un procesador ARM Cortex M3 de la casa ATMEL pogramable con el entorno Arduino IDE 1.5.5. Desde la tienda me han mandado dos muestras


Para gestional la comunicación ethernet que maneja la página web, desde IteadStudio me han mandado la placa Itead W5100 Ethernet Shield, la cual monta el tipico chip de Wiznet W5100.


Para poder medir la potencia que estoy obteniendo con bastante precisión, en vez de utilizar el típico circuito con la resistencia shunt, desde la tienda me han mandado su placa Current Sensor Brick, el cual monta un sensor ACS712. ESte integrado es un sensor de efecto hall que saca una tensión de 187 mV / Amperio. Además de este sensor, me han mandado también unos sensores de iluminación, los cuales están formados por una resistencia LDR con un acondicionamiento de la señal, la placa es el Light Sensor Brick.
Todo esto es la parte que va a realizar el control, pero todavía queda mostrar la reina del proyecto, que es la etapa de potencia. Para este proyecto es común utilizar fuentes reductoras tipo Buck, pero últimamente están saliendo mas proyectos que utilizan fuentes elevadoras - reductoras. En mi caso voy a utilizar una fuente SEPIC, la cual es un Buck-Boost, con la diferencia de que la salida no tiene la tensión invertida. En mi caso me voy a basar en la AN1521 de Microchip, y para el diseño de la fuente SEPIC la AN1484 de Texas Instruments está muy bien explicada.
Como novedad, este proyecto va a estar íntegramente colgado en GitHub cuando esté terminado. La dirección del repositorio de GitHub es esta y desde ahí mismo podréis acceder a todos los proyectos que vaya colgando, librerías, y códigos en general. Espero que la gente de IteadStudio quede satisfecha y nuestra relación no se quede en una sola colaboración!