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

6 comentarios:

  1. Qué tipo de inductor empleastes?

    Saludos!

    ResponderEliminar
  2. Hola amigo buen trabajo de que potencia era tu inversor y podrias ayudarme como cambiar el programa en asembler para realizarlo con microcontrolador PIC gracias de antemano y espero tu respuesta.

    ResponderEliminar
    Respuestas
    1. Pues el inversor solo era con fines de demostración. Pero obviamente estaba pensado para aplicarlo en alta potencia así no jo hay duda de que funcione. Lo siento pero el trabajo no me deja mucho tiempo.
      Saludos y suerte!

      Eliminar
  3. SI QUIERO QUE VARIE LA SEÑAL SPWM DONDE LE PUEDO HACER LA MODIFICACION

    ResponderEliminar
  4. Buen trabajo si funciono como prueba y es escalable para mayor potencia. Sería conveniente que comentaras algo mas, me perdi siguiendo el programa, en Loop1 encuentro la constante 376.992 que no se de que resulta ni que valor va tomando "d" cuando va evolucionando el programa porque no esta definido al comienzo. Tampoco se como has calculado el valor de incremento 0.6ms.

    Antipadamente gracias por tu rtespuesta.

    ResponderEliminar