Categorías
Diseño digital

Operation with different size operands in Verilog/SystemVerilog

When an operation such as an addtion or a substraction is done using different size operands than final variable, it is necessary to extend sign to ensure the operation is done properly.

Example:

logic signed [21:0] acc;
logic signed [5:0] data_in;
logic [3:0] offset;

Wrong:

acc = data_in + offset;

Sign on data_in will not be respected. data_in will be filled with 0 before doing the operation and won’t be taken as negative (if applies).

Correct:

acc = {{16{data_in[5]}},data_in} + offset;

Extend sign to match number of acc_add bits before doing operation

Categorías
Electrónica

Parameter sweep en Orcad Capture PSpice

  1. Instanciar PARAMETERS de la librería SPECIAL.
  2. Editar propiedades de PARAMETERSS (doble click).
  3. Click en «New property».
  4. Añadir parámetro. Ejemplo: Name: Vin_variable, Value: 0.7
  5. Modificar valor del componente asignando el nuevo parámetro entre {}. Ejemplo: VAMPL: {Vin_variable}
  6. Añadir «Parametric sweep» en la configuración del perfil de simulación.
  7. Por último, realizar la simulación.
Categorías
Electrónica

Memoria M9K en Cyclone IV

El dispositivo Cyclone IV de Altera dispone de unas memorias embebidas llamadas M9K. Estas memorias son configuradas por el sintetizador (Quartus) y dependiendo del tamaño necesario, se pueden combinar varias. Estas memorias siempre son síncronas, por lo que para que el sintenizador utilice una memoria M9K a partir del código, la memoria en cuestión debe estar gobernada por la señal de reloj.

Estas memorias pueden funcionar con un puerto puerto simple (entrada-salida) o un puerto doble. La configuración de puerto doble consiste en leer de manera independiente una misma memoria por dos puertos. Otra de los modos de funcionamiento es ROM, en el que se escribe el contenido al programar la FPGA y solo es posible leer su contenido.

Dependiendo de la configuración, la capacidad disponible las memorias M9K puede variar. Para anchos de palabra de 1, 2 y 4 bits la capacidad disponible es de 8k (8192 bits). Para tamaños de palabra mayores (8+1), (16+2), (32+4), la capacidad disponible es de 9k (9216 bits).

Las configuraciones en modo ROM son:

  • 8k x 1 bit
  • 4k x 2 bits
  • 2k x 4 bits
  • 1k x (8+1) bits
  • 512 x (16+2) bits
  • 256 x (32+4) bits

Las configuraciones en modo puerto doble son:

  • 8k x 1 bit
  • 4k x 2 bits
  • 2k x 4 bits
  • 1k x (8+1) bits
  • 512 x (16+2) bits

En el caso de los anchos de palabra no potencias de 2, se puede utilizar estos bits extras para control de errores.

Ejemplo de memoria 1k x 16

La primera opción está más optimizada ya que se necesita menos hardware para obtener el mismo resultado.

Categorías
Diseño digital

Circuitos aritméticos

Máxima frecuencia de trabajo

La frecuencia máxima de trabajo de un diseño digital, viene marcado por los tiempos de flip-flop, el tiempo de propagación en la lógica combinacional y el tiempo de setup. Para registar un dato a la salida de un flip-flop, es necesario un tiempo para pasar el nivel de entrada D1 a la salida Q1, lo que se conoce como tiempo de propagación de flip-flop. Luego, esta señal pasará a través de una lógica combinacional que añadirá un retardo. Este retardo en la figura anterior es \(t_{pLCR}\). Finalmente, para que último flip-flop pueda registrar el nivel de entrada, es necesario que este dato se mantenga al menos un tiempo de setup \(t_{su}\). Por tanto, el periodo mínimo de el ciclo de reloj debe ser:

\[ T_{p~min} = t_{pFF} + t_{pLCR} + t_{su} \]

Y la frecuencia máxima, será la inversa del periodo mínimo:

\[f_{max} = \frac{1}{T_{p~min}} \]

Los tiempo de setup y de flip-flop vienen determinados por la tecnología con la que se ha fabricado la FPGA. Por lo tanto, estos dos parámetros quedan invariables en un diseño. Para poder aumentar la frecuencia de trabajo, es necesario disminuir el tiempo de retardo que se produce en la lógica combinacional. Para ello, es necesario añadir registros en medio de la lógica combinacional que hagan que el retardo máximo entre flip-flops se minimice. Esto se conoce como pipelining.

Sin embargo, al añadir registros, el número de ciclos que tardará en salir el primer dato a la salida del sistema aumentará. El número de ciclos que tarda el primer dato en salir se conoce como latencia.

Para obtener el número negativo de un número en codificación Ca2, hay que negar todos los bit y sumar 1.

Cast de signed y unsigned

Para realizar la conversión números signed y unsigned en Verilog, existe la macro $signed() y $unsigned()

La macro $signed() extiende el bit de signo, de manera que si el valor de la variable unsigned tenía el MSB a 1, al hacer la conversión mediante la macro se obtendrá un valor negativo, machacando el valor original que tenía en formato unsigned.

A U[3,0] = 111 = 7
$signed(A) = -1

Sin embargo, si el número unsigned tenía el MSB a 0, el valor correspondiente después de la conversión será el mismo.

Cast a signed. Si el valor del MSB de uA está a 1, el valor de sA se modificará

Cuando se quiere pasar un número en formato signed a unsigned utilizando la macro $unsigned(), se hace una copia bit a bit del valor signed. Si son necesarios más bits porque la variable donde se copiará el valor posee más bits, se rellenará con ceros.

Aumentando el rango pero mateniendo el mismo tipo

Cuando se quiere aumentar el rango de una variable manteniendo el mismo formato de los números, Verilog sintetiza de manera diferente en función del formato original. En un formato signed, se hace una copia del bit de signo en todos los bits añadidos. En el caso de un formato unsigned, simplemente añade ceros.

Extensión de rango en formato signed
Extensión de rango en formato unsigned

Reduciendo el rango del número

Cuando se reduce el rango del número, se puede proceder de dos maneras. Una es con la técnica wrap, que consiste en no hacer nada. Los bits que ya no caben en el nuevo formato reducido, permanecen desconectados.

La otra manera, es utilizando el overflow. Con overflow, se consigue si al reducir el rango de un número, este supera el rango máximo representable, el valor definitivo queda como el máximo que se puede representar. Este técnica necesita de bloques adicionales para detectar si el número a reducir es mayor que el nuevo rango reducido y asignarle el máximo valor representable.

Bloques para detectar el overflow

Si el formato es con signo, la saturación puede ser positiva o negativa, por tanto hay que controlar ambos casos.

assign As = (A > SATpos) ? SATpos : (A<SATneg) ? SATneg : A[7:0];

Cambiando el ancho de palabra

Reduciendo la precisión con truncado

Para reducir la precisión de un formato, es decir, pasar de A[8,7] a B[5,4], por ejemplo, cuyo rango es [0,1] para ambos pero la precisión en A es de 0.0078125 y en B es de 0.0625, hay que coger los bits que correspondan.


En Verilog esto equivale a:

wire [7:0] A;
wire [4:0] B;

assign B = A[7:3];

Reduciendo la precisión con redondeo

Si hacemos la misma operación pero utilizando el redondeo, hay que tener en cuenta el bit anterior al menos significativo de los que estamos cogiendo para la nueva variable. De esta manera, si está 1, se redondeará hacia arriba y si está a 0 se redondeará hacia abajo.

wire [7:0] A;
wire [4:0] B;

assign B = A[7:3] + A[2];

Aumentando la precisión (o disminuyendo el escalado)

Cuando se añaden bits extras extremo de los LSB se aumenta la precisión del formato. Sin embargo, hay que posicionar correctamente los bits para que tengan el peso adecuado. A nivel de implementación consiste en conector todos los bits a la parte alta de la nueva variable.

En Verilog hay dos maneras de hacerlo. Asignar todos los bits de A a la parte alta de B y añadir 0 por abajo:

wire [4:0] A;
wire [7:0] B;

assign B = {A, 3'b0};

O asignando A a B desplazado 3 bits, ya que al mover rellenará con ceros.

wire [4:0] A;
wire [7:0] B;

assign B = A << 3;

Desplazamiento por una constante

Cuando se desplaza una variable por una constante, existen dos operadores para realizar el desplazamiento: >> y >>> (y sus equivalentes para la otra dirección de desplazamiento).

>> corresponde a un desplazamiento lógico, en el que no se tiene en cuenta si el MSB de la variable corresponden al bit de signo. Por tanto, al desplazar hacia la derecha pondrá ceros en la parte alta de la variable.

>>> corresponde a un desplazamiento aritmético, en el que sí se tiene en cuenta que el MSB es el bit de signo, de manera que al desplazar hacia la derecha hará una copia del signo. Por tanto, cada vez que se esté utilizando una variable signed, será necesario utilizar el desplazamiento aritmético (<<</>>>) para mantener el valor del signo.

Hay que tener en cuenta que si la variable destino a la que estamos asignando el desplazamiento tiene el mismo tamaño que la variable origen, se van a perder los bits que desplacemos. Por tanto, si queremos mantener esos bits que se desplazan la variable destino debe ser n bits mayor, donde n es el número de bits desplazados.

Las FPGAs como Altera Cyclone IV llevan incorporados arrays de bloques lógicos (LAB). Estos LABs en su interior están formados por Logic Elements (LE) que a su vez incorporan una LUT, un seguidor de acarreo y un registro.

Estos elementos son los componentes básicos para realizar operaciones de suma y multiplicación de una FPGA.

Suma

Suma manteniendo precisión

Al sumar manteniendo la precisión, es suficiente con alinear correctamente los bits y que la variable de destino tenga bits suficientes para alojar el resultado.

Suma recortando precisión

Al recortar la precisión, no hay que sumar todos los bits de los operandos. Solo hay que seleccionar los que se vayan a incorporar a la variable destino.

Resta

La resta (A-B) equivale a realizar un suma de A y con la inversión mediante Ca2 de B.  Para implementarla no es necesario añadir un sumador más y multiplexar la salida en función del signo. Simplemente hay que negar B y sumarlo con A.

 

Categorías
Electrónica

Modelado de precisión finita

El modelado de precisión finita consiste en la representación de números decimales mediante una codificación que no alcanza a representar el número exacto. Antes de entrar en detalles, será mejor repasar qué formatos de codificación binaria existen.

Codificación binaria con punto fijo

En la representación en punto fijo, el valor del número representado depende de la posición de los 1’s y los 0’s. Ejemplo:

\[ (10010)_2 = 1 \cdot  2^4 + 0 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 = 18 \]

El rango dinámico de esta codificación viene determinado por el número de bits que se utilizan. Sin embargo, la suma de números representados en punto fijo es muy sencilla.

Codificación binaria con punto flotante

El valor de un número no depende de la posición de cada uno de los bits, sino que dentro de la secuencia de binaria existe 3 partes: el signo, la mantisa y el exponente.

El valor del número se calcula como:

\[ \text{Valor} = S \cdot M \cdot 2^{E-cte} \]

La codificación con punto flotante ofrece un rango dinámico más grande que con el punto fijo. Además, la resolución de la codificación puede ser variable. Sin embargo, realizar una suma de dos números en coma flotante es más complejo que en punto fijo.

Para representar números enteros, existen dos codificaciones muy utilizadas. La primera es la explicada anteriormente, en el que la posición de cada bit representa un múltiplo de potencias de 2. Sin embargo, con esta codificación no es posible representar números negativos. Para representar números negativos la codificación más utilizada es la conocida como complemento a 2.

Codificación en punto fijo de enteros

La codificación de números con N bits y sin signo tiene un rango de \(\left[0, 2^N -1 \right]\). En este caso, la resolución es de 1.

Para calcular el valor de un número:

\[ X = \sum_{i=0}^{N-1} x_i 2^i\]

Codificación en punto fijo de enteros con signo

La codificación de números con N bits y con signo se puede realizar mediante la codificación complemento a 2. En esta codificación, cada bit tiene un peso, exactamente igual que en la codificación sin signo, con la particularidad de el bit más significativo tiene signo menos y el peso como potencia de 2 que le corresponda. Es decir:

Como vemos, el MSB (most significant bit) representa el peso \(2^4\) pero además tiene signo negativo.

El complemento a 2 tiene un rango de \(\left[-2^{N-1}, 2^{N-1}-1 \right] \) y una resolución de 1.

Equivalencia entre números sin signo y complemento a 2

En la tabla vemos la representación sin signo y la representación con signo y su equivalencia al formato decimal. En este caso N = 3, ya que se utilizan 3 bits para representar todos los números. El rango de los números sin signo es [0, 7] y en el caso de con signo [-4,3].

Los valores que son menores de \(2^{N-1} = 2^{3-1} = 2^2 = 4\) tienen una equivalencia directa entre ambas codificaciones, representados con fondo azul en la tabla. Es decir, 3 se escribe en formato binario en ambos casos \((011)_2\).

Para el caso de valores sin signo mayores a \(2^{N-1}\), su lectura en complemento a 2 sería:

\[ \text{Signed} = \text{Unsigned} – 2^N \]

Por ejemplo, 6 en formato sin signo es \((110)_2\). Sin embargo, \((110)_2\) leído como un número en complemento a 2 es:

\[ \text{Signed} = 6 – 2^3 = 6 – 8 = -2 \]

Por tanto,

\[ S = \left\{\begin{matrix}
U; & U < 2^{N-1} \\
U – 2^N ;& U \geq 2^{N-1}
\end{matrix}\right.\]

Codificación de reales con punto fijo

Los números decimales también pueden ser representados mediante la codificación de punto fijo. Sin embargo, la precisión con la que se pueden representar depende del número de bits y de la posición del punto.

La posición del punto es imaginaria ya que no se especifica de ninguna manera. A partir de este punto, los números a su izquierda son potencias de 2 positivas y a la derecha potencias de dos negativas. La resolución de esta representación la da el LSB (least significant bit).

\[ X =  \left(\sum_{i=0}^{N-1} x_i 2^i  \right) \cdot 2^{-b} \]

La notación para describir esta codificación es \([N,b]\), donde \(N\) es el número total de bits y \(b\) es el número de bits fraccionales. Por ejemplo, \([6,3]\) significan 6 bits totales de los cuales 3 son fraccionales. En este caso, la resolución es \(2^{-3 }= 0.125\).

Codificación de reales con punto fijo en complemento a 2

Para representar números reales con signo mediante complemento a 2, el rango de estos números es \( [-2^{N-1}\cdot Q, (2^{N-1}-1)\cdot Q]\), donde N es el número total de bits y Q es la resolución, que equivale a \(Q= 2^{-b}\).

\[ X = \left(-x_{N-1} 2^{N-1} + \sum_{i=0}^{N-2} x_i 2^i  \right) \cdot 2^{-b} \]

  • Ejemplo 1:
    • N = 6, b = 3, formato [6,3].
    • El rango es \(\left[2^{6-1}\cdot 2^{-3}, (2^{6-1}-1)\cdot 2^{-3} \right] = \left[-4, 3.875\right] \).
    • La resolución es de \(2^{-3} = 0.125\).
  • Ejemplo 2:
    • N = 5, b = 2, formato [5,2].
    • El rango es \(\left[2^{5-1}\cdot 2^{-2}, (2^{5-1}-1)\cdot 2^{-2} \right] = \left[-4, 3.75\right] \).
    • La resolución es de \(2^{-2} = 0.25\)

Rango dinámico de una codificación

El rango dinámico determina la cantidad de números que existen para codificar un rango de números. Es decir, en la codificación punto fijo sin signo, el rango es \([0, \left(2^{N}-1\right)\cdot Q]\) y la resolución es \(Q=2^{-b}\).

El rango dinámico es la relación entre la máxima excursión de la codificación (\(N_{max}-N_{min}\) y la resolución de la codificación.

\[ DR = \frac{N_{max}-N_{min}}{Q} = \frac{ \left(2^{N}-1\right)-0}{Q} = 2^{N}-1 \]

Para el caso de complemento a 2 donde el rango es \([-2^{N-1},2^{N-1}-1]\) y la resolución sigue siendo \(Q= 2^{-b}\) el rango dinámico es también \(2^{N}-1\).

Si se calcula en dB, definiendo el rango dinámico como \(20\log_{10}\{·\}\), obtenemos que el rango dinámico es aproximadamente, 6.02N dB. Por tanto, cada bit que se añada aumentará 6 dB el rango dinámico de la codificación.

Efectos de la precisión finita

El hecho de trabajar con precisión finita a la hora de representar los números, tiene efectos en la señal que estamos tratando. Los efectos pueden ser de dos tipos:

  • Disminuir el número de bits de enteros, lo cual reduce el rango de la codificación. Esto puede llevar a que la señal no pueda ser representada dentro de nuestra codificación. Es decir, un seno que tiene un rango de [0,8] no puede ser codificado con U[4,3] ya que números mayores de \(2^{4}\cdot 2^{-3} = 2\) no pueden ser representados. Esto puede tener dos tipos de consecuencias en la señal:
    • Wrap: la señal se desdobla y números superiores al máximo del rango se representan como valores cercanos al mínimo del rango.Ejemplo: S[4,3], rango [-1, 0.875], resolución \(2^{-3} = 0.125\). Si representa un número fuera del rango, \(1.125 = (01.001)_2 \). Solo tenemos 1 bit para representar la parte entera, por tanto el número quedará sesgado a \((1.001)_2\) que de Ca2 a decimal es \( \left(-2^{3} + 2^{0} \right) \cdot 2^{-3} = -0.875\)
    • Overflow: si se intentan representar números que están fuera del rango de la codificación la señal se satura en el valor máximo. Para que la señal se represente como overflow hay que añadir explícitamente electrónica que controle estos casos.
  • Cuantificación: al tener una precisión finita todos los valores deben ser representados mediante múltiplos de la resolución. Todo número real que se encuentre entre estos múltiplos de la resolución será mapeado directamente a uno de estos múltiplos. Por tanto, la señal quedará escalonada. Dependiendo de la técnica que se utilice para realizar este mapeada (redondeo o truncado) los efectos son distintos. Desde el punto de vista frecuencial, la cuantificación añade ruido blanco que se extiende por toda la banda de la señal (desde 0 Hz hasta la mitad de la frecuencia de muestreo \(\frac{f_s}{2}\).
    • Truncado: truncar significa redondear hacia abajo un valor. Esto hace que el error que se comete sea como máximo -Q y de media sea -Q/2. Sin embargo, computacionalmente es sencillo.
    • Redondeo:  se redondea al número más cercano. Es decir, se redondea hacia arriba si supera Q/2 y hacia abajo si el valor está por debajo de Q/2.

Implementación del redondeo o del truncado

En MATLAB tenemos las funciones floor() o round() que hacen el truncado o el redondeo respectivamente de la parte entera del número. Por tanto, si queremos redondear a 2 decimales el número 12.5432 lo que hay que hacer es:

  • Desplazamos dos dígitos hace la izquierda el número multiplicando por 100: 12.5432 · 100 = 1254.32
  • Aplicamos la función de truncado o redondedo: floor(1254.32) = 1254
  • Desplazamos de nuevo dos dígitos hacia la derecha el resultado diviendo por 100: 1254/100 = 12.54

En binario ocurre lo mismo, con la diferencia de que en lugar de multiplicar por potencias de 10 (100 en el caso anterior) hay que hacer por potencias de 2.

Ejemplo: truncar a 3 bits fraccionales \(1.28515625 = (01.01001001)_2\)

  • Desplazamos hacia la izquierda 3 posiciones multiplicando por \(2^3\): \(1.28515 \cdot 2^3 =  10.2812\)
  • Se aplica la función floor() al resultado: floor(10.2812) = 10
  • Se desplaza hacia la derecha 3 posiciones multiplicando por \(2^{-3}\): \( 10 \cdot 2^{-3} = 1.25 = (01.010)_2\)

Cuantificación de números en punto fijo con MATLAB

En MATLAB existe la función quantize(q, a) que sirve para calcular cuál va a ser el número con el que se va a cuantificar en binario un número. La función quantize() tiene donde argumentos:

  • q: es el cuantificador que define la codificación a utilizar. Se define con la función quantize(Format, Mode, Roundmode, Overflowmode), donde:
    • Format: [N b]
    • Mode: ‘fixed’ o ‘ufixed’ para codificación de punto fijo con signo o sin signo.
    • Roundmode: ‘floor’ para truncado, ‘round’ para redondeo.
    • Overflowmode: ‘saturate’ para saturar o ‘wrap’ para que desdoble el valor.
  • a: número a cuantificar.

Definición de punto fijo en Simulink

En Simulink se utiliza la función fixdt(Signed, WordLength, FractionLength) para definir el formato de la codificación.

Modificación de la resolución o escalado

Ampliación de la resolución

Se da cuando pasamos a representar la parte fraccional del número con más bits de los originales. Esta operación es tan sencilla como rellenar con ceros a la derecha del número.

Reducción de la resolución

La parte fraccional del númnero se represetnará con menos bits que los originales y por tanto, la resolución disminuye.

Ejemplo:

\(A = 2.625 = (010.101)_2\)

\(A [6,3] \rightarrow A =  A_e \cdot 2^{-3} =(010101)_2 ~~A_e = (010101)_2 21 \)

\(A’ [4,1] \rightarrow A’ =  A’_e \cdot 2^{-2} =(0101)_2~~A’_e = (0101)_2 = 5 \)

Esta operación se puede entender intuitivamente como que la parte entera del número cambia. Es decir, en el número original \(A_e = 21\) porque se utilizan 6 bits. Si truncamos con 4 bits y reinterpretamos la parte entera (leyendo los bits como un número binario entero), la parte entera \(A’_e\) disminuye. Finalmente, si se reescala en función de la posición del punto fijo, se obtiene el nuevo número.

Ejemplo:

\(A’_e = floor\left(A_e \cdot 2^{-2}\right) = 5\)

En este caso, se multiplica por \(2^{-2}\) porque hay que pasar de escala \(2^3\) a \(2^1\). Por tanto, hay que mover el punto a la derecha 2 posiciones.

Suma/resta

Sin pérdida de resolución

Ambos sumandos deben tener el mismo tamaño y escalado. Si no lo tienenm hay que extender el rango del número con menos bits en la parte fraccional.

El número total de bits del resultado es la suma de:

  • Máximo número de bits en la parte entera de los dos sumandos
  • Máximo número de bits en la parte fraccional de los dos sumandos
  • \(ceil\left[ \log_2{\left(\text{numero de sumas}\right)}\right]\). Si solo se hace una suma, el resultado es 1 bit extra.

Ejemplo:

A[6,5], B[8,2], S[12,5]

A = 0.53125, B = 3.25

\(A_e = A \cdot 2^5 = 17\), \(B_e = B \cdot 2^2 = 13\)

La suma que tenemos que realizar se puede visualizar de la siguiente manera:

Como vemos, hay que rellenar con 0’s en la parte baja de B. Si no lo hacemos, y sumamos las partes enteras directamente, estaremos sumando bits con pesos diferentes. En decimal sería equivalente a sumar decenas con centenas y centenas con millares. Obviamente, el resultado de esta operación será erroneo. Es por ello, que al añadir 0, hay que reinterpretar el número decimal que obtenemos. Es decir:

De esta manera, el LSB de B ya no tendrá un peso de \(2^0\), sino que pasará a tener un peso de \(2^3\).

Esta operación se puede realizar en decimal como multiplicar por una potencia de 2 elevado al número de desplazamientos hacia la izquierda que queramos. En este caso:

\[ B’_e = B_e \cdot 2^3 = 104 \]

De esta manera ya podemos hacer la suma de \(S_e = A_e + B’_e = 17 + 104 = 121\). Con este resultado, podemos calcular S subiendo el coma 5 posiciones multiplicando por \(2^{-s}\). Es decir, \(S = S_e \cdot 2^{-b} = 121 \cdot 2^{-5} = 3.78125\)

Con pérdida de precisión

El crecimiento natural de la operación suma es el que habíamos dicho en el apartado anterior. Sin embargo, es posible que en nuestro diseño queramos que el resultado de la operación tenga un formato menor al que marca el crecimiento natural. En este caso, tenemos que hacer la suma de la misma manera que habíamos explicado en el apartado anterior y una vez obtenido el resultado, realizar el truncado (o redondeo) del número.

Ejemplo: S = A + B

A[6,5] = 0.53125, B[8,3] = 3.125, S[9,2]

Sin perder precisión, el resultado de la suma es S = 3.65625.

\(A_e = 0.53125 \cdot 2^5 = 17 \)

\(B_e = 3.125 \cdot 2^3 = 25 \)

Primero, tenemos que alinear los pesos de \(A_e\) y \(B_e\). Para ello, hay que añadir 2 ceros a la derecha de \(B_e\), por lo que hay que desplazar hacia la izquierda dos posiciones los bits de \(B_e\).

\(B’_e = 25 \cdot 2^2 = 100 \)

Ahora, ya podemos sumar las partes enteras de A y B obteniendo:

\(S’e = A_e + B’_e = 17 + 100 = 117\)

Ahora hay que realizar el truncado (o redondeo, dependiendo de la aplicación). Al resultado de \(S’e\), debemos quitarle los tres últimos bits. Para ello, desplazamos hacia de derecha 3 posiciones, hacemos la operación floor() y finalmente calculamos S multiplicando por su escalado:

\[ S = floor\left( S’_e \cdot 2^{-3} \right) 2^{-2} = 3.5 \]

Multiplicación

Al multiplicar dos números, el formato del resultado equivale a la suma de bits de ambos operandos. Es decir:

A[Na, a], B[Nb, b], P[Np,p]

Np = Na + Nb

p = a + b

A diferencia de la suma, no es necesario alinear los pesos de los operandos, sino que es suficiente con multiplicar bit a bit y realizar el escalado correspondiente al final.

Sin embargo, debido a que el crecimiento de esta operación es tan grande, normalmente se recorta la precisión de la salida.

Ejemplo:

A[6,5], B[8,2], P = A·B [12,5], P = 1.7265625

A = 0.53125, Ae = 17

B = 3.25, Be = 13

\(P = floor(A \cdot B \cdot 2^5) \cdot 2^{-5} = 1.71875 \)

Caso extremo

Como sabemos, la representación en complemento a 2 (2’C) es asimétrica. Es decir, los números con formato [3,2] tienen un rango [-1, 0.75] y no [-1, 1]. En el caso de multiplicar 2 números con formato [3,2], existe un caso extremo que se da cuando los dos números son -1. P = (-1)·(-1) = 1, que resulta estar fuera del rango que este formato puede codificar. Para poder codificarlo, es necesario añadir un bit más en la parte real ([4,2]) cuyo rango es (-2, 1.75). Sin embargo, este bit extra solo se utilizará en el caso de que ambos operandos sean -1. Por tanto, si se conoce que en la aplicación no es posible obtener esos dos valores como operandos de la multiplicación, se puede dimensionar la salida con 1 solo bit entero.

Multiplicación por constante: P = A · K

En el caso de multiplicar por una constante, es posible conocer cuál será el crecimiento máximo del resultado. Debido a que se conoce el rango de A y el valor de K, no todos los valores del rango de P van a ser utilizados. De esta manera, es posible optimizar el formato del resultado.

Ejemplo:

A[8,4], K[5,2], P = A·K [13,6]

K = 2.25, Ke = 9

Para representar Ke solo hacen falta \(ceil(\log_2{Ke}) = 4\) bits. Este será el crecimiento que aportará K y no el que marca su formato (5). Por tanto, cualquier valor de P se podrá representar con [8+4, 4+2] = [12,6], ya que el MSB nunca se utilizará.

 

Categorías
Electrónica

Distribución gaussiana

El porcentaje de muestras que están dentro de un conjunto que tiene una distribución gaussiana, puede describirse en función de \(\sigma\).

Categorías
Electrónica

Inducción mútua y corriente inducida en COMSOL Multiphysics

Para calcular la inducción mutua y la corriente inducida por un campo magnético producido por otra bobina, es posible utilizar COMSOL Multiphysics. En COMSOL, una bobina multivuelta es posible modelarla mediante una aproximación homogeneizada o modelo concentrado (como un toroide cilíndrico) en lugar de definir explícitamente cada una de sus espiras.Para ello, hay que utilizar el nodo Multi-turn Coil. El nodo Multi-turn Coil modela el cilindro como un conjunto de hilos pequeños separados por un aislante eléctrico. La corriente fluye solo en una de las direcciones del cable y es despreciable en cualquier otra dirección. También es posible utilizar el nodo distorsión armónica que añade distorsión en la excitación de la bobina.

Para esta simulación, la bobina inferior será la que creará el campo magnético mediante una corriente de 1 A. La bobina superior será sobre la que haremos las medidas, tanto de la tensión en circuito abierto como de la corriente en cortocircuito.

Definición del proyecto

Para empezar, es necesario determinar qué tipo de estudio vamos a realizar, cómo vamos a describir la geometría y qué cálculos querremos hacer. Para ello, utilizaremos el Model Wizard. En él seleccionaremos un espacio 2D axisimétrico para utilizar la simetría axial de las dos bobinas y reducir el tiempo de simulación. Sin embargo, también podemos un espacio tridimiensional para definir la geometría. Para realizar los cálculos de corriente inducida, inducción mútua y demás, solo es necesario saber el campo magnético inducido por una de las bobinas. Por tanto, solo añadiremos la física de los campos magnéticos seleccionando AC/DC > Magnetic Field (mf). El estudio que haremos será del comportamiento en frecuencia de las bobinas por lo que seleccionaremos Frequency Domain en el tipo de estudio.

Definición de parámetros

Una vez creado el proyecto, añadiremos los parámetros de la geometría de las bobinas.

NameExpressionValueDescription
r_wire1 [mm]0.001 mRadius, wire
R15 [cm]0.05 mRadius, coil 1
R2R10.05 mRadius, coil 2
N12020Number of turns coil 1
N22020Number of turns coil 2
d5 [cm]0.05 mDistance between coils

Definición de la geometría

La geometría va a constar de:

  1. Bobina 1
  2. Bobina 2
  3. Esfera de aire y elementos infinitos
  4. Redondeo de las bobinas

La bobinas bobinas van a tener un arrollamiento plano, igual que las que se muestran el figura de arriba.

Bobina 1

Creamos un rectángulo de anchura r_wire*N1 y altura r_wire. En la pestaña Position, r = R1-r_wire*N1, z = -d/2-r_wire*N1

Bobina 2

Creamos un rectángulo de anchura r_wire*N2 y altura r_wire. En la pestaña Position, r = R2-r_wire*N2, z = d/2

Aire y elementos infinitos

Creamos un círculo con radio 2.25*R1, sector angle = 180º. En Rotation Angle, Rotation=-90º. En la pestaña Layers, creamos una nueva capa de 25 mm. Esta nueva capa va a dividir el circulo en dos 3 partes. La interna será el aire que envolverá las bobinas y las otras dos serán los elementos infinitos. Los elementos infinitos es un concepto que simula que el espacio alrededor de nuestro objeto sea infinito. Para ello, hace que los campos que llegan a esta capa no rebotan y son totalmente absorbidos, simulando que el campo o la onda sigue propagándose.

Redondeo

Añadimos un nodo Fillet en geometría. Añadimos los 8 vértices de los rectángulos y definimos un radio de r_wire/2.

Con todo esto, obtendremos una geometría similar a la siguiente:

Definición de elementos infinitos

En Component1 > Definitions creamos un nodo Infinite Element Domain y seleccionaremos los dos dominios que hemos creado con la capa de 25 mm en el círculo. Los dominios que tenemos que seleccionar son los que se muestran en azul:

Definición de materiales

Primero añadiremos el material de aire, en Built-in > Air para que se añada a todos los dominios. Finalmente, añadimos el material de cobre AC/DC > Copper y se lo asignamos a las dos bobinas.

Definición de física

Para la física, tendremos que añadir dos nodos Multi-Turn Coil para cada una de las bobinas. La bobina 1 tendrá como excitación una corriente de 1 A. Por tanto \(I_{coil} = 1 ~A\), N = N1 y la sección del cable \(\pi r^2_{wire}\).

En el otro nodo Multi-Turn Coil, cambiaremos la sección del cable. Si queremos hacer una medida en circuito abierto, seleccionaremos la excitación de la bobina como tensión y la pondremos a 0 V. Si lo que queremos es hacer una medida en cortocircuito, la excitación será corriente y la corriente igual a 0 A.

Simulación

Por último falta especificar a qué frecuencia queremos realizar la simulación. Para ello, en el subnodo Step 1 de Study 1 espeficamos la frecuencia que queramos. Por ejemplo, 1 kHz. Una vez descrita la física y el estudio ya podemos simular. Antes de simular podemos hacer click sobre el nodo de Study 1 y deseleccionar la opción que genera gráficas por defecto para el estudio de campo magnético. Una vez hayamos terminado, hacemos click en Compute.

Presentación de resultados

Una vez COMSOL termine la simulación, si creamos una gráfica veremos como aparentemente no ha simulado nada, habiendo un pequeño punto en la capa de elementos infinitos que tiene un color diferente de azul. Esto es debido a que existe una singularidad en este punto haciendo que la simulación tienda a infinito. Por culpa de esto, hace que todos los valores en comparación a este sean muy pequeños y apenas sean visibles en la escala de colores. Para evitar esto, es necesario especificar qué dominios del estudio queremos visualizar. Para ello, hacemos click derecho en el nodo Study 1/Solution 1 y creamos un subnodo de Selection. En geometric entity level cambiamos Entire geometry por Domain y seleccionamos solo el aire y las dos bobinas, dejando los elementos infinitos fuera de la selección.

Ahora ya podemos visualizar correctamente los resultados de campo magnético que ha generado por defecto COMSOL.

 
La inducción mútua se calcula como:
\[ L_{12} = \frac{N_2}{I_1} \int B\cdot dS \]

Implementando esta ecuación como una integral en el área de la bobina superior de la componente del flujo magnético en Z se consigue la inducción mutua entre ambas bobinas.

Categorías
Electrónica

Red eléctrica

Una red eléctrica se considera lineal cuando \(v_s(\omega t)\) y \(i_s (\omega t)\) son senoidales.

La tensión de pico es mayor que el valor eficaz:

\[v_{pk} = \sqrt{2}v_{rms} \]

Un inductor retrasa \(\frac{\pi}{2}\) la corriente: \(\sin{(x+a)}\)

Un condensador adelanta \(\frac{\pi}{2}\) la corriente: \(\sin{(x-a)}\)

En trifásica hay tres fases:

  • Fase 1: \(\theta_1 = 0\). \(v_{s,1}(t) = \sqrt{2} V_{1,rms} \sin{(\omega t)}\)
  • Fase 2: \(\theta_2 = \frac{2\pi}{3}\). \(v_{s,2}(t) = \sqrt{2} V_{2,rms} \sin{\left(\omega t-\frac{2\pi}{3}\right)}\)
  • Fase 3: \(\theta_3 = \frac{4\pi}{3}\). \(v_{s,3}(t) = \sqrt{2} V_{3,rms} \sin{\left(\omega t-\frac{4\pi}{3}\right)}\)

Triángulo de potencias:

s

  • P: potencia activa = \(V_{rms}I_{rms} \cos{(\phi)} \) (kW)
  • Q: potencia reactiva (kWAR)
  • S: potencia aparente = \(V_{rms}I_{rms} \)  (kVA)

Factor de potencia:\( FP = \frac{P}{S} = \cos{(\phi)} \)

Tensión de fase y tensión de línea:

trifasica

La tensión de fase es la tensión que existe entre el neutro y una de las fases. En el dibujo \(V_{L_1}\).

La tensión de línea es la tensión que hay entre dos fases, en el dibujo \(V_{L_1, L_3}\). La tensión de línea puede escribirse como:

\[ V_{L_1, L_3} = V_{L_1} – V_{L_3}\]

En cuanto al módulo de la tensión de línea, este es mayor que la de fase:

\[ V_{L_1, L_3} = \sqrt{3} V_{L_1}\]

Una red equilibrada es aquella en que el desfase relativo entre fases es 0. Es decir, todas las fases tienen un desfase igual.

La potencia en una red equilibrada (\(\phi_1 = \phi_2 = \phi_3 = \phi\)) es:

\[ P_i = V_{RMS} I_{RMS} \cos{(\phi)} \]

\[ P = 3 P_i = 3 V_{RMS} I_{RMS} \cos{(\phi)} = \sqrt{3} V_{L_{RMS}} I_{RMS} \cos{(\phi)} \]

Además, la tensión de línea está desfasada 60º respecto a la de fase:

Fuente proyecto987

En caso de que la red sea desequilibrada (\(\phi_1 \neq \phi_2 \neq \phi_3\)):

Por cada fase tendremos una potencia activa (P) y aparente (Q):
\[ P_i = V_{i_{RMS}} I_{i_{RMS}} \cos{(\phi_i)} \]
\[ S_i = V_{i_{RMS}} I_{i_{RMS}} \]
\[ FP_i = \frac{V_{i_{RMS}} I_{i_{RMS}} \cos{(\phi_i)}}{V_{i_{RMS}} I_{i_{RMS}}} = \cos{(\phi_i)} \]

La potencia total será:
\[ P = \sum_i{P_i} \]
\[ Q = \sum_i{Q_i} \]
\[ S \neq \sum_i{S_i} \]
\[ S = \sqrt{P^2+Q^2} \]
\[ FP = \frac{P}{S} \]

Distorsión en redes no lineales

Una red se considera no lineal cuando \(v_{s}(\omega t)\) es senoidal y \(i_s(\omega t)\) no. Una señal periódica no senoidal puede expresarse como suma de diferentes componentes frecuenciales multiplos de la frecuencia fundamental, es decir, mediante su desarrollo en serie de Fourier (DSF).

\[ i_s(\omega t) = I_{s,0} + i_{s,1}(\omega t) + \sum_{k=2}^{+\infty} i_{s,k}(\omega t) \]

Podemos agrupar los términos como una componente de continua, una componente frecuencial y la suma de todos los armónicos:

\[ i_s(\omega t) = I_{s,0} + i_{s,1}\sin(\omega t – \phi_1) + \sum_{k=2}^{+\infty} i_{s,k}\sin(\omega t – \phi_k) \]

Donde la amplitud de la componente fundamental será \(I_{s,1} = \sqrt{2} I_{s,1~rms} \) y la de los armónicos: \( \left.I_{s,k}\right|_{k=2,3,…\infty} = \sqrt{2} I_{s,k~rms} \).

La distorsión de la corriente es igual a la diferencia entre la señal completa menos la componente fundamental:

\[ i_{s,dis}(\omega t) = i_s (\omega t) – I_{s,1}\sin(\omega t) = \sum_{k=2}^{+\infty} i_{s,k}\sin(\omega t – \phi_k)\]

El valor eficaz de una señal es:

\[ I_{s~RMS} = \sqrt{\frac{1}{2\pi} \int_0^{2\pi} i^2_{s}(\omega t)~d\omega t}\]

La distorsión de una señal calculada como valor eficaz es:

\[ I_{s,dis~RMS} =\sqrt{I^2_{s~RMS} – I^2_{s,1 RMS}} \]

Y la distorsión armónica de una señal será la relación entre el valor eficaz de la distorsión y el valor eficaz de la componente fundamental. Dado que la distorsión de la señal puede ser mucho mayor que la componente fundamental, el THD puede tomar valores mayores a 1.

\[ THD = \frac{I_{s,dis~RMS}}{I_{s,1~RMS}} = \sqrt{\frac{I^2_{s~RMS}}{I^2_{s,1}}-1} \]

Si la red es lineal, la corriente tendrá la misma forma que la tensión. Como la tensión de senoidal, la corriente también lo será. Por tanto, la distorsión armónica de una red lineal es 0.

La potencia aparente es el producto de la tensión eficaz que entrega la red y la corriente eficaz que entrega la red.

\[ S = V_{s~rms} \cdot I_{s~rms} \]

La potencia activa es el producto de la tensión eficaz que entrega la red con la corriente eficaz del armónico fundamental de la corriente y con un factor de corrección debido al desfase entre la corriente y la tensión:

\[ P = V_{rms} I_{s,1~rms}\cos{\phi_1} \]

El factor de potencia (FP) de es la relación entre la potencia activa y la potencia aparente:

\[ FP = \frac{P}{S} = \frac{V_{rms}I_{s,1~rms}\cos{\phi_1}}{V_{rms} I_{s~rms}}=\frac{I_{s,1~rms}}{I_{s,rms}} \cos{\phi_1}=\underbrace{\frac{I_{s,1~rms}}{I_{s,rms}}}_{\text{Factor de distorsion}}\underbrace{\cos{\phi_1}}_{\text{Factor de desplazamiento}} \]

En el caso de ser un red trifásica, el factor de potencia es la media de cada una de las lineas:

\[ FP_{trifasica} = \frac{\sum_i FP_i}{3} \]

El THD también puede calcularse como:

\[THD = \sqrt{\left(\frac{\cos{\phi_1}}{FP}\right)^2-1}\]

Rectificadores monofásicos Line Conmutated

 

Categorías
Electrónica

Rectificadores activos HPF

Introducción

Los convertidores conmutados consumen corrientes armónicas. Esto causa que la corriente que la red entrega a la carga no tenga la misma forma que la tensión, o dicho de otro modo, que la frecuencia de la corriente sea diferente de la fundamental. Esto produce tanto distorsión armónica en la corriente suministrada por la red como distorsión de la tensión en el punto de conexión. Este último efecto es debido a que la línea tiene una impedancia distinta de 0 a la frecuencia de los armónicos y se produce una caída de tensión.

Para corregir esta situación, se pueden filtrar los armónicos de la corriente mediante redes pasivas resonantes o también se pueden emplear filtros activos en serie o en paralelo mediante inversores. Sin embargo, estas medidas son complicadas o no resuelven el problema de fondo que es que el convertidor está consumiendo corriente de manera poco eficiente.

Por ello, la mejor estrategia para solucionar este problema es utilizar rectificador de alto factor de potencia (HPF), los cuales reducen el consumo de armónicos de baja frecuencia en lugar de intentar atenuar los existentes. Este tipo de rectificadores modifican la forma de onda de la corriente de entrada para mejorar el espectro armónico y el factor de potencia. Existen varias maneras de clasificar un rectificador HPF: según la forma de la corriente absorbida (totalmente sinusoidal o simplemente se ajusta al máximo establecido por la normativa), según el número de semiconductores o según el estrés que sufren los semiconductores. (control en conducción continua, control en conducción discontinua o en el límite entre c.c. y c.d. o convertidores con redes resonantes para ZVS y ZCS).

Los rectificador HPF cuentan en esencia de dos etapas: la pre-regulación y la post-regulación.

Pre-regulador monofásico HPF. Rectificador + Convertidor DC/DC

El funcionamiento ideal del rectificador sería aquel en que la corriente que obtiene de la red debe ser sinusoidal y debe estar en fase con la tensión. Esto solo ocurre si la carga conectada a la salida del rectificador tiene un comportamiento idealmente resistivo.

Como vemos en la figura de arriba, si el rectificador ve conectado a su salida una resistencia, en este caso \(R_e\), la corriente será sinusoidal y estará en fase con la tensión.

\[ i_r(t) = \frac{v_r(t)}{R_e}\]

En este caso, de manera ideal, la potencia que llega a la resistencia emulada (\(R_e\)) es transferida sin pérdidas a la carga \(R\). De manera que se cumple que:

\[ p(t) = \frac{v^2_r}{R_e} = \frac{V^2_o}{R} \]

rectificador-hpfEl convertidor DC/DC deberá actuar de forma dinámica variando el ciclo de trabajo para obtener una tensión de salida constante a partir de la tensión de entrada variable. Por tanto, la relación de transformación \(M(d(t))\) será:

\[ M\left( d(t) \right) = \frac{v_o(t)}{v_r(t)} = \frac{V_{DC}}{V_m\left|\sin(\omega t)\right|} \]

Por tanto, cualquier convertidor que sea capaz de tener esta función de transferencia, podrá generar una tensión continua a la salida obteniendo de la red una corriente con forma sinusoidal y en fase con la tensión.

Las formas de onda de la tensiones y las corrientes en el convertidor son:

Debido a que se conserva la potencia que recibe la carga emulada \(R_e\), la corriente en la carga \(R\) es:

\[i_o = \frac{v_r(t)\cdot i_r(t)}{V_o} = \frac{V^2_m}{2\cdot V_o \cdot R_e}\left(1-cos(2\omega t) \right) \]

Por tanto, la corriente de salida tiene una componente DC de valor \(\frac{V^2_m}{2\cdot V_o \cdot R_e}\) y una componente frecuencial a \(2f_{red}\) que puede ser filtrado.

Sin embargo, como se puede observar, en los puntos en los que la tensión \(V_r\) es 0, en \(0, \pi, 2\pi\), el convertidor debe ser capaz de obtener \(V_{DC}\) a la salida. Esto implica que la función de transferencia tienda a infinito (lo que en la práctica no es posible). Debido a esta limitación, se producirá un error en la forma de onda de la corriente absorbida por el DC/DC en los pasos por 0, teniendo una distorsión armónica diferente de 0 pero muy reducida.

A la hora de elegir el tipo de convertidor DC/DC, se tiene que tener en cuenta que este debe ser capaz de trabajar en todo el rango de M. Por ejemplo, un convertidor buck tiene una relación de transformación \(M\leq 1 \), por lo que en aquellos puntos en los que la tensión de entrada del convertidor sea menor que la tensión de salida objetivo, se pierde el control del convertidor y este no va a ser capaz de trabajar en esta zona.

relacion-de-transformacionLo más apropiado entonces sería utilizar un convertidor buck-boost. Sin embargo, debido a la disposición de la bobina en esta configuración (en derivación) no es posible hacer un control en corriente. El control en corriente es interesante debido a que es la magnitud que realmente queremos modelar. Por tanto teniendo en cuenta esta limitación, esta configuración no se suele utilizar.

También se pierde el control del convertidor como ya se ha dicho en los puntos de la tensión de entrada \(V_r\) cercanos a 0, ya que el ciclo de trabajo en estos puntos tiende a 1 aunque no hay tensión. El convertidor boost (\(M\geq 1\)) es el más utilizado en pre-reguladores HPF monofásicos.

Pre-regulador monofásico mediante convertidor boost

pre-regulador-monofasico-mediante-convertidor-boost

El pre-regulador monofásico mediante convertidor boost es el que se muestra en la figura. Idealmente, el convertidor boost puede producir cualquier ratio de conversión que esté entre 1 e infinito. La relación de transformación de este convertidor es:

\[ M(d(t)) = \frac{V_o}{V_r} = \frac{1}{1-d(t)}\]

Despejando el ciclo de trabajo:

\[ d(t) = 1-\frac{v_r(t)}{V_o}\]

donde \(V_o\) es la tensión continua que se quiere conseguir a la salida y \(v_r(t)\) es la tensión a la salida del rectificador. Sin embargo, esta expresión solo es cierta cuando la corriente en la bobina está en conducción continua.

Para garantizar la conducción continua, el rizado de corriente en la bobina debe ser menor o igual que 2 veces la corriente media en la bobina:

\[ \Delta i_L \leq 2i_{L(AV)}\]

Donde hay que tener en cuenta que la corriente media que pasa por la bobina es la corriente media que el rectificador toma de la red (\(i_{L(AV)} = i_{r(AV)}\)). Vamos a calcular primero el valor de la corriente media en la bobina (o lo que es lo mismo, de la red). La corriente de salida está relacionada con la corriente de entrada mediante la siguiente expresión:

\[ \frac{I_o}{I_{r~(AV)}} = 1 – D \]

Despejando \(I_{r~(AV)}\), tenemos:

\[ I_{r~(AV)} = \frac{I_o}{1 – D} = \frac{\frac{V_o}{R}}{1-D} = \frac{V_o}{R\left(1-D\right)}~~~(1)\]

Sin embargo, esta ecuación no nos relaciona la corriente media de salida con la resistencia emulada \(R_e\). Para poder relacionarlas, sabemos que la función de transferencia de la tensión es:

\[ \frac{V_o}{V_{r~rms}} = \frac{1}{1-D} \]

\[V_o = \frac{V_{r~rms}}{1-D}\]

Como R es la relación entre la tensión de salida y la corriente de salida:

\[ R = \frac{V_o}{I_o} = \frac{V_{r~rms}}{I_{r~rms}} \frac{1}{\left(1-D\right)^2} = \frac{R_e}{ \left( 1-D\right)^2 }  \]

Donde \(R_e\) es la resistencia equivalente vista desde la salida del rectificador.

Retomando la expresión de la corriente de entrada (1):

\[ I_{r~(AV)} = \frac{V_o}{R\left(1-D\right)} = \frac{V_o}{R_e}\left(1-D\right) = \frac{V_{r~rsm}}{R_e}\]

\[ i_{r~(AV)} = \frac{v_r(t)}{R_e}\]

Por lo que ya tenemos la ecuación que relaciona la corriente media que proporciona la red con la resistencia emulada \(R_e\).

Ahora vamos a calcular la otra parte de la inecuación y tener las condiciones que aseguran que el convertidor trabaja en conducción continua, que interesa como hemos visto para que la relación de transformación sea válida. El rizado de corriente en el convertidor boost es:

\[ \Delta i_r = \frac{v_r(t)}{L}d(t)T_{s}\]

Por tanto, como habíamos dicho y siendo \(i_L = i_r\), para garantizar conducción continua:

\[ \Delta i_L \leq 2i_{L(AV)}\]

\[  \frac{v_r(t)}{L}d(t)T_{s} < 2\frac{v_r(t)}{R_e}  \]

Despejando \(R_e\):

\[ R_e < \frac{2L}{d(t)T_{s}} \]

Despejando \(d(t)\):

\[ d(t)< \frac{2L}{R_e T_{s}} \]

Si se cumplen estas ecuaciones, el convertidor estará en conducción continua y la relación de transformación que nos interesa se cumplirá. Sin embargo, estas últimas ecuaciones las podemos reescribir de la siguiente manera:

\[ R_e < \frac{2L}{\left(1-\frac{v_r(t)}{V_o}\right)T_{s}} \]

Como \(v_r(t) = V_M \left| \sin(\omega t) \right|\), es decir que \(0\leq V_r \leq V_M\), el valor máximo que puede tener \(R_e\) sea da cuando \( \frac{2L}{\left(1-\frac{v_r(t)}{V_o}\right)T_{s}}\) sea mínimo. Y esto sucede cuando el denominador es máximo. Dicho de otro modo, el máximo valor que puede tomar \(R_e\) se da cuando \(v_r(t) = 0\). Por tanto, el máximo valor de \(R_e\) que hace que el convertidor esté trabajando en modo corriente continua es:
\[ R_e < \frac{2L}{T_s} \]

El valor de \(R_e\) nos va a servir para diseñar la bobina del convertidor. Sabiendo que:
\[  R_e = \frac{V^2_{r(rms)}}{P_o} = \frac{V^2_m}{2P_o} \]

Entonces, sustituyendo:
\[ \frac{V^2_m}{2P}  < \frac{2L}{T_s} \Rightarrow L > \frac{V^2_m \cdot T_s}{4P} \]

Por tanto, este será el mínimo valor de inductancia que conseguirá que el convertidor esté trabajando en modo conducción continua.

Sin embargo, el valor de la inductancia de la bobina no será cualquier valor por debajo del mínimo. De hecho, en muchos casos tendremos impuesto un rizado máximo de corriente en la bobina. En ese caso, la expresión del rizado de la corriente en la bobina será el que limitará el mínimo valor de la inductancia. De la ecuación del rizado de la corriente en el convertidor boost:

\[ \Delta I_L = \frac{V_{r~rms}}{L}DT_s = \left\{ \frac{V_o}{V_{r~rms}} = \frac{1}{1-D} \right\} =     \frac{V_o}{L} D \left(1-D\right)T_s \]

Despejando L:
\[ L = \frac{V_o}{\Delta I_L} D \left(1-D\right)T_s \]

El valor del ciclo de trabajo D que maximiza la ecuación es \(D = 0.5\).
\[ \left. D \cdot \left(1-D\right)\right|_{D=0.5} = 0.25 = \frac{1}{4} \]

Teniendo este valor en cuenta, para cumplir que el rizado de corriente sea menor que el exigido:
\[ L > \frac{V_o}{4\Delta I_L} T_s \]

De esta manera quedaría totalmente diseñada la bobina.

El último componente que queda por determinar es el condensador. La función del condensador es la de proporcionar potencia a la salida cuando la potencia suministrada por la red es 0. Debido a que la corriente está en fase con la tensión y tienen la misma forma de onda, en \(\pi\) y \(2\pi\) la potencia es que entrega la red es 0. Sin embargo, la potencia que queremos entregar a la carga es constante. Para arreglar esta situación, el condensador se cargará en un cuarto de periodo almacenando energía y se descargará en el otro cuarto de periodo. Esta situación se muestra en la siguiente figura:
La potencia que suministra la red es:
\[ p_r(t) = v_r(t) \cdot i_r(t) = \frac{V^2_m}{R_e}\sin^2(\omega t) = \frac{V^2_m}{2R_e}\left[1-\cos\left(2\omega t\right)\right]\]

La potencia media entregada a la carga, será la potencia media suministrada por la red:
\[ P_{r(AV)} = P_o =  \frac{V^2_m}{2 R_e}\]

La potencia suministrada por el condensador debe ser la diferencia entre la que pide la carga y la que entrega la red:
\[ p_c(t) = p_r(t) – p_o(t) \]

La energía almacenada en un condensador es:
\[ E_c = \frac{1}{2} C V^2_c \]

Por tanto, la potencia del condensador será:
\[ p_c(t) = \frac{dE(t)}{dt} = \frac{d}{dt}\left[\frac{1}{2} C v^2_c(t)\right]  \]

 

Categorías
Electrónica

Impedancia y admitancia

Z=R+jX
Impedancia Resistencia Reactancia
Y=G+jB
Admitancia Conductancia Susceptancia