Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Inversor Dcac de Onda Pura para Cargas Monofasicas A Travez de SPWM Con Arduino
Inversor Dcac de Onda Pura para Cargas Monofasicas A Travez de SPWM Con Arduino
ARDUINO
ALDAIR JACOME
MICHAEL CHARRIS
PROFESOR
ELECTRONICA III
INGENIERIA ELECTRONICA
FACULTAD DE INGENIERIA
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.
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
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.
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
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:
Ir2110 en proteus
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.
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.
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.
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
#include <avr/io.h>
#include <avr/interrupt.h>
//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;
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