El cálculo de pérdidas en inversores monofásicos es especialmente complejo debido a que la tensión e intensidad que circulan por los componentes no son constantes. Se propone un método para el cálculo de estas pérdidas y se desarrollará un software para automatizarlo.
Introducción
Los inversores monofásicos en régimen permanente presentan magnitudes senoidales que complican el cálculo de pérdidas tradicional. La entrada «Cálculo de pérdidas en transistores de potencia» analiza en detalle las magnitudes y variables a tener en cuenta para el cálculo de pérdidas. En aquella entrada se planteó que la tensión e intensidad a manejar eran constantes, a pesar de ello, para cada encendido y apagado existen transitorios complejos que deben aproximarse de forma que puedan estimarse sus efectos.
Teniendo en cuenta lo anterior se plantea el funcionamiento del inversor monofásico y modulación SPWM. En este tipo de convertidor los transistores de potencia se conmutan desde unos pocos kilohercios hasta algunas decenas, el hándicap para el cálculo de pérdidas es que esto sucede mientras tensiones e intensidades varían de forma senoidal.

Caso de estudio
En esta entrada se pretende resolver el cálculo de pérdidas en inversores monofásicos conectados a red. En concreto, con topología de puente completo y modulación unipolar SPWM.
Sería sencillo adaptar este estudio a modulación bipolar y puede que se haga en el futuro. Por ahora se descarta invertir tiempo en ello debido a su poca aplicación práctica, aunque académicamente es interesante.
Las pérdidas del inversor de onda cuadrada u onda senoidal modificada pueden calcularse por trozos considerando régimen continuo. No presenta las dificultades que se pretenden resolver aquí.
Método para el cálculo de pérdidas en inversores monofásicos
Partiendo de las tensiones e intensidades a los que están sometidos los transistores a una frecuencia de conmutación baja, se observan las señales durante un periodo de la tensión de red.

En la imagen la intensidad que circula por el transistor es abrupta, pero a frecuencias de conmutación elevadas puede aproximarse a una senoidal. En este caso se calcularán las pérdidas de encendido, apagado y conducción para un transistor durante un periodo de la tensión de red. Posteriormente se extrapolará a los otros tres multiplicando por 4.
Realizar este cálculo a mano es impracticable incluso para frecuencias de conmutación reducidas, como se ve en la anterior imagen para cada encendido y apagado aplican diferentes condiciones. Si la tensión de red es 50Hz y la de conmutación 400Hz, se deben calcular 400/50 = 8 encendidos y 8 apagados. Para una frecuencia de conmutación de 20kHz se deberán tener en cuenta 1.200 cálculos teniendo en cuenta las pérdidas por conducción.
Mediante Octave® se implementará un algoritmo que realice el cálculo en función de los parámetros del transistor y del inversor de forma automática.

Implementación en Octave® del cálculo de pérdidas en inversores monofásicos
Generación de datos de partida
Para que un ordenador pueda llevar a cabo el cálculo debe discretizarse el algoritmo anterior. En primer lugar, los datos de partida serán arrays que contienen información temporal y puntos discretos de tensión, intensidad y estado del interruptor. En Octave® se generarán de la siguiente forma:
%Parámetros red e inversor Vg = 230; %Tensión de red f_net = 50; %Frecuencia de red T_net = 1/f_net; w_net = 2*pi*f_net; Vdc = 400; %Tensión bus de continua P = 2000; %Potencia inversor I = P/Vg; %Intensidad RMS salida Ip = I*sqrt(2); %Intensidad pico de salida %Parámetros conmutación f_sw = 20000; T_sw = 1/f_sw; w_sw = 2*pi*f_sw; modulation_index = 0.6; %Genera ondas intensidad, portadora y moduladora delta = T_sw/10000; %Intervalo entre puntos de análisis t = 0:delta:T_net; %Genera dominio temporal discreto It = Ip*sin(w_net*t); carrier = sawtooth(w_sw*t,1/2); modula = modulation_index*sin(w_net*t); trigger = modula>carrier;
El código anterior genera los siguientes arrays, todos tienen igual tamaño y sus datos están sincronizados.
- t -> cada elemento representa un instante temporal dentro de un periodo de la tensión de red.
- It -> intensidad instantánea de salida.
- carrier -> portadora de la modulación SPWM, onda triangular de amplitud la unidad.
- modula -> moduladora de la modulación SPWM, onda senoidal de amplitud igual al índice de modulación.
- trigger -> indica mediante booleanos si el transistor está encendido (true) o apagado (false).
El script hace uso de la variable delta, la cual establece el intervalo temporal entre los elementos de los arrays. Se debe elegir de forma que este intervalo sea más pequeño que cualquier característica temporal involucrada. En un inversor lo más probable es que sea alguna característica del transistor como: td(on), tri, td(off) y tfi.
Parámetros temporales y constantes del transistor
Los tiempos característicos del transistor también deben discretizarse, o más bien, calcular el número de elementos al que corresponde cada parámetro.
%Parámetros transistor Ron = 128E-3; tdon = 14E-9; tr = 9E-9; tdoff = 7E-9; tf = 35E-9; Crss = 6E-12; %Capacidad gate-drenador Vth = 5; %Tensión umbral conducción Vgg = 10; %Tensión de disparo Gm = 20; %Transconductacia (curva de transferencia) Rg = 10; %Resistencia gate %Número deltas de parámetros del transistor deltas_tdon = uint32(tdon/delta); deltas_tr = uint32(tr/delta); deltas_tdoff = uint32(tdoff/delta); deltas_tf = uint32(tf/delta);
En el código anterior delta debe ser lo suficientemente pequeño como para que cualquiera de los parámetros sea mayor que uno, siendo deseable conseguir valores lo más elevados posibles. Un delta muy pequeño hará que se requiera mucha capacidad de cálculo, por lo que tampoco debe reducirse a la ligera.
El casting uint32(…) es necesario para que Octave® no considere el resultado de la operación un double. Estas variables discretizadas serán necesarias para iterar sobre los arrays que se han generado, por tanto deben ser números enteros.
El resto de parámetros se obtienen directamente del datasheet, para obtener Gm se remite de nuevo a la entrada «Cálculo de pérdidas en transistores de potencia«.
Algoritmo para el cálculo de pérdidas
Finalmente queda implementar un bucle que itere los arrays de datos generados evaluando cada evento.
Se crean las variables Eon, ERon y Eoff, que medirán las pérdidas de encendido, conducción y apagado respectivamente. También se crea la variable booleana sw_on, esta irá registrando el estado del transistor, de forma que se pueda consultar que tipo de pérdida debe calcularse.
sw_on = false; Eon = 0; ERon = 0; Eoff = 0; tic i = 1; do if((trigger(i) == true) && (sw_on == false)) i = (i + deltas_tdon + deltas_tr); %Subida de intensidad i_t = abs(It(i)); %Temporal valor absoluto intensidad Eon = Eon + i_t*Vdc*tr/2; %Bajada de tensión deltaVds = i_t*Ron - Vdc; deltaVdsdt = (Vgg - ((i_t/Gm) + Vth))/(-Crss*Rg); tfv = (deltaVds/deltaVdsdt); Eon = Eon + i_t*Vdc*tfv/2; deltas_tfv = uint32(tfv/delta); i = (i + deltas_tfv); sw_on = true; elseif((trigger(i) == true) && (sw_on == true)) %Pérdidas conducción ERon = ERon + (It(i)^2)*Ron*delta; i = (i + 1); elseif((trigger(i) == false) && (sw_on == true)) i = (i + deltas_tdoff); i_t = abs(It(i)); Eoff = Eoff + (i_t^2)*Ron*tdoff; %Subida de tensión deltaVds = i_t*Ron - Vdc; deltaVdsdt = (-Rg*i_t)/(Rg*Crss); trv = deltaVds/deltaVdsdt; Eoff = Eoff + i_t*Vdc*trv/2; deltas_trv = uint32(trv/delta); i = (i + deltas_trv); %Bajada de intensidad Eoff = Eoff + abs(It(i)*Vdc*tf/2); i = (i + deltas_tf); sw_on = false; else i = (i + 1); %Por si no se da ningún caso endif until(i>=length(t)) toc
Una vez ejecutado el bucle anterior, se tienen las pérdidas para un ciclo de la tensión de red, basta multiplicar por la frecuencia para obtener las pérdidas en watios. Por último, para extrapolar las pérdidas a todo el convertidor, se multiplicará por cuatro.
Won = 4*Eon*f_net WRon = 4*ERon*f_net Woff = 4*Eoff*f_net Wtotal = Won+WRon+Woff
El script completo puede descargarse aquí:
Probando el script en Octave®
El script se probará con el siguiente caso práctico de inversor monofásico.
- Potencia: 2,3kW
- Tensión de red: 230VAC
- Frecuencia de red: 50Hz
- Frecuencia conmutación: 20kHz
- Transistor: UJ3C065080K3S de UnitedSiC®
El script disponible en el capítulo anterior tiene introducidos los valores para este caso de estudio, los resultados que se obtienen son los siguientes:
- Elapsed time: 154 seconds (en i7-11800H)
- Won: 2.5739 (W)
- WRon: 19.972 (W)
- Woff: 1.6477 (W)
- Wtotal: 24.194 (W)
Mediante la herramienta United SiC®: FET-Jet Calculator™ se coteja el resultado obtenido mediante este método y el de dicha calculadora.

El resultado de esta herramienta devuelve lo siguiente:

Esto es 350mW por transistor más que por el método propuesto, aproximadamente un error del 6%. Con total probabilidad la herramienta de United SiC® es mucho más precisa, tendrá en cuenta el diodo intrínseco y otros parámetros que no se han tenido en cuenta aquí.
Tiempo de ejecución del cálculo de pérdidas en inversores monofásicos
Para obtener el tiempo transcurrido en Octave® se ha utilizado el siguiente código:
%Medida de tiempo en Octave tic %{Código a medir} toc
El tiempo de ejecución en Octave® es muy lento (154 segundos), algo propio de lenguajes puramente interpretados. Solucionarlo requiere crear un software en algún lenguaje como C. Sin embargo, el tiempo de ejecución de una aplicación como esta no es crítico, y es mucho más interesante la portabilidad. Por ello se decidió migrar el script a Java, que además ofrece la posibilidad de crear una interfaz gráfica de forma sencilla.
Cálculo de pérdidas en inversores monofásicos con Java
Se crea una aplicación de escritorio con Java y se migra el script. Siguiendo buenas prácticas de programación se separa la parte gráfica de la aplicación. El programa consta de dos ficheros:
- InverterLossesEstimator_GUI.java
- InverterLossesEstimator.java

El tiempo de ejecución es ~750ms, muy inferior a los 154 segundos del script original.
En esta aplicación se muestra la siguiente información:
- Pon: Pérdidas debidas a conmutación por encendido.
- Poff: Pérdidas debidas a conmutación por apagado.
- Pron: Pérdidas debidas a conducción.
- Pone: Pérdidas en un solo transistor.
- P.Tot: Pérdidas en todo el puente del inversor.
El código puede encontrarse en el siguiente repositorio de GitHub