lunes, 29 de agosto de 2011

Inversor Señal Sinusoidal

Este proyecto consiste en obtener una señal sinusoidal a partir de un voltaje DC bipolar.
El funcionamiento se fundamenta en una modulación SPWM que se obtiene mediante un microcontrolador.


ETAPAS

Circuito de control:

El circuito de control se implementa con un microcontrolador ATmega8. Genera dos señales SPWM desfasadas como se muestra en la figura. El programa está ajustado para que la señal sinusoidal de salida sea de 60 Hz.


Circuito de Aislamiento Control - Potencia:

Se utilizan dos optoacopladores 4N35 en la configuración que se muestra en la imagen. Notar que se requieren dos fuentes DC adicionales de 5V con tierras separadas (Señales de control independientes) Se puede obtener mediante un transformador de múltiples salidas, rectificadores y filtros.


Circuito de Potencia:

Se utilizan transistores NMOS como conmutadores de alta potencia. Se puede utilizar tiembién IGBT. También se requiere un filtro pasabajos con frecuencia de corte mayor a 60 Hz. No se requiere que sea de alta pendiente, pues la mosulación utilizada, SPWM, hace que los armónicos se encuentren muy alejados de la frecuencia fundamental.


Fuente Bipolar:

Como se observa en el circuito anterior, se requiere una fuente bipolar del voltaje deseado, en este caso 145 V. Se puede utilizar un tranformador o se puede tomar directamente de la red con el circuito que se muestra a continuación:

Funcionamiento

Modulación PWM


Señales de control


Señal de salida sin filtro


Señal de salida filtrada


Programa en Basic

$regfile = "m8def.dat"          'Microcontrolador ATmega8

$crystal = 8000000              'Reloj 8 MHz

$hwstack = 32                   'Hardware Stack

$swstack = 10                   'Software Stack

Config Portb = Output           'Puerto B como salida



'Configuración del módulo PWM

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1



'Variables

Dim T As Single                  'Tiempo

Dim D As Single                  

Dim Duty As Word                 'Duty cycle (Word)



'Inicio de programa



T = 0                            'Reinicialización de variables



Loop1:                           'Bucle infinito

Do

 If T < 0.00833 Then             'Para semiciclo positivo

  D = T * 376.992                'Tiempo a radianes

  D = Sin(d)                     'Valor senoidal entre 0 - 1

  Duty = D * 1023

   Pwm1a = Duty                  'señal PWM1 con Duty Cycle  calculado

   Pwm1b = 0                     'Señal PWM2=0

  T = T + 0.0006                 'Incrementar T1 en 0.6 ms

 Elseif T < 0.01666 Then         'Para el semiciclo negativo

  D = T * 376.992                'Tiempo a radianes

  D = Sin(d)                     'Valor senoidal entre 0 - 1

  D = D * -1

  Duty = D * 1023

   Pwm1a = 0                     'Señal PWM1=0

   Pwm1b = Duty                  'Señal PWM2 con duty cicle calculado

  T = T + 0.0006                 'Incrementar T en 0.6 ms

 Else                            'reiniciar si se completaron los dos ciclos

  T = 0

 End If

Loop

End

Descargar

Arreglo de SCR como Triac

El siguiente proyecto consiste en implementar el funcionamiento de un Triac mediante 2 SCR con la finaliadad de poder manejar mayor potencia de la que permiten los Triac.

ETAPAS

Circuito de Control:

Para el disparo de los Triac se utiliza el microntrolador Atmega8 programado en lenguaje Basic. Para introducir el ángulo de disparo deseado se utiliza un portenciómetro conectado a un ADC. El ángulo de disparo va de 0º a 180º correspondiente a un semiciclo. El otro semicilo es simétrico.


Detector de Cruce por Cero:

Se utiliza este bloque de circuito para poder sincronizar el programa con la señal senoidal de potencia que se quiere controlar. Este circuito enviará un pulso de interrupción cuando la señal cruce por 0, iniciando la rutina correspondiente en el programa.


Aislamiento Control - Potencia:

Se utiliza un optoacoplador 4N35, con la configuración mostrada en la imagen.


Circuito de Potencia:

la configuración de los SCR es como se muestra en la imagen. Esta configuración (2 SCR y 2 Diodos) permite tener un un punto común, utilizada como GND, a diferencia de conectar sólo dos SCR en antiparalelo en el que se requeriría dos señales de control con tierras separadas.


Circuito Completo:


Programa en lenguaje Basic:

$regfile = "m8def.dat"          'Microcontrolador Atmega8

$crystal = 8000000              'Reloj interno 8 MHz

$hwstack = 32                   'Hardware Stack

$swstack = 10                   'Software Stack

Config Portb = Output           'Puerto B como salida



'variables



Dim D As Word                   'Variable para lectura de potenciómetro

Dim T As Single                 'Variable para cálculos

Dim Rampa As Single             'Señal rampa



'configuracion ADC



Config Adc = Single , Prescaler = Auto



'configuracion de interrupciones

Config Int0 = Low Level          'Int. externa. Flanco de bajada

Enable Int0

On Int0 Int_zc

Config Timer1 = Timer , Prescale = 256   'Int. por comparación  31.25 KHz

On Compare1a Int_timer1

Enable Compare1a

Enable Interrupts                'Habilitación de interrupciones



 Timer1 = 0                      'Reinicialización de contador

 Compare1a = 1                   'Interrupción cada 32 us

 Stop Timer1

 Rampa = 0                       'Reiniciar Rampa



'Programa principal

 Do

   nop

 Loop



'Interrupcion cruce por cero



Int_zc:

   Stop Timer1                    'Deterner contador

   Timer1 = 0                     'Reinicializar contador

   Rampa = 0

   Portb.0 = 0                    'Desactivar SCR

   Start Adc

   D = Getadc(0)                  'Leer dato ADC (Potenciómetro)

   Stop Adc

   T = D / 1023

   T = T * 360                    'Rango 0 - 360 => precisión 0.5 grados.

   Start Timer1

   Return



'Interrupción por comparación



Int_timer1:

   Timer1 = 0

   Rampa = Rampa + 2.8           'Incrementar rampa en 2.8

   If T > Rampa Then

      Portb.0 = 0                'Desactivar SCR mientras Rampa < T

   Else

      Portb.0 = 1                'Activar SCR si Rampa > T

   End If

   Return                        'Retorno de interrupción

End
Funcionamiento

Generación de pulsos de interrupción:

Señal en la carga:

Descargar