- ¿Qué es SPWM (modulación de ancho de pulso sinusoidal)?
- Cómo funciona el inversor SPWM
- Componentes necesarios para construir el inversor SPWM
- Construcción del circuito inversor SPWM
- Programa Arduino para inversor SPWM
- Prueba del circuito inversor TL494 PWM
Los circuitos inversores a menudo se necesitan cuando no es posible obtener suministro de CA de la red. Un circuito inversor se utiliza para convertir la alimentación de CC en alimentación de CA y se puede dividir en dos tipos: inversores de onda sinusoidal pura o inversores de onda cuadrada modificada. Estos inversores de onda sinusoidal pura son muy caros, mientras que los inversores de onda cuadrada modificados son económicos. Obtenga más información sobre los diferentes tipos de inversores aquí.
En un artículo anterior, le mostré cómo no hacer un inversor de onda cuadrada modificado al abordar los problemas asociados con él. Entonces, en este artículo, haré un inversor de onda sinusoidal pura simple usando Arduino y explicaré el principio de funcionamiento del circuito.
Si está haciendo este circuito, tenga en cuenta que este circuito no cuenta con retroalimentación, sin protección contra sobrecorriente, sin protección contra cortocircuitos y sin protección de temperatura. Por lo tanto, este circuito está construido y demostrado solo con fines educativos, y no se recomienda en absoluto construir y utilizar este tipo de circuito para electrodomésticos comerciales. Sin embargo, puede agregarlos a su circuito si es necesario, los circuitos de protección de uso común como
Ya se han discutido la protección contra sobretensión, protección contra sobrecorriente, protección contra polaridad inversa, protección contra cortocircuitos, controlador de intercambio en caliente, etc.
PRECAUCIÓN: Si está haciendo este tipo de circuito, tenga mucho cuidado con el alto voltaje y los picos de voltaje generados por la señal de conmutación a la entrada.
¿Qué es SPWM (modulación de ancho de pulso sinusoidal)?
Como el nombre sugiere, SPWM significa S inusoidal P Ulse W idth M odulation. Como ya sabrá, una señal PWM es una señal en la que podemos cambiar la frecuencia del pulso, así como el tiempo de encendido y apagado, que también se conoce como ciclo de trabajo. Si desea obtener más información sobre PWM, puede leerlo aquí. Entonces, al variar el ciclo de trabajo, alteramos el voltaje promedio del pulso. La siguiente imagen muestra que-
Si consideramos una señal PWM que cambia entre 0 - 5V que tiene un ciclo de trabajo del 100%, obtendremos un voltaje de salida promedio de 5V, nuevamente si consideramos la misma señal con un ciclo de trabajo del 50%, obtendremos obtenga el voltaje de salida de 2.5V, y para el ciclo de trabajo del 25%, es la mitad de eso. Eso resume el principio básico de la señal PWM, y podemos avanzar hacia la comprensión del principio básico de la señal SPWM.
Un voltaje sinusoidal es principalmente un voltaje de analogía que altera su magnitud con el tiempo, y podemos reproducir este comportamiento de una onda sinusoidal cambiando continuamente el ciclo de trabajo de la onda PWM, la siguiente imagen muestra eso.
Si observa el esquema a continuación, verá que hay un condensador conectado a la salida del transformador. Este condensador es responsable de suavizar la señal de CA de la frecuencia portadora.
La señal de entrada utilizada cargará y descargará el condensador de acuerdo con la señal de entrada y la carga. Como hemos utilizado una señal SPWM de muy alta frecuencia, tendrá un ciclo de trabajo muy pequeño que es como el 1%, este ciclo de trabajo del 1% cargará un poco el condensador, el siguiente ciclo de trabajo es del 5%, esto volverá a cargar el condensador un poco más, el siguiente pulso tendrá un ciclo de trabajo del 10% y el condensador se cargará un poco más, aplicaremos la señal hasta que hayamos alcanzado un ciclo de trabajo del 100% y a partir de ahí, volveremos a bajar al 1%. Esto creará una curva muy suave como una onda sinusoidal en la salida.. Entonces, al proporcionar valores adecuados del ciclo de trabajo en la entrada, tendremos una onda muy sinusoidal en la salida.
Cómo funciona el inversor SPWM
La imagen de arriba muestra la sección de conducción principal del inversor SPWM y, como puede ver, hemos utilizado dos MOSFET de canal N en configuración de medio puente para impulsar el transformador de este circuito, para reducir el ruido de conmutación no deseado y proteger el MOSFET., hemos utilizado diodos 1N5819 en paralelo con los MOSFET. Para reducir los picos dañinos generados en la sección de la puerta, hemos utilizado las resistencias de 4.7 ohmios en paralelo con diodos 1N4148. Finalmente, los BD139 y BD 140 transistores están configurados en un push-pull de configuraciónpara conducir la puerta del MOSFET, porque este MOSFET tiene una capacitancia de puerta muy alta y requiere un mínimo de 10 V en la base para encenderse correctamente. Obtenga más información sobre el funcionamiento de los amplificadores Push-Pull aquí.
Para comprender mejor el principio de funcionamiento del circuito, lo hemos reducido a un punto en el que esta sección del MOSFET está ENCENDIDA. Cuando el MOSFET está en la corriente, primero fluye a través del transformador y luego se conecta a tierra por el MOSFET, por lo tanto, también se inducirá un flujo magnético en la dirección en la que fluye la corriente, y el núcleo del transformador pasará el flujo magnético en el devanado secundario, y obtendremos el semiciclo positivo de la señal sinusoidal en la salida.
En el siguiente ciclo, la parte inferior del circuito está en la parte superior del circuito está apagado, por eso he quitado la parte superior, ahora la corriente fluye en la dirección opuesta y genera un flujo magnético en esa dirección, invirtiendo así la dirección del flujo magnético en el núcleo. Obtenga más información sobre el funcionamiento de MOSFET aquí.
Ahora bien, todos sabemos que un transformador funciona mediante cambios de flujo magnético. Entonces, encender y apagar ambos MOSFET, uno invertido a otro y hacerlo 50 veces en un segundo, generará un buen flujo magnético oscilante dentro del núcleo del transformador y el flujo magnético cambiante inducirá un voltaje en la bobina secundaria como lo sabemos por la ley de Faraday. Así funciona el inversor básico.
El circuito inversor SPWM completo utilizado en este proyecto se muestra a continuación.
Componentes necesarios para construir el inversor SPWM
Si. No |
Partes |
Tipo |
Cantidad |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Transistor |
2 |
4 |
BD140 |
Transistor |
2 |
5 |
22pF |
Condensador |
2 |
6 |
10 mil, 1% |
Resistor |
1 |
7 |
16 MHz |
Cristal |
1 |
8 |
0,1 uF |
Condensador |
3 |
9 |
4.7R |
Resistor |
2 |
10 |
1N4148 |
Diodo |
2 |
11 |
LM7805 |
Regulador de voltaje |
1 |
12 |
200 uF, 16 V |
Condensador |
1 |
13 |
47 uF, 16 V |
Condensador |
1 |
14 |
2,2 uF, 400 V |
Condensador |
1 |
Construcción del circuito inversor SPWM
Para esta demostración, el circuito se construye en Veroboard, con la ayuda del esquema. A la salida del transformador, fluirá una gran cantidad de corriente a través de la conexión, por lo que los puentes de conexión deben ser lo más gruesos posible.
Programa Arduino para inversor SPWM
Antes de continuar y comenzar a comprender el código, aclaremos los conceptos básicos. A partir del principio de funcionamiento anterior, ha aprendido cómo se verá la señal PWM en la salida, ahora la pregunta sigue siendo cómo podemos hacer una onda tan variable en los pines de salida del Arduino.
Para hacer la señal PWM variable, usaremos el temporizador de 16 bits1 con una configuración de preescalador de 1, lo que nos dará 1600/16000000 = 0.1ms de tiempo para cada conteo si consideramos un solo medio ciclo de una onda sinusoidal, que se ajusta exactamente 100 veces dentro de un medio ciclo de la onda. En términos simples, podremos muestrear nuestra onda sinusoidal 200 veces.
A continuación, tenemos que dividir nuestra onda sinusoidal en 200 piezas y calcular sus valores con una correlación de la amplitud. A continuación, tenemos que convertir esos valores en valores de contador de temporizador multiplicándolos por el límite del contador. Finalmente, tenemos que poner esos valores en una tabla de búsqueda para enviarlos al contador y obtendremos nuestra onda sinusoidal.
Para hacer las cosas un poco más simples, estoy usando un código SPWM muy bien escrito de GitHub que fue creado por Kurt Hutten.
El código es muy simple, comenzamos nuestro programa agregando los archivos de encabezado requeridos
#incluir #incluir
A continuación, tenemos nuestras dos tablas de búsqueda de las que obtendremos los valores del contador del temporizador.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
A continuación, en la sección de configuración , inicializamos los registros de control del contador del temporizador para que sean claros en cada uno. Para obtener más información, debe consultar la hoja de datos del atmega328 IC.
TCCR1A = 0b10100010; / * 10 claro en el partido, establecido en la PARTE INFERIOR para compA. 10 claro en el partido, establecido en la PARTE INFERIOR para compB. 00 10 WGM1 1: 0 para la forma de onda 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 para forma de onda 15. 001 sin preescala en el contador. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Flag interrupción habilitada. * /
Después de eso, inicializamos el registro de captura de entrada con un valor predefinido de 16000 ya que esto nos ayudará a generar exactamente 200 muestras.
ICR1 = 1600; // Periodo para cristal de 16MHz, para una frecuencia de conmutación de 100KHz para 200 subdivisiones por ciclo de onda sinusoidal de 50Hz.
A continuación, habilitamos las interrupciones globales llamando a la función, sei ();
Finalmente, configuramos los pines 9 y 10 de Arduino como salida
DDRB = 0b00000110; // Establecer PB1 y PB2 como salidas.
Eso marca el final de la función de configuración.
La sección de bucle del código permanece vacía ya que es un programa impulsado por interrupciones de contador de temporizador.
bucle vacío () {; /*Hacer nada…. ¡Siempre!*/}
A continuación, hemos definido el vector de desbordamiento del temporizador1, esta función de interrupción recibe una llamada una vez que el temporizador1 se desborda y genera una interrupción.
ISR (TIMER1_OVF_vect) {
A continuación, declaramos algunas variables locales como variables estáticas y hemos comenzado a alimentar los valores a la resistencia de captura y comparación.
static int num; trig de carácter estático; // cambia el ciclo de trabajo cada período. OCR1A = lookUp1; OCR1B = lookUp2;
Finalmente, preincrementamos el contador para alimentar los siguientes valores a las resistencias de captura y comparación, lo que marca el final de este código.
if (++ num> = 200) {// Pre-incremento num, entonces verifique que sea menor a 200. num = 0; // Restablecer núm. trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Prueba del circuito inversor TL494 PWM
Para probar el circuito, se utiliza la siguiente configuración.
- Batería de plomo-ácido de 12V.
- Un transformador que tiene un tap 6-0-6 y un tap 12-0-12
- Bombilla incandescente de 100W como carga
- Multímetro Meco 108B + TRMS
- Multímetro Meco 450B + TRMS
Señal de salida de Arduino:
Una vez que haya subido el código. Medí la señal SPWM de salida de los dos pines del Arduino que se parece a la imagen de abajo,
Si nos acercamos un poco, podemos ver el ciclo de trabajo en constante cambio de la onda PWM.
A continuación, la imagen de abajo muestra la señal de salida del transformador.
Circuito inversor SPWM en estado ideal:
Como puede ver en la imagen de arriba, este circuito consume alrededor de 13W mientras funciona ideal
Voltaje de salida sin carga:
El voltaje de salida del circuito inversor se muestra arriba, este es el voltaje que sale en la salida sin ninguna carga adjunta.
Consumo de energía de entrada:
La imagen de arriba muestra la potencia de entrada que consume el ic cuando se conecta una carga de 40W.
Consumo de energía de salida:
La imagen de arriba muestra la potencia de salida que consume este circuito (la carga es una bombilla incandescente de 40 W)
Con eso, concluimos la parte de prueba del circuito. Puede ver el video a continuación para ver una demostración. Espero que les haya gustado este artículo y hayan aprendido un poco sobre SPWM y sus técnicas de implementación. Sigue leyendo, sigue aprendiendo, sigue construyendo y nos vemos en el próximo proyecto.