Está en la página 1de 17

INVERSOR DC/AC DE ONDA PURA PARA CARGAS MONOFASICAS A TRAVEZ DE SPWM CON

ARDUINO

JAIME POTES PARDO

ALDAIR JACOME

MICHAEL CHARRIS

PROFESOR

ING. VICTOR OLIVEROS

ELECTRONICA III

INGENIERIA ELECTRONICA

FACULTAD DE INGENIERIA

UNIVERSIDAD DEL MAGDALENA

SANTA MARTA DTCH

2016-II
INTRODUCCION

Hoy en día el eje de la vida cotidiana es la energía eléctrica, prácticamente todos los elementos
de uso diario utilizan energía eléctrica de diversas maneras. El propósito de este proyecto es
diseñar e implementar un convertidor DC/AC para transformar el voltaje DC de una fuente de
voltaje (batería, panel fotovoltaico, generador eólico, etc.), en una señal sinusoidal pura de
aproximadamente 110 VAC a 60 Hz; haciendo uso del método de SPWM para la generación de
la onda sinusoidal pura, esta parte se podría decir que es el punto principal del proyecto, el
SPWM se puede realizar de manera análoga o digital, en este proyecto se pondrá en uso de
manera digital, de este proceso se hará cargo el microcontrolador, el cual tendrá como función
tomar una señal seno de referencia y encargarse de que la parte de potencia (MOSFET)
entregue la señal final con los parámetros adecuados.
OBJETIVOS

OBJETIVO GENERAL

Diseñar e implementar un inversor de corriente dc/ac de onda pura para cargas monofásicas a
través de spwm con microcontroladores, funcional.

OBJETIVOS ESPECIFICOS

 Hacer uso de SPWM utilizando microcontroladores para generar una onda sinusoidal
pura
 Realizar adecuadamente una etapa de potencia que me permita generar un voltaje de
110 VAC
 Combinar adecuadamente la frecuencia y fase de mi señal generada con la señal de la
red eléctrica
DISEÑO

SPWM
Para controlar el voltaje de salida de los inversores, se necesita con frecuencia hacer
frente a las variaciones de voltaje. El método más eficiente de controlar la ganancia es
incorporar controlo por PWM (Pulse Width Modulation) en los inversores. Uno de los
usos comunes de la PWM es la SPWM (Sinusoidal Pulse Width Modulation), en la cual
se hace variar el ancho de cada pulso en proporción o función de la amplitud de una
onda senoidal.

Esta señal, va a ser generada por una board de hardware libre arduino, más
específicamente, arduino uno; por medio de la programación de esta tarjeta se
obtendrán dos señales SPWM, porque dos? Si solo necesitamos una onda sinodal.
Pues, los pines digitales del arduino solo pueden dar como valores de salida voltajes en
el intervalo de 0 V hasta 5 V, en los pines para PWM, cosa que dificulta el encontrar en
qué momento se encuentra la señal en el medio ciclo positivo o en el medico ciclo
negativo, ya que generaría una onda sinoidal pero de voltaje pico a pico
completamente positivo.

Para solucionar ese problema se optó por generar dos señales PWM pero solo de
medio ciclo cada una, y además cada una de esas señales esta desfada 90º una con
respecto a la otra. De esta manera se puede diferenciar un ciclo positivo y el ciclo
negativo (al ser las señales simétricas entre si no hay problemas para decidir cual señal
ser la del ciclo positivo y cuál del ciclo negativo, las dos sirven para cualquiera de estos
ciclos). Adicional a estas dos señales, la programación genera una señal cuadrada la
cual se encuentra en uno lógico durante medio ciclo además se encuentra sincronizada
con una de las señales SPWM.
Simulación Original.
INVERSORES

Antes de pasar al diseño interno del inversor hay que decidir primero el tipo de
inversor a diseñar. Primero que todo, los inversores se pueden clasificar según el
número de fases que
vayan a suministrar,
monofásicos y
trifásicos; en
este proyecto vamos
a implementar un
inversor monofásico.

Primera base o estándar


de trabajo seleccionado, ahora, la manera en que se va a generar la señal de onda pura
puede ser análoga, utilizando componentes semiconductores para la generación de la
señal SPWM; el otro método es generar la SPWM de manera digital utilizando
microcontroladores o algún otro tipo de controlador o procesador digital. En este caso
nuestro inversor va a generar la SPWM de manera digital utilizando
microcontroladores, ya sea con los Atmega utilizados en arduino o microcontroladores
PIC, como la serie 16Fx de MICROCHIP, en nuestro caso fue el Atmega328. Otro tipo de
clasificación para los inversores es la fuente de energía que alimenta inicialmente al
inversor, corriente o voltaje, en este caso vamos a utilizar ya sea una de las fuentes de
voltaje del laboratorio o una batería de moto o carro, en ambos casos son fuentes de
voltaje relativamente estable. Tercer lineamiento seleccionado, el cuarto y último tipo
de clasificación que vamos a tener en cuenta es el tipo de topología de potencia, es
decir la manera en que la parte de potencia va a generar la señal de salida. Las
topologías de potencia más comunes
son:

1. Topología Push-Pull: se basa en el


empleo de un transformador con
TAP central, de manera que con
únicamente dos interruptores se
consigue aplicar a la carga tensiones
desde el valor positivo del bus de
continua hasta el mismo valor de
polaridad contraria.

2. Topología Medio Puente: se basan en generar una tensión intermedia a través de


un par de condensadores, esta topología aplicará a la carga una tensión máxima
de la mitad del valor de tensión del bus DC. Los interruptores deben soportar la
tensión total, es decir, la suma de ambas fuentes.
3. Topología Puente Completo: emplea cuatro interruptores. De esta forma, con una
sola fuente de continua, se pueden aplicar a la carga tanto tensiones positivas
como negativas o cero con un simple cambio de los interruptores que conducen
en cada momento.

En este caso, utilizaremos la topología de puente completo la cual nos ofrece las
ventajas de:
 La tensión aplicada en la carga es la tensión de la fuente de continua
(Salvo polaridad).
 Se puede aplicar a la carga +Vdc, −Vdc y 0V .
 Mejor utilización del bus DC. Ya que la tensión máxima de salida es la
tensión del bus DC
 La tensión que deben soportar los interruptores es el valor de la fuente de
continua

Ahora hagamos recuento de los parámetros establecidos para nuestro inversor:

1. Monofásico
2. Digital, por lo que utilizara microcontroladores (Arduino)
3. Fuente original para hacer la conversión, es de voltaje constante
4. Inversor de Puente completo

Ya definidas las bases generales del inversor se comienza el diseño interno del mismo,
teniendo como base las decisiones tomadas anteriormente.

Al manejar solo una fase solo hay que diseñar una etapa de potencia y una señal SPWM,
ahorrando así trabajo. Como es digital la generación del SPWM se facilita ya que solo se
necesita realizar una programación que la genere, la cual contara con una señal de onda
cuadrada la cual cambia de estado cada medio ciclo, y la señal PWM en función de la amplitud
de la señal seno. Esto para generar la conmutación adecuada de los MOSFET de la etapa de
potencia.

La etapa de potencia se realizara a través de un puente completo también conocido como


puente H, el cual será controlado por drivers que en función de la señal SPWM entregada por
el microcontrolador realizaran la conmutación de los MOSFET.
A la salida de la etapa de potencia se colocara un filtro para suprimir armónicos no deseados.
Aquí si se quisiera trabajar en una red aislada estaría listo para ser suministrada la energia.
Pero si se trabaja conectado a la red habría que realizar una etapa de acoplamiento entre la
señal generada y la señal de la red.

4.1. Diagrama de
SPWM+SEÑALES diseño
CIRCUITO ETAPA DE
CUADRADAS CONMUTADOR ETAPA DE
FILTROS ACOPLAMIENTO
(UNA INVERSA A PARA LA ETAPA POTENCIA
(OPCIONAL)
LA OTRA) DE POTENCIA

Diagrama de bloques

Controladores
Compuertas
Arduino MOSFET
logicas
IR2110

Puente H con
Filtro C MOSFET de
potencia

Diagrama de Componentes

4.2. METODOLOGIA DE DISEÑO

Siguiendo la lógica de los diagramas anteriores, lo primero que nos dedicamos a realizar e
investigar fue la programación para el arduino que nos generara las señales SPWM y las
cuadradas a aproximadamente 60 Hz. Después de consultar muchos tutoriales y de intentar
realizar el código por nosotros mismos (no logrando generar las señales cuadradas
adecuadamente). Encontramos un tutorial en el cual habían varios códigos para generar las
señales SPWM (Terbytes, 2016) y una de las señales cuadradas.

Ya teniendo las señales Spwm solo se conecta la señal cuadrada a una compuerta NOT la cual
nos generara nuestra segunda señal cuadrada con el debido desface, la cual estará
sincronizada con nuestra segunda SPWM.
De ahora estas señales deben ir a unos controladores de MOSFET los cuales tendrán como
función activar adecuadamente los MOSFET del puente H.

Para esta función se utilizo el circuito integrado IR2110, de International Rectifier, Esta
integrado tiene una notable característica, pues puefe alimentar dos MOSFET o dos IGBT de
una misma fase, desde una referencia común. El IR2110
permiteal par de transistores trabajar con tensiones de
alimentación continua de hasta 600Vdc. Las
características funcionales del integrado son las
siguientes:

 Diseñado para operar como bootstrap1 entre


canales flotantes
 Tensiones de operación máxima +500V y +600V
 Inmune al transiotrio negativa dv/dt
 Rango de alimentación de gate desde 10 a 20 V
 Fuente de alimentación deparada de 5 a 20V
 Proceso de apagado entre ciclo y ciclo
 Salidas en fase con las entradas

Ir2110 en proteus

A cada controlador debe entrar


una señal SPWM y una cuadrada
que debe estar desfasada a la
SPWM para que de esta manera
funcionen después el puente H.

Teniendo en cuenta que el puente


completo del inversor manejara
corrientes altas, 1 amperio o más, hay que seleccionar con precaución los
dispositivos de conmutación.

Para el puente H se seleccionaron Mosfet IRZ44N, los cuales son capaces de


manejar una corriente de hasta 50 amperios lo cual lo hace una buena opción
para circuitos en los cuales se necesita potencia, como este.

Con estos transistores se planeó hacer la parte de puente H, y se adecuaron de


acuerdo al siguiente circuito. (ya que el proteus no cuenta con el IRFZ44N dentro
de sus componentes se procedió a reemplazarlo por un 2n7002, pero solo en las
simulaciones)

1
un circuito de bootstrap es uno donde se aplica parte de la salida de una etapa de amplificador a la
entrada, a fin de alterar la impedancia de entrada del amplificador
En esta parte la resistencia que dice carga será la simulación de donde ira la conexión del
transformador elevador de voltaje luego de esto, paralelo a las salidas del transformador, o
paralelo al dispositivo a conectar, se conectara un capacitor el cual tendrá como función el
filtrar las señales a alta frecuencia dejando solo las bandas laterales de la onda generada, es
decir, si se seleccionó bien el capacitor, debería medirse correctamente una señal Sinusoidal
completa y con frecuencia de
aproximadamente 60 Hz.

De esta manera teóricamente debía


funcionar nuestro inversor. La
primera parte funciono
correctamente se generaron
correctamente las señales SPWM y
las cuadradas (ver imagen), el
inconveniente vino fue con los
controladores de MOSFET los cuales
no funcionaron correctamente por lo cual no se pudo seguir el diseño implementado en este
informe al pie de la letra. Se intentó utilizando distintas configuraciones para dicho
controlador pero todo fue en vano.

Como solución a este problema se decidió utilizar un puente H generalmente utilizado para
controlar inversión de giro en motores DC, el cual es un módulo L298n, el cual cuenta con dos
puentes H independientes formados por transistores BJT npn; cuenta con un máximo de
corriente de salida de 2 Amperios y 35 V, a este solo tuvimos que ingresarles como señal de
entrada las dos señales SPWM a las entradas de uno de los dos puentes H independientes,
teniendo como resultado dos señales SPWM amplificadas y pasadas de aproximadamente 12
Vdc a 8 Vac.

Esos 8 Vac se le ingresan al transformador y después se mide el voltaje AC a la salida y se va


subiendo o bajando el voltaje de alimentación dependiendo de si a la salida del transformador
hay o no 110 V ac.

Nosotros contamos con transformador genérico de 12V a 115 V pero este transformador es de
4,2 amperios por lo cual la sola corriente utilizada por el transformador es alta. Cuando se
conecta una carga relativamente alta el puente H comienza a calentar por lo cual solo dejamos
conectado el sistema lo suficiente para hacer algunas mediciones.

4.3. EXPLICACION DEL FUNCIONAMIENTO DEL SISTEMA

La parte inicial del inversor se va a realizar puramente a través de la programación del


microcontrolador, este nos va a generar dos señales una señal SPWM estas dos señales se van
a conectar a las entradas 1 y 2 del módulo L298n (las entradas 3 y 4 también sirven) de aquí
salen dos señales estas se envían directamente al transformador se le ubica un capacitor en
paralelo a las salidas del transformador, y de ahí ya puede conectarse adecuadamente a
cualquier carga monofásica que consuma poca corriente (para mejora de vida útil de L298n)

5. PROBLEMAS Y RETOS A SOLUCIONAR


(a) Realizar adecuadamente la señal SPWM con el microcontrolador a la
frecuencia adecuada
(b) Utilizar adecuadamente el controlador de Mosfet
(c) Realizar bien la etapa de filtros de tal manera que no atenué demasiado la
señal limpia que sale de la etapa de potencia
(d) Realizar bien la etapa de potencia, para poder aprovechar lo mejor posible
la energía y que esta no oscile sino que mantenga los 110V de manera
adecuada
(e) Conseguir o diseñar el transformador adecuado para elevar el voltaje.

CONCLUSIONES

El diseñar e implementar un inversor monofásico hay que tener en cuenta muchas cosas, ya
que este está dividido en varias partes, todas y cada una fundamental para la señal final.

A pesar de que se utilice como guía documentos de circuitos ya implementados eso no asegura
que el circuito montado por uno funcione adecuadamente.

Es necesario mejora la potencia de salida del inversor para evitar que cuando se conecte una
carga a la salida del inversor el voltaje disminuya demasiado.
Para realizar un inversor no es necesario un esquemático muy complicado, puede realizarse
con un circuito o esquemático bastante sencillo (un arduino, un módulo, un transformador y
capacitor)

Al momento de diseñar no solo hay que tener en cuenta las diferentes cargas que se van a
conectar al sistema si no también la potencia disipada o consumida por los implementos
utilizados en el circuito.
BIBLIOGRAFIA

1. Diseño e Implementación de un inversor DC/AC para Implantar en un Sistema


Fotovoltaico para Suministrar Energía Eléctrica a una Finca. Bocachica, Franci;
Hernández Miguel. Universidad de San Buenaventura 2009

2. Diseño e Implementación Experimental de un Inversor Monofásico Operando en


Modo Isla. Martin Delgado, Raúl. Universidad Carlos II 2012

3. Diseño Didáctico de Convertidores CD-CA (a): Inversor Monofásico. Mejía, Luna;


Moctezuma, Gregorio; Mendoza, Abraham; Campos, Daniel.

4. Generación de Señales Sinodales Mediante PWM y Filtros activo de segundo Orden:


Cortes, Jimmy. Universidad Tecnológica de Pereira

5. Implementation of an sPWM signal. https://github.com/Terbytes/Arduino-Atmel-


sPWM

6. Datasheet L298n y IRZ 44N


ANEXOS
ANEXO A: Codigo de programación

#include <avr/io.h>
#include <avr/interrupt.h>

#define LookupEntries (512)

//Varible declaration
static int microMHz = 16; // Micro clock frequency
static int freq; // Sinusoidal frequency
static long int period; // Period of PWM in clock cycles. 1600 gives 10KHz.
static unsigned int lookUp[LookupEntries];
static char theTCCR1A = 0b10000010; //varible for TCCR1A
static unsigned long int phaseinc, switchFreq;
static double phaseincMult;

//Function prototypes
int setFreq(int _freq);
int setSwitchFreq(int sfreq);
void registerInit(void);

void setup(){
Serial.begin(9600);
setSwitchFreq(10000);
setFreq(60);
registerInit();
}

void loop(){

/*// Un-comment inorder to read from A1 to change the switching frequency, note
that if you have a noisey potentiometer the
// it will disrupt the signal as the lookup table needs to be regenerated everytime the
switing frequency is changed
int sensorValue = analogRead(A1);
static int sensorValue2;
if(sensorValue > sensorValue2*1.01 || sensorValue < sensorValue2*0.99){
sensorValue2 = sensorValue;
setSwitchFreq(map(sensorValue, 0, 1023, 1000, 19000));

Serial.println(switchFreq);
Serial.print(phaseinc>>23);
Serial.print(".");
Serial.print(phaseinc&0x007FFFFF);
Serial.print("\n");
}
// Value read in from A0 changes the frequency of the sine wave
int sensorValue = analogRead(A0);
static int sensorValue2;
if(sensorValue > sensorValue2*1.01 || sensorValue < sensorValue2*0.99){
sensorValue2 = sensorValue;
setFreq(map(sensorValue, 0, 1023, 5, 300));

Serial.print(phaseinc>>23);
Serial.print(".");
Serial.print(phaseinc&0x007FFFFF);
Serial.print("\n");
}*/
}

ISR(TIMER1_OVF_vect){
static unsigned long int phase, lastphase;
static char delay1, trig = LOW;

phase += phaseinc;

if(delay1 > 0){ // toggle the output pins one ISR call after phase has overflowed
theTCCR1A ^= 0b10100000;// Toggle connect and disconnect of compare output A
and B.
TCCR1A = theTCCR1A;
delay1 = 0;
}
else if((phase>>31 != lastphase>>31) && !(phase>>31)){ //if phase has overflowed . . .
delay1++;
trig = !trig;
digitalWrite(13,trig); // pin can be used as triggre on oscilloscope
}
lastphase = phase;

OCR1A = OCR1B = lookUp[phase >> 23];

int setFreq(int _freq){


if(_freq < 0 || _freq > 1000){ // returns 0 if the frequency value is invalid
return 0;
} else {
freq = _freq;
phaseinc = (unsigned long int) phaseincMult*_freq;
return 1; // returns 1 if freqency set sucessfully
}
}
int setSwitchFreq(int sfreq){
double temp;

if(sfreq <= 0 || sfreq > 20000){


return 0;
} else {
switchFreq = sfreq;
period = microMHz*1e6/sfreq;
cli(); //disable global interupts while lookup table is made
TCCR1A = 0b00000010; //disconnect compare A and B while lookup table is
generated
ICR1 = period;
for(int i = 0; i < LookupEntries; i++){ // Generating the look up table.
temp = sin(i*M_PI/LookupEntries)*period;
lookUp[i] = (int)(temp+0.5); // Round to integer.
}
//sindevisions*decimalbits/1MHz =
//1024*2^23/1e6 = 8,589.934592
phaseincMult = (double) period*8589.934592/microMHz;
phaseinc = (unsigned long int) phaseincMult*freq;
TCCR1A = theTCCR1A; // reconnect compare outputs
sei(); //re-enable interupts now that table has been made
return 1;
}
}

void registerInit(void){
// Register initilisation, see datasheet for more detail.
TCCR1A = theTCCR1A; // 0b10000010;
/*10 clear on match, set at BOTTOM for compA.
00 compB disconected initially, toggled later to clear on match, set at BOTTOM.
00
10 WGM1 1:0 for waveform 15.
*/
TCCR1B = 0b00011001;
/*000
11 WGM1 3:2 for waveform 15.
001 no prescale on the counter.
*/
TIMSK1 = 0b00000001;
/*0000000
1 TOV1 Flag interrupt enable.
*/
sei(); // Enable global interrupts.
// Set outputs pins.
DDRB = 0b00000110; // Set PB1 and PB2 as outputs.
pinMode(13, OUTPUT); // Set trigger pin to output
}
ANEXO B: Esquematico General

También podría gustarte