viernes, 16 de mayo de 2014

Puente en H. El bootstrap (II)

Hola a todos!, en esta entrada voy a seguir con el puente en H que os presenté en la entrada anterior. En esta entrada voy a explicaros como realizar el control, como realizar los disparos, y como "atacar" a las puertas de los mosfet para que funcionen correctamente.
En primer lugar tenemos que tener clara la necesidad de utilizar un puente completo o puente en H. Esta necesidad que pretendemos satisfacer con un puente completo es poder tener entre dos terminales, y desde una alimentación simple, una tensión positiva o negativa, según conmutemos los interruptores que forman el puente.

En la imagen podéis ver los 4 transistores que forman el puente completo, y la resistencia de carga RC. Si activamos los transistores S1 y S4, la corriente por la carga circulará de izquierda a derecha, mientras que si activamos los transistores S3 y S2, la corriente circulará en sentido inverso. Al mismo tiempo, si activamos S1 y S3 o S2 y S4, la tensión aplicada a la carga es 0V, lo que nos vendrá muy bien en el caso de control de motores para poder frenarlos de forma activa tal y como ya expliqué en esta entrada, y por tanto no voy a volver a explicar.
Esto que he escrito, nos puede dar algunos problemas si no sabemos como hacerlo y lo hacemos mal. Si tal y como está el circuito en la figura, con 4 transistores de canal N, los transistores S2 y S4 los podremos disparar de forma muy sencilla utilizando cualquier driver, como por ejemplo el UCC27324 de Texas Instruments, o el TC4424 de Microchip. En cambio, si queremos disparar los transistores de la parte superior la cosa se nos complica un poco, ya que, a diferencia de los transistores de la parte inferior, estos no tienen el surtidor llevado a masa.


En la imagen se puede ver como la tensión de puerta del transistor S2, VG2, se aplica entre la puerta y la masa de nuestro sistema, por tanto si aplicamos en ese punto 15 voltios, VG2 es igual a 15V. En cambio, VG1 tiene como referencia el punto intermedio de ambos transistores de la rama, y esto es un problema, pero no demasiado grande. Si aplicamos 15 voltios de nuestra fuente con referencia a masa en la puerta de S1, la tensión que realmente tenemos como VG1 es la de la puerta (15V), menos la que tenemos en el punto central, que puede llegar a ser hasta VDC. Os voy a poner un caso, con una tensión VDC de 24 voltios, imaginemos que tenemos activado S2, por tanto la tensión en el punto del medio es 0, y ahora queremos activar S1. Obviamente para activar S1 debemos desactivar antes S2 si no queremos producir un cortocircuito, por tanto la secuencia es, desactivar S2 y luego activar S1. En el instante en que desactivamos S2, la tensión del punto del medio se queda sin conectar a nada, es decir, flotante. En el mejor de los casos que consigamos activar S1, la tensión en el punto del medio será de VDC, es decir 24, y en ese momento a la puerta le estamos aplicando 15V - 24V = -9V, por tanto el transistor no se va a activar, y encima corremos el riesgo de romperlo.
Para solucionar eso existen varias alternativas, pero todas se basan en un mismo principio. La primera de ellas es utilizar una fuente de alimentación aislada cuya salida si que esté referenciada al punto intermedio. Esta solución es la mejor y la más costosa ya que necesitamos la fuente de alimentacion aislada, el driver, y los optoacopladores. La segunda opción es utilizar un transformador, de forma que los pulsos que generemos en el primario, se transmitan al secundario. Esta solución ya tiene un inconveniente, y es que necesitamos una señal pulsante en el primario para que se pueda transferir al secundario. La tercera opción es utilizar un driver con circuito de bootstrap. Estos circuitos funcionan en dos fases. Cuando tenemos conectado el transistor de abajo, el condensador se carga a través del diodo, cuando desactivamos el transistor de la parte baja, la tensión del condensador se queda flotante, y cuando activamos el transistor de la parte superior, esta tensión se suma a la tensión del punto intermedio, disparando así el transistor de forma correcta.
La elección del condensador viene determinada por varios factores. En primer lugar la tensión que debe soportar, ya que esta debe ser superior a la tensión VDC de nuestro puente. Por otro lado la capacidad del condensador nos va a determinar la energía que es capaz de suministrarnos, en otras palabras, cuanto tiempo va a ser capaz de mantener una tensión determinada antes de descargarse. El condensador ha de ser capaz de suministrar la tensión mínima de puerta durante el tiempo que dure la conmutación. El tiempo que mantenga la tensión dependerá de la corriente que necesite el transistor para activarse, lo que viene dado por la cantidad de energía que almacena el transistor en la puerta. En resumen, que la capacidad depende inversamente de la frecuencia de conmutación, y directamente de la carga de nuestro circuito, y de la tensión que queramos mantener. El parámetro mas complicado de obtener de esta ecuación es la carga, aunque la podemos obtener del datasheet del transistor y del driver. Existen algunas páginas web como esta que nos ayudan a calcular la capacidad de nuestro condensador. Estos cálculos nos van a dar una capacidad mínima, por lo que podemos asegurarnos de que funcionará bien poniendo un condensador ligeramente superior al calculado.
Si queremos reducir la capacidad del condensador básicamente podemos modificar dos parámetros, la carga, y la frecuencia de conmutación. Si buscamos un transistor con menos capacidad en la puerta, podremos disminuir la capacidad del condensador, igual que si aumentamos la frecuencia de conmutación, aunque superados ciertos niveles, las perdidas por conmutación se hacen grandes y no son recomendables.
En mi diseño he utilizado un condensador de 1uF, algo grande pero que me va a asegurar que todo funcione correctamente incluso con frecuencia bajas.
Espero que haya quedado clara la necesidad de los circuitos de bootstrap, y su funcionamiento.

domingo, 4 de mayo de 2014

Puente en H. (I)

Cuando hablamos de control de motores, a cualquier aficionado o profesional a la electrónica, lo primero que le viene a la cabeza es la topología en puente completo o puente en H. Con esta topología a partir de una tensión simple, es decir entre 0 y VDC, podemos aplicar a nuestra carga tensiones que van desde -VDC hasta VDC, lo cual es muy importante a la hora de poder controlar un motor, ya que su sentido de giro depende del sentido de la corriente que lo atraviesa. En este blog ya he hablado del puente en H para controlar motores, en concreto hablé de el aquí, pero en ese momento el motor que quería controlar era muy pequeño, y por eso opté por una configuración OnChip. Esto funciona perfectamente para motores de hasta 1 amperios, ya que con controladores como el L298 no tenemos que diseñar el hardware, ya que va todo implementado en el interior, tanto drivers como la etapa de pequeña potencia, pero... ¿que sucede cuando queremos más potencia?, o un problema más grande, ¿que pasa si necesitamos realizar un control con el que necesitamos controlar cada transistor por separado?, en el caso de L298 eso es imposible, ya que se controla cada semi-rama del puente con un único pin. Estos dos inconvenientes que tiene este integrado se han ido subsanando a medias con el paso del tiempo, ya que las nuevas tecnologías utilizadas en los procesos de fabricación de los transistores permiten que una etapa integrada en un IC pueda dar corrientes de hasta 12 amperios (tecnología NexFET), como el el caso del DRV8432 de Texas Instruments. Este integrado si que nos permite controlar cada semiconductor por separado, lo cual nos abre la posibilidad de utilizar todos los tipos de control que existen, pero aun así seguimos teniendo una limitación en la potencia que podemos obtener, además de la desventaja de tener todo integrado en un mismo IC, de forma que si este deja de funcionar por cualquier motivo, hay que cambiar el integrado completo. La solución a estos problemas, pasa por diseñar nuestro sistema con componentes discretos, de forma que, en primer lugar, podamos dimensionar los componentes de la forma que mejor nos convenga, y, en segundo lugar, podamos verificar el correcto funcionamiento de cada una de las partes de nuestro sistema, y en el caso de que algo falle, podamos sustituir simplemente el componente dañado, de forma que abaratamos las reparaciones. Esta opción es sin duda la mejor si queremos diseñar un prototipo.


Y eso mismo es lo que he hecho. Al mismo tiempo que diseñaba la fuente SEPIC para el MPPT, diseñé un puente completo para 4 transistores MOSFET de canal N. Como realimentaciones de la placa tenemos la tensión del bus de continua, tensión en cada uno de los terminales de salida, y corriente por cada una de las ramas del puente. Con estas medidas tenemos el sistema completamente monitorizado. Como se ve en la imagen, en la placa hay 4 condensadores que aseguraran, en la medida de lo posible, que la tensión del bus de continua sea estable. Para monitorizar las corrientes por las ramas, existen 2 resistencias de 0.1 ohmios y 1W que, a través de un amplificador operacional, nos devuelve la corriente en cada una de las ramas. Las medidas de las tensiones se obtienen a partir de divisores de tensión.


El disparo de los transistores MOSFET se hace con los drivers UCC27201 de Texas Instruments. Este driver servirá para disparar tanto la parte alta como la parte baja de una rama formada por dos transistores de canal N. El disparo de la parte baja no presenta problema, ya que el surtidor del MOSFET está llevado a masa, por lo que la tensión puerta-surtidor tiene una referencia de 0V. En el caso de la parte alta, el surtidor no está llevado a masa, sino al punto intermedio de la rama, por lo que la tensión que hay que aplicar a la puerta, la tensión puerta-surtidor debe ser la del punto medio mas la tensión de disparo, y esto se puede conseguir de varias formas, aunque la más sencilla es mediante la elevación de la tensión de puerta por medio de un circuito de bootstrap, y esto es lo que encontramos en el driver UCC27210, al cual solo hay que añadir un condensador para que funcione correctamente.
En un principio he hablado de utilizar este circuito para el control de motores, y es cierto que esta es una de las aplicaciones más comunes, pero ni de lejos la única, y es que esta topología está presente en muchos equipos de electrónica de potencia, ya sean inversores, fuentes conmutadas o rectificadores controlados, por lo que lo voy a poder utilizar bastante. Aquí tenéis una imagen en la que le he añadido un filtro LCL y mediante un DSP genero una señal senoidal de 50Hz para la implementación de un inversor.


El controlador que he utilizado para esta prueba ha sido el Launchpad C2000 de Texas Instruments, aunque se puede utilizar cualquier microcontrolador que nos permita obtener 4 señales PWM, como por ejemplo los DSPIC o los ARM Cortex. 

lunes, 21 de abril de 2014

Primeros pasos con la STM32 Nucleo

En la entrada anterior os presenté mi nuevo juguete, la placa STM32 Nucleo-F401RE. En esta entrada voy a contaros los primeros pasos que tenéis que dar si queréis hacer funcionar vuestro primer programa en esta placa.
Lo primero que tenéis que saber es que esta familia de placas son MBED Enable, y esto quiere decir que vienen pre-programadas con un firmware, mediante el cual podemos cargar programas sin necesidad de un programador, aunque si que lo llevan, incluso sin necesidad de instalar un compilador, ya que los programas los podemos escribir y compilar directamente desde la página web de la plataforma.

Una vez ya hemos sacado de su paquete la placa, lo primero que hacemos es buscar un cable USB, ya que este no viene incluido. Cuando lo tengamos, conectamos la placa al PC y dejamos que instale los drivers, que en mi caso los instaló sin necesidad de yo decirle donde encontrarlos. 
Una vez instalados los drivers, si vamos a Equipo, veremos que tenemos una nueva unidad de disco llamada NUCLEO. Dentro de esa unidad tenemos tan solo un archivo con extensión .html.


Si abrimos el archivo .html, nos llevará directamente a la página https://mbed.org/platforms/ST-Nucleo-F401RE/. Una vez aquí nos debemos registrar. Cuando nos registremos, la plataforma MBED ya sabrá que nuestro usuario posee una placa Nucleo-F401RE, por lo que los programas que creemos los compilará compatibles con esta plataforma. Una vez formalizado el registro, ya podremos empezar a utilizar el compilador pulsando sobre el botón COMPILER. Cuando pulsemos, el navegador nos redirige hacia otra página en la que, una vez cargado, tenemos un compilador para código C online.


El compilador, a pesar de estar funcionando sobre el navegador, va bastante fluido, y como MBED es una plataforma abierta, disponemos de muchos ejemplos que podemos probar de forma gratuita.
Para crear nuestro primer programa debemos pulsar sobre New y se nos abrirá una ventana por delante del compilador. En esta ventana lo primero que tenemos es la placa sobre la que queremos trabajar, que en mi caso como solo tengo una solo me deja elegir esa. El segundo campo que tenemos es la plantilla que queremos utilizar. Estas plantillas se parecen bastante a los ejemplos de Arduino, por lo que nos serán de mucha ayuda. Por ultimo debemos darle un nombre a nuestro programa.

Una vez hecho esto, pulsamos sobre OK y en nuestro espacio de trabajo nos aparecerá un proyecto nuevo con un archivo .cpp y un desplegable llamado mbed que contiene todas las librerías. El archivo .cpp es, obviamente, el programa, el cual podemos modificar a nuestro gusto. Como veis, el lenguaje de programación es bastante sencillo y está basado completamente en objetos.
Una vez tenemos nuestro programa pulsamos sobre Compile y el compilador verificará el programa y nos descargará un archivo .bin. Una vez tenemos el archivo compilado, directamente lo copiamos en la unidad llamada NUCLEO, y después de un segundo desaparecerá, y nuestra placa empezará a compilar el código.
Como veréis si lo probáis es muy sencillo tener programas básicos funcionando en tan solo un par de minutos, sin instalaciones de drivers ni entornos de desarrollo.
Espero que os animéis con estas placas ya que además de baratas ya cuentan con una comunidad importante que aporta muchos ejemplos de código.

miércoles, 16 de abril de 2014

Placas NUCLEO de ST.

Hola a todos! a principios de esta semana me llego un nuevo juguete desde STMicroelectronics, y es una de las nuevas placas NUCLEO que son compatibles con el entorno MBED, en concreto tengo en mi poder la mas potente de las 4, la NUCLEO-F401. Despues de todos los enlaces que acabo de poner... vamos a ir paso por paso.
De las grandes empresas de electrónica que hacen microcontroladores que existen hoy (Texas Instruments, Microchip, ATMEL, ST, Freescale, NXP y pocas más), ST fue, si no me equivoco, la primera en ofrecer placas de desarrollo a unos precios muy, muy competitivos. Lo hizo con las primeras versiones de las placas de la serie Discovery, las cuales se podían, y pueden, encontrar por precios que van desde los 7 euros, las que montar microcontroladores ARM CORTEX M0, hasta los 20 euros las que montan pequeñas bestias como son los CORTEX M4 con pantalla LCD incorporada. Algunos ya estaréis echando espuma por la boca pensando que he olvidado las archiconocidas placas Arduino, pero estas tienen una carencia muy importante para un desarrollador, ya sea novato o experto, y es la ausencia de un depurador hardware, cosa que si encontramos en todas las demás herramientas de desarrollo de otros fabricantes, es por eso que las placas Arduino, y derivados, no van a entrar en este juego como herramienta de desarrollo, sin embargo si que ha sido muy importante la salida al mercado de Arduino como ecosistema, pues son estas placas las que han encendido la mecha para que los demás fabricantes se pongan las pilas, aunque en mi opinión, si Massimo Banzi, David Cuartielles y compañía no se ponen las pilas, estas quedarán relegadas muy pronto, y más con la salida al mercado de otras herramientas más potentes, y al 50% del precio. Siguiendo con el tema, a partir de la salida al mercado de las placas Discovery, los demás fabricantes no quisieron quedarse atrás y empezaron a ofrecer herramientas de desarrollo, aunque a un precio mayor, por ejemplo, las placas ChipKit de Microchip, tienen un precio incluso un poco mayor que las Arduino, está claro que son más potentes, pero las han hecho tan parecidas a estas que incluso cuentan con el mismo fallo, y es que no cuentan con un depurador hardware incorporado... ¿que les costaba meter un PIC18 al igual que hacen con los Starter Kit?, siendo suyo también el entorno de desarrollo no les hubiera supuesto ningún inconveniente..., y en ese momento llegaron Freescale, con la serie Freedom, y ST, con la serie Discovery, y, para mi, se hizo la luz. Estas dos series montan procesadores ARM Cortex M4 que corren hasta 168Mhz, e incluyen coprocesadores en punto flotante, y lo más importante para un desarrollador, cuentan cada una con su propio depurador hardware, con lo que podemos depurar casi en tiempo real nuestro programa, y ver en que punto deja de funcionar bien, o por el contrario, verificar el correcto funcionamiento.


Estas dos series de placas, aunque parecidas, tienen unas diferencias que las hacen estar lejos una de la otra, en primer lugar, Freescale optó por un pinout compatible con Arduino, es decir, todas las shields de Arduino se pueden utilizar en esta placa, cosa que en las discovery no encontramos, ya que su pinout se basa en dos tiras de pines, simples o dobles, en donde encontramos todos los pines del microcontrolador, cosa que en la Freedom no ocurre, ya que el pinout Arduino cuenta con pocos pines. Por último las placas Freedom cuentan con el entorno de desarrollo MBED, un compilador online con un lenguaje muy sencillo. Por tanto, si además de a los desarrolladores, queremos llegar al publico inexperto que está empezando con la electrónica, eso justo es lo que necesitamos, y eso es lo que ha hecho ST con las nuevas placas NUCLEO. 


Estas placas montan microcontroladores ARM, desde los M0, hasta el M4, y han adoptado el formato de las placas Arduino, por lo que son compatibles con todas las shields, ademas de ser programables mediante el entorno MBED, por lo que tenemos unas placas muy potentes, y fácilmente programables, pero... eso es Arduino no? exacto, pero además las placas NUCLEO cuentan con un depurador hardware ST-LINK, y esto significa muchas cosas, y se pueden resumir en que podemos crecer junto a esta plataforma, y ¿que significa crecer en este caso?, pues que si somos unos novatos,  y compramos una de estas placas, podemos utilizar el entorno online y diseñar un montón de programas de forma muy sencilla, y con muchos ejemplos, una vez nos hayamos soltado, y queremos empezar con la programación de verdad, bien por que se nos queda corto, o bien porque queremos explorar la placa a fondo, simplemente nos descargamos un entorno del estilo de Keil, y podemos programar la placa directamente, sin utilizar el firmware de MBED, cierto es que si queremos volver a MBED deberemos volver a instalar el firmware de origen. 


Como he dicho, la placa que he comprado es la que monta un Cortex M4 que funciona a 84Mhz, y lo mejor de estas placas es el precio, ya que las podemos encontrar desde unos 10-11 euros, por lo que en nuestro ranking virtual, estas placas estarían por delante de las Freedom.


En próximas entradas os explicare la forma tan sencilla de programar estas placas, y os aseguro que si os gusta programar microcontroladores, querréis comprar una. 

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!