Вы находитесь на странице: 1из 10

UNIVERSIDAD TECNOLÓGICA DE SANTIAGO

UTESA

Adderly De Jesús Ventura Alba


Nombre

1-14-0054
Matricula

Taller Electrónica De Potencia 2


Materia

Ing. Mossad Minaya


Profesor

Inversor True Online Con Spwm


Tema

Santiago De Los Caballeros, Republica Dominicana


Introducción

Hoy en día existen varios tipos de inversores que son capaces de convertir
un voltaje de corriente directa (DC) en un voltaje de corriente alterna (AC);
físicamente la mayoría de inversores son muy parecidos en sí, pero lo que
realmente diferencia un inversor de otro es el tipo de switcheo utilizado
para activar los mosfet (interruptores) que controlaran la potencia
entregada por el equipo. En este caso estaremos estudiando el inversor
sinusoidal pulse width modulation (spwm) el cual switchea los mosfet de
manera muy seguida para ir generando una onda lo mas parecida a una
señal senoidal.

El método de oscilación por spwm es utilizado en inversores de gama alta,


y uno de esos inversores que usan la oscilación spwm son los inversores
true online; en las paginas siguientes mostraremos la forma de realizar
estos inversores.

Descripción del inversor true online con spwm

El inversor true online es un tipo de inversor que trabaja de manera


continua sin importar las interrupciones de electricidad en el exterior, el
motivo por el cual este inversor siempre esta en funcionamiento es debido
a que es utilizado en equipos muy delicados donde una interrupción mínima
en la electricidad puede afectar la integridad de los equipos alimentados.
Este inversor utiliza el método de oscilación spwm para obtener una onda
de salida lo mas senoidal posible para garantizar la calidad de la energía que
llega al equipo a alimentar.

Por esa razón el inversor true online debe ofrecer una eficiencia máxima, el
voltaje exterior que reciba el inversor solo será utilizado para cargar las
baterías que alimentan la etapa de switcheo de los mosfet. En caso de que
el inversor presente alguna anomalía este debe contar con un bypass con
dispositivos semiconductores para reducir el tiempo de transferencia de
energía de una fuente a otra, así mientras un equipo especializado revisa el
inversor los equipos que dependan de este pueden seguir operando con el
voltaje proveniente del exterior mientras el bypass este activado, una vez
finalizada la revisión del inversor y que este todo en orden se puede
desactivar el bypass y volver a utilizar el voltaje proveniente del inversor.

Diagrama del inversor

Explicación de etapas
Microcontrolador: este es el cerebro del inversor, es el responsable de
realizar la onda spwm que va al drive que activara los mosfet. También
tomara la decisión de activar el bypass si el usuario acciona el selector
externo.

Lcd: esta es la etapa donde se visualiza el estado del inversor, podremos


saber si el inversor esta dando salida de voltaje o si el equipo se encuentra
en bypass.
Botones: tenemos un botón para encender o apagar la salida del inversor y
contamos con un selector para colocar el equipo en bypass si el usuario lo
desea.

Etapa de oscilación: en esta etapa es donde se recibe la señal spwm


proveniente del microcontrolador, esa misma señal va un drive que nos
ayudara a activar los mosfet; el drive utilizado para activar los mosfet es el
L293D que incorpora un medio puente en H que nos ayuda a activar los dos
mosfet.

Aquí debajo vemos la señal proveniente del micro de los pines 9 y


10(amarillo y azul) y la salida del transformador ya filtrada(rosado).

Transformador: el transformador para nuestro inversor es un


transformador con tap central, el cual esta conectado con la configuración
push pull para elevar el voltaje AC proveniente de los mosfet. La relación
del transformador es 120/12=10, el tap central está conectando a 24vdc
para cuando se active un lado del transformador le lleguen 12v a la mitad
de la bobina y se cumpla la relación a la salida.

Etapa de filtrado: esta es una de las etapas mas importante en el inversor,


en esta etapa se busca eliminar el ruido de la onda de salida que tenemos
en el transformador para lograr reducir el ruido en la onda se utilizan
capacitores de baja capacitancia en paralelo para que se carguen y
descarguen rápidamente en conjunto con la onda y para reducir aun mas el
ruido y mejorar el filtrado colocamos una inductancia del orden de los mH.
Fig.1 Fig.2

En la figura 1 se puede apreciar la salida del transformador sin la etapa de


filtrado.
En la figura 2 se colocó un capacitor de 2nf en paralelo al transformador y
una inductancia de 100mH en serie con la salida y se obtuvo una mejora en
el filtrado de la señal spwm ya elevada.
En la figura 3 se reemplazan los
capacitores anteriores por un
capacitor de 30uF, este cuenta
con una capacitancia mucho
mayor al anterior, lo cual
mejorara el filtrado
obteniendo así una onda
senoidal casi pura.
Fig.3

Etapa de Bypass: en la etapa de bypass utilizamos dos triac accionados por


un optoacoplador cada uno. El triac que es utilizado para transferir el
voltaje externo a la carga se activa directamente con el selector y a su vez
se envía un pulso al microcontrolador para desactivar la salida del inversor,
se decidió activar el triac directamente porque en caso de que el
microcontrolador falle o cualquier otra etapa del circuito se puede activar
el bypass sin problemas ya que no depende de una decisión del
microcontrolador sino que el usuario es quien decide y luego el
microcontrolador recibe la orden de que el equipo ya esta en bypass. El otro
triac es activado directamente también, pero se envía un pulso al inversor
para que sepa que se desactivo el bypass y active la etapa de inversión.

En los inversores true online se utilizan


dispositivos semiconductores para manejar
altas potencias AC, como son los triac, se
utilizan los triac porque el tiempo de
activación de estos es mucho mayor que un
Relay y cuando hacemos el bypass no se nota
el cambio de una alimentación a otra.

Lista de componentes utilizados


1- atmega328 1- puente h l293d Transf. 12v-12v a 120v
1-lcd 16x2 2- mosfet 2-triac y optocopladores
1-selector 2 posiciones Capacitores 1-bobina de 100mh
1-interruptor Resistencias 1-potenciometro

Conclusión
Este tipo de inversores es uno de los mejores que podemos encontrar en el
mercado, estos inversores son usados en laboratorios donde se necesite
mantener estable el voltaje que alimenta los equipos, en el proceso de
desarrollo de este proyecto aprendimos a generar una señal spwm que
busca imitar la forma de onda senoidal mediante pulsos continuos que
buscan imitar la onda de senoidal. Se hizo uso de un puente en H para
activar y desactivar los mosfet correctamente ya que si estos no desactivan
a tiempo se produce un corto circuito en la entrada del transformador.
Para finalizar es importante recordar que la etapa que nos permitirá tener
un inversor senoidal puro es la etapa del filtrado por esa razón debemos
elegir bien los capacitores y bobinas que utilizaremos en esta etapa para
garantizar una forma de onda correcta y estable.
Anexo el código en Arduino:
#include "avr/pgmspace.h"

#include "avr/io.h"

#include <LiquidCrystal.h>

// tabla con los valores senoidales obtenidos para activar los pines pwm

PROGMEM const char sine256[] = {

127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,
198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,

242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,
253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,

221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,
158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,
78,
76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6
,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,

33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,1
18,121,124};

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //cadena para pines de lcd

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

int PWM_OUT_2 =10; // PWM output on pin 10

int PWM_OUT_3 =9; // PWM output on pin 9

int on =7; // on-off output on pin 1

int bypass =6; // Bypass input on pin 6

int TEST_PIN; // Scope trigger

int OFFSET_1 =85; // Offset for second-phase

int OFFSET_2 =170; // Offset for third-phase

int x;

float dfreq;

const double refclk = 31376.6; // measured

const uint64_t twoTo32 = pow(2, 32); // compute value at startup and use as constant

// variables used inside interrupt service declared as voilatile


volatile uint8_t icnt; // var inside interrupt

volatile uint8_t icnt1; // var inside interrupt

volatile uint8_t c4ms; // counter incremented every 4ms

volatile uint32_t phase_accum; // pahse accumulator

volatile uint32_t tword_m; // dds tuning word m

//******************************************************************

void setup()

lcd.begin(16, 2);

lcd.print("Inversor SPWM");

lcd.setCursor(0,1);

lcd.print(".....");

pinMode(PWM_OUT_2, OUTPUT); // PWM output / frequency output

pinMode(PWM_OUT_3, OUTPUT); // PWM output / frequency output

pinMode(on, INPUT);

pinMode(1, OUTPUT);

pinMode(bypass, INPUT);

digitalWrite(1,LOW);

// Setup the timers

setup_timer1();

setup_timer2();

// disable interrupts to avoid timing distortion

cbi (TIMSK0, TOIE0); // disable Timer0 !!! delay() is now not available

sbi (TIMSK2, TOIE2); // enable Timer2 Interrupt

dfreq = 60.0; // ajuste de frecuencia de salida

tword_m = twoTo32 * dfreq / refclk;

//******************************************************************

void loop()

long frequency = twoTo32 * 800 / refclk; // calulate DDS new tuning word

noInterrupts() ;

tword_m = frequency ; // copy quickly with interrupts masked


interrupts() ;

if (digitalRead(on) and digitalRead(bypass)) { //lectura para modo bypass o encendido

digitalWrite(1,HIGH),lcd.setCursor(0,1), lcd.print("Salida ON");

else if (digitalRead(bypass)) digitalWrite(1,LOW), lcd.setCursor(0,1), lcd.print("Salida OFF");

if (!digitalRead(bypass)) digitalWrite(1,LOW), lcd.setCursor(0,1), lcd.print("Bypass: ON");

//******************************************************************

// timer1 setup

// set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock

void setup_timer1(void)

// Timer1 Clock Prescaler to : 1

sbi (TCCR1B, CS10);

cbi (TCCR1B, CS11);

cbi (TCCR1B, CS12);

// Timer0 PWM Mode set to Phase Correct PWM

cbi (TCCR1A, COM1A0); // clear Compare Match

sbi (TCCR1A, COM1A1);

cbi (TCCR1A, COM1B0); // clear Compare Match

sbi (TCCR1A, COM1B1);

sbi (TCCR1A, WGM10); // Mode 1 / Phase Correct PWM

cbi (TCCR1A, WGM11);

cbi (TCCR1B, WGM12);

cbi (TCCR1B, WGM13);

//******************************************************************

// timer2 setup

// set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock

void setup_timer2()

// Timer2 Clock Prescaler to : 1

sbi (TCCR2B, CS20);


cbi (TCCR2B, CS21);

cbi (TCCR2B, CS22);

// Timer2 PWM Mode set to Phase Correct PWM

cbi (TCCR2A, COM2A0); // clear Compare Match

sbi (TCCR2A, COM2A1);

sbi (TCCR2A, WGM20); // Mode 1 / Phase Correct PWM

cbi (TCCR2A, WGM21);

cbi (TCCR2B, WGM22);

//******************************************************************

// Timer2 Interrupt Service at 31.25kHz = 32us

// this is the timebase REFCLOCK for the DDS generator

// FOUT = (M (REFCLK)) / (2 exp 32)

// runtime : 8 microseconds ( inclusive push and pop)

ISR(TIMER2_OVF_vect)

sbi(PORTD, TEST_PIN); // Test / set PORTD,TEST_PIN high to observe timing with a oscope

phase_accum += tword_m; // soft DDS, phase accu with 32 bits

icnt = phase_accum >> 24; // use upper 8 bits for phase accu as frequency information

OCR1A = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_1)); //salida por interrupcion de pwm

OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_2)); //salida #2 de pwm

if (icnt1++ == 125) // increment variable c4ms every 4 milliseconds

c4ms++;

icnt1 = 0;

cbi(PORTD, TEST_PIN); // reset PORTD,TEST_PIN

Вам также может понравиться