Академический Документы
Профессиональный Документы
Культура Документы
CURSO 2006-2007
PRESIDENTE
SECRETARIO
VOCAL
CALIFICACIN
RESUMEN
El presente Proyecto Fin de Carrera tiene como principal objetivo la
implementacin en una FPGA de un algoritmo de modulacin multifase y multinivel
aplicable a convertidores apropiados para sistemas de propulsin elctrica de muy alta
potencia, concretamente, en el campo de la propulsin en barcos elctricos.
La tcnica de modulacin empleada es la modulacin por vector espacial
[SVPWM (Space Vector Pulse Width Modulation)] multidimensional para
convertidores electrnicos de potencia de cualquier nmero de niveles y fases. Dicha
modulacin se basa en la representacin de un sistema multifase (P fases) de tensiones
mediante vectores de dimensin P (la dimensin es acorde con el nmero de fases)
ubicados en un espacio multidimensional, y en llevar a cabo una aproximacin de
dichos vectores mediante la integracin en un nico vector de los vectores que se
encuentran en su entorno ms prximo.
Este algoritmo de modulacin destaca por su eficacia y por su bajo coste
computacional independientemente del nmero de niveles del convertidor. Adems, no
utiliza funciones trigonomtricas ni tablas de bsqueda y es apropiado para
implementaciones hardware en tiempo real.
En este proyecto, la implementacin del algoritmo se ha realizado mediante una
FPGA de Xilinx montada sobre una placa de desarrollo de Digilent. Para realizar la
implementacin se ha utilizado la herramienta de Xilinx denominada Foundation ISE.
El algoritmo se ha descrito mediante el lenguaje de descripcin hardware VHDL.
Para realizar la sntesis del cdigo VHDL se ha empleado la herramienta XST de
Xilinx y para realizar la verificacin del funcionamiento del algoritmo mediante
simulaciones, se ha utilizado la herramienta ModelSim XE III de Mentor Graphics.
PALABRAS CLAVE
Convertidores de tensin.
FPGA.
Modulacin vectorial.
Multinivel.
Multifase.
Propulsin elctrica.
PWM.
SVPWM.
VHDL.
Agradecimientos
A mis padres. Los debo mencionar en primer lugar por ser los primeros en todo.
Sin lugar a duda, son las personas ms importantes en mi vida y a las que ms cosas
tengo que agradecer.
Quiero darles las gracias por el apoyo que me han dado desde el primer da de
carrera. Gracias a sus constantes nimos, gracias a la confianza depositada en m,
gracias por no haber faltado ni un solo da durante estos aos. Sin vosotros nunca
hubiese llegado aqu. Gracias.
A mi abuela, que s que esperabas con mucha ansia que llegase este da. Espero
que ests tan orgullosa de m como yo de ti.
A mis nias. Por estar siempre ah y por haberme tolerado tantas pocas de
exmenes.
Por ltimo, quiero agradecer la ayuda que me han prestado para realizar este
proyecto mis tutores Jacobo y scar. Gracias a ellos, he llevado a cabo esta difcil tarea.
A mis padres
10
NDICE GENERAL
1. INTRODUCCIN Y OBJETIVOS...15
2. CONVERTIDORES MULTINIVEL....19
2.1. Introduccin a los convertidores multinivel...19
2.2. Topologas de los convertidores multinivel...21
2.2.1. Convertidores por enclavamiento de diodos...22
2.2.2. Convertidores de condensadores flotantes..23
2.2.3. Convertidores de puentes H con conexin en cascada....25
2.2.4. Equivalencias...27
3. ALGORITMOS DE MODULACIN..29
3.1. Introduccin....29
3.2. Modulacin vectorial PWM...30
3.2.1. PWM por vector espacial para convertidores trifsicos..30
11
APNDICES.131
A. Introduccin a las FPGAs..131
B. Familia Spartan 3 de FPGAs de Xilinx..139
C. Placa de desarrollo S3 de Digilent basada en la FPGA XC3S200 de
Xilinx.163
BIBLIOGRAFA173
12
13
14
1. INTRODUCCIN Y OBJETIVOS
Mayor eficiencia.
Menor potencia por fase, debido a una corriente por fase ms baja
sin necesidad de un aumento de la tensin.
Mayor modularidad.
Incremento de la eficiencia.
convertidores.
Fue en 1986 cuando Van der Broek [2] propuso una tcnica de modulacin
avanzada conocida como modulacin por vector espacial (SVM Space Vector
Modulation), desde entonces se ha extendido el uso de esta tcnica en aplicaciones
modernas de electrnica de potencia.
La implementacin digital de la modulacin por vector espacial se basa en los
siguientes pasos:
16
Modelsim.
17
18
2. CONVERTIDORES MULTINIVEL
2.1. Introduccin a los convertidores multinivel
Los convertidores multinivel en fuente de tensin ofrecen beneficios en
aplicaciones de alta potencia, siendo la ms importante la capacidad de sintetizar formas
de onda de tensiones con
20
Converter).
CONVERTIDORES MULTINIVEL
CONVERTIDOR
POR
ENCLAVAMIENTO
DE DIODOS
CONVERTIDOR
CON
CONDENSADORES
FLOTANTES
CONVERTIDOR
DE PUENTES H
CON CONEXIN
E N CA S CA D A
OTRAS
TOPOLOGAS
seales de disparo que reciba. Tablas fundamentales para el desarrollo del algoritmo,
pues nos proporcionarn las seales de disparo que se deben generar segn el nivel de
tensin que se quiera alcanzar.
Ti a
semiconductores as como los posibles niveles lgicos que los interruptores pueden
tomar (1=on y 0=off).
Figura 2.4. Topologa de una fase de un convertidor por enclavamiento de diodos para cinco
niveles
La tabla 2.1 muestra los posibles niveles, estado de los interruptores y las
tensiones de salida correspondientes para el convertidor de la figura 2.4.
22
TABLA 2.1
Accionamiento de interruptores para el convertidor por enclavamiento de diodos de cinco niveles
sa
T1a
T2a
T3a
T4a
Vsa
Vsa (*)
VC1
VC1 + VC2
2Vdc
3Vdc
4Vdc
Vdc
23
La tabla 2.2 muestra los posibles niveles, estado de los interruptores y las
tensiones de salida correspondientes para el convertidor de la figura 2.5.
TABLA 2.2
Accionamiento de interruptores en un convertidor de condensadores flotantes de cinco niveles.
sa
T1a
T2a
T3a
T4a
Vsa
VC a
Vsa (*)
0
Vdc
VC a VC a
Vdc
VC a VC a
Vdc
VC a VC a
Vdc
VC a
2Vdc
VC a VC a + VC a
2Vdc
VC a VC a + VC a
2Vdc
VC a VC a
2Vdc
2Vdc
VC a VC a
2Vdc
VC a
3Vdc
VC a VC a + VC a VC a
4
VC a VC a + VC a
3Vdc
VC a VC a + VC a
3Vdc
VC a VC a
3Vdc
VC a
4Vdc
(*)VC a = iVdc / i = 1, 2, 3, 4
i
24
Figura 2.6. Topologa de una fase de un convertidor de cinco niveles con puentes H con
conexin en cascada
La tabla 2.3 muestra los posibles niveles, estado de los interruptores y las
tensiones de salida correspondientes para el convertidor de la figura 2.6.
25
TABLA 2.3
Accionamiento de interruptores en convertidor de puentes H con conexin en cascada de cinco niveles.
sa
TLa1
TLa2
TRa1
TRa2
Vsa
Vsa (*)
Vdca 2 Vdca 1
2Vdc
Vdca 2
Vdc
Vdca 1
Vdc
Vdca 2
Vdc
Vdca 1
Vdc
Vdca 1 Vdca 2
Vdca 2 Vdca 1
Vdca 1
Vdc
Vdca 2
Vdc
Vdca 1
Vdc
Vdca 2
Vdc
Vdca 2 + Vdca 1
2Vdc
26
sa
T1a
T2a
T3a
T4a
TLa1
TLa2
T R1
T R2
sa
27
28
3. ALGORITMOS DE MODULACIN
3.1. Introduccin
El objetivo de este apartado es mostrar una panormica de las estrategias de
conmutacin multinivel ms empleadas, centrndose en la modulacin concreta
empleada en nuestro caso.
La eleccin de una tcnica de modulacin u otra depende de los factores que
caractericen la aplicacin, como son, entre otros:
Requisitos de la carga
29
30
Va = V sen( w1 t )
V = V sen( w t 120 )
b
(3.1)
Vc = V sen( w1 t 240 )
Figura. 3.2
(3.2)
2
j
3
a=e
El vector espacial queda definido en el plano por su componente sobre el eje real V , y
su componente sobre el eje imaginario V , figura 3.3.
Figura 3.3
La actuacin sobre los transistores del rectificador se har de tal forma que las
tensiones de entrada al mismo, Va , Vb , Vc , sigan a las tensiones de referencia Va* , Vb* , Vc*
Tanto el sistema trifsico de tensiones de entrada como de tensiones de
referencia, puede ser representado por el vector espacial correspondiente V o V * .
31
Figura 3.4
32
i=0. Teniendo en cuenta la variable binaria i que define el estado de una rama y la
figura 3.5, en la tabla 3.1 se muestra el estado del inversor en funcin de i.
A partir del inversor representado en la figura y teniendo presente la definicin
de la variable i se obtienen las siguientes expresiones.
Van = a Vdc + VNn
Vbn = b Vdc + VNn
(3.3)
(3.6)
Tabla 3.1
Valor de [ a , b , c ]
[ a , b , c ] = [1, 0, 0]
[ a , b , c ] = [1,1, 0]
[ a , b , c ] = [0,1, 0]
[ a , b , c ] = [0,1,1]
[ a , b , c ] = [0, 0,1]
[ a , b , c ] = [1, 0,1]
[ a , b , c ] = [1,1,1]
[ a , b , c ] = [0, 0, 0]
33
Figura 3.5
1
1
V
2
2
=
3 0
3
V
1 V
a
2
Vb
3
V
2 c
(3.7)
34
Tabla 3.2
Estado
del
inversor
Patrn de
conmutacin
[ a , b , c ]
Van
Vbn
Vcn
[ a , b , c ] = [1, 0, 0]
2
Vdc
3
1
Vdc
3
1
Vdc
3
[ a , b , c ] = [1,1, 0]
1
Vdc
3
1
Vdc
3
2
Vdc
3
1
Vdc
3
2
Vdc
3
1
Vdc
3
2
Vdc
3
1
Vdc
3
1
Vdc
3
1
Vdc
3
2
Vdc
3
0
2
Vdc
3
1
Vdc
3
0
[ a , b , c ] = [0,1, 0]
[ a , b , c ] = [0,1,1]
[ a , b , c ] = [0, 0,1]
[ a , b , c ] = [1,1,1]
1
Vdc
3
1
Vdc
3
0
[ a , b , c ] = [0, 0, 0]
[ a , b , c ] = [1, 0,1]
2
Vdc
3
Vdc
Vdc
Vdc
Vdc
2
0
2
Vdc
3
V
dc
6
Vdc
6
0
0
Vdc
Vdc
2
2
0
0
V =
2
Vdc
3
(3.8)
Los ocho vectores son denominados vectores espaciales bsicos. Los seis
vectores no nulos definen seis sectores cada uno de ellos de 60.
35
Figura 3.6
componente fundamental.
de referencia.
36
Figura 3.7
Figura 3.8
En la tabla 3.3 se expresan los estados del rectificador, los vectores bsicos
asociados a cada uno de estos estados y la duracin de los mismos para la mitad del
periodo de conmutacin.
37
Estado del
inversor
8
Vector bsico
Duracin
V8
T0 / 2
V1
T1
V2
T2
V7
T0 / 2
V* =
T
T
1
(V8 0 + V1 T1 + V2 T2 + V7 0 )
(3.9)
T
2
2
( )
2
Teniendo en cuenta que V8 y V7 son vectores nulos, la ecuacin anterior se puede
1
(V1 T1 + V2 T2 )
(3.10)
T
( )
2
Proyectando los vectores bsicos y el vector de referencia sobre los ejes alfa y
V * cos
T
2
2
=
Vdc T1 +
Vdc cos(60 ) T0
2
3
3
T
2
=
Vdc s en(60 ) T2 int eg
2
3
vr = vi + v f / vi = integ(vr ) P
V * sen
V * cos
T
2
2
=
Vdc T1 +
Vdc cos(60 ) T2
2
3
3
(3.11)
T
2
V sen =
Vdc s en(60 ) T2
2
3
*
Despejando T1 y T2 se obtiene
38
T1 =
T2 =
T0 =
V*
2
Vdc
3
V*
T se n(60 )
2 se n(60 )
T
se n( )
2 2 se n(60 )
(3.12)
2
V
3 dc
Y finalmente T0 es igual a
T
T1 T2
2
(3.13)
39
40
4.1. INTRODUCCIN
La mayora de los sistemas elctricos de velocidad variable utilizan motores
trifsicos. Sin embargo, puesto que todos estos sistemas incluyen un convertidor
electrnico de potencia, el nmero de fases del motor puede ser ms de tres.
Las ventajas ms importantes de usar un motor multifase en vez de uno trifsico son:
Mayor eficiencia.
Menor potencia por fase, debido a una corriente por fase ms baja
sin necesidad de aumentar la tensin.
Mayor modularidad.
Incremento de la eficiencia.
41
Vr = Vgk Tk
(4.1)
k =1
T
k =1
=T
(4.2)
42
El vector de referencia indica la tensin de referencia para cada una de las fases
del convertidor, mientras que cada vector generador indica el estado de conmutacin de
cada fase del convertidor.
T
(4.3)
(4.4)
(4.5)
Por lo tanto, los vectores y los tiempos de conmutacin se pueden escalar usando
el paso de tensin y el perodo de conmutacin respectivamente para adimensionalizar
las ecuaciones (7.1) y (7.2):
Vr
P
VDC
vr =
vgk =
Vgk
VDC
tk =
Tk
T
(4.6)
(4.7)
(4.8)
vr = vgk tk
(4.9)
k =1
t
k =1
=1
(4.10)
2
vgk = v1gk , vgk
,..., vgkP
(4.11)
T
(4.12)
Entonces las ecuaciones (4.9) y (4.10) pueden ser rescritas en forma matricial
como:
1 1
1 1
vr vg 1
v 2 = v 2
r g1
P v P
vr g 1
1
vg 12
vg 22
vg 2P
1
t
vg 1l 1
t
vg l2 2
t
P
vg l l
(4.13)
2.
3.
vr = vi + v f / vi = integ(vr ) P
(4.14)
44
(4.15)
v f = v1f , v 2f ,..., v Pf
(4.16)
(4.17)
T
(4.18)
1 0 1
1 1 1
vr vi vd 1
v 2 = v 2 v 2
r i d1
P P v P
vr vi d 1
1 1
t1
vd 12 vd 1l
t
vd 22 vd l2 2
t
vd 2P vd lP l
(4.19)
1 0 1
1 1 v1
vr vi f
v 2 = v 2 + v 2
r i f
P P P
vr vi v f
(4.20)
45
1 1
1 1
v f vd 1
v 2 = v 2
f d1
P P
v
v f d 1
vd 12
vd 22
vd 2P
1
t1
vd 1l
t2
vd l2
t
vd lP l
(4.21)
Este nuevo sistema de ecuaciones tiene la misma forma que la ley general
modulacin (4.13). Pero, en este caso, las componentes del vector v f estn acotadas al
intervalo [0, 1) y, por lo tanto, slo el subconjunto de vectores generadores con los
componentes cero o uno es suficiente para realizar la aproximacin de la referencia.
Consecuentemente, esta nueva ecuacin representa un modulador de dos niveles donde
el vector de referencia es v f y el campo de vectores generadores es el sistema de
vectores generadores vdk desplazado.
Resumiendo, la ecuacin (4.19) demuestra que un modulador SVPWM multifase
multinivel se puede realizar a partir de la suma de un desplazamiento y de un SVPWM
de dos niveles con el mismo nmero de fases. La figura 4.1 muestra un diagrama de
bloques del modulador implementado.
46
esa ley de modulacin debe ser una matriz cuadrada. Por lo tanto, la longitud de la
secuencia del vector de conmutacin Sl es:
l = P +1
(4.22)
1 1
1 1
v f vd 1
v 2 = v 2
f d1
P P
v
v f d 1
1
d2
2
d2
P
d2
1
t1
vd 1P +1
t
vd 2P +1 2
t
vd PP +1 P +1
(4.23)
1
v = Dt
f
(4.24)
Calculando una matriz de permutacin P que ponga los elementos del vector de
referencia v f en orden ascendente:
1 1
P =
v f v f
(4.25)
donde
47
1 > v1f v kf 1 v kf v Pf 0
(4.26)
1
v = D t
f
(4.27)
D = PD
(4.28)
donde
1 1 1 1
1 1 1
D =
0
1
(4.29)
Adems, como se ver luego, los tiempos de conmutacin obtenidos con esta
matriz de coeficientes son siempre positivos.
Una matriz de permutacin es siempre una matriz ortogonal inversible y su
inversa es la matriz traspuesta
P 1 = PT
(4.30)
(4.31)
48
1 v1f k = 1
k 1 k
tk = v f v f 2 k P
P
v f k = P + 1
(4.32)
Todos los intervalos calculados por medio de las expresiones anteriores son
siempre positivos porque las coordenadas del vector v f estn en orden ascendente, as
que obedecen a la expresin (4.26).
En resumen, la matriz D resuelve la ley de modulacin de dos niveles
obteniendo tiempos de conmutacin positivos y minimizando el nmero de
conmutaciones. La secuencia de vectores de conmutacin de dos niveles se puede
extraer directamente de esa matriz. La figura 4.2 muestra el diagrama de bloques del
SVPWM multifase de dos niveles del algoritmo.
49
50
La figura 5.1 muestra el diagrama completo del sistema. Por una parte, est el
algoritmo de control, implementado mediante el DSPACE, que es el que genera los 6
vectores. DSPACE es el conjunto formado por un entorno software para Matlab y una
placa de desarrollo basada en un microprocesador Power-PC y un DSP. Por otra parte,
est el algoritmo de modulacin implementado en la FPGA, que es la parte
correspondiente a este proyecto fin de carrera. ste se comunica con el DSPACE a
travs de una interfaz de comunicaciones, que tambin es diseada en el presente
proyecto. Por ltimo, el IGBT, que es el convertidor que acta segn la activacin o
51
desactivacin de los transistores, transistores que se regulan segn las seales que
genera el modulador implementado en la FPGA.
Por tanto, procedemos a explicar ahora cmo hemos realizado el modulador para
que realice el algoritmo de modulacin explicado en el captulo anterior y, a partir de
los vectores entregados por el DSPACE, genere las seales correspondientes para
regular los transistores del IGBT.
En primer lugar, es importante aclarar que el sistema se ha diseado de forma
que funcione a cuatro frecuencias de conmutacin distintas. Estas frecuencias de
conmutacin (seleccionadas por el usuario desde el exterior) definen cuatro perodos de
conmutacin distintos a introducir en las seales de disparo, por lo que modifican los
clculos a realizar en el algoritmo en todo el proceso concerniente a la obtencin de los
ciclos de conmutacin de los vectores.
Para ello, se ha diseado el bloque de la figura 5.2. La funcin de este bloque es
la de generar el reloj que va a controlar al modulador segn la frecuencia que elija el
usuario. El usuario podr hacer la seleccin mediante dos interruptores (SW2 y SW3)
segn la siguiente tabla 5.1:
SW3 SW2
FREC
Ts
10 kHz
100 s
5 kHz
200 s
2 kHz
500 s
1 kHz
1 ms
Tabla 5.1
Figura 5.2
Podemos ver en la figura 5.3 el modulador con todas sus seales de entrada, que
incluyen los seis vectores de referencia de 12 bits cada uno y otras seales de
sincronizacin que recibe del DSPACE a travs de la interfaz de comunicaciones.
52
53
Figura 5.4. Interconexin de los bloques principales del circuito que forman el modulador.
54
5.1 SATURADOR
FUNCIN
La funcin de este bloque, como su propio
nombre indica es la de saturar, es decir, limitar los
valores de la entrada a un nmero menor que 4
(011,111111111 en binario, expresado con 12 bits,
3 de ellos enteros y 9 decimales).
Por tanto, debe analizar cada uno de los 6
vectores que entran e impedir que la parte entera sea
mayor que 3 (011 en binario). Si la parte entera es
4, 5, 6 7 (son los nicos valores mayores que 3 que
se pueden formar con 3 bits) debe saturar el vector al
mximo valor representable que ser el de parte
entera 011 con la mxima parte decimal
111111111, es decir, 011,111111111.
ENTRADAS
Figura 5.5.
55
SALIDAS
VsatA, VsatB, VsatC, VsatD, VsatE, VsatF(11:0): los seis vectores de 12 bits de
entrada saturados.
end_process: seal indicadora del fin de funcionamiento del bloque y que los
vectores saturados estn dispuestos a la salida. Adems, esta seal implica el
funcionamiento del siguiente bloque (modulator6p5n).
ESQUEMA Y DISEO
El diseo del bloque se basa en analizar el bit ms significativo de cada vector.
Si es 1, significa que la parte entera de dicho vector es mayor que 3 (011) y, por
tanto, hay que entregar a la salida el valor mximo, que es el valor constante:
011,111111111.
Sin embargo, si el bit ms significativo es 0, a la salida hay que entregar el
mismo vector de la entrada, puesto que ya se dispone de un vector de parte entera menor
o igual que 011.
Un ciclo despus de haber obtenido los 6 vectores a la salida, se genera la seal
end_process, que indica el fin del proceso.
COMPONENTES NECESARIOS
Para llevar a cabo la implementacin de este bloque en una FPGA se han
necesitado:
8 registros:
2 registros de 1 bit.
6 registros de 12 bits)
56
Figura 5.6.
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso. Esta seal es el end_process del
SALIDAS
t1, t2, t3, t4, t5, t6, t7(9:0): siete vectores tiempo de 10 bits.
P1, P2, P3, P4, P5, P6(20:0): seis fases de 21 bits, 21 bits obtenidos de asignar
un valor de fase de 3 bits por cada tiempo, en total 21 bits.
57
ESQUEMA Y DISEO
Este bloque se disea a partir de la interconexin de dos bloques de una
jerarqua inferior: modulator6p2n y add_integer_part.
Estos dos bloques operarn de forma secuencial. Cuando el saturador
(saturate) genera el end_process, implica el comienzo de nuestro primer bloque
modulator6p2n. Cuando ste finaliza, ya se disponen a la salida los 7 tiempos
calculados y, adems, generar la seal de fin de proceso (end_process) que implicar la
activacin de la seal de inicio de proceso (init_process) del bloque add_integer_part.
Cuando este bloque termina y, consecuentemente, se obtienen las 6 fases calculadas,
este bloque activa la seal de fin de proceso. Por tanto, el end_process de este proceso y
del bloque global modulator6p5n vendr marcado por el end_process del
add_integer_part.
En la figura 5.7 vemos el esquema empleado anteriormente para la explicacin
del algoritmo de modulacin. En ella se pueden ver los bloques principales que lo
componen, que son por un lado el modulador ms pequeo de 5 fases y 2 niveles
(SVPWM 2L 5P en la figura) y por otro lado el add_integer_part (matrix
concatenation en la figura).
58
COMPONENTES NECESARIOS
Para llevar a cabo la implementacin de este bloque en una FPGA, los
componentes necesarios fueron, como caba esperar, la suma de los componentes
necesarios para la realizacin de cada uno de los bloques individuales que lo forman.
Por tanto, hemos necesitado:
1 sumador de 3 bits
1 restador de 10 bits
114 registros
59 registros de 1 bit
6 de 3 bits
12 de 7 bits
13 de 10 bits
12 de 12 bits y 12 de 21 bits
2 multiplexores 8 a 1
1 de 3 bits
1 de 7 bits
59
1 comparador de 9 bits
4 multiplexores 8 a 1
2 de 10 bits
1 de 3 bits
1 de 7 bits
60
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso.
SALIDAS
VseqA, VseqB, VseqC, VseqD, VseqE, VseqF(6:0): seis vectores de 7 bits.
t1, t2, t3, t4, t5, t6, t7(9:0): 7 vectores tiempo de 10 bits.
end_process: la seal que indica el fin del funcionamiento del bloque y que los
vectores de secuencia y los tiempos estn dispuestos a la salida.
61
ESQUEMA Y DISEO
En la figura 5.10, vemos el esquema empleado anteriormente en la explicacin
del algoritmo de modulacin para este modulador de 2 niveles. En ella se pueden ver los
bloques principales que la componen, que son por un lado el bloque order (sort en la
figura) que ordena los vectores de mayor a menor y genera unos identificadores para
saber cul era el orden original de dichos vectores. Por otra parte, la parte superior de la
figura (double) se corresponder con el bloque time_generator y es la que coge esos
vectores ordenados y restndolos entre ellos obtendr 7 vectores de tiempo. La parte
inferior de la figura ser realizada por el bloque inverse_order y lo que hace es, a
partir de los identificadores que guardaron el orden, reordena las filas de una matriz
triangular inferior y entrega esos valores. Las salidas de este bloque son de gran
importancia y se explicar posteriormente su funcin.
Por tanto, este bloque se disea a partir de la interconexin de los tres siguientes
bloques que se explicarn a continuacin: order, time_generator e inverse_order.
Estos tres bloques operarn de forma secuencial. Cuando nuestro bloque
(modulator6p2n) recibe la seal de inicio (init_process), activa el bloque order con
la correspondiente seal de incio de ese bloque. Cuando este bloque termina y,
consecuentemente, se obtienen las partes decimales de los vectores ordenadas de menor
a mayor, este bloque activa la seal de fin de proceso, seal que, a su vez, activa el
62
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional, los componentes
necesarios, como caba esperar, fueron la suma de los componentes necesarios para la
realizacin de cada uno de los bloques individuales que lo forman. Por tanto, hemos
necesitado:
1 restador de 10 bits
63
73 registros
30 registros de 1 bit
13 de 10 bits
12 de 12 bits
6 de 3 bits12 de 7 bits
1 comparador de 9 bits.
2 multiplexores de 10 bits 8 a 1
64
ORDER
FUNCIN
Este bloque debe de aadir un identificador (3
bits) a cada uno de los vectores de entrada para
guardar la posicin que tienen inicialmente. A
continuacin, tiene que ordenarlos de menor a mayor,
quedando ordenadas las partes decimales y
desordenados los identificadores asignados (pues no
estarn en el orden en el que entraron).
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
Figura 5.12.
SALIDAS
VordA, VordB, VordC, VordD, VordE, VordF(11:0): 6 vectores de 12 bits cuyas
partes decimales (los 9 bms) estn ordenadas de menor (VordA) a mayor (VordB).
end_process: seal indicadora del fin de funcionamiento del bloque y que los
vectores ordenados estn dispuestos a la salida.
ESQUEMA Y DISEO
El algoritmo que he utilizado para lograr la ordenacin de los vectores, se basa
en el uso de 2 contadores:
1. Uno que se utiliza para controlar un multiplexor. La salida del
contador es el selector del multiplexor. Entonces, segn el valor del selector
(salida del contador) se van seleccionando vectores de 2 en 2 (VA con VB, VB
con VCy VE con VF). Para cada seleccin se intercambian las posiciones o no
de los vectores segn sea el primero mayor que el segundo o no.
65
66
67
@ELSE
RESET
STAT E0
init_process='1'
STAT E1
load_vectors<='1';
STAT E5
reset_ctr<='1';
STAT E11
STAT E9
change='1'
@ELSE
STAT E3
changer<='1';
STAT E2
ce_ctr<='1';
@ELSE
STAT E4
ctr_eq_4='1'
@ELSE
STAT E8
ce_ctr_loops<='1';
ctr_loops_eq_4='1'
STAT E7
assig<='1';
STAT E10
STAT E6
end_process<='1';
68
Vamos a explicar el significado de cada una de las seales que enva y recibe la
unidad de control hacia y desde la unidad operativa.
contador tiene que contar cinco comparaciones. Pues comparamos cada vector a
ordenar con su consecutivo y se intercambiarn en caso necesario.
o
salidas.
primer contador, que es el que tiene que contar cinco comparaciones por cada
vuelta (contar hasta cuatro porque el 0 ya es la primera comparacin).
CTR_LOOPS_EQ_4: Seal que indicar si ha terminado la
cuenta del segundo contador, que es el que tiene que contar cinco vueltas (son
cinco comparaciones por cada vuelta. Contar cuatro, pues con el contador a 0
ya hace la primera vuelta).
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional hemos necesitado:
2 contadores de 3 bits
27 registros
15 registros de 1 bit
12 registros de 12 bits
1 comparador de 9 bits
69
TIME GENERATOR
FUNCIN
Este bloque debe de generar los 7 tiempos durante los
cuales debe estar activo cada uno de los 7 valores de cada fase (7
valores que nos va a dar el bloque inverse_order_generator).
La obtencin de estos tiempos se hace de la siguiente
manera:
Se debe restar 1(que es el valor1000000000 en binario
con 10 bits, 9 de ellos decimales) menos el ltimo
Figura 5.16.
ENTRADAS
Figura 6.15.
70
SALIDAS
t1, t2,, t7(9:0): las salidas sern, por tanto, 7 vectores tiempo de 10 bits. El
BMS siempre ser 0, pues los tiempos se forman con vectores de 9 bits y, por tanto,
resultarn de 9 bits tambin. Pero este dcimo bit surge, como se ha explicado antes,
para formar el valor entero 1 que se utiliza para obtener el t1.
end_process: seal que indica el fin del funcionamiento del bloque y que los
tiempos estn dispuestos a la salida.
No nos hace falta utilizar bit de signo porque los vectores siempre nos van a
venir ordenados de order y restaremos del mayor obteniendo siempre un resultado
positivo.
ESQUEMA Y DISEO
Compuesto por la unidad operativa y la unidad de control correspondientes que
podemos ver en la siguiente figura.
71
@ELSE
RESET
STATE0
init_process='1'
STAT E9
load='1';
STAT E1
selector <= "000";
en<='1';
STAT E2
selector<="001";
en<='1';
STAT E3
selector<="010";
en<='1';
selector<="011";
en<='1';
STAT E5
selector<="100";
en<='1';
STAT E6
selector<="101";
en<='1';
STAT E8
selector<="110";
en<='1';
STAT E10
STAT E7
end_process<='1';
72
Figura 5.20.
73
Figura 5.21
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional hemos
necesitado:
1 restador de 10 bits
24 registros
11 registros de 1 bit
13 registros de 10 bits
2 multiplexores de 10 bits 8 a 1.
74
INVERSE_ORDER
FUNCIN
La funcin de inverse_order es desordenar
una matriz triangular inferior 6*7(6 filas y 7
columnas) tal como indican los identificadores del
orden.
La matriz triangular inferior tendr en la
primera columna todo ceros. Dicha matriz ser:
Figura 5.22
(5.1)
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso cuya activacin indicar el
comienzo del funcionamiento del bloque.
idA, idB, idC, idD, idE, idF(2:0): los seis identificadores de los vectores
ordenados de menor a mayor que salen del bloque order.
SALIDAS
VseqA, VseqB, VseqC, VseqD, VseqE, VseqF: sern seis vectores (las filas de la
matriz triangular) de 7 bits. Siendo VseqA la primera fila de dicha matriz y VseqF la
ltima.
ESQUEMA Y DISEO
Formado por la unidad operativa y la unidad de control dispuestas tal como
indica la figura 5.23.
75
UNIDAD DE CONTROL(inverse_order_ctrl_unit)
Es la que pone en funcionamiento el bloque
cuando recibe la seal init_process.
Tras recibir un impulso en la seal
init_process, la unidad de control activar la seal
load. Esta seal le indica a la unidad operativa que
convierta los identificadores (vectores de 3 bits que
entran) en nmeros enteros para luego usarlos como
ndice del vector. A continuacin, activar la seal
Figura 5.24
matrix, esta seal le indica a la unidad operativa que debe desordenar la matriz
triangular inferior tal como le indican los identificadores.
Por ltimo, enva la seal assig que indica la asignacin de esa matriz obtenida a
la salida. Salida que sern seis vectores de 7 bits (VseqAVseqF).
En la figura 5.25 se muestra el grafo de estados diseado para realizar este
bloque. Se observa la activacin secuencial de load, matrix, assig y la vuelta al inicio
donde quedar en espera hasta la prxima activacin de init_process.
76
@ELSE
RESET
ST AT E0
init_process='1'
ST AT E1
load<='1';
ST AT E2
matrix<='1';
ST AT E3
assig<='1';
UNIDAD OPERATIVA(inverse_order_op_unit)
Este bloque funciona con las seales recibidas
de la unidad de control.
Este bloque consta de una simple unidad
operativa basada en tres procesos activados segn la
seal recibida de la unidad de control.
Figura 5.26
77
Por ltimo, se recibe la seal assig, que lo que hace es asignar los valores de los
registros cargados en el paso anterior a las salidas del bloque funcional.
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional hemos necesitado:
22 registros
4 registros de 1 bit
6 de 3 bits
12 de 7 bits
78
5.2.2. ADD_INTEGER_PART
FUNCIN
Este es el otro bloque que, junto con el modulador de 2
niveles que acabamos de analizar, forma el modulador de 5
niveles.
Las entradas a este bloque son seis partes enteras
formadas por 3 bits; as, por ejemplo, 3 sera 011. Por otra
parte, nos entran seis vectores de secuencia. Cada vector est
formado por 7 bits. Estos seis vectores son las filas de una
matriz 6x7.
La funcin de este bloque es sumarle a cada fila de esa
matriz la parte entera correspondiente. As, a la primera fila de la
matriz (VseqA) debemos sumarle la primera parte entera. Por
Figura 5.27
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso. Esta seal es el end_process del
79
VseqA, , VseqB , VseqC , VseqD , VseqE , VseqF : seis vectores de 7 bits que son
entregados por el modulador de 2 niveles. Estos seis vectores son el resultado de
ordenar la matriz triangular en el bloque del modulador de 2 niveles tal como se explic
anteriormente.
SALIDAS
P1, P2, P3, P4, P5, P6: seis fases de 21 bits.
end_process: seal que indica el fin del funcionamiento del bloque y que los
valores de las 6 fases se encuentran a la salida.
ESQUEMA Y DISEO
Este bloque se compone de una unidad operativa y una unidad de control
dispuestas tal como indica la figura 5.28.
80
UNIDAD DE CONTROL(add_integer_part_ctrl_unit)
Es la que pone en funcionamiento
el bloque cuando recibe la seal
init_process.
El funcionamiento de la unidad de
control es mediante una mquina de
estados que opera de la siguiente manera:
Al recibir la seal init_process,
comienza este bloque a operar y a mandar
las correspondientes seales a la unidad
Figura 5.29
81
@ELSE
RESET
STAT E0
init_process='1'
STAT E5
reset_ctr<='1';
STAT E4
STAT E1
STAT E2
@ELSE
ce_ctr<='1';
load<='1';
end_loop='1'
STAT E7
assig_out<='1';
STAT E3
STAT E8
end_process<='1';
UNIDAD OPERATIVA(add_integer_part_op_unit)
Este bloque funciona con las seales recibidas de la unidad de control.
A este bloque es donde entran directamente las entradas (las partes enteras y las
filas de la matriz).
Es la parte funcional del bloque completo. Un multiplexor va seleccionando los
valores a sumar a medida que vara su valor. El valor del multiplexor va aumentando
mediante un contador a travs de la seal ce_ctr enviada por la unidad de control.
Cuando ese contador llega a cinco, indica que ya se han sumado las 6 filas
(desde 0 hasta 5), entonces la unidad operativa enva la seal end_loop a la unidad de
control. sta enva, entonces, assig_out para que se asignen a las correspondientes
salidas los valores calculados.
82
Figura 5.31
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional, los componentes
necesarios fueron:
1 sumador de 3 bits
41 registros
29 registros de 1 bit
12 de 21 bits
2 multiplexores 8 a 1
1 de 3 bits
1 de 7 bits
83
Figura 5.32
14 tiempos de la siguiente manera: t1/2, t2/2, t3/2,, t7/2, t7/2, t6/2,, t1/2.
Adems, tenemos la peculiaridad de que la suma de todos los tiempos suma 1
(que es el valor1000000000 en binario con 10 bits, 9 de ellos decimales. Si visemos
este nmero binario como un entero, el valor correspondera a 512).
Por tanto, la funcin de este bloque es generar a la salida unos valores de fase
durante un tiempo determinado y, tras transcurrir ese tiempo, generar los siguientes
valores.
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso cuya activacin indicar el
comienzo del funcionamiento del bloque. Esta seal es el end_process del bloque
anterior modulator6p5n, actuando as de forma secuencial.
t1, t2, t3, t4, t5, t6, t7(9:0): siete vectores tiempo de 10 bits que son las salidas
entregadas por el modulator6p5n.
84
P1, P2, P3, P4, P5, P6(20:0): seis fases de 21 bits, 3 bits por cada tiempo(en
total, 3bits*7tiempos= 21 bits por cada fase que entra). Estos vectores tambin son las
salidas del bloque anterior modulator6p5n.
SALIDAS
P1out, P2out, P3out, P4out, P5out, P6out(2:0): seis vectores de fase de 3 bits.
Recordemos que este valor de fase ser un valor entero entre 0 y 4, ambos inclusive.
new_cycle: seal que se activa cada vez que se completa un ciclo de
conmutacin.
En este caso, no necesitamos una seal indicadora de fin del proceso porque este
bloque no tiene que activar a ningn otro y, adems, funciona continuamente, no precisa
de ninguna seal. Al terminar de sacar todos los valores que le han entrado, coge de
nuevo los que aparecen a su entrada y vuelve a empezar al recibir la seal init_process.
ESQUEMA Y DISEO
Este bloque se compone de los dos bloques que se explicarn posteriormente:
time_acumulator y sequence_generator, interconectados tal como se puede ver en la
figura 5.33.
El bloque time_acumulator es el que se encarga de calcular los 14 tiempos
(como mximo), que se forman a partir de la mitad de cada uno de la entrada sumado
con el anterior, y las fases de 3 en 3 bits para generar durante cada uno de esos tiempos.
El bloque sequence_generator es el encargado de recibir esos vectores
calculados por el time_acumulator y generar el valor de 3 bits de las seis fases durante
el tiempo correspondiente.
85
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional, los componentes
necesarios, como caba esperar, fueron la suma de los componentes necesarios para la
realizacin de cada uno de los bloques individuales que lo forman. Por tanto, hemos
necesitado:
1 FSMs
13 sumadores de 10 bits
1 restador de 10 bits
2 contadores ascendentes
86
1 de 10 bits
1 de 4 bits
398 registros
84 de 3 bits
42 de 10 bits
6 de 42 bits
1 comparador de 10 bits.
87
5.3.1. TIME_ACUMULATOR
FUNCIN
La funcin de este bloque es muy importante, adems
de complicada, debida a la cantidad de funciones que realiza.
Los siete tiempos iniciales que entran al bloque son los
tiempos durante los cuales deben salir los valores de cada fase.
Tras transcurrir la mitad de cada uno de esos tiempos, se
cambian los valores de fase y transcurren durante el siguiente
tiempo. Despus, tras transcurrir las primeras siete mitades,
vuelven de nuevo las otras siete mitades.
Es decir, los tiempos que entran, se tienen que convertir
en 14 tiempos de la siguiente manera: t1/2, t2/2, t3/2,, t7/2,
t7/2, t6/2, , t1/2.
Adems, tenemos la peculiaridad de que la suma de
todos los tiempos suma 1 (1000000000 en binario, con 10
bits, 9 de ellos decimales. Si visemos este nmero en binario
como un entero, el valor correspondera a 512).
Por otra parte, nuestro sistema est diseado con un
temporizador que cuenta continuamente, independientemente
de toda seal y de todos los bloques del sistema total. Este
temporizador cuenta hasta 512 (que es el mximo tiempo
posible, la suma de todos los tiempos), que es cuando vuelve a 0 de
Figura 5.34
88
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
init_process: es la seal de inicio del proceso cuya activacin indicar el
comienzo del funcionamiento del bloque. Esta seal es el end_process del bloque
anterior modulator6p5n, actuando as de forma secuencial.
t1, t2, t3, t4, t5, t6, t7(9:0): siete vectores tiempo de 10 bits entregados por el
modulator6p5n.
P1, P2, P3, P4, P5, P6(20:0): seis fases de 21 bits, 3 bits por cada tiempo(en
total, 3bits*7tiempos= 21 bits por cada fase que entra).
SALIDAS
tac1, tac2, tac3,.., tac13, tac14(9:0): catorce vectores de 10 bits.
P1ac, P2ac, P3ac, P4ac, P5ac, P6ac(41:0): seis vectores de fase de 42 bits. Son
42 bits ya que entregamos un valor de 3 bits de fase por cada tiempo y
3 bits * 14tiempos = 42 bits.
En este caso, no necesitamos una seal indicadora de fin del proceso porque este
bloque no tiene que activar a ningn otro.
89
ESQUEMA Y DISEO
Este bloque se compone de una unidad operativa y una unidad de control,
dispuestas tal como indica la figura.
UNIDAD DE CONTROL(time_acumulator_ctrl_unit)
Es la que pone en funcionamiento el bloque cuando recibe la seal init_process.
El funcionamiento de la unidad de control es mediante una mquina de estados
que opera de la siguiente manera.
Al recibir la seal init_process, comienza este bloque a operar y a mandar las
correspondientes seales a la unidad operativa.
90
Figura 5.36
@ELSE
RESET
STAT E0
init_process
STAT E1
load_phases<='1';
STAT E5
@ELSE
STAT E9
STAT E2
ce_sum<='1';
T i_eq_0='1'
STAT E8
shift<='1';
@ELSE
STAT E3
ce_ctr<='1';
ctr_eq_13='1'
STAT E7
load_out<='1';
UNIDAD OPERATIVA(time_acumulator_op_unit)
Este bloque funciona con las seales recibidas de la unidad de control.
A este bloque es donde entran directamente las entradas (los siete vectores de
tiempo y las seis fases con los valores para cada tiempo).
Un multiplexor va seleccionando la mitad de los valores de tiempo a sumar a
medida que vara su valor. Para cada valor, tenemos un comparador que comprueba si
tal tiempo es cero, en dicho caso, activa la seal Ti_eq_0, que es recibida por la unidad
de control y activa la seal shift para eliminar esos valores de fase y para no contar con
este tiempo para los acumulados.
El valor del multiplexor va aumentando mediante un contador a travs de la
seal ce_ctr enviada por la unidad de control.
Cuando ese contador llega a 13, indica que ya se han sumado y calculado todos
los tiempos acumulados y las fases acumuladas, entonces la unidad operativa enva la
seal ctr_eq_13 a la unidad de control y sta enva la seal load_out para que se asignen
a las correspondientes salidas los valores calculados.
92
Figura 5.38
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional, hemos necesitado:
1 FSMs
13 sumadores de 10 bits
1 restador de 10 bits
300 registros
28 de 10 bits
6 de 42 bits
93
5.3.2. SEQUENCE_GENERATOR
FUNCIN
La funcin de este bloque es la de generar los valores
de fase durante el tiempo indicado. Como se le pasan 14
tiempos y 14 valores de fase (de 3 bits cada valor) para cada
tiempo, simplemente tiene que, a partir de esas entradas,
generar el correspondiente valor de fase durante el
correspondiente tiempo.
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
tac1, tac2, tac3,.., tac13, tac14(9:0): catorce vectores
que son los tiempos acumulados que son entregados por el
bloque time_acumulator y durante los cuales debe salir el
valor de cada fase.
P1ac, P2ac, P3ac, P4ac, P5ac, P6ac(41:0): seis
Figura 5.39
SALIDAS
P1out, P2out, P3out, P4out, P5out, P6out(2:0): seis vectores de 3 bits que
representan el valor actual de cada una de las fases.
Este bloque carece tambin de seal de fin de proceso que indique que se para el
funcionamiento de ste porque, realmente, nunca se detiene, funciona continuamente.
Lo que s genera es la seal de salida new_cycle.
new_cycle: indica que se terminan de generar los valores de fase durante el
tiempo indicado y que los valores que empiezan a salir a partir de aqu son los
correspondientes a los nuevos vectores de entrada al sistema.
94
ESQUEMA Y DISEO
Este bloque est formado por dos circuitos adecuadamente conectados los cuales
se muestran y se explican a continuacin:
95
SEQUENCE_TIMER
Este bloque es el encargado de contar el
tiempo que tiene que salir cada valor de fase. Se
trata de un temporizador que cuenta de manera
ininterrumpida 512 ciclos de reloj (clk), de manera
que cuando llegue a 512 se pone a 0 y vuelve a
contar de nuevo.
Adems, recibe como entrada ti, que es un valor de
Figura 5.41.
tiempo (el tie mpo durante el cual tendr que salir el valor de fase concreto). De manera
que, cuando el temporizador alcance ese tiempo ti concreto, genera la seal de salida
timer_eq_ti, indicadora de que el tiempo ha trascurrido y se deben cambiar los valores
de salida de fase.
La seal end_timer es la que indica al bloque sequence_registers que ya han
transcurrido los 512 ciclos de reloj y que se deben cargar los nuevos valores de fases y
tiempos.
SEQUENCE_REGISTERS
Es el bloque al que le entran los valores de las fases a generar
y los tiempos durante los cuales deben de generarse tales fases.
Este bloque se encarga de poner a la salida los valores
concretos de fase y de enviar al bloque sequence_timer el tiempo
(ti) durante el cual dichas fases deben de generarse. Entonces,
cuando ese tiempo ha transcurrido, sequence_timer enva a este
bloque la seal timer_eq_ti. En ese momento, se ponen en las salidas
los siguientes valores de fase y se enva al sequence_timer el
tiempo durante el cul estarn activas dichas fases, empezando el
ciclo de nuevo.
Cabe resear aqu cmo se diseado este bloque. Se ha
basado en una serie de registros encadenados. Como mximo hay 14
tiempos, entonces, usamos 14 registros para cada uno de los valores.
Cada vez que transcurra un tiempo, los valores de los registros se
desplazan al siguiente. El primer registro, es el que tiene el valor
actual; el segundo registro tiene el siguiente valor que se cargar; y
as sucesivamente hasta el ltimo. Por supuesto, cada vez que se
Figura 5.42.
96
desplazan los valores de los registros, se carga en el ltimo registro ceros, de manera
que al terminar de generar todos los valores, todos los registros estarn a 0. Aunque esto
tampoco ser apreciado por el usuario porque en el momento que todos son 0, ya han
transcurrido los 512 ciclos de reloj y ya se cargan los siguientes valores de seal.
COMPONENTES NECESARIOS
Para llevar a cabo la realizacin de este bloque funcional, hemos necesitado:
98 registros
84 de 3 bits
14 de 10 bits
1 comparador de 10 bits.
97
5.4. SIGNAL_GENERATOR
FUNCIN
La funcin de este bloque es generar las seales que
activan o desactivan los transistores que controlan el convertidor.
Disponemos de cuatro transistores por cada una de las
seis fases, por tanto, este bloque genera 24 seales (cuatro
transistores por cada una de las seis fases). Dichas seales
(transistores) tomarn el valor 1 (activo) 0 (inactivo) segn
el valor de la fase que tengamos, siguiendo la siguiente tabla:
Tabla 5.1
NIVEL DE FASE
TRANSISTORES
T0 T1 T2 T3
0
Figura 5.43
ENTRADAS
Este bloque carece de seal de reloj y de reset. Es un bloque combinacional que
funciona directamente nada ms recibir los valores de las seales de fase que salen del
bloque phases_sequence_generator.
98
SALIDAS
T0A, T1A, T2A, T3A (son los cuatro valores de los transistores que representan el
valor de entrada para la fase 1: PHASE1), T0B, T1B, T2B, T3B (para la fase 2:
PHASE2), T0C, T1C, T2C, T3C (para la fase 3: PHASE3), T0D, T1D, T2D, T3D (para
la fase 4: PHASE4), T0E, T1E, T2E, T3E (para la fase 5: PHASE5), T0F, T1F, T2F y
T3F (para la fase 6: PHASE6). Las salidas sern 24 valores de 1 bit. Para cada valor de
fase que entra, este circuito combinacional genera cuatro valores de 1 bit que son los
transistores que representan a dicho valor de fase.
ESQUEMA Y DISEO
Este bloque, cmo ya se ha dicho, es un bloque combinacional. Simplemente
est formado por seis multiplexores (uno por cada fase), de forma que segn el valor de
fase, asigna distintos valores a los transistores correspondientes a dicha fase.
Como es un multiplexor por cada fase de entrada, los valores entran en la unidad
al mismo tiempo y las salidas (los valores de los transistores) salen al mismo tiempo
tambin.
COMPONENTES NECESARIOS
En la figura 5.44 podemos ver un esquema general de la composicin interna del
bloque, tal y como lo interpreta la mquina. Realmente es una estructura repetitiva para
cada una de las 6 entradas.
99
Figura 5.45
100
101
FUNCIN
Este es el ltimo bloque de nuestro
circuito y es el que genera las salidas globales del
sistema. Genera, pues, las 48 seales a partir de
las 24 seales que le entran y, adems, aade los
tiempos muertos cuando as se lo indique la seal
de entrada.
La funcin de este bloque es la de, a partir
de los valores de los transistores que nos entrega
el bloque signal generator, generar las seales
de salida del sistema global, que son los valores
de los transistores y sus valores complementados
con la posibilidad de generar dichos valores con
un tiempo muerto siempre y cuando la seal
select_dead_time est seleccionada.
ENTRADAS
clk: reloj del circuito.
reset: puesta en estado inicial del circuito.
select_dead_time: seal que permite
generar las salidas con un tiempo muerto sin l.
Es una opcin que el usuario podr seleccionar a
travs de un pulsador en la placa.
enable_outputs: seal que permite o no
generar las salidas. Pues cuando exista un error, el
sistema desactivar esta seal para que salgan
todas las salidas 0.
T0A, T1A, T2A, T3A, T0B, T1B, T2B, T3B,
T0C, T1C, T2C, T3C, T0D, T1D, T2D, T3D, T0E,
T1E, T2E, T3E, T0F, T1F, T2F, T3F: 24 valores
de 1 bit de los transistores que son entregados por
el bloque anterior signal _generator.
Figura 5.47.
102
SALIDAS
PWM_A0p(p de positive), PWM_A0n(n de negative), PWM_A1p, PWM_A1n,
PWM_A2p, PWM_A2n, PWM_A3p, PWM_A3n, PWM_B0p, PWM_B0n, PWM_B1p,
PWM_B1n, PWM_B2p, PWM_B2n, PWM_B3p, PWM_B3n, PWM_C0p, PWM_C0n,
PWM_C1p, PWM_C1n, PWM_C2p, PWM_C2n, PWM_C3p, PWM_C3n, PWM_D0p,
PWM_D0n, PWM_D1p, PWM_D1n, PWM_D2p, PWM_D2n, PWM_D3p, PWM_D3n,
PWM_E0p, PWM_E0n, PWM_E1p, PWM_E1n, PWM_E2p, PWM_E2n, PWM_E3p,
PWM_E3n, PWM_F0p, PWM_F0n, PWM_F1p, PWM_F1n, PWM_F2p, PWM_F2n,
PWM_F3p, PWM_F3n: 48 seales de 1 bit. Son los 24 valores de los transistores
(cuatro transistores por fase) y sus negados.
ESQUEMA Y DISEO
Este bloque est formado por la
instanciacin repetitiva del bloque
single_output_generator. Dicho bloque se
aplica a cada valor de entrada de nuestro
bloque global y, a partir de ah, se generan las
salidas. Por tanto, est formado por la
repeticin del bloque
single_output_generator para cada una de las 24
Figura 5.48
entradas.
SINGLE_OUTPUT_GENERATOR
Bloque cuyas entradas son las seales generales de clk y reset, la seal del
transistor correspondiente (PWM_in), la seal select_dead_time para saber si tiene que
aadir o no los tiempos muertos y la seal enable_outputs para saber si hay que inhibir
las salidas o no.
Las salidas de este bloque son las salidas globales del valor del transistor
(PWM_out_p) y su negado (PWM_out_n).
103
Este bloque est formado, a su vez, por tres bloques de una jerarqua inferior,
que son: dead_time, inversor y mux_delay. Los tres se interconectan tal y como
muestra la figura.
104
Figura 5.50. Esquema del sistema implementado para la aplicacin de los tiempos muertos a
las seales de disparo.
105
COMPONENTES NECESARIOS
En primer lugar, vamos a indicar el nmero de componentes que fueron
necesarios para la realizacin del bloque signal_output_generator. Es trivial que el
nmero de componentes es la suma de los componentes utilizados para realizar los
bloques inversor, mux_delay y dead_time.
2 sumadores de 5 bits.
10 registros
8 registros de 1 bit
2 de 5 bits
6 multiplexores 4 a 1
4 de 1 bit
2 de 5 bits
48 sumadores de 5 bits
240 registros
48 de 5 bits
144 multiplexores 4 a 1
96 de 1 bit
48 de 5 bits
106
saturador (bloque precedente a ste y que satura los vectores de entrada al sistema
global).
En la figura 6.2 podemos ver la obtencin de los vectores de tiempo y los
vectores de fase a partir de esos seis vectores que nos entrega el saturate. Los vectores
tiempo se entregan antes que las fases porque se calculan antes; debemos tener en
cuenta que stos ya se obtienen en el modulator6p2n, mientras que las fases se
calculan, tras finalizar el modulator6p2n, en el siguiente bloque add_integer_part.
108
SIMULACIN ORDER
Para la comprobacin del bloque realizamos un banco de pruebas donde
pasamos los estmulos para las entradas del bloque, que son sern las partes decimales
de los vectores que salen del saturate y que entran al modulator6p5n.
A continuacin, se puede ver en la simulacin que realmente ordena los vectores
que entrada y aade los identificadores correspondientes a la posicin inicial de dichos
vectores.
109
SIMULACIN TIME_GENERATOR
Para la comprobacin del bloque realizamos el banco de pruebas donde pasamos
como parmetros conocidos las entradas del bloque que, luego, en el sistema global,
vendrn de otros bloques precedentes (clk y reset son globales a todo el sistema y los
seis vectores decimales ordenados que vendrn del bloque order) y observamos las
salidas.
A continuacin, se puede ver en la simulacin que realmente resta las partes
decimales que entran al recibirla seal init_process, tal como se explic antes, y obtiene
los vectores tiempo correspondientes. Se ha realizado la simulacin para dos bancos de
vectores distintos y realiza el clculo perfectamente para ambos, entregando, tras pocos
ciclos de reloj, los vectores a la salida y generando la seal end_process al final del
proceso.
SIMULACIN INVERSE_ORDER
Para la comprobacin del bloque realizamos el banco de pruebas donde pasamos
como parmetros conocidos las entradas del bloque que, luego, en el sistema global,
vendrn de otros bloques precedentes (clk y reset son globales a todo el sistema y los
seis identificadores que vendrn del bloque order) y observamos las salidas.
A continuacin, se puede ver en la simulacin que realmente desordena la matriz
triangular superior tal como indican los identificadores de la entrada.
110
SIMULACIN ADD_INTEGER_PART
Para la comprobacin del bloque realizamos la simulacin con dos bancos de
valores distintos. Se puede comprobar visualmente como VintegerA es sumado a cada
bit de VseqA obtenindose 3 bits que son la parte ms significativa de P1, que es la
salida. Igualmente con los dems vectores.
111
SIMULACIN PHASES_SEQUENCE_GENERATOR
En esta simulacin suministramos los estmulos para las entradas del bloque, que
son las salidas del modulator6p5n: siete vectores de tiempos y seis vectores de fases,
y vemos como genera la secuencia. En esta simulacin, no es fcil la comprobacin del
buen funcionamiento del sistema. Esto se puede ver mejor en el anlisis de cada uno de
los bloques individuales que lo forman (time_acumulator y sequence_generator).
Lo que s se puede ver es que el sistema funciona adecuadamente tras la interconexin
de los dos bloques y que genera la secuencia correctamente.
SIMULACIN TIME_ACUMULATOR
Realizamos la simulacin empleando dos bancos de valores diferentes. Podemos
comprobar que los tiempos acumulados son la suma de las mitades de los tiempos de
entrada (teniendo en cuenta que cuando es impar, una de las mitades es mayor en 1
unidad que la otra). Para comprobar mejor que realiza dicha suma, se ponen los valores
de los tiempos en formato decimal. Tambin se puede comprobar como se elimina el
valor de fase correspondiente cuando el tiempo a sumar es 0.
La figura 6.9 muestra las entradas para este bloque para dos bancos de valores
distintos y la figura 6.10 las salidas (tiempos acumulados y fases acumuladas) a los dos
bancos.
112
SIMULACIN SEQUENCE_GENERATOR
Suministramos como estmulos para las entradas del bloque los tiempos
acumulados y las fases acumuladas, que luego sern enviadas por el bloque
time_acumulator.
Podemos comprobar que, tras 512 ciclos de reloj (que han salido todo ceros por
que no haba valores de fase en la entrada), se activa la seal new_cycle_out y van
saliendo los distintos valores de fase que se encuentran en la entrada, es decir, van
saliendo los bits de tres en tres del vector de entrada. Recordemos que los valores de
fase eran vectores de 3 bits.
Cada valor va saliendo el nmero de ciclos correspondientes a su tiempo hasta
que se llegan a los 512 ciclos, momento en que se activar la seal new_cycle_out y
comenzar el ciclo de nuevo.
113
Para poder apreciar que realmente cada valor de fase sale durante el tiempo que
le corresponde, aadimos en la siguiente grfica unos cursores, donde se puede ver el
tiempo transcurrido con cada valor de fase. En este caso, trabajamos con un reloj de 20
ns. As, por ejemplo, tac1=8 que sern 8*20=160 ns (de 10270 a 10430 ns); tac2=16 ns,
lo que quiere decir que ha aumentado 8 ciclos desde tac1, por tanto sern 160 ns otra
vez (de 10430 a 10590 ns); tac3=23, lo que quiere decir que ha aumentado 7 ciclos
desde la vez anterior, por tanto sern 7*20ns=140 ns(de 10590 a 10730 ns), y as
sucesivamente.
SIMULACIN SIGNAL_GENERATOR
Es de fcil comprobacin visual que, para el valor de fase que entra(un valor de
3 bits), se activan los cuatro transistores de dicha fase segn la tabla antes expuesta.
Inicialmente las fases estn a con valor 111, pues es el valor que indica que se
est en reseteo y que todos los transistores deben de valer 0. Tras el inicio, mandamos
114
tres bancos de valores de fase distintos y para los tres genera inmediata y
adecuadamente los valores de los transistores.
Por ejemplo, en el primer banco de valores, phase1 es 001, con lo cual slo
activa el primer transistor de su fase (T0A), y por ejemplo phase2 es 011 y se
comprueba como, efectivamente, activa los tres primeros transistores de su fase (T0B,
T1B y T2B).
115
SIMULACIN DEAD_TIME
Aadiremos aqu el banco de pruebas llevado a cabo para probar
individualmente el bloque dead_time.
Se puede ver, como tanto para la entrada positiva como para la negativa, genera
el tiempo muerto cuando se produce el flanco de subida en dicha seal de entrada y
nunca cuando es el de bajada. Tal como est diseado el sistema, el tiempo muerto es un
15 % del tiempo de conmutacin.
SIMULACIN OUTPUTS_GENERATOR
Suministramos como estmulos para las entradas del bloque (que sern luego las
las salidas de signal_gnerator): 24 valores de 1 bit, o sea el valor de cuatro transistores
para cada una de las fases que son seis(6*4=24). Adems, las seales globales que
vendrn del programa principal: select_dead_time que, en este caso, est a 0 con lo
que las salidas se obtendrn sin la generacin de tiempos muertos y la seal
enable_outputs que, como se aprecia en la figura, est constantemente a 1, con lo que
las salidas salen en todo momento.
Mostramos en la figura 6.14 los valores de entrada de la simulacin y en la
figura 6.15 los valores de salida.
116
117
118
119
Inverter
FPGA
dc-link
Load
DSPACE
Figura 6.18. Montaje en el laboratorio
120
La figura 6.18 muestra la identificacin de cada uno los bloques de la figura 6.17
en el prototipo del laboratorio.
La figura 6.19 es el circuito de potencia del laboratorio de forma ampliada.
La figura 6.20 muestra la FPGA programada en el presente proyecto con los
adaptadores de 3 V a 5 V necesarios para su conexin con el DSPACE y con el circuito
de potencia.
121
6.20. FPGA con los adaptadores de 3 V a 5 V para el DSPACE y para el circuito de potencia
122
123
124
125
126
127
128
129
130
recursos lgicos.
131
132
Figura A.4. Mitad ("slice'" del bloque lgico interno (CLB) de la familia Spartan II.
133
Realizacin de prototipos.
Circuitos reconfigurables.
134
135
Figura A.7. Etapas del diseo y realizacin de un sistema digital mediante FPGAs
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
REFERENCIAS BIBLIOGRFICAS
173
[11] lvarez Ruz de Ojeda. Luis Jacobo, Diseo digital con lgica programable.
Trculo Edicins. Santiago de Compostela 2004.
[12] lvarez Ruiz de Ojeda Luis Jacobo. Diseo de aplicaciones mediante PLDs y
FPGAs. Trculo Edicins. Santiago de Compostela 2001.
[13] Pardo Carpio. Fernando, VHDL: lenguaje para sntesis y modelado de circuitos
Ra-Ma, Madrid 2004.
[14] Prez Lpez Serafn A., Soto Campos, Enrique., Fernndez Gmez, Santiago.
Diseo de Sistemas Digitales con VHDL. Thomson-Paraninfo. 2002.
[15] http://www.digilentic.com.
[16] http://www.xilinx.com.
[17] Spartan-3 Starter Kit Board User Guide v1.1. UG130. Mayo 2005.
174