Está en la página 1de 91

UNIVERSIDAD POLITÉCNICA DE

CARTAGENA
Escuela Técnica Superior de Ingeniería Industrial

Emulación de convertidores conmutados


DC-DC sobre un microcontrolador de la
familia C2000

TRABAJO FIN DE MÁSTER

MÁSTER UNIVERSITARIO EN INGENIERÍA INDUSTRIAL

Autor: Francisco Pérez García


Director: Jacinto María Jiménez Martínez

Cartagena, a 20 de julio de 2023


Estado del Arte
El uso de la técnica Hardware-in-the-loop (HIL) en el campo de la electrónica de potencia
no es novedoso. Existen múltiples referencias y trabajos anteriores que abordan todos los aspectos
desde el modelado de convertidores y su simulación, hasta la implementación de sistemas de control
para éstos, e incluso técnicas más avanzadas como técnicas de oversampling (sobremuestreo) para
mejorar la precisión en la simulación de sistemas conmutados o la implementación de metodologı́as
de control no lineales, todas ellas con la particularidad de que han sido implementadas en sistemas
embedidos, como en el caso de estudio que se abordará en este trabajo.
A continuación, se comentará brevemente algunos de los aspectos de especial importancia in-
cluidos en un conjunto de artı́culos de investigación puesto que conforman los fundamentos teóricos
sobre los que se asienta el trabajo que se desarrollará más adelante. Posteriormente, se definirá el
caso de estudio del trabajo y se justificará su relevancia.
Castro et al. (2019) llevan a cabo un modelado dinámico de un convertidor DC/DC elevador en
el espacio de estados, destacando que para su implementación en HIL no se considerará su modelo
promediado, sino conmutado entre los dos estados posibles en los que se puede econtrar el conver-
tidor [2]. Realizan una simulación en un sistema embedido, concretamente un mictrocontrolador
de la familia STM32Fx con el fin de comparar los resultados con otros obtenidos mediante el soft-
ware comercial PSIM y con otros extraı́dos del convertidor elevador real en laboratorio para poder
validar finalmente el modelo implementado en HIL experimentalmente.
Yukshova, Sánchez y de Castro (2023) realizan un estudio sobre las técnicas de sobremuestreo
para mejorar la precisión de los convertidores conmutados modelados en HIL, haciendo énfasis en
la sincronización entre el muestreo y la señal PWM que conmuta los estados del convertidor, y los
efectos negativos en cuanto a imprecisiones que provoca no tener presente este fenómeno, entre otros
aspectos [12]. A efectos del caso de estudio que se abordará resultan de gran importancia aspectos
como la sincronización del muestreo, ası́ como las limitaciones fı́sicas en cuanto a frecuencia de
muestreo que limitarán la precisión de los resultados que se obtendrán finalmente.
Rosa et al. (2018) proponen métodos de control no lineales para convertidores de potencia
simulados en HIL en sistemas embedidos. Profundizan en aspectos relevantes acerca del control de
estos sistemas en tiempo real, es por esto que resulta de especial interés para este trabajo [10].
El caso de estudio que se desarrollará en este trabajo será un compendio de distintas técnicas
provistas en algunos de estos artı́culos destacados. Se trata de emular en un microcontrolador de
la familia C2000 de Texas Instruments, concretamente la familia LaunchPad TMS320F28379D, el
modelo conmutado en HIL de un convertidor reductor con el fin de obtener sus estados (corriente
en el inductor y tensión en el condensador) de la forma más precisa que las limitaciones fı́sicas de
este dispositivo nos permita en cuanto a resolución y precisión. Una vez realizado este primer paso,
se procederá a implementar un lazo de control sobre el convertidor y haciendo uso de todas las
prestaciones que nos pueda aportar el mictrocontrolador, para ası́ poder explotar todo el potencial
que nos ofrece una herramienta como HIL en el ámbito educativo y de investigación.
Este trabajo resulta especialmente relevante en este ámbito educativo puesto que trae con sı́
todas las ventajas en cuanto a minimización de costes, agilidad, flexibilidad en el prototipado, entre
muchas otras, que nos ofrece el HIL y la emulación de sistemas dinámicos en tiempo real en un
mictrocontrolador, como es el caso.
El objetivo, finalmente, será el de aprovechar las prestaciones de un sistema embedido de este
tipo y de coste reducido frente a una instalación de electrónica de potencia real para poder ensayar
un convertidor de potencia trabajando con la máxima frecuencia de muestreo que nos permite el
microcontrolador y que resuelve la dificultad y el riesgo que implica poner en marcha una instalación
de estas caracterı́sticas en laboratorio, siendo una solución ideal para el ámbito académico.

i
Hardware-in-the-loop
Hardware-in-the-loop (HIL) es una metodologı́a que nos permite reproducir y emular el com-
portamiento de un sistema dinámico en tiempo real de una forma económica, ágil y más didáctica
desde el punto de vista académico que a través de la realización de pruebas sobre una planta
real [9]. Es por esto que, cada vez más, su uso se está extendiendo no solo en el ámbito eduactivo
y de investigación, donde destaca por su flexibilidad y reducido coste (frente al alto coste de la
infraestructura necesaria), sino en el ámbito profesional, por los mismos motivos.
Esta metodologı́a nos permite emular un sistema en tiempo real, esto es, proveer de un marco
compuesto por Hardware y Software en el que se reproduce de manera precisa su comportamiento,
es por esto que su puesta en marcha tiene cabida en múltiples dispositivos (FPGAs y microcontro-
ladores, entre otros) que son fácilmente configurables y reúnen estos requisitos, ası́ como ser una
solución de bajo coste [8]. Además, HIL ofrece la posibilidad de combinar subsistemas reales, répli-
cas a menor escala de éstos u otros subsistemas y subsistemas simulados en una única emulación en
lazo cerrado, haciendo de ésta técnica una con una amplia versatilidad no solo en la fase de análisis
sino en la validación del modelado realizado y la posibilidad de comparar los resultados obtenidos.
Hardware-in-the-loop es una metodologı́a vigente desde hace décadas, y que surge ante la nece-
sidad de realizar pruebas ágilmente y de bajo coste en industria aeronáutica. Su uso se ha extendido
rápidamente hacia otros campos como la automoción, por los mismos motivos de coste tanto en
infraestructura como de reducción de tiempos en la puesta en marcha. Recientemente, HIL está
cobrando fuerza en el campo de la electrónica de potencia, puesto que reduce al mı́nimo (o eli-
mina, en el mejor de los casos) la necesidad de la infraestructura costosa que se requiere para la
realización de ensayos, pruebas en laboratorio, instalaciones de gran escala, entre otros [2]. Adi-
cionalmente, introduce el uso de simuladores en el proceso de diseño y desarrollo, con todos los
beneficios que conlleva como la posibilidad de realizar prototipado rápido, permitir la concurrencia
en el desarrollo, eliminar el factor de riesgo en su uso, entre otros [9].

ii
Resumen
Este proyecto aborda el estudio y la emulación mediante Hardware-in-the-loop (HIL) en el
microcontrolador TMS320F28379D de la familia C2000 de Texas Instruments de un convertidor
DC-DC reductor con la finalidad de obtener (y posteriormente validar) el modelo en lazo abierto
de este sistema. Se resuelve haciendo un amplio uso de las prestaciones que este dispositivo nos
ofrece, es por esto que las limitaciones fı́sicas impuestas definirán algunas de las propiedades de los
resultados obtenidos en cuanto a la frecuencia de muestreo, a la velocidad de cálculo en rutinas de
interrupción y a la precisión en el cálculo y representación de sus variables de estado. Además, se
propone un regulador con el que se cierra el lazo de control de tensión para observar la respuesta del
sistema emulado ante una fuente de perturbación, integrando las dos CPUs disponibles del sistema
entre sı́. Finalmente, se cierra el trabajo con un conjunto de conclusiones extraı́das a partir de los
resultados obtenidos, dando lugar a posibles trabajos futuros basados en la emulación de sistemas
en tiempo real en el ámbito académico a través de HIL.

Abstract
In this project we intend to study and carry out a real-time emulation of a DC-DC buck converter
based on Hardware-in-the-loop (HIL) technique in TMS320F28379D microcontroller from Texas
Instrument’s C200 family, as well as to validate the proposed open-loop model of this particular
system. It is solved by making an extensive use of the features that this device offers us, thus, the
physical limitations of this device will be heavily present in the results obtained in terms of sampling
frequency limitations, calculation speed in interrupt service routines and overall precision in the
representation of the state variables obtained. Furthermore, a compensator is proposed through
which the loop of voltage control is closed, with the intention of observing the system’s response to
disturbances, made possible by integrating both available CPUs. Finally, the project is concluded
with a set of conclusions drawn from the obtained results, prompting possible topics for future
works based on the real-time emulation of dynamic systems in an academic scope through HIL.

iii
Objetivos
El caso de estudio que se desarrollará en este trabajo será, en primer lugar, la emulación en un
microcontrolador de la familia C2000 de Texas Instruments, concretamente la familia LaunchPad
TMS320F28379D, el modelo conmutado en HIL de un convertidor DC/DC reductor con el fin de
obtener sus estados (corriente en el inductor y tensión en el condensador) de la forma más precisa
que las limitaciones fı́sicas de este dispositivo nos permita en cuanto a resolución y precisión. Tras
ello, se procederá a implementar un lazo de control sobre la tensión de salida del convertidor
haciendo uso de todas las prestaciones que ofrece el microcontrolador.
Con el cumplimiento de estos objetivos se procederá, finalmente, a analizar de una forma precisa
los resultados obtenidos, ası́ como proponer algunas ideas o soluciones que podrı́an mejorarlos,
formando esto parte también de los objetivos del trabajo que se propone.

Estructura del trabajo


Para la realización de los objetivos planteados se propone la siguiente estructura desglosada en
capı́tulos:
Se dedicará un primer capı́tulo de introducción para describir cada uno de los objetivos que com-
ponen este trabajo, y que sirva como adelanto de los capı́tulos que le preceden y que versan sobre
todo aquello relacionado para lograr los objetivos finalmente.
A continuación, se dedica un segundo capı́tulo para comentar todo aquello relativo a los mate-
riales y métodos empleados; es decir, al microcontrolador que se va a emplear para la emulación
del conjunto; desde sus caracterı́sticas a comparativas con otros ya existentes, ası́ como los periféri-
cos que incluye, ası́ como una descripción del software empleado para llevar a cabo la emulación
propuesta.
En tercer lugar, se destinará un capı́tulo para mostrar los resultados y derivar, a partir de éstos,
posibles medidas de mejora acompañados de un análisis en profundidad relativo a las limitaciones
de los recursos de los que se ha dispuesto para la realización del trabajo de una forma justificada.
Además, se realizará una validación del modelo del convertidor simulado en base a los resultados
obtenidos a través del software comercial MATLAB.
Finalmente, se reserva un último capı́tulo para aunar todos los resultados obtenidos en el trabajo
y comentar, a modo de conclusión general, todos los aspectos reseñables encontrados en este trabajo,
ı́ntimamente ligados a las prestaciones que nos ofrece el microcontrolador sobre el que se realiza.

iv
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000

Índice

1. Capı́tulo 1. Introducción. 5
1.1. Definición del problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Desafı́os de la simulación en tiempo real en electrónica de potencia. . . . . . . . . . . 5
1.3. Convertidor DC-DC reductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Modelo conmutado del convertidor reductor. . . . . . . . . . . . . . . . . . . 7
1.3.2. Implementación en un sistema digital. . . . . . . . . . . . . . . . . . . . . . . 8
1.3.3. Modelo conmutado del convertidor elevador. . . . . . . . . . . . . . . . . . . . 9
1.3.4. Modelo conmutado del convertidor reductor-elevador. . . . . . . . . . . . . . 11
1.4. Control de tensión sobre el convertidor reductor. Lazo cerrado. . . . . . . . . . . . . 12

2. Capı́tulo 2. Materiales y métodos. 19


2.1. Preámbulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. Microcontrolador TMS320F28379D. . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1. Generalidades y análisis comparativo. . . . . . . . . . . . . . . . . . . . . . . 19
2.2.2. Modelo de Programación. Bit-Field Model. . . . . . . . . . . . . . . . . . . . 24
2.2.3. Periféricos y sus prestaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.4. Gestión de las interrupciones en un microcontrolador. . . . . . . . . . . . . . 26
2.3. Periféricos empleados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.1. Módulo ePWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2. Módulo ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3.3. Módulo DAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.4. Limitaciones fı́sicas impuestas por el DAC. . . . . . . . . . . . . . . . . . . . 38
2.3.5. Módulo CpuTimer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.6. Gestión de las interrupciones. PIE. . . . . . . . . . . . . . . . . . . . . . . . . 39
2.4. Asignación de periféricos en distintas CPUs. . . . . . . . . . . . . . . . . . . . . . . . 40
2.5. Code Composer Studio v10.4.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6. Creación de un proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3. Capı́tulo 3. Resultados. 47
3.1. Preámbulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2. Simulación en lazo abierto. Validación del modelo. . . . . . . . . . . . . . . . . . . . 50
3.2.1. Análisis de los resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.2. Respuesta frente a preturbaciones. . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3. Simulación en lazo cerrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.3.1. Respuesta frente a preturbaciones. . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4. Análisis de tiempos en rutinas de interrupción. . . . . . . . . . . . . . . . . . . . . . 58
3.4.1. Análisis temporal ISR. Tabla de tiempos. . . . . . . . . . . . . . . . . . . . . 58
3.5. Medidas de mejora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4. Conclusiones. 63
4.1. Contribución del trabajo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2. Trabajos futuros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Referencias 65

Anexos 67

1
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000

Índice de figuras
1.1. Circuito eléctrico equivalente del convertidor DC-DC reductor. . . . . . . . . . . . . 7
1.2. Circuito eléctrico del convertidor DC-DC reductor en estado ON. . . . . . . . . . . . 8
1.3. Circuito eléctrico del convertidor DC-DC reductor en estado OFF. . . . . . . . . . . 8
1.4. Circuito eléctrico del convertidor DC-DC elevador. . . . . . . . . . . . . . . . . . . . 9
1.5. Circuito eléctrico del convertidor DC-DC elevador en estado ON. . . . . . . . . . . . 10
1.6. Circuito eléctrico del convertidor DC-DC elevador en estado OFF. . . . . . . . . . . 10
1.7. Circuito eléctrico del convertidor DC-DC reductor-elevador. . . . . . . . . . . . . . . 11
1.8. Circuito eléctrico del convertidor DC-DC reductor-elevador en estado ON. . . . . . . 11
1.9. Circuito eléctrico del convertidor DC-DC reductor-elevador en estado OFF. . . . . . 12
1.10. Esquema del control feedback para la tensión del convertidor. . . . . . . . . . . . . . 14
1.11. Diagrama de bode del sistema en lazo cerrado con la red de adelanto de fase. . . . . 16
2.1. Microcontrolador TMS320F28379D LaunchPad. . . . . . . . . . . . . . . . . . . . . . 20
2.2. Mapa de situación de los MCUs de la familia C2000. . . . . . . . . . . . . . . . . . . 20
2.3. Comparativa entre F2807x, F2833xS y F2837xD. . . . . . . . . . . . . . . . . . . . . 21
2.4. Estructura en diagrama de bloques F2837xD. . . . . . . . . . . . . . . . . . . . . . . 23
2.5. Pin map F28379D LaunchPad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6. Registro TCR de CpuTimer0Regs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.7. Diagrama de interrupciones de F28379D LaunchPad. . . . . . . . . . . . . . . . . . . 27
2.8. Control de interrupciones de F28379D LaunchPad. . . . . . . . . . . . . . . . . . . . 28
2.9. Tabla de vectores de interrupción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.10. Registro Time-base Control (TBCTL). . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.11. Registro Action Qualifier Control A (AQCTLA). . . . . . . . . . . . . . . . . . . . . 31
2.12. Instantes de muestreo para el control de tensión. . . . . . . . . . . . . . . . . . . . . 32
2.13. Registro Event Trigger Selection (ETSEL). . . . . . . . . . . . . . . . . . . . . . . . 33
2.14. Registro Event Trigger Pre-Scale (ETPS). . . . . . . . . . . . . . . . . . . . . . . . . 33
2.15. Diagrama de bloques del ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.16. Registro SOC0 Control (SOC0CTL). . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.17. Registro de selección de interrupciones 1 y 2 del ADC (ADCINTSEL1N2). . . . . . . 35
2.18. Diagrama de bloques del DAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.19. Registro de control del DAC (DACCTL). . . . . . . . . . . . . . . . . . . . . . . . . 37
2.20. Composición del tiempo de establecimiento del DAC. . . . . . . . . . . . . . . . . . . 38
2.21. Hoja de fabricante del DAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.22. Esquema de reparto de periféricos en CPU1 y CPU2. . . . . . . . . . . . . . . . . . . 40
2.23. Entorno de programación en CCS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.24. Árbol del proyecto creado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.25. Propiedades del proyecto. Dirección de ficheros fuente y cabecera en Include options. 43
2.26. Propiedades del proyecto. Sı́mbolos predefinidos. . . . . . . . . . . . . . . . . . . . . 44
3.1. Flujograma del programa main realizado en CPU1. . . . . . . . . . . . . . . . . . . . 47
3.2. Flujograma de la rutina de interrupción realizado en CPU1. . . . . . . . . . . . . . . 48
3.3. Flujograma del programa main realizado en CPU2. . . . . . . . . . . . . . . . . . . . 49
3.4. Flujograma de la rutina de interrupción realizado en CPU2. . . . . . . . . . . . . . . 49
3.5. Esquema de conexiones para la emulación y control de tensión del convertidor re-
ductor en F28379D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.6. Modelo empleado para la emulación (F28379D) y simulación en software comercial
del convertidor reductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.7. Simulación en lazo abierto. Variables de estado del convertidor. TMS320F28379D. . 51

2
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000

3.8. Simulación en lazo abierto. Variables de estado del convertidor. MATLAB. . . . . . . 52


3.9. Tensión en el condensador. Simulación en LTSpice. . . . . . . . . . . . . . . . . . . . 52
3.10. Corriente en el inductor. Simulación en LTSpice. . . . . . . . . . . . . . . . . . . . . 52
3.11. Respuesta ante perturbación sobre la tensión de alimentación en lazo abierto. . . . . 54
3.12. Respuesta ante perturbación sobre la tensión de alimentación en lazo abierto. Simu-
lación en LTSpice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.13. Simulación en lazo cerrado. Variación en la tensión de consigna. . . . . . . . . . . . . 56
3.14. Simulación en lazo cerrado. Perturbación sobre la tensión de alimentación. . . . . . . 57
3.15. Esquema general de procesos en la rutina de interrupción. . . . . . . . . . . . . . . . 59
3.16. Cronograma por procesos en la rutina de interrupción. . . . . . . . . . . . . . . . . . 60
3.17. Cronograma optimizado de la rutina de interrupción. . . . . . . . . . . . . . . . . . . 62

3
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

1. Capı́tulo 1. Introducción.
1.1. Definición del problema.
El problema que se aborda en este trabajo es la emulación de un convertidor DC-DC reductor
mediante la técnica HIL, en el microcontrolador TMS320F28379D de TI. Para realizar la emulación
y poder representar las variables de estado del convertidor (corriente en el inductor y tensión en el
condensador) se hace necesario estudiar previamente el modelo del convertidor reductor y describir
cómo llevarlo desde su definición en ecuaciones diferenciales a su implementación en un sistema de
este tipo, digital, mediante una discretización apropiada.
Tras el estudio y descripción del convertidor DC-DC reductor como sistema, se persigue ob-
tener visualmente en un osciloscopio las señales de la corriente en el inductor y la tensión en el
condensador.
La emulación consistirá en programar en el microcontrolador las ecuaciones diferenciales dis-
cretizadas del convertidor reductor, y, con una señal de ciclo de trabajo generada internamente
por el mismo microcontrolador, establecer dentro de éste todo aquello necesario para obtener de
forma simulada las variables eléctricas de estado del sistema propuesto. Una vez obtenidas, se pre-
tende visualizarlas en un osciloscopio y en tiempo real, y ası́ acercarse lo máximo posible a una
simulación realizada sobre un convertidor DC-DC reductor real, conectado a una alimentación y
controlado mediante una señal PWM externa generada por un equipo de control ajeno al converti-
dor, y mostrando en un osciloscopio la evolución de sus estados. Como se realizarı́a tı́picamente en
un laboratorio pero siendo ésta una solución de bajo coste y sin riesgo de dañado de dispositivos y
equipo electrónico de alto coste.
Finalmente, para cerrar el lazo sobre el control de la tensión de salida, se dedicará un apartado
(en este mismo capı́tulo) para el análisis del regulador digital que se implementará con el fin de
controlar esta variable de estado. Se persigue, además, la emulación del lazo cerrado ante la acción
de una perturbación [7] sobre la tensión de alimentación y sobre la carga del convertidor para poder
observar el control de la tensión en tiempo real y para las condiciones del regulador previamente
diseñado.

1.2. Desafı́os de la simulación en tiempo real en electrónica de potencia.


La simulación en tiempo real tiene restricciones estrictas de tiempo en el cálculo de modelos [1].
Las caracterı́sticas de conmutación de alta frecuencia de los convertidores electrónicos de potencia
hacen que el tiempo de cálculo disponible sea muy corto, en el rango de decenas de nanosegundos a
varios microsegundos. Por lo tanto, la carga de trabajo computacional debe ser limitada a un nivel
relativamente bajo, lo que significa que la escala de la topologı́a, la complejidad del modelo y el
número de interruptores están muy restringidos en la simulación en tiempo real. Para lograrlo, se
debe lidiar con los siguientes aspectos, conformando éstos un conjunto de desafı́os a la simulación
en tiempo real en electrónica de potencia:

1. Aumentar la precisión en el modelado.


Debido al tiempo de cómputo estrictamente limitado, no es posible utilizar un modelo alta-
mente complejo en la simulación en tiempo real, y esto, al mismo tiempo, dificulta los intentos
de mejorar la precisión de la simulación. Por ejemplo, la simulación para ciertos modelos puede
requerir un simulación de conjuntos de ecuaciones no lineales, más precisas pero más costosas
computacionalmente, y ésta, al aumentar significativamente la carga computacional puede su-
poner un impedimento fı́sico a la simulación en tiempo real. Un modelo más detallado no solo

5
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

mejorarı́a la precisión de la simulación, sino que no darı́a lugar a posibles comportamientos


inestables al momento de realizarse.

2. Reducción del paso de simulación.


Un intervalo de tiempo de simulación más corto resultará en un menor error de discretiza-
ción numérica. Además, con la popularización de los dispositivos de banda prohibida ancha
(WBG), la frecuencia de conmutación se vuelve mucho más alta que la de los dispositivos
basados en silicio. La reducción del intervalo de tiempo de simulación es imperativa para
una modelización precisa de los dispositivos WBG. Sin embargo, un intervalo de tiempo de
simulación más corto aumenta la restricción temporal en el cálculo del modelo, lo que puede
sacrificar la precisión de la modelización del sistema en cuestión.

3. Imprecisiones debidas a conexionado e interfaz en la simulación en HIL.


La simulación en tiempo real HIL introduce latencias artificiales en lugares donde no deberı́an
exisitir. Por ejemplo, para el caso de un convertidor DC-DC reductor, el sistema real no
introduce latencias en la adquisición de las variables de estado para determinar sus estados
futuros, mientras que en la simulación se realiza de forma imperativa y es debido al proceso
de modelización del sistema, el cual es inevitable. Por un lado, la simulación en tiempo real
se realiza en tiempo discreto y es natural que el modelo en tiempo real tenga un retardo
para muestrear las señales de entrada. Por otro lado, la entrada y salida de la simulación
en tiempo real requieren tiempo para completar la conversión de señales o amplificación
de potencia entre los dispositivos virtuales y fı́sicos. El retardo reducirá la precisión de los
resultados de la simulación en tiempo real, incluso poniendo en riesgo la estabilidad de la
simulación HIL.

4. Elección y/o adecuación óptima del sistema hardware para la simulación en HIL.
La elección del hardware para la simulación en tiempo real debe ser meditada, considerando
completamente los requisitos de la aplicación que se pretende implementar. Dado que el tiem-
po de cómputo es crı́tico, se deben considerar considerar todos los aspectos desde las latencias
en las adquisiciones, procesos de conversión, y demás, ası́ como el tiempo de ejecución, la re-
presentación de datos, las comunicaciones de bus, entre otros. Además, la implementación del
hardware de simulación en tiempo real también puede variar en cuanto a la metodologı́a de
modelado y el algoritmo de resolución numérica que vendrá especificado por el fabricante.
Los diseños tienden a ser personalizados para aplicaciones especı́ficas y carecen de generalidad
y versatilidad, siendo ésta una de las grandes ventajas de la emulación en HIL, y que, al
reducirse, se gana en optimización de recursos y tiempo. Al mismo tiempo, existe una gran
demanda de diseños genéricos al tratarse de una emulación en HIL. Es por esto que lograr un
diseño e implementación genéricos de la simulación en tiempo real en términos de modelado,
simulación, estructuras de hardware y entorno de desarrollo es difı́cil de equilibrar entre la
generalidad y el rendimiento. Y, por tanto, conforma uno de los principales desafı́os a la
simulación en tiempo real en electrónica de potencia.

1.3. Convertidor DC-DC reductor.


Un convertidor de potencia es un dispositivo electrónico que se utiliza para transformar la
energı́a eléctrica de un tipo a otro entre una entrada y una salida. Por lo general, los convertidores
de potencia se utilizan para modificar la tensión, la corriente o la frecuencia de la energı́a eléctrica
para adaptarla a las necesidades especı́ficas de un sistema eléctrico.

6
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

Existen varios tipos de convertidores de potencia, que incluyen convertidores de corriente conti-
nua a corriente alterna (DC-CA), convertidores de corriente alterna a corriente continua (CA-DC),
convertidores de corriente alterna a corriente alterna (CA-CA) y convertidores de corriente continua
a corriente continua (DC-DC). Cada tipo de convertidor de potencia tiene sus propias caracterı́sticas
y se utiliza en diferentes aplicaciones, como en la alimentación de motores eléctricos, la regulación
de la energı́a solar y eólica, la carga de baterı́as, entre otras.
Para el propósito de este trabajo, únicamente nos centraremos en convertidores DC-DC. Dentro
de esta tipologı́a de convertidores, existe una clasificación más especı́fica atendiendo a su relación
entre la tensión de salida (Vo ) y la tensión de entrada (Vin ).

1. Se dice convertidor DC-DC reductor si Vo /Vin < 1.

2. Se dice convertidor DC-DC elevador si Vo /Vin > 1.

3. Se dice convertidor DC-DC reductor-elevador si la tensión de salida puede aumentar o dismi-


nuir respecto de la tensión de entrada.

4. Existen otros convertidores que ofrecen una salida DC aislada ante una entrada DC no aislada
(Flyback), u otros de mayor potencia (Forward), que no son el objeto de estudio de ete trabajo.

El control de la relación entre la tensión de salida y la tensión de entrada se regula a través del
ciclo de trabajo del convertidor (d), en modo de conducción continua (MCC), es decir, cuando la
corriente en el inductor es, en todo momento, positiva.
El convertidor DC-DC reductor se puede modelar gráficamente mediante el siguiente circuito
eléctrico equivalente (figura 1.1):

Figura 1.1: Circuito eléctrico equivalente del convertidor DC-DC reductor.

Este circuito presenta dos posibles estados, el primero (ON) en el que el transistor se encuentra
en conducción y el diodo no, puesto que trabajan de forma complementaria; y el segundo (OFF)
en el que la situación es la contraria. La señal de control q(t) será la que alterna entre estos dos
posibles estados, y que es una señal modulada en ancho de pulso, que alterna entre un nivel alto y
un nivel bajo y definido, esencialmente, por su ciclo de trabajo. Es decir, una señal PWM.

1.3.1. Modelo conmutado del convertidor reductor.


Se puede observar cómo se comporta este circuito atendiendo al estado de conmutación en el
que se encuentra (figuras 1.2 y 1.3).
Para el estado ON:

7
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

Figura 1.2: Circuito eléctrico del convertidor DC-DC reductor en estado ON.

En esta configuración, las variables de estado del sistema, definidas como la corriente que circula
por el inductor (iL ) y la tensión almacenada en el condensador (vC ) se pueden expresar según las
ecuaciones 1 y 2.

diL 1 1
= Vin − vC (1)
dt L L
dvC 1 1
= iL − vC (2)
dt C RC
Para el estado OFF:

Figura 1.3: Circuito eléctrico del convertidor DC-DC reductor en estado OFF.

Las variables de estado en este segundo caso vendrán dadaas por las ecuaciones 3 y 4.

diL 1
= − vC (3)
dt L
dvC 1 1
= iL − vC (4)
dt C RC
Siendo la entrada al sistema la tensión de entrada al convertidor (Vin , y considerando esta señal
como continua pero pudiendo variar a trozos en distintos niveles escalonados de tensión. Para este
caso se considera siempre constante).

1.3.2. Implementación en un sistema digital.


Como se mecionaba anteriormente, se pretende emular en un sistema digital, por lo que las ecua-
ciones obtenidas anteriormente (en tiempo continuo) no pueden ser implementadas y comprendidas
por un sistema de éstas caracterı́sticas. Es por esto que se necesita discretizar las ecuaciones.
Para ello únicamente habrá que discretizar las variables continuas en el tiempo y tomarlas
como muestras en instantes discretos, y, por otra parte, discretizar los operadores diferenciales
como incrementos producidos entre dos muestras consecutivas, distantes entre sı́ en un tiempo que

8
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

se denotará como perı́odo de muestreo (Ts ). Cuanto más pequeño sea este tiempo, más fiel será la
respuesta a la de tiempo continuo, y más precisa será, por tanto, la simulación del sistema dinámico
conmutado del convertidor DC-DC reductor.
Se pueden expresar las ecuaciones anteriores según sus ecuaciones en diferencias de la forma:
1. Para el estado ON:
Ts Ts
iL [n] = iL [n − 1] + Vin [n − 1] − vC [n − 1] (5)
L L
Ts Ts
vC [n] = vC [n − 1] + iL [n − 1] − vC [n − 1] (6)
C RC
2. Para el estado OFF:
Ts
iL [n] = iL [n − 1] − vC [n − 1] (7)
L
Ts Ts
vC [n] = vC [n − 1] + iL [n − 1] − vC [n − 1] (8)
C RC
Será en base al valor de la señal de control PWM (que será generada de manera interna en el
microcontrolador) que se decidirá si el convertidor se encuentra en un estado ON o un estado
OFF, y se aplicarán un conjunto de ecuaciones u otro (ecuaciones 5 y 6, o ecuaciones 7 y 8,
respectivamente).
Se han programado estas ecuaciones tratando de optimizar el cómputo sustituyendo operaciones
de división por operaciones de multiplicación por el número inverso. Es por esto que se emplean las
variables de inductancia, capacidad y resistencia del convertidor como inversas, y como argumentos
de la función IQmpy() que nos permite multiplicar dos variables representadas en coma fija.
Además, puesto que basta con almacenar el valor de la variable de estado en una muestra
anterior, se emplean las variables vC1 e iL1 como la tensión y corriente en el instante anterior,
respectivamente; mientras que vC2 e iL2 almacenan el valor de ambas variables de estado en el
instante actual.

1.3.3. Modelo conmutado del convertidor elevador.


El convertidor elevador presenta el siguiente circuito eléctrico equivalente (figura 1.4

Figura 1.4: Circuito eléctrico del convertidor DC-DC elevador.

9
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

Se puede observar cómo se comporta este circuito atendiendo al estado de conmutación en el


que se encuentra (figuras 1.5 y 1.6).
Para el estado ON:

Figura 1.5: Circuito eléctrico del convertidor DC-DC elevador en estado ON.

En esta configuración, las variables de estado del sistema, definidas como la corriente que circula
por el inductor (iL ) y la tensión almacenada en el condensador (vC ) se pueden expresar según las
ecuaciones 9 y 10.

diL 1
= Vin (9)
dt L
dvC 1
=− vC (10)
dt RC
Para el estado OFF:

Figura 1.6: Circuito eléctrico del convertidor DC-DC elevador en estado OFF.

Las variables de estado en este segundo caso vendrán dadaas por las ecuaciones 11 y 12.

diL 1 1
= Vin − vC (11)
dt L L
dvC 1 1
= iL − vC (12)
dt C RC
Para implementar el modelo conmutado en tiempo continuo del convertidor elevador en un
sistema digital únicamente habrá que discretizar las variables continuas en el tiempo y tomarlas
como muestras en instantes discretos, y, por otra parte, discretizar los operadores diferenciales
como incrementos producidos entre dos muestras consecutivas, distantes entre sı́ en un tiempo que
se denotará como perı́odo de muestreo (Ts ), de manera análoga al caso expuesto anteriormente.
Se pueden expresar las ecuaciones anteriores según sus ecuaciones en diferencias de la forma:

10
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

1. Para el estado ON:


Ts Ts
iL [n] = iL [n − 1] + Vin [n − 1] − vC [n − 1] (13)
L L
Ts
vC [n] = vC [n − 1] − vC [n − 1] (14)
RC
2. Para el estado OFF:
Ts Ts
iL [n] = iL [n − 1] + Vin [n − 1] − vC [n − 1] (15)
L L
Ts Ts
vC [n] = vC [n − 1] + iL [n − 1] − vC [n − 1] (16)
C RC

1.3.4. Modelo conmutado del convertidor reductor-elevador.


El convertidor reductor-elevador presenta el siguiente circuito eléctrico equivalente (figura 1.7

Figura 1.7: Circuito eléctrico del convertidor DC-DC reductor-elevador.

Se puede observar cómo se comporta este circuito atendiendo al estado de conmutación en el


que se encuentra (figuras 1.8 y 1.9).
Para el estado ON:

Figura 1.8: Circuito eléctrico del convertidor DC-DC reductor-elevador en estado ON.

En esta configuración, las variables de estado del sistema, definidas como la corriente que circula
por el inductor (iL ) y la tensión almacenada en el condensador (vC ) se pueden expresar según las
ecuaciones 17 y 18.

diL 1
= Vin (17)
dt L

11
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

dvC 1
=− vC (18)
dt RC
Para el estado OFF:

Figura 1.9: Circuito eléctrico del convertidor DC-DC reductor-elevador en estado OFF.

Las variables de estado en este segundo caso vendrán dadaas por las ecuaciones 19 y 20.

diL 1
= − vC (19)
dt L
dvC 1 1
= iL − vC (20)
dt C RC
De forma análoga a los dos casos expuestos anteriormente, se pueden expresar las ecuaciones
anteriores según sus ecuaciones en diferencias de la forma:
1. Para el estado ON:
Ts
iL [n] = iL [n − 1] + Vin [n − 1] (21)
L
Ts
vC [n] = vC [n − 1] − vC [n − 1] (22)
RC
2. Para el estado OFF:
Ts
iL [n] = iL [n − 1] − vC [n − 1] (23)
L
Ts Ts
vC [n] = vC [n − 1] + iL [n − 1] − vC [n − 1] (24)
C RC

1.4. Control de tensión sobre el convertidor reductor. Lazo cerrado.


Una vez introducidos los aspectos necesarios para el modelado del convertidor reductor, se trata
de cerrar el lazo sobre el control de tensión éste. El objetivo, finalmente, será el de controlar la
tensión de salida del convertidor reductor y poder visualizar la acción del controlador sobre la
tensión de salida ante un cambio en la tensión de referencia y ante el efecto de una perturbación
en la tensión de alimentación.
Únicamente se cierra el lazo sobre el control de tensión para el caso del convertidor reductor,
puesto que es el caso más sencillo y, a efectos de este trabajo, el objetivo no está centrado en
explorar técnicas de control en distintos convertidores sino en explorar la emulación de su planta.
Para dar forma al sistema en lazo cerrado, primero se introducirá el esquema básico del control
feedback, con un regulador que aúna una red de adelanto y una red de atraso de fase [3], para
la tensión del convertidor. Se muestra el procedimiento teórico acompañado con un ejemplo a
continuación.

12
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

Erickson [3] describe un procedimiento detallado y justificado para diseñar un controlador en


el dominio de la frecuencia. A continuación se describe una secuencia de instrucciones para llevarlo
a cabo.

1. Definir la función de transferencia en lazo abierto del sistema que se pretende controlar,
incluyendo elementos sensores necesarios para adaptar las escalas de las señales en el lazo. Se
denota como función de transferencia de control a salida, Gvd , puesto que relaciona la salida
en tensión (la magnitud que se pretende controlar) respecto de la acción de control, o ciclo
de trabajo del convertidor.

2. Expresar la ganancia del lazo, incluyendo el controlador, denotada como T , y que presenta la
siguiente expresión:
1
T (s) = Gc (s) Gvd (s)H(s)
KP W M
El objetivo de definir la ganancia del lazo (abierto) se justifica posteriormente, puesto que el
objetivo del diseño del regulador es asegurar un margen de fase (establecido por el diseñador)
localizado en una frecuenca de corte (también escogida por el diseñador). Ésto se puede
observar gráficamente mediante el diagrama de Bode de la función de transferencia en lazo
cerrado, incluyendo el controlador, y compuesta como

Tlc (s) = T /(1 + T )

3. El diseño del compensador de adelanto de fase se realiza ubicando el cero y el polo de su


función de transferencia en una frecuencia tal que asegure un margen de fase deseado a una
frecuencia de corte (fc ) deseada, y por encima de la cual se atenuará cualquier frecuencia. El
margen de fase (MF) deberá ser siempre positivo, y hará que el sistema con el compensador
sea más estable cuanto mayor sea el valor que presente.
La frecuencia de corte se debe escoger como mı́nimo (a modo de criterio de buen diseño) una
década anterior a la frecuencia de conmutación del convertidor (fP W M ) para atenuar con
suficiente margen cualquier armónico a dicha frecuencia.
La ganancia del controlador se escogerá como:
s
fc 1 fz
Gc0 = ( )2
fo Tu0 fp

para asegurar el cruce de la ganancia del sistema en lazo abierto en la frecuencia de corte
establecida. Las frecuencias fz y fp son las del cero y el polo, respectivamente, y se calculan
como: s
1 − sin(M F )
fz = fc ·
1 + sin(M F )
s
1 + sin(M F )
fp = fc ·
1 − sin(M F )

4. se compone la función de transferencia de la red de adelanto de fase como:


s
1+ ωz
Gc (s) = Gc0 · s
1+ ωp

13
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

5. Una vez determinado el controlador básico, se compone la expresión de la función de trans-


ferencia en lazo cerrado del sistema (incluyendo la red de adelanto) y se observa mediante su
diagrama de Bode que presenta las caracterı́sticas deseadas (frecuencia de corte y margen de
fase escogidos).

6. Finalmente, se puede incluir una red de atraso de fase con el objetivo de atenuar las bajas
frecuencias (pudiendo llegar a ser imprescindible en aplicaciones en las que se pueden presentar
armónicos de la tensión de alimentación del convertidor (múltiplos de 50 Hz) y que pueden
alterar la calidad armónica del sistema, o resultar en ineficiencias. Para ello se compone una
red de atraso de fase que atenua aquellas frecuencias inferiores a una década por debajo de
la frecuencia de corte, esto es
1
fL = fc
10
y se añade a la función de transferencia del regulador de adelanto y atraso de fase con un
cero invertido a baja frecuencia como:
s ωL
(1 + ωz ) · (1 + s )
Gc (s) = Gcm · s
(1 + ωp )

El controlador no presenta una modificación en su ganancia al incorporar la red de atraso


de fase, puesto que es únicamente mediante la red de adelanto de fase a través de la cual se
puede ubicar la frecuencia de corte.

Para este ejemplo, se propone un convertidor reductor definido según los siguientes parámetros:

R 3Ω
L 50 µH
C 500 µF
Vin 28 V
fP W M 100 kHz

Figura 1.10: Esquema del control feedback para la tensión del convertidor.

En la figura 3.13a se muestra el esquema del control en lazo cerrado de la tensión de salida
del convertidor reductor. Se dispone de una tensión de referencia de magnitud constante e igual

14
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

a vref = 5V , y se pretende alimentar una carga de 5A, es por esto que se define la ganancia del
sensor de tensión como
vref 1
H(s) = = ,
vo 3
y el ciclo de trabajo requerido viene dado por la solución en estado estacionario del convertidor
vo
d= = 0,536.
vin
La acción de control, en estado estacionario, viene dada por la expresión:

u = d · KP W M

donde KP W M representa la ganancia del modulador PWM, que se escoge como 14 , por lo que

u = 2,14V

La función de transferencia de control a salida en lazo abierto se define como [3]:


vo 1
Gvd (s) = · L
d 1 + s R + s2 LC

pudiendo escribirse en forma normalizada de la forma:


1
Gvd (s) = Gd0 · s
1+ Q o ωo + ( ωso )2

donde
1
fo =√ = 1kHz
2π LC
r
C
Qo = R = 9,5 −→ 19,5dB
L
Gd0 = 28V
La ganancia del lazo se define según la expresión
1
T (s) = Gc (s) Gvd (s)H(s)
KP W M
donde Gc (s) representa la función de transferencia del regulador que se pretende diseñar, y se puede
expresar en forma normalizada [2] como:
1
T (s) = T0 · s
1+ Q o ωo + ( ωso )2

donde
Hvo
T0 = = 2,33 −→ 7,4dB
dKP W M
1
Se diseñará un regulador en una frecuencia de corte fc = 20 fP W M = 5kHz, y la función de
transferencia en lazo cerrado cuenta con una ganancia en la frecuencia de corte de
fo 2
Tu ( ) = 0,093 −→ −20,6dB,
fc

15
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

por lo que se debe aumentar la ganancia de la función de transferencia para que cruce en 0 dB a
la frecuencia de corte escogida. Se corrige mediante una ganancia de +20,6 dB. Además, la fase en
la frecuencia de corte es, aproximadamente, -180º, lo que implica un margen de fase prácticamente
nulo. Es por esto que se precisa de una red de adelanto de fase (análoga al controlador proporcional-
derivativo, PD).
Se escoge un margen de fase (MF) de 52º (arbitrariamente, pudiendo adoptar cualquier otro
valor, siendo más estable cuanto mayor sea). La red de adelanto de fase está compuesta por un polo
y un cero situados a frecuencias definidas en función del MF escogido. Su función de transferencia
viene dada por la expresión:
1 + ωsz
Gc (s) = Gc0 ·
1 + ωsp
donde s
1 − sin(M F )
fz = fc · = 1,7kHz
1 + sin(M F )
s
1 + sin(M F )
fp = fc · = 14,5kHz
1 − sin(M F )
s
fc 2 1 fz
Gc0 =( ) = 3,7 −→ 11,3dB
fo Tu0 fp
Se puede comprobar que, una vez incorporada la red de adelanto de fase, se corrige el margen de
fase al previamente definido en la frecuencia de corte de 5 kHz (figura 1.11).

Figura 1.11: Diagrama de bode del sistema en lazo cerrado con la red de adelanto de fase.

Para el diseño del controlador de atraso de fase se determinan la frecuencia del cero invertido que
lo compone, puesto que la red de adelanto de fase ya ha introducido un cero y un polo, aumentando
el orden del sistema.
La función de transferencia del regulador, integrando la red de adelanto y atraso de fase, tiene
la forma descrita en el punto 6. La frecuencia fL se escoge como aquella frecuencia por debajo de

16
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 1. Introducción.

la cual se pretende atenuar, es decir, para bajas frecuencias


1
fL = fc = 500Hz
10
y la ganancia del controlador se mantiene, para mantener el margen de fase y frecuencia de corte
en su valor escogido.
La función de transferencia del controlador ya está completamente definida y únicamente queda
discretizarla a partir de cualquier método de discretización (por ejemplo, la transformación Bilineal,
escogiendo el periodo de muestreo apropiado).
Para el ejemplo propuesto, la ecuación en diferencias del controlador, discretizada con un periodo
de muestreo de 10 µs:

u[n] = 1,261 u[n − 1] − 0,2609 u[n − 2] + 1,646 e[n] − 3,108 e[n − 1] + 1,466 e[n − 2]

siendo u[n] el ciclo de trabajo d en cada muestra y e[n − N ] el error del lazo de control en la
muestra N-ésima. Realizado en el Programa para el cálculo del compensador en frecuencia.
MATLAB. En los Anexos del trabajo.
En cuanto a la implementación en el sistema digital, se reservará CPU1 para emular el com-
portamiento de la planta, mientras que CPU2 estará dedicada al control digital de la tensión.

17
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

2. Capı́tulo 2. Materiales y métodos.


2.1. Preámbulo.
Texas Instruments (TI) es una compañı́a estadounidense que ofrece soluciones tecnológicas
avanzadas para una amplia variedad de aplicaciones en ingenierı́a, destacando en aplicaciones de
electrónica de consumo, en ámbito industrial y de infraestructura crı́tica, entre otras.
Es una compañı́a lı́der en innovación tecnológica, contando con múltiples productos y de dis-
tintos ámbitos en su cartera. No obstante, entre tantos productos, nos centraremos en este capı́tulo
en describir los aspectos más relevantes y en profundidad de los microcontroladores (MCUs) que
ofrece esta compañı́a, que es puntera en el desarrollo de éstos dispositivos.
Los microcontroladores mas populares comercialmente que ofrece TI son:

1. MSP430: El MSP430 es uno de los microcontroladores más populares de TI y se utiliza en


una amplia variedad de aplicaciones, desde sistemas de monitoreo y control de energı́a hasta
dispositivos portátiles y sensores ambientales. Está diseñado para ser de bajo consumo de
energı́a y viene en una amplia variedad de opciones de memoria y velocidad.

2. Tiva C Series: Los microcontroladores Tiva C Series de TI se utilizan en aplicaciones indus-


triales y de control de movimiento. Tienen una amplia variedad de periféricos, incluyendo
controladores de motor y Ethernet, y son capaces de realizar tareas de control en tiempo real
con precisión.

3. C2000: La serie C2000 de microcontroladores de TI está diseñada para su uso en aplicaciones


de control de energı́a, como inversores de energı́a, controladores de motores y sistemas de
carga solar. Estos microcontroladores tienen una amplia variedad de periféricos para control
de motores y comunicaciones, y están diseñados para ser de bajo consumo de energı́a.

4. Sitara: La serie Sitara de TI es una lı́nea de microprocesadores de aplicaciones (MPUs) que


se utilizan en aplicaciones industriales y de Internet de las cosas (IoT). Estos microprocesa-
dores tienen capacidades de procesamiento avanzadas y un amplio conjunto de periféricos,
incluyendo interfaces de comunicación de alta velocidad y controladores de pantalla.

5. Stellaris: Los microcontroladores Stellaris de TI se utilizan en aplicaciones industriales, de


consumo y médicas. Tienen una amplia variedad de periféricos, incluyendo Ethernet, USB y
controladores de pantalla, y están diseñados para ser fáciles de usar y programar.

En general, TI tiene una amplia variedad de microcontroladores y microprocesadores para satisfacer


las necesidades de una amplia variedad de aplicaciones. Los microcontroladores de TI son conocidos
por su alto rendimiento, su facilidad de uso y su capacidad de consumo de energı́a.
En este caso, de entre todos los posibles microcontroladores que ofrece esta compañı́a, para la
realización del trabajo se empleará uno de la familia C2000, concretamente, el microcontrolador
TMS320F28379D LaunchPad. A continuación se describe.

2.2. Microcontrolador TMS320F28379D.


2.2.1. Generalidades y análisis comparativo.
El microcontrolador TMS320F28379D LaunchPad (figura 2.1) se sitúa entre aquellos dispositi-
vos con mayor capacidad operativa en cuanto a prestaciones se refiere, y con un gran margen de
compatibilidad entre distintos dispositivos de la misma familia, puesto que los hay que, debido a

19
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

generaciones (ası́ indicadas por el fabricante [6]) distintas de los periféricos que componen el hard-
ware del microcontrolador puede llegar a hacerlos incompatibles entre sı́.

Figura 2.1: Microcontrolador TMS320F28379D LaunchPad.

Se sitúa dentro de la familia C2000 de TI tal y como se muestra en la figura 2.2, enmarcado
en la generación 3 de periféricos, y con una capacidad operativa muy destacable por su potencia y
prestaciones.

Figura 2.2: Mapa de situación de los MCUs de la familia C2000.

Entre los tres microcontroladores alineados dentro de la generación 3, se puede realizar un análi-
sis comparativo en función de las prestaciones de estos 3, y ası́ poder valorar al microcontrolador
con el que se plantea este trabajo de una forma más rigurosa (figura 2.3).
Se puede comprobar que el microcontrolador F2837xD (designación genérica para el microcon-
trolador con el que se abordará este trabajo) supera con creces las prestaciones de los otros dos;
tanto en memoria flash y RAM, como en la velocidad del reloj de la CPU (en este caso Dual-Core),
como en la existencia de algunos periféricos esenciales para la realización del trabajo (DAC, con-
vertidor digital-analógico), ası́ como, fundamentalmente, en la existencia de dos CPUs operativas
y con capacidad de comunicación entre sı́.
El microcontrolador incluye múltiples periféricos. No se hará uso de todos ellos para aborar el
caso de estudio que se propone, sin embargo, cabe destacar la amplia capacidad de la que dotan a
este sistema.

20
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.3: Comparativa entre F2807x, F2833xS y F2837xD.

En cuanto a la arquitectura de este microcontrolador, no difiere esencialmente entre otros de la


familia C2000. Esto es ası́ gracias a que el fabricante emplea el mismo silicio, o core para ensamblar
los microcontroladores de esta familia, y en cuanto al hardware, solo difieren de sı́ con pequeños
avances que se resumen en mejoras de prestaciones en la mayorı́a de los casos de cara a los periféricos
que lo componen.
La principal diferencia que ofrece el microcontrolador F28379D es, precisamente, poder contar
con dos CPUs que pueden operar de forma concurrente y plenamente autónoma, lo que repercu-
te en múltiples ventajas en términos de rendimiento, flexibilidad y fiabilidad. A continuación se
mencionan algunas de ellas:

1. Mayor capacidad de procesamiento: Al tener más de una CPU en un microcontrolador, se


pueden realizar varias tareas de manera simultánea y paralela, lo que puede aumentar sig-
nificativamente la capacidad de procesamiento del sistema. Esto es especialmente útil en
aplicaciones de control en tiempo real que requieren un alto rendimiento y capacidad de
procesamiento.

2. Separación de tareas: Al tener múltiples CPUs, se pueden separar las tareas crı́ticas en dife-
rentes CPUs para mejorar la eficiencia y fiabilidad del sistema.

3. Flexibilidad y escalabilidad: Una arquitectura de múltiples CPUs proporciona una gran flexi-
bilidad en la programación del sistema, lo que permite la implementación de diversas funciones
y caracterı́sticas en el sistema.

4. Reducción de latencia: Al tener múltiples CPUs, se pueden reducir las latencias asociadas
con la comunicación y el procesamiento de datos. Esto es especialmente útil en aplicaciones
de control en tiempo real que requieren respuestas rápidas y precisas (ı́ntimamente ligado al
punto 1).

5. Reducción de la carga de trabajo: Al distribuir las tareas en diferentes CPUs, se puede re-
ducir la carga de trabajo de cada CPU individual, lo que puede mejorar la vida útil del
microcontrolador y aumentar la fiabilidad del sistema.

21
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Pese a contar con una arquitectura similar a otros microcontroladores de la familia C2000, a con-
tinuación se describe cómo está compuesto.
Otras caracterı́sticas destacables de este microcontrolador son, entre otras, que incorpora en la
ALU (unidad aritmética lógica) un módulo que permite trabajar en coma flotante (módulo FPU,
Floating-Point Unit, en inglés) siendo este dispositivo de coma fija. Además, incorpora métodos de
acceso a la memoria sin necesidad de pasar por la CPU, es decir, aliviando la carga sobre ésta (a
través del DMA, Direct Memory Access, en inglés).
Finalmente, resulta de especial interés comentar un módulo hardware (por lo que nos ofrece
la posibilidad de incorporarlo en nuestro poryecto y que trabaje de forma paralela a la CPU)
dedicado especı́ficamente a la implementación de leyes de control y demás operaciones destinadas
a ese propósito. Éste módulo es el acelerador de leyes de control (o CLA, Control Law Accelerator,
en inglés), que resulta especialmente útil en aplicaciones en las que el tiempo real es crı́tico.
En la figura 2.4 se puede observar la estructura en forma de diagrama de bloques que detalla el
fabricante que compone el microcontrolador Dual-Core F28379D. En ella se puede apreciar en dos
colores distintos (uno para cada CPU), amarillo para CPU1 (la principal) y en verde para CPU2.
Dentro de los bloques que modelan ambas CPUs se puede observar que cuentan con Watchdog
Timer, o Perro Guardián, que monitoriza el estado de la CPU y detiene la ejecución de los programas
en caso de bloqueo; también cuenta con 3 temporizadores internos en la CPU (Timer 0, 1 y 2), y
el PIE, un módulo dedicado a la gestión de interrupciones.
Entre estos dos bloques se puede observar un bloque denotado como IPC, Interprocessor Com-
munication Module, o módulo de comunicación interprocesador. Es un módulo dedicado a la gestión
de la comunicación entre las dos CPUs, con el fin de facilitar el envı́o y recepción de mensajes entre
las unidades centrales de procesamiento. Más adelante en el trabajo será relevante puesto que se
aprovecharán ambas CPUs del microcontrolador con la potencia que nos brindan, y este módulo
de comunicaciones resultará necesario.
Sobre las CPUs se destina un conjunto de bloques para representar la memoria, flash y RAM,
con la que cuenta cada CPU, y, a su lado, los módulos CLA que operan de forma paralela a la
CPU. El color de los buses nos indica qué módulos están conectados entre sı́, y es especialmente
importante puesto que, sabiendo esto, se puede optimizar el flujo de información y aliviar ası́ a la
CPU de la forma más eficiente; es decir, sabiendo que el bus CPU1.CLA1 (en naranja) conecta al
módulo analógico (ADC y DAC) y el marco de periféricos 1 (que incluye los módulos ePWM1-12,
y módulos de captura eCAP1-3) se podrı́a cubrir la necesidad de hardware de una aplicación en la
que se necesite realizar un muestreo a través del ADC, un conjunto de operaciones matemáticas o
de control sobre su resultado (CLA), y una realimentación a través de una señal generada por el
módulo PWM de forma completamente autónoma a la CPU.
En este caso la CPU1 únicamente deberı́a escuchar interrupciones y atenderlas, y todo el trabajo
estarı́a repartido en los distintos módulos que pueden acceder a la memoria a través del módulo
DMA sin necesidad de que la CPU1 intervenga. Y ésta es precisamente una de las principales
ventajas que nos ofrece un microcontrolador como éste, que cuenta con un abanico amplı́simo
en hardware y que alivian a la CPU y permiten ası́ que ésta solo deba cubrir necesidades de
interrupciones, seguridad y monitoreo de la ejecución del programa main.
Tras representar todos los periféricos (con sus conexiones a buses) se observa, en la parte inferior,
un bloque que recoge todas las entradas/salidas de los periféricos, denotado como GPIO MUX. Esto
se debe a que la placa no cuenta con tantos pines como funciones entre todos los periféricos que
incluye, y, por tanto, se debe asignar a cada pin la función que se desee que realice, ya sea tipo E/S
digital, analógica, tipo salida PWM, entre otras.

22
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.4: Estructura en diagrama de bloques F2837xD.

Esto implica que en primer lugar, previo a la labor de programación para cubrir la necesidad de
la aplicación que se desee, es necesario realizar una planificación en forma de layout para organizar
las funciones y periféricos que se necesitarán, qué pines habrá que configurar según su función, y,
finalmente, desarrollar el software que lo haga funcionar de la manera deseada. Para localizar qúe
funciones se pueden atribuir según cada uno de los pines de la placa, el fabricante [6] nos ofrece un
layout de ésta (figura 2.5):

23
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.5: Pin map F28379D LaunchPad.

2.2.2. Modelo de Programación. Bit-Field Model.


El modelo en campo de bits (Bit-Field Model, en inglés) es una técnica de programación en la
que se utilizan campos de bits para representar información en una estructura de datos. En este
modelo, cada campo de bits representa una variable de bits especı́fica en una estructura de datos,
lo que permite un acceso más eficiente y preciso a los datos.
En el modelo en campo de bits, los campos de bits se definen utilizando la sintaxis de la
estructura en lenguajes de programación como C o C++. Cada campo de bits se especifica mediante
una longitud de bits y una posición en la estructura de datos.
El modelo en campo de bits es útil en situaciones en las que se desea minimizar el uso de memoria
y optimizar el acceso a los datos. También puede ser útil en la manipulación de datos de hardware,
como en la programación de dispositivos embebidos, donde el acceso a los bits individuales es
esencial.
En el caso de este trabajo, para programar el microcontrolador se definen los campos de bits
con estructuras en lenguaje C, de tal forma que se puede acceder a cualquier registro de cualquier
módulo o periférico a través de éstos. A modo de ejemplo, para iniciar la cuenta de un temporizador
(Timer0 de la CPU, por ejemplo), escribiremos la siguiente instrucción:

CpuT imer0Regs.T CR.bit.T SS = 0;

El registro con nombre CpuTimer0Regs es, realmente, el que el fabricante [6] denomina como Device
Register, y cuyo nombre de registro es CP U T IM ER REGS, cuya dirección comienza en la zona
de memoria 0x0000 0C00, hasta la dirección 0x0000 0C07 Bajo este registro, la expresión antes
mencionada nos indica que se encuentra dentro del registro TCR. Este registro, como todos los
demás salvo en ciertas excepciones, contiene 16 bits, y según se escriba en unas posiciones u otras
estaremos modficando la funcionalidad del módulo o periférico que estemos programando, en este
caso, el temporizador interno de la CPU. A continuación (figura 2.6) se muestra la estructura del
registro TCR:

24
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.6: Registro TCR de CpuTimer0Regs.

Las cuatro primeras posiciones (0 a 3) son reservadas, ası́ como los bits 6 al 9, 12 y 13. La
quinta posición (bit TSS) tiene permisos de lectura-escritura (RW), asi como todas aquiellas no
reservadas, en este caso. Escribiendo un valor de nivel bajo (0 lógico) en el bit TSS haremos arrancar
la cuenta al temporizador, que funciona incrementando en cada ciclo de reloj del reloj SY SCLK
(a 200 MHz) en uno la cuenta. Es un temporizador de 16 bits, por lo que cuando alcance el valor
de 216 − 1 = 65535 (porque incluye al 0), se desbordará y se reiniciará de forma autónoma. Si se
escribe un nivel alto (1 lógico) en el campo del bit TSS detendremos la cuenta.
En este modelo, cada campo de bits tiene asociada una función especı́fica y que nos permite
modificar de una u otra manera el comportamiento del módulo o periférico que se esté programando.
La forma de programar y configurar los periféricos necesarios para la aplicación que se desee
será a través de instrucciones que presentan esta estrucura, en C, atendiendo a los distintos tipos
de registros para cada uno.

2.2.3. Periféricos y sus prestaciones.


Una de las grandes ventajas que ofrece este microcontrolador es su amplio repertorio de periféri-
cos y que cuentan, además, con grandes prestaciones. Previo a describir algunos de los periféricos
que incluye este microcontrolador (y que serán empleados para abordar el trabajo) se hace necesario
describir qué es un periférico en éste ámbito.
Un periférico se refiere a cualquier componente integrado en el microcontrolador que no forma
parte del núcleo del procesador y que proporciona alguna funcionalidad adicional. Los periféricos
pueden ser analógicos o digitales, y se utilizan para realizar tareas especı́ficas en una aplicación.
Algunos periféricos comunes que se encuentran en los microcontroladores incluyen convertidores
analógico-digitales (ADCs), convertidores digital-analógicos (DACs), temporizadores, interfaces de
comunicación como UART, SPI o I2C, controladores de interrupciones (PIE), controladores de
DMA, módulos de control PWM y de alta resolución (HRPWM), módulos de captura (CAP) y
comparación de señales (CMPSS) y módulos de detección de fallos de alimentación, entre muchos
otros.
Cada periférico tiene su propio conjunto de registros y configuraciones que se pueden utilizar
para controlar y configurar su funcionamiento. Es tarea del programador o el diseñador de la
aplicación acceder a estos registros y configuraciones a través del código de programación del
microcontrolador, en este caso a través de las instrucciones en C previamente comentadas, para
controlar el comportamiento del periférico.
En resumen, los periféricos en el ámbito de los microcontroladores son componentes integrados
que proporcionan funcionalidades adicionales para la realización de tareas especı́ficas en una apli-
cación, y que se controlan mediante el código de programación del microcontrolador en cuestión,
en términos generales.
Ahondando en las prestaciones más reseñables de algunos de los periféricos que incluye el
F28379D LaunchPad, se podrı́a destacar:

1. Núcleo de procesador DSP de 32 bits: Este microcontrolador cuenta con un potente núcleo

25
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

de procesador de señal digital (DSP) de 32 bits que se puede ejecutar a una frecuencia de
reloj de hasta 200 MHz.

2. Convertidores analógico-digitales (ADC): El TMS320F28379D cuenta con hasta 22 canales


de ADC de 12 bits de alta resolución con un tiempo de conversión de hasta 1.5 µs. También
incluye un módulo de muestreo y retención (Sample & Hold, en inglés) de alta velocidad.

3. Temporizadores avanzados: Este microcontrolador cuenta con múltiples temporizadores avan-


zados, incluyendo temporizadores de captura de eventos, temporizadores de captura de tiem-
po y temporizadores de salida de pulsos. Estos temporizadores pueden ser configurados para
proporcionar una amplia variedad de funciones de temporización.

4. Módulo de control de PWM (modulación por ancho de pulso): El TMS320F28379D cuenta


con un módulo de control de PWM de alta resolución (16 bits) que puede ser utilizado para
controlar la velocidad y la dirección de los motores, ası́ como para controlar la potencia
de los inversores. Configurable en modo de cuenta simétrico o asimétrico, con capacidad de
configuración de eventos de interrupción, y demás.

5. Interfaz de comunicación: Este microcontrolador cuenta con múltiples interfaces de comuni-


cación, incluyendo interfaces de serie (UART, SPI, I2C), interfaces de red (Ethernet MAC)
y un controlador de host USB.

6. Memoria integrada: El TMS320F28379D cuenta con 1 MB de memoria flash y 256 KB de


RAM.

7. Otros periféricos: Este microcontrolador también incluye otros periféricos útiles, como un
módulo de detección de fallos de alimentación, un controlador de interrupción de alta veloci-
dad, un controlador de DMA y un módulo de detección de eventos externos.

Las caracterı́sticas técnicas y la forma de configurar cada uno de los periféricos que se emplearán
en este trabajo se detallarán en el capı́tulo pertinente en el que se introduzcan, junto a la razón de
su necesidad y la solución que ofrecen.

2.2.4. Gestión de las interrupciones en un microcontrolador.


Se reserva este apartado para comentar, no sólo el funcionamiento y la definición de una in-
terrupción en el ámbito de los microcontroladores, sino también para describir el funcionamiento
lógico de cómo se atienden interrupciones, cómo se organizan, cómo se gestionan y, en especial,
por qué pueden ser útiles para el trabajo que se propone. Comenzaremos definiendo qué es una
interrupción.
Una interrupción en un microcontrolador es una señal que se genera por un evento externo
o interno al sistema, que suspende temporalmente la ejecución normal del programa principal y
redirige el control del procesador a una rutina de interrupción especı́fica.
Cuando se produce una interrupción, el microcontrolador interrumpe la tarea que se está eje-
cutando en ese momento y guarda temporalmente el estado actual del procesador en una pila de
interrupción. Luego, ejecuta la rutina de interrupción asociada al evento que generó la interrupción.
Una vez que la rutina de interrupción se completa, el microcontrolador restaura el estado ante-
rior del procesador a partir de la pila de interrupción y reanuda la tarea que se estaba ejecutando
antes de que se produjera la interrupción.

26
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Las interrupciones son útiles en muchos casos, como en sistemas de tiempo real donde es necesa-
rio atender eventos en tiempo real o en sistemas que necesitan monitorear constantemente sensores
o periféricos externos.
El microcontrolador F28379D gestiona las interrupciones a través de un periférico llamado
PIE (Peripheral Interrupt Expansion, en inglés, o Periférico de Expansión de Interrupciones). El
objetivo de este periférico será el de agrupar todas las lı́neas de interrupciones (caminos por los que
se transmiten los eventos de interrupción desde una fuente externa o interna, o desde periféricos)
en 16, de las cuales dos de ellas están reservadas para el RESET del microcontrolador y para una
interrupción no enmascarable o NMI (Non-Maskable Interrupt), respectivamente.
Una NMI es una interrupción que no se puede gestionar (permitir o denegar) mediante el
PIE, es decir, que siempre que se produzca llegará a la CPU y alterará la ejecución de ésta, ası́
como el RESET, y las interrpciones del Timer1 y Timer2 (ambos de la CPU) TINT1 y TINT2,
respectivamente. En la figura 2.7 se puede apreciar en un diagrama la agrupación de interrupciones
en el microcontrolador.

Figura 2.7: Diagrama de interrupciones de F28379D LaunchPad.

La necesidad de un periférico como el PIE se debe, principalmente, a que hay más eventos
que pueden producir interrupciones (tanto internos como externos) que lı́neas de interrupción que
llegan a la CPU, es por esto que la misión del PIE es agrupar en paquetes de 16 todas las posibles
fuentes de interrupción (192) y concentrarlas en las 12 lı́neas disponibles.
Una vez se produce una interrupción, para permitir (o denegar) que ésta llegue a la CPU y
altere la ejecución normal del programa principal, se configurarán unos registros de seguridad que
permitan este hecho. Se puede apreciar en la figura 2.8.

27
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.8: Control de interrupciones de F28379D LaunchPad.

Cuando un evento de interrupción se produce, para permitir que pueda llegar a la CPU (28x
Core) debe encontrarse con todos los interruptores cerrados, tanto en el PIE, modelados como
PIEIFR (Flag de Interrupción), y PIEIER (Enable de Interrupción), y configurables a partir de los
registros con el mismo nombre, como en la CPU, IFR, IER e INTM. Cuando todos los interruptores
están cerrados es cuando se puede atender una interrupción mediante la ejecución de una rutina de
interrupción alojada en una dirección definida en memoria y que, previamente, debe estar marcada
por un vector de interrupción.
Un vector de interrupción es un elemento predefinido por el fabricante, y que apunta a una
dirección de memoria donde se aloja la rutina de interrupción asociada a un evento de interrupción
de la misma clase. Es por esto que debe haber un vector de interrupción para cada posible evento,
y que debe contar con orden de prioridad en caso de producirse más de uno simultáneamente y
sobre distintas o la misma lı́nea de interrupción. Toda esta información se recoge en la figura 2.9,
donde se muestran clasificados en una tabla ordenada los vectores de interrupción.

28
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.9: Tabla de vectores de interrupción.

La necesidad del empleo de interrupciones en un sistema de estas caracterı́sticas y en el que se


pretende resolver un problema como el que es objeto de este trabajo es directo, y se puede ilustrar
fácilmente con un ejemplo de aplicación directa.
Supongamos que se pretende monitorizar una señal analógica y variable en el tiempo. Para ello,
se puede hacer uso del subsistema analógico que incorpora este microcontrolador, concretamente,
el módulo ADC. Para poder medir la señal externa se podrı́a realizar un pequeño programa que
entre en un bucle infinito en estado de espera, donde la CPU no consume recursos y únicamente
se encuentra a la espera de la llegada de un evento de interrupción, que se podrı́a configurar desde
el módulo ADC cada vez que se produzca la orden de muestreo mediante un evento externo (a
través de un pulsador, o cualquier otra señal externa) o un evento interno (desbordamiento de un
temporizador, flanco ascendente/descendente de PWM, entre otras).
Una vez el ADC realiza el muestreo sobre la señal analógica que se pretende medir, éste mandará
un evento de interrupción (ADCA 1) sobre la lı́nea que tiene asignada (INT1), véase la figura 2.9.
Sólo podrá llegar a la CPU si los registros PIEIFR, PIEIER, IER, IFR e INTM ası́ lo permiten; y,
en ese caso, la CPU pasará de estar en espera de interrupciones a ejecutar el código provisto en la
rutina de interrupción a la que apunta el vector de interrupciones correspondiente.
El uso de interrupciones nos ofrece una solución óptima en el uso de recursos de la CPU,
economiza los tiempos y dota a ésta aplicación de mayor seguridad y fiabilidad.

2.3. Periféricos empleados.


En este apartado se describirán en detalle todos los aspectos relativos a los periféricos que se
emplearán para resolver el caso de estudio previamente comentado.
Los periféricos necesarios para dotar al programa de toda la capacidad necesaria son: el módu-
lo ePWM, el módulo ADC, el módulo DAC, el módulo CpuTimer y el PIE. A continuación se
describen.

29
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

2.3.1. Módulo ePWM.


El módulo ePWM, o modulador por ancho de pulso (enhanced Pulse Width Modulator, en
inglés) es un módulo dedicado a la generación de señales PWM. El periférico que incorpora el
microcontrolador F28379D es del tipo IV (tercera generación de periféricos).
Este periférico no es distinto en esencia de un contador de 16 bits avanzado, puesto que para
configurar una señal PWM con unas caracterı́sticas concretas bastará con indicar el valor máximo
de conteo, TBPRD (ası́ ajustaremos la frecuencia PWM), y un valor de comparación, CMP, para
definir el ciclo de trabajo.
Cada módulo ePWM cuenta con dos salidas PWM: EPWMxA y EPWMxB, siendo x el número
que hace referencia al módulo ePWM que se esté empleando, del 1 al 12. Se dice avanzado porque
contempla el desbordamiento del PWM vı́a software, ofrece soluciones para el control de fase relati-
vos a otros módulos PWM, permite el control de tiempos muertos a través de los flancos de subida
y bajada, tiene capacidad para realizar grandes preescalas de la frecuencia de reloj de la CPU,
permite que todos los eventos puedan servir de trigger para las interrupciones en ambas CPUs y
para disparar los SOC (procesos de conversión) de los convertidores analógico-digitales, entre otras.
El primer submódulo que compone este periférico es el Time-base sub-module, cuya función es
ajustar la frecuencia (o perı́odo) de la señal PWM y controlar el modo del contador. El registro
por el cual accederemos a la modificación de éstos parámetros será:

EP wmxRegs.T BCT L

y presenta éste aspecto (figura 2.10 [6]):

Figura 2.10: Registro Time-base Control (TBCTL).

En el campo CTRMODE (2 bits) podremos modificar el modo del contador, en función de


si asignamos el valor 00 (cuenta ascendente), 01 (cuenta descendente), 10 (cuenta ascendente-
descendente) ó 11 (detener el contador).
En los campos HSPCLKDIV o High-speed Clock Divisor (3 bits) y en CLKDIV o Clock Divisor
(también de 3 bits) podremos ajustar el divisor o la preescala de la frecuencia a la que cuenta el
contador, que es la del reloj de la CPU (SYSCLK) a 200 MHz, será necesario modificarlos si se
pretende construir una señal PWM con una frecuencia muy baja (1 kHz, por ejemplo) puesto que
la resolución del propio contador de 16 bits no nos permitirá construirla con precisión.
El segundo submódulo que se empleará será el Action Qualifier sub-module, para definir la forma
en la que se consreuirá la señal PWM. Para ello únicamente deberemos definir bajo qué condiciones
se debe producir el flanco ascendente y descendente, en función de un TBPRD (valor máximo de
conteo) y CMPA/B (valor de comparación intermedio entre 0 y TBPRD), del paso por cero y del
paso por periodo de la señal (1 bit previo al paso por cero). En función de si se emplea la salida
EPWMA/B, se configura el registro AQCTLA/B, respectivamente. En la figura 2.11 [6] se muestra
el registro
EP wmxRegs.AQCT LA

30
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.11: Registro Action Qualifier Control A (AQCTLA).

Si se pretende que la señal PWM generada presente un flanco ascendente cuando el contador
alcance el valor de CMPA, y que presente un flanco descendente en el paso por cero, será necesario
escribir la siguiente instrucción [6]:

EP wm1Regs.AQCT LA.bit.CAU = AQ SET ;

EP wm1Regs.AQCT LA.bit.ZRO = AQ CLEAR;


Es por ésto que, mediante el valor de CMPA/B se puede controlar el ciclo de trabajo de la señal
PWM. Para asignar un valor a CMPA bastará con escribir:

EP wm1Regs.CM P A.bit.CM P A = CMPA;

Mientras que para asignar un valor al TBPRD:

EP wm1Regs.T BP RD = TBPRD;

A modo de ejemplo, para generar una señal PWM de frecuencia fP M W = 20kHz y con un ciclo
de trabajo d = 0,5, se calculará el valor de TBPRD en modo de conteo asimétrico (pudiendo ser
simétrico también) como [6]:
fT BCLK
T BP RD = −1
fP W M · n
Siendo n = CLKDIV ·HSP CLKDIV , fT BCLK = 200M Hz y fP W M la frecuencia PWM deseada.
Para calcular el valor de CMPA [6]:

CM P A = (1 − d) · (T BP RD + 1) − 1

Proceso de muestreo para el control de tensión. Sincronización del módulo ePWM.


Para llevar a cabo el objetivo del control en lazo cerrado, que es anular el error del sistema, se debe
hacer un análisis particular sobre el muestreo de la variable de proceso que se pretende controlar,
en este caso, la tensión de salida del convertidor.
El instante en el que se produce el muestreo es crı́tico, y se puede ilustrar de una manera intuitiva
para demostrarlo, tal y como se muestra en la figura 2.12, extraı́da a partir del Programa para la
simulación en lazo abierto del convertidor DC-DC reductor. MATLAB. En los Anexos
del trabajo, bajo los parámetros recogidos en el cuadro 1.

31
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.12: Instantes de muestreo para el control de tensión.

Entrada Valor
R 1Ω
L 100 µH
C 100 µF
Vin 1V
fP W M 10 kHz
fs 500 kHz

Cuadro 1: Parámetros del convertidor para realizar la simulación mostrada en la figura 2.12.

Dado que el muestreo sobre la tensión para su control se realiza una vez por cada perı́odo de
la señal PWM (en la parte superior), para que el control de la tensión sea efectivo y anule el error
del sistema, el muestreo debe producirse cuando la tensión alcanza el valor medio. De esta forma el
error en estacionario será nulo al compararse con una referencia de tensión, puesto que el propósito
de establecer una tensión de referencia es que la tensión del convertidor alcance dicha magnitud en
valor medio.
Para sincronizar el muestreo en el instante requerido, se aprovechará la funcionalidad del módulo
ePWM (el cual se detallará en el siguiente capı́tulo) que ofrece la posibilidad de sincronizar el flanco
ascendente de la señal PWM con la generación del evento de interrupción EPWMxSOC.
Se debe configurar el registro correspondiente para lanzar el evento al alcanzar el valor de
comparación en cuenta ascendente (al configurar el modo de conteo como simétrico, o ascendente-
descendente).
En la figura 2.13 [6] se muestra el registro

EP wmxRegs.ET SEL

32
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.13: Registro Event Trigger Selection (ETSEL).

Para una sincronización del evento acorde a las caracterı́sticas que se han descrito, se deben
escribir las instrucciones:

EP wm1Regs.ET SEL.bit.SOCASEL = 2;

para lanzar el evento al alcanzar el valor CMPA en cuenta ascendente.

EP wm1Regs.ET SEL.bit.SOCAEN = 1;

para habilitar los eventos de interrupción.


Además, el módulo ePWM nos ofrece flexibilidad en cuanto al lanzamiento del evento de inte-
rrupción. Se configura mediante el registro

EP wmxRegs.ET P S

según la figura 2.14 [6]

Figura 2.14: Registro Event Trigger Pre-Scale (ETPS).

Se ha configurado para lanzar los eventos de interrupción en cada perı́odo de la señal PWM,
puesto que se desea controlar la tensión de la forma más rápida posible, y se configura mediante la
instrucción:
EP wm1Regs.ET P S.bit.SOCAP RD = 1;

2.3.2. Módulo ADC.


El subsistema analógico contiene a los convertidores analógico-digital (habiendo cuatro ADCs
en modo dual), a los convertidores digital-analógico (habiendo tres DAC de 12 bits), al módulo de
comparación de señales (ocho módulos CMPSS) y, por último, el módulo de filtrado Sigma-Delta
(SDFM).
El primero que se describirá será el módulo ADC. Cuentan con una resolución de 16 bits o 12
bits, según se escoja, además, cuentan con la capacidad de realizar conversiones en modo simultáneo
por dos canales, o bien individual, con hasta 16 SOCs con 16 registros de resultados independientes.
En cuanto a las interrupciones, que son de especial importancia puesto que se configurará el
ADC para lanzar eventos de interrupción en el fin de conversión (EOC, end of conversion, en
inglés), cuentan con hasta cuatro interrupciones distintas que pasan por el PIE, entre muchas otras
caracterı́sticas.

33
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

En la figura 2.15 se puede observar el diagrama de bloques del módulo ADC. Se puede comprobar
cómo, mediante el registro de control del SOC (SCOxCTL, x de 0 a 15) se puede configurar el canal
sobre el que se muestrea (mediante CHSEL) variando desde ADCIN0-15, posteriormente, se puede
definir el tamaño de la ventana de adquisición (mediante ACQPS), y, finalmente y relativo al SOC,
el trigger o evento de disparo del muestreo. Estas tres variables conforman el SOC (conversión
simple), y será el segundo paso a determinar para programar este periférico tras haber configurado
debidamente el periférico mediante el registro ADCCTL, que servirá para indicar el modo de
muestreo que se prefiere. ası́ como para inicializar el periférico debidamente.
Finalmente, en cuanto al caso de estudio que nos ocupa, habrá que configurar el registro de
selección de interrupciones del ADC, para habilitar las interrupciones y lanzar los eventos por la
lı́nea correspondiente, ası́ como para configurarlo en modo de muestreo continuo o discontinuo,
según se requiera.

Figura 2.15: Diagrama de bloques del ADC.

El registro de control del SOC para cada uno de los cuatro ADCs (ADCa/b/c/d) [6]

AdcaRegs.ADCSOCxCT L

tiene la siguiente estructura (figura 2.16 [6]):

34
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.16: Registro SOC0 Control (SOC0CTL).

En nuestro caso, dado que se requiere que el perı́odo de muestreo sea el máximo posible (2µs),
el trigger que indicará al ADC cuándo muestrear la señal PWM que estará conectada a la entrada
analógica ADCINA3 (puesto que el canal ADCINA1 estará configurado como salida del DACa)
será el CpuTimer0, configurado para tal uso. Por tanto, se debe escribir en el campo CHSEL y
TRIGSEL [6]
AdcaRegs.ADCSOC0CT L.bit.CHSEL = 3;
AdcaRegs.ADCSOC0CT L.bit.T RIGSEL = 1;
para que muestree el canal ADCINA3 y con el periodo de muestreo que indique CpuTimer0,
respectivamente.
En cuanto al registro de selección de interrupciones (figura 2.17 [6]), de forma general, si se
desean habilitar las interrupciones por la lı́nea ADCINT1 y permitir el modo de muestreo continuo,
se deberá escribir [6]

AdcaRegs.ADCIN T SEL1N 2.bit.IN T 1E = 1;

AdcaRegs.ADCIN T SEL1N 2.bit.IN T 1SEL = 0;


AdcaRegs.ADCIN T SEL1N 2.bit.IN T 1CON T = 0;
puesto que el campo INT1E permite habilitar/deshabilitar interrupciones (1/0), el campo INT1SEL
nos permite configurarlas por la lı́nea ADCINT1 que pasa por el PIE, y el campo INT1CONT nos
permite configurar el modo de muestreo continuo/discontinuo (0/1).

Figura 2.17: Registro de selección de interrupciones 1 y 2 del ADC (ADCINTSEL1N2).

Cuando se produce un evento de interrupción, de forma general, se activa el flag de interrupción,


y no se retira hasta que ası́ se indique, por lo que se no se realiza y se produce una interrupción, ésta
no serı́a atendida debidamente por la CPU aunque esté bien configurada en el PIE y en los registros
pertinentes del periférico. Es por esto que en la rutina de servicio a la interrupción del ADC, antes
de llegar a su fin y, por tanto, a la ejecución normal del programa de la CPU, se debe atender a la

35
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

interrupción y retirar el flag de interrupción para permitir que otras futuras interrupciones puedan
ser atendidas. Se realiza mediante la instrucción [6]:

AdcaRegs.ADCIN T F LGCLR.bit.ADCIN T 1 = 1;

en el registro ADCINTFLGCLR (ADC Interrupt Flag Clear ).

2.3.3. Módulo DAC.


Este periférico será necesario para volcar las variables de estado (dos de ellas, por lo que se
necesitará emplear dos DAC distintos, de los tres totales disponibles) calculadas en cada muestreo
según las ecuaciones en diferencias mostradas anteriormente en el buffer de salida del pin ADCINA1,
que es compartido entre el ADCa (como entrada) y el DACa (como salida).
La ventaja que nos supone emplear este periférico y no almacenar en un array de datos todas
las variables de estado calculadas en cada múltiplo del periodo de muestreo es, en primer lugar, el
ahorro de memoria y, en segundo lugar, la posibilidad de realizar la emulación de la forma mas fiel
a como responderı́a la simulación de un convertidor real en un laboratorio, en tiempo real.
Es por esto que, para configurar el DAC, únicamente habrá que habilitarlo como salida (DA-
COUT) y sincronizar el buffer con el reloj del sistema (SYSCLK).
Para comprender en detalle cómo funciona este periférico, al igual que con los anteriores, acu-
diremos al manual del fabricante [6]. En la figura 2.18 se puede observar la descripción de este
periférico en un diagrama de bloques.

Figura 2.18: Diagrama de bloques del DAC.

Mediante DACREFSEL podremos escoger las referencias de tensión tanto para nivel alto como
bajo, en nuestro caso se escogerá VREFHI y VREFLO, puesto que son compartidas con el ADC
(3V y 0V , respectivamente).
El funcionamiento de éste periférico es el siguiente: el buffer de 12 bits almacena el valor escrito
en el registro DACVALS (con permiso de lectura/escritura, puesto que será aquı́ donde se escribirá
el valor que se desee obtener en la salida DACOUT, acotada entre VREFLO y VREFHI), y, ante

36
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

la señal de disparo, que puede ser o bien SYSCLK o mediante PWM, el valor será escrito en la
salida.
Al ser el buffer uno de 12 bits, deberá escribirse en él un valor acotado entre 0 y 4095, por lo
que habrá que realizar la conversión del valor en tensión que se desee escribir mediante un simple
factor para transcribirlo a entero entre 0 y 4095, y, de forma autónoma, el DAC escribirá la tensión
a la cual se corresponde el entero introducido (en DACVALS) en la salida (DACOUT), que puede
visualizarse en el osciloscopio de forma inmediata.
Para configurar el DAC, se hará mediante el registro DACCTL [6]

DacxRegs.DACCT L

tal y como se puede comprobar en la figura 2.19 [6]:

Figura 2.19: Registro de control del DAC (DACCTL).

Mediante las instrucciones [6]

DacaRegs.DACCT L.bit.LOADM ODE = 0;

DacaRegs.DACCT L.bit.DACREF SEL = 1;


configuraremos el periférico para sincronizarse con SYSCLK y para que emplee las referencias de
tensión VREFLO y VREFHI, respectivamente.
Finalmente, para habilitar la salida del DAC (DACa, en este caso) se hará mediante la siguiente
instrucción del registro DacxRegs.DACOU T EN [6]:

DacaRegs.DACOU T EN.bit.DACOU T EN = 1;

En la figura ?? se muestra un bloque designado como Actualizar salidas, y hace referencia


precisamente a la escritura en DACVALS de la variable tipo entero de 12 bits sin signo que se
desee obtener transformada la tensión entre VREFHI y VREFLO en DACOUT. Esta operación se
realiza mediante la instrucción [6]:

DacaRegs.DACV ALS.bit.DACV ALS = Uint12bits;

La conversión (idealmente) se realiza, finalmente, según la conversión que nos indica el fabricante
[6]:
DACREF (V )
DACOU T (V ) = DACV ALS(int) ·
4096
siendo DACREF = V REF HI − V REF LO en el caso que se ejemplifica.

37
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

2.3.4. Limitaciones fı́sicas impuestas por el DAC.


El módulo que impone las limitaciones fı́sicas más estrictas en cuanto a máxima frecuencia de
muestreo y tiempos de cómputo es el DAC. En la figura 2.20 se puede comprobar la composición
del tiempo de establecimiento total del DAC.

Figura 2.20: Composición del tiempo de establecimiento del DAC.

El tiempo de establecimiento de un DAC se define, según el fabricante, como el tiempo total


necesario para alcanzar el valor de salida en el DAC ante la escritura del valor de entrada en el
registro del DAC. Se compone como la suma del tiempo muerto (del orden de decenas de nanose-
gundos, despreciable frente al resto), que es el tiempo que transcurre entre la escritura del registro
hasta la actualización de las puertas lógicas internas en el DAC que determinan el valor de salida;
el tiempo de subida, el de recuperación y de establecimiento final.
El DAC que emplea el microcontrolador presenta un tiempo de establecimiento, según define el
fabricante, de 2 µs [5] (figura 2.21).
Es precisamente este tiempo de establecimiento el que determina la limitación fı́sica principal
para emular un sistema a alta frecuencia. Concretamente, el perı́odo de muestreo mı́nimo posible
será de 2 µs, puesto que es el tiempo mı́nimo que necesita el DAC para estabilizarse en el valor que
se le exige antes de recalcularse nuevamente las variables de estado en la rutina de interrupción y
escribirse nuevamente en este módulo sin errar.

38
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.21: Hoja de fabricante del DAC.

Este tiempo de establecimiento es lento en comparación con otros posibles DACs del mismo
fabricante, que son de alta velocidad y no de alta precisión. Concretamente, el modelo MDAC7811
presenta un tiempo de establecimiento de 0,2 µs, lo que nos permitirı́a una frecuencia de muestreo
de 50 M Hz, próximo a las frecuencias de muestreo alcanzables en un dispositivo basado en FPGA.
La tecnologı́a basada en FPGA permite desarrollar aplicaciones de alta velocidad que supera
en varios órdenes de magnitud aquellas alcanzables con un microcontrolador, y esto se debe a
que no están optimizados para un bajo consumo y especificaciones de alta precisión, como un
microcontrolador de este tipo.

2.3.5. Módulo CpuTimer.


En cuanto al CpuTimer, destacar únicamente a efectos de éste trabajo que se empleará como
trigger del SOC0 del ADC, por lo que únicamente habrá que inicializarlo con un perı́odo Ts = 2µs
y, posteriormente, arrancar el temporizador, que trabaja con la frecuencia de reloj de la CPU a 200
MHz.
Se hace posible a través de las siguientes instrucciones [6]:

Conf igCpuT imer(&CpuT imer0, 200, 2(µs));

CpuT imer0Regs.T CR.bit.T SS = 0;

2.3.6. Gestión de las interrupciones. PIE.


El PIE únicamente deberá ser configurado para permitir la llegada de eventos de interrupción
a la CPU provenientes por la lı́nea INT1, puesto que es por esta lı́nea por la que agrupa al evento
ADCINT1, que es el único evento que se empleará.
Volviendo a la figura 2.9, se puede comprobar que la interrupción ADCINT1 está situada en
la fila INT1, columna INTx.1. Para permitir las interrupciones por esta lı́nea se debe escribir la

39
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

instrucción [6]:
P ieCtrlRegs.P IEIER1.bit.IN T x1 = 1;
y, posteriormente, habilitar el IER (escribiendo un 1 lógico en la primera posición de todas ellas con
las que cuenta (una para cada lı́nea de interrupción enmascarable) a través de la palabra reservada
M INT1 y el EINT (interruptor global, en la CPU) [6]:

IER = M IN T 1;

EIN T ;
Además, se requerirá la declaración de la rutina de servicio a la interrupción previo al código main
de la CPU1, y, posteriormente, apuntar el vector de la interrupción ADCA1 INT a la dirección en
memoria donde se encuentra la ISR [6].

interrupt void isrADC(void);

P ieV ectT able.ADCA1 IN T = &isrADC;


Finalmente, al igual que con el flag del ADC, hay que notificar al PIE que la interrupción ha sido
atendida una vez se ha completado la ejecución del programa de la ISR, y para eso se incluye la
instrucción [6]
P ieCtrlRegs.P IEACK.bit.ACK1 = 1;
al final de la ISR, borrando flag asociado a las interrupciones que se agrupan por la lı́nea de
interrupción INT1.

2.4. Asignación de periféricos en distintas CPUs.


Como se ha comentado anteriormente, se pretende abordar la emulación de la planta a través
de la CPU1 y el lazo de control de la tensión del convertidor a través de la CPU2. En la figura 2.22
se puede comprobar cómo se reparten los periféricos en las distintas CPUs.

Figura 2.22: Esquema de reparto de periféricos en CPU1 y CPU2.

40
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Como se puede comprobar, la CPU1 integra el ADCa (cuyo muestreo se dispara por el desbor-
damiento de CpuTimer0), y los DAC para sintetizar las variables de estado; mientras que la CPU2
integra el ADCb (para muestrear la tensión con el fin de establecer el control sobre ella) que está
sincronizado con el módulo ePWM, como se ha comentado anteriormente.
El fabricante indica que para programar sobre la CPU2, habrá que asignar previamente los
recursos que se emplean para su funcionamiento, y debe ser a través de un conjunto de instrucciones
recogidas en el programa main de CPU1.
Es por esto que el programa cargado en la memoria flash de la CPU1 debe ejecutarse previo al
de la CPU2. Si se realiza en orden inverso, la CPU2 cumplirá la función para la que está provista
puesto que no podrá acceder a configurar los periféricos que requiere (ya que no han sido asignados
previamente).
Para asignar los periféricos ePWM1 y ADCb se incluyen las siguientes instrucciones en el código
principal de la CPU1:
EALLOW ;
DevCf gRegs.CP U SEL0.bit.EP W M 1 = 1;
DevCf gRegs.CP U SEL11.bit.ADC B = 1;
EDIS;
El registro CP U SEL0 nos permite asignar los módulos PWM entre las distintas CPUs (si se escribe
el valor 1 se traspasa a la CPU2, mientras que posee el valor 0 por defecto, para CPU1). El registro
CP U SEL11 realiza la misma función pero para los ADC.

2.5. Code Composer Studio v10.4.0.


Code Composer Studio (CCS) es un entorno de desarrollo integrado (IDE) desarrollado por
Texas Instruments (TI) para el desarrollo de software y la depuración de sistemas embebidos,
especialmente aquellos basados en los microcontroladores y procesadores de TI. Proporciona un
conjunto completo de herramientas y caracterı́sticas especı́ficamente diseñadas para los dispositivos
de TI, lo que permite a los desarrolladores escribir, compilar, depurar y optimizar su software
embebido.
CCS admite varios lenguajes de programación como C, C++ y ensamblador, y ofrece un conjun-
to de herramientas y caracterı́sticas de desarrollo. Algunas caracterı́sticas clave de Code Composer
Studio incluyen:

1. Editor: un editor de código con resaltado de sintaxis y funciones de autocompletado, lo que


facilita la escritura y navegación en el código.

2. Sistema de compilación: CCS incluye un sistema de compilación que permite a los desarro-
lladores compilar su código y generar binarios ejecutables para el dispositivo objetivo.

3. Depurador: proporciona un depurador potente que permite a los desarrolladores ejecutar


el código paso a paso, establecer puntos de interrupción, examinar variables y registros, y
analizar el flujo de ejecución de su software embebido.

4. Herramientas de optimización: CCS ofrece herramientas de optimización para mejorar el


rendimiento y la eficiencia del software embebido, como la optimización del código y la gestión
de recursos.

41
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

CCS es especialmente utilizado por desarrolladores que trabajan con productos y dispositivos de
Texas Instruments, ya que está diseñado especı́ficamente para su ecosistema de microcontroladores
y procesadores. Sin embargo, también se puede utilizar en proyectos que no están basados en los
dispositivos de TI, ya que ofrece caracterı́sticas generales de desarrollo y depuración de software.
Para el desarrollo del software que aborda los objetivos del trabajo previamente planteados se
ha hecho uso de la versión CCS v10.4.0., escrito en C con el modelo de programación previamente
descrito.
Para poder compilar un proyecto establecido en dos CPUs, CCS nos ofrece herramientas para
llevarlo a cabo de una forma sencilla y que, al mismo tiempo, nos permite la depuración de ambos
programas (uno para cada CPU) paralelamente. Esto se hace necesario para la segunda parte del
trabajo, en la que se pretende implementar el modelo del convertidor DC-DC reductor en una CPU,
mientras que se implementa el controlador digital en una segunda CPU, CCS ofrece un soporte
para compilar y cargar en su memoria flash correspondiente cada programa.
En la figura 2.23 se muestra una imagen del entorno de programación en CCS.

Figura 2.23: Entorno de programación en CCS.

2.6. Creación de un proyecto.


A continuación se presenta el conjunto de instrucciones necesario para construir el proyecto en
C, dotado de todas las funcionalidades en cuanto a periféricos que se requiere, y cargado en memoria
flash (que nos otorga más capacidad de almacenamiento y la posibilidad de cargar el programa en
el microcontrolador para que sea ejecutado de forma automática, sin necesidad de ser compilado).
Se detalla este conjunto de instrucciones con una doble intención. En primer lugar, para facilitar
este proceso a cualquiera que desee consultar este documento posteriormente, de cara a trabajos
futuros o por otra causa; y, en segundo lugar, para describir todas aquellas dificultades y dudas que
se tuvieron que resolver para llegar a un proyecto como este.
El primer paso será crear y configurar el proyecto vacı́o, a través de la opción New CCS project...
en el menú Project, localizado en la barra de herramientas.
Se escoge como Target el dispositivo que se quiere programar, en este caso, el microcontrolador
TMS320F28379D. A continuación, tras nombrar el proyecto nuevo, escogeremos el Linker command
file, dentro de Project type and tool-chain. Concretamente, para un proyecto que se desea cargar en la
CPU1, ejecutado desde memoria flash, se escoge el archivo 2837xD F LASH IQM AT H lnk cpu1

42
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

(puesto que todas las operaciones matemáticas se realizarán en coma fija, es decir, con IQMATH).
Finalmente, creamos el proyecto vacı́o (con main.c) y completamos este primer proceso, y podremos
acceder al árbol del proyecto (figura 2.24).

Figura 2.24: Árbol del proyecto creado.

En el siguiente paso se persigue incluir todos los archivos que nos facilitan las funciones para pro-
gramar los periféricos de los que haremos uso (los anteriormente descritos). Esto se realiza copiando
los archivos (ubicados en la dirección C:\ti\c2000\C2000Ware 3 04 00 00\device support\f2837xd
\common\source, para los periféricos, y en la dirección C:\ti\c2000\C2000Ware\libraries\math
\IQmath\c28\include para el fichero de cabecera IQMathLib.h, y el fichero IQmath fpu32 coff.lib,
en la carpeta de librerı́as con la dirección C:\ti\c2000\C2000Ware\libraries\math\IQmath\c28\lib.
al árbol del proyecto, ası́ como incluyendo en las propiedades del proyecto la ubicación donde se
encuentran figura 2.25.

Figura 2.25: Propiedades del proyecto. Dirección de ficheros fuente y cabecera en Include options.

Por último, se deben incluir un conjunto de sı́mbolos predefinidos en las propiedades del proyecto
para la correcta compilación del proyecto. Se recogen en la figura 2.26.

43
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Figura 2.26: Propiedades del proyecto. Sı́mbolos predefinidos.

Cabe destacar que todas las operaciones matemáticas se han implementado en coma fija, con
las funciones de la librerı́a IQMath, en lugar de coma flotante, para la cual existe un módulo
incorporado (FPU) en el microcontrolador.

Justificación del cómputo representado en coma fija respecto a coma flotante. Se


justifica el empleo de la representación numérica por medio de la coma fija debido a un conjunto
de ventajas que presenta sobre la coma fija, entre ellas se encuentran [11]:

Precisión constante: la precisión decimal es constante para todos los números representados.
Esto significa que la precisión es uniforme en todo el rango de valores representables. En
contraste, en los números de coma flotante, la precisión varı́a dependiendo del tamaño del
número, lo que puede llevar a errores de redondeo y pérdida de precisión en operaciones
aritméticas.

Eficiencia en almacenamiento y cálculos: Los números de coma fija suelen requerir menos es-
pacio de almacenamiento en comparación con los números de coma flotante, ya que no es nece-
sario almacenar información adicional como exponentes. Además, las operaciones aritméticas
en coma fija pueden ser más rápidas y eficientes debido a su representación más simple.

Eficiencia en el consumo energético: Un microcontrolador que computa en coma fija presenta


un menor consumo energético, siendo ésta una solución más práctica para aquellas aplicaciones
que se pretenden comercializar, o hacer funcionar de manera autónoma. Mientras que el uso
de coma flotante es más ineficiente en este aspecto.

Operaciones aritméticas determinı́sticas: En los números de coma fija, las operaciones aritméti-
cas siempre producirán el mismo resultado para los mismos operandos. Esto facilita la repro-
ducibilidad y la previsibilidad en los cálculos, lo cual es importante en aplicaciones donde se
requiere exactitud y consistencia en los resultados.

Control total sobre el desbordamiento y subdesbordamiento: En los números de coma fija,


es posible detectar y controlar fácilmente los casos de desbordamiento y subdesbordamiento,
ya que el rango de valores representables está definido de antemano. En coma flotante, el
desbordamiento es más difı́cil de detectar puesto que los rangos de valores son dinámicos.

44
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 2. Materiales y métodos.

Para concluir con una recomendación del fabricante, ante la necesidad de tomar una decisión como
parte del proceso de diseño en nuestro proyecto entre dos opciones: cómputo en coma fija o cómputo
en coma flotante, el fabricante recomienda que, en aquellas aplicaciones en las que se precisa de
una mayor versatilidad, y con la ventaja de una mayor sencillez en su uso, se recomienda emplear
coma flotante; mientras que en casos en los que la versatilidad no sea determinante y a costa de una
mayor complejidad pero resultando en una mayor precisión y velocidad, se recomienda computar
en coma fija [4].

45
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

3. Capı́tulo 3. Resultados.
3.1. Preámbulo.
En este capı́tulo se comentarán los resultados obtenidos tras realizar diversas simulaciones sobre
el sistema objeto de estudio (previamente descrito), realizadas tanto en el microcontrolador como en
software comercial para su validación. Se describirán los parámetros empleados para la realización de
cada una de las simulaciones presentadas, ası́ como un análisis de aquello más reseñable. Finalmente,
se dedica un apartado para el análisis temporal en la ejecución del programa con el fin de extraer
conclusiones que contribuyan a una mejor comprensión del trabajo realizado, ası́ como un conjunto
de medidas de mejora sobre el trabajo existente que están acotadas por las limitaciones fı́sicas
impuestas por el microcontrolador empleado.
El programa del cual se muestran más adelante las emulaciones realizadas en el microncon-
trolador se encuentra en los Anexos del trabajo. Programa para la emulación del conver-
tidor DC-DC reductor, ası́ como de su control en tensión, en el microcontrolador
TMS320F28379D.
A continuación, se muestran los diagramas de flujo correspondientes a los programas realizados
para la emulación del convertidor reductor en el microcontrolador indicado. En la figura 3.1 se
muestra el diagrama de flujo general del programa realizado para la emulación de la planta en la
CPU1.

Figura 3.1: Flujograma del programa main realizado en CPU1.

Para la emulación de la planta del convertidor reductor se deben inicializar todos los periféricos
necesarios para llevar a cabo este propósito (ADCa, CpuTimer0, DACa y DACb), ası́ como confi-
gurar las interrupciones para permitir a la CPU atender las rutinas de interrupción. El programa

47
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

quedará en un bucle infinito a la espera de rutinas de interrupción que atender (provinientes del
ADC).
En la figura 3.2 se puede comprobar el diagrama de flujo para la rutina de interrupción que
debe atender la CPU1 tras producirse el muestreo de la señal PWM (proviniente de la CPU2).

Figura 3.2: Flujograma de la rutina de interrupción realizado en CPU1.

Como se puede comprobar, presenta un funcionamiento genérico y válido para emular cualquier
otro tipo de convertidor, ya sea el convertidor elevador, o reductor-elevador. Únicamente serı́a
necesario sustituir las ecuaciones de evolución de estados discretizadas por aquellas pertenecientes
al convertidor que se desee emular en el microcontrolador.
Para el programa realizado en CPU2, cuya función es la de generar una señal PWM que es
muestreada por la CPU1 para sintetizar las variables de estado, ası́ como la de implementar el
lazo de control de tensión, sincronizando los periféricos que se le asignan por la CPU1 (ADCb y
ePWM1) y que sirven para muestrear la tensión del convertidor (generada por CPU1) y que se
pretende controlar, y actualizar el ciclo de trabajo para sintetizar la señal PWM que muestrea
CPU1, respectivamente.
Los flujogramas se pueden observar en las figuras 3.3 y 3.4.

48
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Figura 3.3: Flujograma del programa main realizado en CPU2.

Figura 3.4: Flujograma de la rutina de interrupción realizado en CPU2.

Con el fin de evitar que el algoritmo de control genere un ciclo de trabajo superior a la unidad,
o negativo, tras haber sido calculado se comprueba si verifica alguna de estas dos condiciones; y, en
caso de ser ası́, se acota entre un rango de valores adecuado para ser implementado en el siguiente
perı́odo PWM.

49
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

A continuación se muestra el esquema de conexión que se ha llevado a cabo para la emulación


y control del convertidor reductor, y bajo el cual se han obtenido los resultados detallados en este
capı́tulo más adelante.

Figura 3.5: Esquema de conexiones para la emulación y control de tensión del convertidor
reductor en F28379D.

3.2. Simulación en lazo abierto. Validación del modelo.


El objetivo de realizar una simulación en lazo abierto es poder validar lo obtenido con lo
esperado teóricamente. Para sintetizar las variables de estado bajo los parámetros indicados en
el cuadro 2 hay que tener en cuenta que el microcontrolador únicamente puede ofrecer salidas en
tensión (a través del DAC) de hasta 3,3 V , por lo que, para un convertidor trabajando en MCC con
estos parámetros se esperarı́a una tensión de salida centrada en 6 V . Es por esto que, para poder
visualizar los estados del convertidor en el osciloscopio (y poder validar el modelo del convertidor
posteriormente) se introduce un sensor de tensión y de corriente que nos permita adaptar la escala
a una que el microcontrolador sea capaz de generar (figura 3.6). Se ha optado por una ganancia en
los elementos sensores de valor
1
kH =
12
Ası́, la tensión media esperable sera de 500mV , al igual que la corriente media puesto que la
resistencia presenta un valor unitario. Los resultados que se muestran en adelante se corresponden
con la tensión y corriente medidos tras los sensores.

Entrada Valor
R 1Ω
L 200 µH
C 100 µF
Vin 12 V
d 50 %
fP W M 10 kHz
fs 500 kHz

Cuadro 2: Parámetros del convertidor para la simulación el lazo abierto.

50
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Figura 3.6: Modelo empleado para la emulación (F28379D) y simulación en software comercial del
convertidor reductor.

Se ha realizado una simulación en lazo abierto y se han obtenido (gráficamente en el osciloscopio)


las variables de estado (figura 3.7a para la tensión en el condensador, y figura 3.7b para la corriente
en el inductor) con los siguientes parámetros (cuadro 2):

(a) Tensión en el condensador. (b) Corriente en el inductor.

Figura 3.7: Simulación en lazo abierto. Variables de estado del convertidor. TMS320F28379D.

Visualmente se puede comprobar que la corriente presenta un rizado aproximado de 120 mA,
que coincide con lo esperado teóricamente, a través de la ecuación:
Vin − Vo 1 − 0,5 1
∆I = dTP W M = −6
0,5 · 4 = 125 mA
L 200 · 10 10
Respecto de la tensión en el condensador, se espera un rizado en tensión dado por la ecuación:

∆I · TP W M 0,125 1014
∆V = = = 15,625 mV
8C 8 · 100 · 10−6
y se observa que presenta un rizado aproximado de 18 mV .
Se ha realizado una simulación (Programa para la simulación en lazo abierto del conver-
tidor DC-DC reductor. MATLAB. En los Anexos del trabajo.) bajo las mismas condiciones
y se ha obtenido, en la figura 3.8a la tensión del condensador, y en la figura 3.8b la corriente en el
inductor, con la finalidad de validar el modelo implementado en el microcontrolador. Se ha obtenido
un rizado en tensión de 15,818 mV y en corriente de 126,316 mA.

51
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

(a) Tensión en el condensador. (b) Corriente en el inductor.

Figura 3.8: Simulación en lazo abierto. Variables de estado del convertidor. MATLAB.

Finalmente, se ha realizado una simulación en LTSpice bajo las mismas condiciones y se ha


obtenido, en la figura 3.9 la tensión del condensador, y en la figura 3.10 la corriente en el inductor.
Se ha obtenido un rizado en tensión de 15.63 mV y en corriente de 124.5 mA.

Figura 3.9: Tensión en el condensador. Simulación en LTSpice.

Figura 3.10: Corriente en el inductor. Simulación en LTSpice.

En el cuadro 3 se recogen los valores de rizado en tensión y corriente, tanto en el microcontrolador


como los obtenidos en MATLAB y los esperados teóricamente, ası́ como el error relativo cometido
en la simulación realizada en el microcontrolador.

52
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Magnitud TMS320F28379D MATLAB LTSpice Teórico Error cometido ( %)


∆iL (mA) 120 126, 316 124,5 125 4
∆vC (mV ) 18 15, 818 15,63 15, 625 15.2
i¯L (mA) 477 500 499,24 500 4.6
v¯C (mV ) 488 500 499,23 500 2.4

Cuadro 3: Resultados de la simulación en lazo abierto.

3.2.1. Análisis de los resultados.


Se observa un error cometido en el rizado de tensión superior al 15 %; esto se puede deber
a varias causas. En primer lugar, debido a los desajustes por falta de precisión en los cálculos
realizados por el microcontrolador. Esta fuente de variación es la menos influyente puesto que se
realizan los cálculos en coma fija, en IQ19, que nos permite hasta una precisón de 2−19 .
Otra fuente de variación viene dada por la relación entre las frecuencias de muestreo y conmuta-
ción, o PWM. En un periodo de conmutación se realizan 50 muestras sobre la señal PWM, en base
a las cuales se determina si se deben aplicar un conjunto de ecuaciones u otro para la obtención
de las variables de estado. Al tratarse de un sistema limitado por el tiempo real del muestreo y de
los tiempos dedicados a realizar operaciones en las rutinas de interrupción, el ciclo de trabajo que
percibe no será el 50 %, como se espera teóricamente, sino que se pueden realizar, en ocasiones, un
mayor número de muestras a nivel bajo que a nivel alto, y viceversa, repercutiendo en un ciclo de
trabajo ligeramente distinto y que afecta al valor medio.
Finalmente, el valor medio medido por el osciloscopio puede estar afectado por el ruido acoplado
a los cables que se emplean para medir directamente sobre el microcontrolador, ası́ como la calidad
de éstos, el entorno y las proximidades a otros equipos electrónicos. Esto se traduce en una señal
visualmente más ruidosa y que altera la medida que realiza el osciloscopio sobre ésta, ası́ como a
los valores pico a pico.
Se puede concluir este apartado afirmando que el modelo del convertidor DC-DC reductor
simulado en el microcontrolador queda validado.

3.2.2. Respuesta frente a preturbaciones.


A continuación se muestra la respuesta frente a una perturbación sobre la tensión de alimenta-
ción en lazo abierto (figuras 3.11a y 3.11b, para el microcontrolador y MATLAB, respectivamente).
Se ha realizado bajo los mismos parámetros (cuadro 2) y ante una variación de la tensión de
alimentación de un 70 %, esto es, disminuyendo su valor de 1 V a 0,3 V .

53
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

(a) TMS320F28379D. (b) MATLAB.

Figura 3.11: Respuesta ante perturbación sobre la tensión de alimentación en lazo abierto.

Al igual que en el anterior experimento, se ha realizado una simulación en LTSpice bajo los
mismos parámetros y se ha obtenido el siguiente resultado (figura 3.12):

Figura 3.12: Respuesta ante perturbación sobre la tensión de alimentación en lazo abierto.
Simulación en LTSpice.

Se puede comprobar que alcanza el valor final (correspondiente a un valor medio de tensión apro-
ximado de 150 mV para un ciclo de trabajo del 50 %) en 2 ms aproximadamente y sin sobreimpulso
máximo.
Este resultado se corresponde con la respuesta esperada según el modelo promediado del con-
vertidor, que presenta la siguiente función de transferencia en tiempo continuo:
Vin
LC 5 · 107
G(s) = Vin
=
s2 + 1
RC s + LC
s2 + 10000s + 5 · 107

Expresada según su forma canónica como sistema de segundo orden, se puede identificar su fre-
cuencia natural: √
ωn = 5 · 107 = 7,071 · 103 rad/s

54
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

En cuanto al tiempo de establecimiento, para sistemas de segundo orden sobreamortiguados,


éste se puede expresar como:
3,912
ts =
|σ1 |
Siendo σ1 el polo más dominante del sistema (únicamente con parte real, al tratarse de un sistema
sobreamortiguado). Los polos del sistema están localizados en:

σ1 = −2052,66 ; σ2 = −77947,33

Por tanto, el tiempo de establecimiento (téorico) es:


3,912
ts = = 1,9 ms
2052,66
Se puede comprobar en las figuras 3.11a y 3.11b que se ajusta al valor teórico de 1,9 ms.

3.3. Simulación en lazo cerrado.


Para cerrar el lazo sobre el control de la tensión del convertidor, como se introdujo previamente
en el primer capı́tulo, se ha diseñado un regulador digital de adelanto-atraso de fase. Los parámetros
del controlador se han diseñado siguiendo el mismo procedimiento, para los parámetros recogidos
en el cuadro 4.

Entrada Valor
R 1Ω
L 200 µH
C 100 µF
Vin 12 V
fP W M 10 kHz
fs 500 kHz

Cuadro 4: Parámetros del convertidor para la simulación el lazo cerrado.

En la figura 3.13a se puede comprobar la respuesta del controlador ante una variación en la
tensión de consigna, cambiando de 500 mV a 300 mV . La acción del controlador introduce un
máximo sobrepico estimado de 60 mV , y se establece en un tiempo total de 1 ms.
En la figura 3.13b se observa la respuesta del mismo controlador, bajo los mismos parámetros
del convertidor (en modelo promediado), pero simulado en MATLAB, con el fin de validar el resul-
tado obtenido en el microcontrolador. Se puede comprobar que la respuesta presenta un máximo
sobrepico y un tiempo de establecimiento similar.
Se ha obtenido mediante el Programa para la simulación en lazo cerrado del convertidor
DC-DC reductor. MATLAB. En los Anexos del trabajo.

55
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

(a) TMS320F28379D. (b) MATLAB.

Figura 3.13: Simulación en lazo cerrado. Variación en la tensión de consigna.

1
El controlador propuesto se ha diseñado para una frecuencia de corte fc = 20 fP W M = 1 kHz.
Presenta la siguiente función de transferencia para un margen de fase de 52º:
s ωL s 628,32
(1 + ωz ) · (1 + s )
(1 + 2163,5 ) · (1 + s )
Gc (s) = Gcm · s = 0,2719 · s
(1 + ωp ) (1 + 18248 )

Al discretizar el controlador, se ha implementado en el microcontrolador la siguiente ecuación en


diferencias:

d[n] = 1,373 d[n − 1] − 0,3734 d[n − 2] + 1,686 e[n] − 3,147 e[n − 1] + 1,466 e[n − 2]

56
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

3.3.1. Respuesta frente a preturbaciones.


De forma análoga a la simulación previamente realizada en lazo abierto frente a una perturbación
en la tensión de alimentación, se muestra a continuación (figura 3.14) la respuesta, en lazo cerrado,
frente a una perturbación en la tensión de alimentación de un 70 %. Dado que el lazo de control
está fijado a una tensión de consigna, se espera visualizar el efecto de la perturbación en forma de
escalón inicial, y, seguidamente, la acción del controlador para devolver la tensión a la establecida
por la consigna.

Figura 3.14: Simulación en lazo cerrado. Perturbación sobre la tensión de alimentación.

Como se puede comprobar, la perturbación introduce un sobreimpulso aproximado de 200 mV .


Esto es debido a que, al variar la tensión de alimentación en un 170 %, el ciclo de trabajo inicial
(d = 0,25) ajusta la tensión de salida a un valor correspondiente a

Vo = Vin · d = 1,7 · 0,25 = 0,425 V

Se puede comprobar cómo, a partir de ese valor inicial, el control regula el ciclo de trabajo para
que la tensión de salida siga al valor de consigna pese a la variación sobre la alimentación. Siendo
el valor de éste igual a Vo /Vin = 0,25/1,7 = 0,147.

57
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

3.4. Análisis de tiempos en rutinas de interrupción.


El objetivo de realizar un análisis sobre las rutinas de interrupción no es otro que el de optimizar
el programa realizado. Una optimización en el consumo de recursos conllevará a un mayor margen
temporal para la ejecución de la rutina de interrupción, y esto nos permitirı́a acelerar procesos
como el muestreo, resultando en una mayor precisión.
Por otra parte, ciertos recursos como el conversor digital-analógico requieren de un tiempo
mı́nimo para poder realizar la conversión, y será precisamente este periférico el que impondrá la
frecuencia de muestreo máxima a la que se podrá emular el comportamiento de la planta, como se
ha comentado anteriormente en el segundo capı́tulo. Todo el tiempo restante (para realizar cálculos,
comprobaciones, o cualquier otro propósito) deberá ser minimizado para ası́ poder aprovechar al
máximo las prestaciones del microcontrolador.

3.4.1. Análisis temporal ISR. Tabla de tiempos.


Para poder determinar qué procesos se deberı́an optimizar, se deberı́a realizar un ensayo que nos
permita averiguar cuánto tiempo se destina a qué propósito (dentro de la rutina de interrupción,
que es donde se emula el comportamiento de la planta). Para ello se configurado un pin como GPIO,
tipo salida, y ası́ poder visualizar en el osciloscopio mediante flancos ascendentes y descendentes
cuánto tiempo ha sido consumido por el microcontrolador entre dos instrucciones dadas.
A continuación se presenta el esquema de la rutina de interrupción (figura 3.15), con la finalidad
de agrupar instrucciones en grupos de procesos dentro de la rutina, y clasificarlos posteriormente
según una tabla que recoja el consumo temporal de cada proceso.

58
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Figura 3.15: Esquema general de procesos en la rutina de interrupción.

Se denomina ’P1’ al grupo de instrucciones dedicadas a calcular las variables de estado, ası́ como
cualquier función semejante (cambios de escala, conversión a otros tipos de dato, etc.). Se denomina
’P2’ al conjunto de instrucciones dedicadas a cargar las variables en el conversor digital-analógico,
y se denomina ’P3’ al conjunto de instrucciones que restan, y que tienen como función borrar los
flags de interrupción y como comprobar overflow en el ADC, para ası́ permitir que la rutina de
interrupción pueda volver a ejecutarse.
En la figura 3.16 se muestra el cronograma generado a través de los flancos de un GPIO de
salida para poder comprobar la duración de éstos procesos. La señal superior mide el tiempo total
de la rutina de interrupción, mientras que la inferior, el tiempo dedicado en cada uno de los procesos
descritos.

59
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Figura 3.16: Cronograma por procesos en la rutina de interrupción.

Se puede comprobar que la rutina de interrupción suma un total de 1.25 µs, compuesto por los
0.5 µs del proceso P1, otros 0.5 µs del proceso P2, y el restante para el proceso P3.
Únicamente se puede optimizar el proceso P1, dedicado a todo lo relacionado con el cálculo de
las variables de estado de la planta, puesto que los procesos de carga en el DAC y los relativos
a la comprobación del overflow en la rutina de interrupción son irreducibles al ser instrucciones
elementales proporcionadas por el fabricante.
La rutina de interrupción se inicia cada 2 µs (igual al perı́odo de muestreo), por lo que única-
mente contamos con 0.75 µs de margen hasta que vuelve a repetirse. Esto indica que, en caso de
contar con un conversor DAC más lento o de realizar más cálculos en la rutina de interrupción (o
de una forma más ineficiente), se podrı́a llegar a sobrepasar el perı́odo de muestreo, y resultarı́a en
no poder emular correctamente la planta.
Además, tal y como se han realizado las operaciones de cálculo en la rutina de interrupción,
si se quisiera reducir el perı́odo de muestreo a 1 µs, es decir, fs = 1 M Hz, no solo se agotarı́a el
margen temporal sino que también llevarı́a a una emulación incorrecta, puesto que se realizarı́a una
muestreo más rápido que la ejeución de la rutina.
Es por esto que conviene optimizar los recursos y las instrucciones al máximo, y que el factor
limitante sea, en el mejor de los casos, el conversor digital-analógico.
A continuación, se muestra en el cuadro 5 a modo de resumen con un desglose de los procesos
previamente indicados.

60
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Proceso Tiempo consumido (µs) Porcentaje sobre el total ( %)


Cálculo de vC [n] 0.12 9.6
Cálculo de iL [n] 0.11 8.8
Cambio de escala de vC [n] 0.08 6.4
Cambio de escala de iL [n] 0.09 7.2
Conversion de vC a entero 0.1 8
Conversion de iL a entero 0.1 8
Escribir vC en DACa 0.25 20
Escribir iL en DACb 0.25 20
Comprobar overflow 0.1 8
Borrar flag ISR 0.05 4
Total 1.25 100

Cuadro 5: Tabla de tiempos en la rutina de interrupción para la emulación de la planta.

3.5. Medidas de mejora.


Para optimizar el código y ası́ poder agilizar la ejecución de la rutina de interrupción se proponen
las siguientes medidas:

Reducir los tiempos a costa de una reducción en la flexibilidad de programación: se propone


eliminar cualquier variable que permanezca constante (la resistencia, inductancia, capacidad,
y otros factores de conversión) y sustituirla por su valor en la operación matemática. Se pierde
flexibilidad puesto que, de esta forma, en caso de querer modificar el valor de alguna de éstas,
se debe recalcular la operación de forma individual.

Reducir cálculos innecesarios: para una simulación en lazo cerrado en la que se pretende
controlar la tensión, calcular el valor de la corriente no aporta valor y consume tiempo. Se
propone eliminar el cálculo de esta variable junto con todos los procesos que le siguen (cambios
de escala y escritura en DACb).

Tras implementar las medidas anteriores se puede observar el siguiente cronograma en el osciloscopio
(figura 3.17).

61
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Capı́tulo 3. Resultados.

Figura 3.17: Cronograma optimizado de la rutina de interrupción.

Se observa una reducción en el tiempo dedicado a cálculo (proceso P1) de 0.2 µs, traduciéndose
en una mejora del 40 %. También en el proceso de escritura en el DAC (ahora solo DACa), con una
mejora del 50 %. Globalmente, el tiempo total de la rutina de interrupción se ha reducido en 0.5
µs, es decir, en un 40 % aproximadamente.

62
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Conclusiones.

4. Conclusiones.
El objetivo principal del trabajo era el de llevar a cabo un trabajo consistente en la emula-
ción y el control de un convertidor DC-DC en un sistema embedido, como es el microcontrolador
TMS320F28379D. Tras realizar el trabajo, se han logrado los objetivos planteados al inicio de éste:
constituir un soporte en software para la emulación y el control de un convertidor reductor, ex-
tensible para la emulación cualquier otro tipo de convertidor de manera sencilla; ası́ como haber
explorado las limitaciones fı́sicas para la emulación en un microcontrolador de estas caracterı́sticas.
En el primer capı́tulo se ha presentado la teorı́a necesaria para modelar el sistema objeto de
estudio (junto con los otros convertidores básicos) ası́ como su implementación en un sistema digital
y el control digital en tensión para este tipo en concreto.
El segundo capı́tulo se ha reservado para describir todos los aspectos relativos a caracterı́sticas
y prestaciones con las que se cuenta para abordar el objetivo propuesto. Conformando éstos las
limitaciones fı́sicas para realizar la emulación en este dispositivo en particular.
Finalmente, se han expuesto los resultados de las diversas emulaciones realizadas en el tercer
capı́tulo tras una descripción de los programas realizados para llevarlos a cabo. Ası́ como un apar-
tado dedicado a un análisis de éstos e ı́ntimamente ligado a las restricciones temporales de nuestro
sistema.

4.1. Contribución del trabajo.


En cuanto a los logros alcanzados en este trabajo, se ha conseguido realizar una emulación
reuniendo todos aquellos periféricos necesarios para hacer de ésta una óptima y limitada por el
marco fı́sico del microcontrolador. Se ha tratado de optimizar aquellos procesos que podrı́an limitar
la velocidad y precisión en la emulación, como lo son:
Empleo de operaciones de cálculo optimizadas y en coma fija, priorizando la velocidad y
precisión de éstos.
Empleo de dos CPUs para aprovechar toda la capacidad que estas dos unidades nos ofrecen
de forma paralela.
Empleo de periféricos especializados y comprobados por el fabricante como sustitutivo a otras
funciones definidas por el usuario y más ineficientes.
Realización de las emulaciones con la máxima frecuencia de muestreo posible (para la máxima
precisión), limitada por el convertidor digital-analógico inherente al microcontrolador.
En este trabajo se han explorado las limitaciones fı́sicas de este microcontrolador para la emulación
de un sistema digital mediante la técnica de Hardware-in-the-loop.
Finalmente, se han realizado programas que forman una plataforma software válida para la
emulación de diversos tipos de convertidores de potencia, haciendo uso de todas las prestaciones
que nos ofrece este microcontrolador para este propósito.

4.2. Trabajos futuros.


Aunque hemos cumplido los objetivos presentados al comienzo del documento, se podrı́a avanzar
más en diversas áreas que afectan a este trabajo. Como trabajo seguido o trabajo futuro principal,
se presentan las siguientes alternativas.
Partiendo de lo descrito en este documento, se podrı́an analizar y emular otros modelos en
el ámbito de la electrónica de potencia o cualquier otro, aprovechando ası́ la gran versatilidad de

63
Emulación de convertidores conmutados DC-DC sobre un microcontrolador de la familia C2000.
Conclusiones.

HIL. Se podrı́a indagar acerca de la emulación de sistemas no conmutados, donde la velocidad de


muestreo no presenta una relación tan crı́tica con la precisión de la emulación, y ası́ poder explorar
restricciones de otro tipo, más allá de las acotadas por la frecuencia de muestreo.
Además, en un futuro proyecto se podrı́a incidir en los aspectos relativos a las limitaciones
fı́sicas. Como medida de mejora a la velocidad (relacionada con la frecuencia de muestreo) de
la emulación, se podrı́a intentar realizar esta misma tarea en FPGA (con convertidores digital-
analógico más rápidos a costa de una menor precisión), o empleando un convertidor digital-analógico
de velocidad externo a este microcontrolador. Con este elemento diferenciador se podrı́an explotar
las prestaciones de alta frecuencia de reloj con las que cuenta este microcontrolador, y que se
encuentran limitadas por un convertidor digital-analógico de precisión (y no de alta velocidad,
preferible para la emulación de sistemas conmutados).
Por último, se podrı́a hacer énfasis en un futuro proyecto acerca de las técnicas de control
para otros tipos de convertidores y que no se han cubierto en este trabajo al no ser parte de los
objetivos planteados al inicio de éste, integrando otros módulos que ofrece el fabricante para opti-
mizar el cómputo como el módulo CLA (para leyes de control) y la unidad TMU (para operaciones
trigonométricas).

64
Referencias
[1] Hao Bai, Chen Liu, Dusan Majstorovic, and Fei Gao. Real-Time Simulation Technology for
Modern Power Electronics. Elsevier, 2023.

[2] Daniel S Castro, Rafael FQ Magossi, Renan F Bastos, Vilma A Oliveira, and Ricardo Q
Machado. Low-cost hardware in the loop implementation of a boost converter. In 2019 18th
European Control Conference (ECC), pages 423–428. IEEE, 2019.

[3] Robert W Erickson and Dragan Maksimovic. Fundamentals of power electronics. Springer
Science & Business Media, 2007.

[4] Gene Frantz and Ray Simar. Comparing fixed-and floating-point dsps. Texas Instruments,
Dallas, TX, USA, 2004.

[5] Texas Instruments. Tms320f2837xd dual-core microcontrollers datasheet. Texas Instru-


ments,[Online]. Available: https://www. ti. com/lit/ds/sprs880m/sprs880m. pdf.

[6] Texas Instruments. Tms320f2837xd dual-core microcontrollers: Technical reference manual,


2019.

[7] Botond Sandor Kirei, Calin-Adrian Farcas, Cosmin Chira, Ionut-Alin Ilie, and Marius Neag.
Hardware emulation of step-down converter power stages for digital control design. Electronics,
12(6):1328, 2023.

[8] V Chetan Raju and Olive Ray. Development of dc-dc power electronics converter emulation
kit for educational use. In 2021 National Power Electronics Conference (NPEC), pages 01–06.
IEEE, 2021.

[9] Paulo Bertoldi Renaux, Robson Ribeiro Linhares, and Douglas Paulo Bertrand Renaux.
Hardware-in-the-loop simulation low-cost platform. In 2017 VII Brazilian Symposium on Com-
puting Systems Engineering (SBESC), pages 173–180. IEEE, 2017.

[10] Arthur HR Rosa, Matheus BE Silva, Marcos FC Campos, Renato AS Santana, Welbert A
Rodrigues, Lenin MF Morais, and Seleme I Seleme Jr. Shil and dhil simulations of nonlinear
control methods applied for power converters using embedded systems. Electronics, 7(10):241,
2018.

[11] Mattia Rossi, Nicola Toscani, Marco Mauri, and Francesco Castelli Dezza. Introduction
to Microcontroller Programming for Power Electronics Control Applications: Coding with
MATLAB® and Simulink®. CRC Press, 2021.

[12] Marina Yushkova, Alberto Sanchez, and Angel de Castro. Oversampling techniques to im-
prove the accuracy of hardware-in-the-loop switching models. IEEE Transactions on Power
Electronics, 2023.

65
Anexos
Programa para la simulación en lazo abierto del convertidor DC-DC reductor.
MATLAB.

%Fichero empleado para las simulaciones en lazo abierto ( con y sin


%perturbaciones sobre la tension de alimentacion ) sobre el
convertidor
%DC - DC reductor .

clc ;
clear all ;
close all ;
format long

%Parametros del convertidor


R = 1; %Ohm
L = 100 e -6; %H
C = 0.1 e -3; %F
Vin = 1; %V
f_PWM = 10 e3 ; %Hz
T_PWM = 1/ f_PWM ;

%Muestreo con frecuencia f_s


f_s = 500 e3 ; %Hz
Ts = 1/ f_s ;

Tf = 1; %Tiempo final de la simulacion


t = 0: Ts : Tf ;
d = 50;
q = square (2* pi * f_PWM *t , d ) ;

for i = 1: length ( t )
if q ( i ) < 0
q ( i ) = 0;
end
end

%Inicializar las variables de estado nulas


iL_1 = 0;
vC_1 = 0;

%Generar la entrada Vin ( t ) con o sin perturbaciones


Vin = Vin * ones (1 , length ( t ) ) ;
% Vin1 = Vin * ones (1 ,( length ( t ) -1) /2) ;
% Vin2 = ( Vin -0.7) * ones (1 ,( length ( t ) -1) /4+1) ;
% Vin3 = ( Vin ) * ones (1 ,( length ( t ) -1) /4) ;

67
% Vin = horzcat ( Vin1 , Vin2 , Vin3 ) ;

%Generar la referencia Vref ( t ) con o sin escalones


%Vref = 0.6* ones (1 , length ( t ) ) ; %Referencia de valor constante
Vref1 = 0.5* ones (1 ,( length ( t ) -1) /2) ;
Vref2 = 0.3* ones (1 ,( length ( t ) -1) /4+1) ;
Vref3 = 0.5* ones (1 ,( length ( t ) -1) /4) ;
Vref = horzcat ( Vref1 , Vref2 , Vref3 ) ;

for n = 1: length ( t )
e ( n ) = 0;
u ( n ) = 0;

if n == 1
if q ( n ) == 1
iL ( n ) = iL_1 + ( Ts / L ) * Vin ( n ) - ( Ts / L ) * vC_1 ;
vC ( n ) = vC_1 + ( Ts / C ) * iL_1 - ( Ts /( R * C ) ) * vC_1 ;
else
iL ( n ) = iL_1 - ( Ts / L ) * vC_1 ;
vC ( n ) = vC_1 + ( Ts / C ) * iL_1 - ( Ts /( R * C ) ) * vC_1 ;
end
else
if q ( n ) == 1
iL ( n ) = iL (n -1) + ( Ts / L ) * Vin ( n ) - ( Ts / L ) * vC (n -1) ;
vC ( n ) = vC (n -1) + ( Ts / C ) * iL (n -1) - ( Ts /( R * C ) ) * vC (n -1) ;
else
iL ( n ) = iL (n -1) - ( Ts / L ) * vC (n -1) ;
vC ( n ) = vC (n -1) + ( Ts / C ) * iL (n -1) - ( Ts /( R * C ) ) * vC (n -1) ;
end
end

end
figure ;
plot (t , vC ) ;
legend ( ' vC ( V ) ') ;

% tiledlayout (2 ,1)
% ax1 = nexttile ;
% plot ( ax1 , q )
% title ( ' Ciclo de trabajo ')
% ylim ( ax1 ,[0 1])
% xlim ( ax1 ,[5.3 e5 5.33 e5 ])
% grid ( ax1 , ' on ')
%
% ax2 = nexttile ;
% plot ( ax2 , vC )
% title ( ' Tensi0n en el condensador ')

68
% ylim ( ax2 ,[0.45 0.55])
% xlim ( ax2 ,[5.3 e5 5.33 e5 ])
% grid ( ax2 , ' on ')

69
Programa para el cálculo del compensador en frecuencia. MATLAB.

%Fichero realizado para el calculo del regulador compuesto por una


red de
%adelanto y atraso de fase .

%Parametros del convertidor DC - DC reductor


R = 3; %Ohm
L = 50 e -6; %H
C = 500 e -6; %F
Vin = 28; %V
f_PWM = 100 e3 ; %Hz
KPWM = 1/4;
Vo = 15; %V
Vref = 5; %V

T_PWM = 1/ f_PWM ;

D = Vo / Vin ;

H = Vref / Vo ;

%FDT control lazo abierto - tension de salida


s = tf ( 's ') ;
Gd0 = Vo / D ;

f0 = 1/(2* pi * sqrt ( L * C ) ) ;
w0 = 2* pi * f0 ;
Q0 = R * sqrt ( C / L ) ;

Gvd = Gd0 *1/(1+ s /( Q0 * w0 ) +( s / w0 ) ^2) ;

%FDT lazo cerrado Tu ( s ) sin compensador ( Gc ( s ) = 1)


Tu0 = H * Vo /( D * KPWM ) ;

Tu = Tu0 *1/(1+ s /( Q0 * w0 ) +( s / w0 ) ^2) ;

%Calculo del regulador de adelanto de fase


fc = 1/20* f_PWM ;
wc = 2* pi * fc ;
MF = 60;

fz = fc * sqrt ((1 - sin ( MF * pi /180) ) /(1+ sin ( MF * pi /180) ) ) ;


fp = fc * sqrt ((1+ sin ( MF * pi /180) ) /(1 - sin ( MF * pi /180) ) ) ;
wz = 2* pi * fz ;
wp = 2* pi * fp ;
Gc0 = ( fc / f0 ) ^2 * 1/ Tu0 * sqrt ( fz / fp ) ;

70
Gc = Gc0 *(1+ s / wz ) /(1+ s / wp ) ;

%Calculo del regulador de adelanto y atraso de fase


fL = 0.1* fc ;
wL = 2* pi * fL ;

Gcm = Gc0 ;

Gc = Gcm *(1+ s / wz ) *(1+ wL / s ) /(1+ s / wp ) ;

%Funcion de transferencia en lazo cerrado T ( s )


T = Gvd * Gc ;
bode ( T )

%Funcion de transferencia de la tension de entrada respecto de la


tension
%de salida

Gvg = D /( Tu0 * Gcm ) *1/((1+ wL / s ) *(1+ s / wz ) *(1+ s / wc ) ) ;

%Funcion de transferencia del controlador discretizada


Gz = c2d ( Gc , T_PWM , ' tustin ') ;
Gz . variable = 'z ^ -1 '
numerador = Gz . numerator ;
denominador = Gz . denominator ;
a = cell2mat ( numerador ) ; %Coeficientes del numerador
b = cell2mat ( denominador ) ; %Coeficientes del denominador

71
Programa para la emulación del convertidor DC-DC reductor en el microncon-
trolador TMS320F28379D.
CPU1. Emulación de la planta.

// En este programa se emula ( en la CPU1 ) la planta del convertidor


de potencia .
// Se emplean los siguientes perifericos :
// - ADCa : para el muestreo del PWM , que decide en que estado se
encuentra el convertidor ( muestrea por el pin ADCINA3 , pin 26 en
la placa )
// - DACa : para sintetizar la corriente en la bobina ( cuyo valor
instantaneo se almacena en la variable i_L2 ) . Se observa por el
pin 30 en la placa .
// - DACb : para sintetizar la tension en el condensador ( cuyo valor
instantaneo se almacena en la variable v_C2 ) . Se observa por el
pin 70 en la placa .

# define GLOBAL_Q 19
# include " F28x_Project . h "
# include " IQmathLib . h "

# define T 2 // Periodo de muestreo ( en us )


# define T_per 500000 // Periodo de perturbacion en el sistema ( en us )

interrupt void isrADC ( void ) ;


interrupt void isrTimer1 ( void ) ;
void ConfigGPIO () ;
void ConfigADC () ;
void ConfigDAC () ;

int estado ;
int muestra = 0;
int Perturbacion = 0;
int DACNUM = 4096;
_iq temp_V = _IQ (0) ;
_iq temp_A = _IQ (0) ;

_iq V_per = _IQ (0.7) ; // Tension incrementada sobre Vin por


perturbacion ( en V )
_iq R_per = _IQ (0.2) ;
_iq estad o _p e r tu r b ac i o n = _IQ (1) ;
_iq facto r _p e r tu r b ac i o n = _IQ ( -1) ;

_iq DACREFinv = _IQ (0.333333) ;


_iq Ts = _IQ (2) ; // Periodo de muestreo = 2 us

// Parametros del convertidor

72
_iq Vin = _IQ (1) ; //1 V
_iq Linv = _IQ (0.05) ; //1/(0.2 mH )
_iq Cinv = _IQ (1) ; //1/(100 uF )
_iq Rinv = _IQ (1) ; //1/(1 Ohm )

_iq factor = _IQ (0.001) ;


// Condiciones iniciales nulas para la emulacion
_iq i_L1 = _IQ (0) ;
_iq v_C1 = _IQ (0) ;
_iq i_L2 = _IQ (0) ;
_iq v_C2 = _IQ (0) ;
_iq i_L2_A = _IQ (0) ;
_iq v_C2_V = _IQ (0) ;

_iq num1 = _IQ (2) ;


_iq num2 = _IQ (0.0001) ;

void main ( void )


{
// 1. Inicializar el sistema
InitSysCtrl () ;

InitEPwm1Gpio () ;

// Transferir perifericos EMPW1 y ADCB a la CPU2


EALLOW ;
DevCfgRegs . CPUSEL0 . bit . EPWM1 = 1;
DevCfgRegs . CPUSEL11 . bit . ADC_B = 1;
EDIS ;

// 2. Deshabilitar interrupciones
DINT ;
InitPieCtrl () ;
IER = 0 x0000 ;
IFR = 0 x0000 ;

// 3. Configurar perifericos

InitPieVectTable () ;

ConfigGPIO () ;

InitCpuTimers () ;
ConfigCpuTimer (& CpuTimer0 ,200 , T ) ;
ConfigCpuTimer (& CpuTimer1 ,200 , T_per ) ;

73
ConfigADC () ;

ConfigDAC () ;

// 4. Habilitar interrupciones
EALLOW ;
PieVectTable . ADCA1_INT = & isrADC ;
PieVectTable . TIMER1_INT = & isrTimer1 ;
EDIS ;

PieCtrlRegs . PIEIER1 . bit . INTx1 = 1; // Habilitamos el


evento del grupo 1 del PIE que esta en la posicion
numero 1 ( para el ADCA1 )

// La interrupcion del Timer1 ( TINT1 ) no pasa por el PIE


( INT1 -12) , sino por la linea de interrupcion INT13
IER = 0 x1001 ;
EINT ;

// 5. Bucle sin fin


CpuTimer0Regs . TCR . bit . TSS = 0; // Arrancar Timer0 para el
muestreo del ADC
CpuTimer1Regs . TCR . bit . TSS = 0; // Arrancar Timer1 para
las perturbaciones

while (1) {
}
}

void ConfigGPIO () {

EALLOW ;
// GPIO0 como PWM1A
GpioCtrlRegs . GPAPUD . bit . GPIO0 = 1; // Deshabilitar Pullup
GpioCtrlRegs . GPAGMUX1 . bit . GPIO0 = 0; // Grupo de perifericos
00
GpioCtrlRegs . GPAMUX1 . bit . GPIO0 = 1; // Funcion tipo PWM ( Pin
40 en la placa )

// GPIO1 como Trigger Perturbacion , pin 39 en la placa


GpioCtrlRegs . GPAPUD . bit . GPIO1 = 1;
GpioCtrlRegs . GPAGMUX1 . bit . GPIO1 = 0;
GpioCtrlRegs . GPAMUX1 . bit . GPIO1 = 0; // Tipo E / S
GpioCtrlRegs . GPADIR . bit . GPIO1 =1; // Tipo Salida

// GPIO2 y 3 se emplean para determinar tiempos de conjuntos


de instrucciones en la ISR .
GpioCtrlRegs . GPAPUD . bit . GPIO2 = 1;

74
GpioCtrlRegs . GPAGMUX1 . bit . GPIO2 = 0;
GpioCtrlRegs . GPAMUX1 . bit . GPIO2 = 0; // Tipo E / S
GpioCtrlRegs . GPADIR . bit . GPIO2 =1; // Tipo Salida

GpioCtrlRegs . GPAPUD . bit . GPIO3 = 1;


GpioCtrlRegs . GPAGMUX1 . bit . GPIO3 = 0;
GpioCtrlRegs . GPAMUX1 . bit . GPIO3 = 0; // Tipo E / S
GpioCtrlRegs . GPADIR . bit . GPIO3 =1; // Tipo Salida
EDIS ;

void ConfigADC () {

EALLOW ;
// Ahora se configura el A / D para que muestree con trigger
del Timer0
AdcaRegs . ADCSOC0CTL . bit . CHSEL = 3; // Configuramos el SOC0
, con el canal ADCINA3 ( Pin 26 en la placa )
AdcaRegs . ADCSOC0CTL . bit . TRIGSEL = 1; // Para que funcione con
el CPU1 Timer0
AdcaRegs . ADCSOC0CTL . bit . ACQPS = 50; // Ventana de
adquisicion de 75 ns + 1 ciclo SYSCLK ( ACQPS para
ADC_RESOLUTION 12 BIT )
// Configuramos las interrupciones del ADC
AdcaRegs . ADCINTSEL1N2 . bit . INT1E = 1; // Habilitamos las
interrupciones
AdcaRegs . ADCINTSEL1N2 . bit . INT1SEL = 0; // Interrupciones por
la linea INT1
AdcaRegs . ADCINTSEL1N2 . bit . INT1CONT = 0; // Clear al flag
despues de cada interrupcion ( enable del modo de muestreo
continuo )
AdcaRegs . ADCCTL1 . bit . INTPULSEPOS = 1; // Manda el pulso de
interrupcion al final de la conversion

AdcaRegs . ADCCTL1 . bit . ADCPWDNZ = 1; // Arrancar el A / D


DELAY_US (1000) ; // Delay de 1 ms para permitir que el A / D
arranque
EDIS ;

void ConfigDAC () {

EALLOW ;
// Configuracion del DAC A ( para iL )
DacaRegs . DACCTL . bit . LOADMODE = 0; // Sincronizado con SYSCLK
, no con PWM

75
DacaRegs . DACCTL . bit . DACREFSEL = 1; // Usar como tensiones de
referencia las del ADC = > VREFHI , VREFLO
DacaRegs . DACOUTEN . bit . DACOUTEN = 1; // Enable del DACOUT
DELAY_US (100) ; // Delay de 0.1 ms para permitir que el DAC
arranque
// Configuracion del DAC B ( para vC )
DacbRegs . DACCTL . bit . LOADMODE = 0; // Sincronizado con SYSCLK
, no con PWM
DacbRegs . DACCTL . bit . DACREFSEL = 1; // Usar como tensiones de
referencia las del ADC = > VREFHI , VREFLO
DacbRegs . DACOUTEN . bit . DACOUTEN = 1; // Enable del DACOUT
DELAY_US (100) ; // Delay de 0.1 ms para permitir que el DAC
arranque

EDIS ;

interrupt void isrADC () {


// Codigo de la interrupcion
// GpioDataRegs . GPATOGGLE . bit . GPIO3 = 1;
// GpioDataRegs . GPATOGGLE . bit . GPIO2 = 1;
estado = AdcaResultRegs . ADCRESULT0 ;
if ( estado == 0) {
// Aplicar ecuaciones en diferencias para estado nivel BAJO
i_L2 = i_L1 - _IQmpy ( _IQmpy ( _IQmpy ( Linv , Ts ) , factor ) , v_C1 ) ;
// en mA
// i_L2 = i_L1 - _IQmpy (0.0001 , v_C1 ) ; // en mA
v_C2 = v_C1 + _IQmpy ( _IQmpy ( Cinv , Ts ) , i_L1 ) - _IQmpy ( _IQmpy (
_IQmpy ( Cinv , Ts ) , Rinv ) , v_C1 ) ; // en mV
// v_C2 = v_C1 + _IQmpy (2 , i_L1 ) - _IQmpy (2 , v_C1 ) ; // en mV
}
else {
// Aplicar ecuaciones en diferencias para estado nivel ALTO
i_L2 = i_L1 + _IQmpy ( _IQmpy ( Linv , Ts ) , Vin ) - _IQmpy ( _IQmpy (
_IQmpy ( Linv , Ts ) , factor ) , v_C1 ) ; // en mA
// i_L2 = i_L1 + _IQ (0.1) - _IQmpy (0.0001 , v_C1 ) ; // en mA
v_C2 = v_C1 + _IQmpy ( _IQmpy ( Cinv , Ts ) , i_L1 ) - _IQmpy ( _IQmpy (
_IQmpy ( Cinv , Ts ) , Rinv ) , v_C1 ) ; // en mV
// v_C2 = v_C1 + _IQmpy (2 , i_L1 ) - _IQmpy (2 , v_C1 ) ; // en mV
}
// Comprobar modo de conduccion
if ( i_L2 < 0) {
i_L2 = 0;
}
i_L1 = i_L2 ;
v_C1 = v_C2 ;

76
i_L2_A = _IQmpy ( i_L2 , factor ) ; // Resultado en A
v_C2_V = _IQmpy ( v_C2 , factor ) ; // Resultado en V
// GpioDataRegs . GPATOGGLE . bit . GPIO2 = 1;

// Escribir valores en el buffer del DAC


// En el DACa se escribe la corriente en la bobina i_L
temp_A = _IQmpyI32int ( _IQmpy ( i_L2_A , DACREFinv ) , DACNUM ) ;
DacaRegs . DACVALS . bit . DACVALS = temp_A ;

// En el DACb se escribe la tension en el condensador v_C


temp_V = _IQmpyI32int ( _IQmpy ( v_C2_V , DACREFinv ) , DACNUM ) ;
DacbRegs . DACVALS . bit . DACVALS = temp_V ;

// GpioDataRegs . GPATOGGLE . bit . GPIO2 = 1;


PieCtrlRegs . PIEACK . bit . ACK1 =1; // Acknowledge del PIE de la
linea de interrupcion INT1
AdcaRegs . ADCINTFLGCLR . bit . ADCINT1 =1; // Acknowledge del ADCa de
su interrupcion

// Comprobar si ha habido overflow en el ADC , al estar


muestreando en modo continuo //
if ( AdcaRegs . ADCINTOVF . bit . ADCINT1 == 1) {
AdcaRegs . ADCINTOVFCLR . bit . ADCINT1 = 1; // Hace un clear sobre
el bit de overflow
AdcaRegs . ADCINTFLGCLR . bit . ADCINT1 =1; // Acknowledge del
ADCa de su interrupcion
}
// GpioDataRegs . GPATOGGLE . bit . GPIO2 = 1;
// GpioDataRegs . GPATOGGLE . bit . GPIO3 = 1;

interrupt void isrTimer1 () {


if ( Perturbacion == 1) {
GpioDataRegs . GPATOGGLE . bit . GPIO1 = 1;
muestra ++;
estad o _p e r tu r b ac i o n = _IQmpy ( estado_perturbacion ,
fa ct o r _p e r tu r b ac i o n ) ;
Vin = Vin + _IQmpy ( estado_perturbacion , V_per ) ; // Para provocar
una perturbacion en la alimentacion
// Rinv = Rinv + _IQmpy ( estado_perturbacion , R_per ) ; // Para
provocar una perturbacion en la carga
}
}

77
CPU2. Emulación del controlador.

// En este programa se simula ( en la CPU2 ) el controlador de la


tension del condensador .
// Se emplean los siguientes perifericos :
// - ePWM1a : genera PWM que es muestrada por la CPU1 . Se sintetiza en
el pin 40 en la placa .
//
// - ADCb : muestrea ( por el pin 25 en la placa ) la tension del
convertidor en cada periodo
// PWM , generada desde el pin 70 en la placa .

# define GLOBAL_Q 19
# include " F28x_Project . h "
# include " IQmathLib . h "

interrupt void isrADC ( void ) ;


void ConfigADC () ;
void ConfigEPWM1 () ;

int LAZO_CERRADO = 0;
Uint16 val_TBPRD = 2500; // Se define por defecto a 2500 para una
f_PWM de 20 kHz en modo de cuenta ascendente - descendente .
Uint16 v_C_int = 0;
Uint16 DACREF = 3;

_iq DACNUMinv = _IQ (0.000244140625) ;


_iq val_CMPA = 1250; // Se define por defecto a 1250 para un ciclo de
trabajo inicial de 0.5

_iq v_C_ref = _IQ (0.3) ; // Consigna de tension ( V )


_iq error = _IQ (0) ; // Error del control ( Vc_ref - Vc_medido )
_iq error_1 = _IQ (0) ;
_iq error_2 = _IQ (0) ;

_iq v_C_V = _IQ (0) ;


_iq T_PWM = _IQ (0.00005) ;
_iq d = _IQ (0) ;
_iq d_1 = _IQ (0) ;
_iq d_2 = _IQ (0) ;

// Parametros del controlador


_iq term1 = _IQ (1.686) ;
_iq term2 = _IQ ( -3.147) ;
_iq term3 = _IQ (1.466) ;
_iq term4 = _IQ (1.373) ;
_iq term5 = _IQ ( -0.3734) ;

78
void main ( void )
{

// 1. Inicializar el sistema
InitSysCtrl () ;

// 2. Deshabilitar interrupciones
DINT ;
InitPieCtrl () ;
IER = 0 x000 ;
IFR = 0 x000 ;

// 3. Configurar perifericos

InitPieVectTable () ;

ConfigEPWM1 () ;
ConfigADC () ;

// 4. Habilitar interrupciones
EALLOW ;
PieVectTable . ADCB1_INT = & isrADC ;
EDIS ;

PieCtrlRegs . PIEIER1 . bit . INTx2 = 1; // Habilito el


evento del grupo 1 del PIE que esta en la
posicion numero 2 ( para el ADCB1 )
IER = M_INT1 ;
EINT ;

// 5. Bucle sin fin


while (1) {

void ConfigEPWM1 () {

// Configuramos el modulo ePWM1


EALLOW ;
EPwm1Regs . TBCTL . bit . CLKDIV =000;
EPwm1Regs . TBCTL . bit . HSPCLKDIV =000;
EPwm1Regs . TBCTL . bit . CTRMODE = TB_FREEZE ;
EPwm1Regs . TBPRD = val_TBPRD ;
EPwm1Regs . CMPA . bit . CMPA = val_CMPA ;
EPwm1Regs . AQCTLA . bit . CAU = AQ_CLEAR ;

79
EPwm1Regs . AQCTLA . bit . CAD = AQ_SET ;
EPwm1Regs . TBCTL . bit . CTRMODE =10;
EPwm1Regs . CMPCTL . bit . LOADAMODE = CC_CTR_ZERO ; // Para que
cargue el valor del nuevo CMPA en el siguiente paso por
cero
EPwm1Regs . CMPCTL . bit . SHDWAMODE = CC_SHADOW ; // Para que pueda
almacenar en buffer el nuevo valor de CMPA a la espera
de ser actualizado en el siguiente paso por cero .
EPwm1Regs . ETSEL . bit . SOCAEN =1; // Habilitamos que el PWM
controle el SOC del ADC
EPwm1Regs . ETSEL . bit . SOCASEL =2; // Lanza el SOC en TBCTR =
CMPA y en TB_COUNT_UP
EPwm1Regs . ETPS . bit . SOCAPRD =1;

EDIS ;

// Activa el contador de todos los PWM que pertenecen al mismo


subsistema de CPU , en este caso solo PMW1 , que es el unico
que se ha traspasado a la CPU2 .
EALLOW ;
CpuSysRegs . PCLKCR0 . bit . TBCLKSYNC = 1;
EDIS ;
}

void ConfigADC () {

EALLOW ;
// Ahora se configura el A / D para que muestree con trigger
del EPWM1SOCA
AdcbRegs . ADCSOC0CTL . bit . CHSEL = 3; // Configuramos el
SOC0 , con el canal ADCINB3 ( Pin 25 en la placa )
AdcbRegs . ADCSOC0CTL . bit . TRIGSEL = 5; // Para que funcione
con el SOC del PWM1
AdcbRegs . ADCSOC0CTL . bit . ACQPS = 50; // Ventana de
adquisicion de 75 ns + 1 ciclo SYSCLK ( ACQPS para
ADC_RESOLUTION 12 BIT )
// Configuramos las interrupciones del ADC
AdcbRegs . ADCINTSEL1N2 . bit . INT1E = 1; // Habilitamos las
interrupciones
AdcbRegs . ADCINTSEL1N2 . bit . INT1SEL = 0; // Interrupciones por
la linea INT1
AdcbRegs . ADCINTSEL1N2 . bit . INT1CONT = 0; // Clear al flag
despues de cada interrupcion ( enable del modo de
muestreo continuo )
AdcbRegs . ADCCTL1 . bit . INTPULSEPOS = 1; // Manda el pulso de
interrupcion al final de la conversion

AdcbRegs . ADCCTL1 . bit . ADCPWDNZ = 1; // Arrancar el A / D

80
DELAY_US (1000) ; // Delay de 1 ms para permitir que el A / D
arranque
EDIS ;

interrupt void isrADC () {


// Codigo del control de la tension v_C

v_C_int = AdcbResultRegs . ADCRESULT0 ;

if ( LAZO_CERRADO == 1) {

v_C_V = _IQmpyI32 ( _IQ12toIQ ( v_C_int ) , DACREF ) ;


// Ya tenemos el valor de tension en Voltios correspondiente al
valor en int que almacena el ADCb tras el muestreo .

// Operaciones matematicas para el control . Se obtiene una


variable _iq " d " que es el ciclo de trabajo , entre 0 y 1.
error = v_C_ref - v_C_V ;

d = _IQmpy ( term1 , error ) + _IQmpy ( term2 , error_1 ) + _IQmpy ( term3 ,


error_2 ) + _IQmpy ( term4 , d_1 ) + _IQmpy ( term5 , d_2 ) ;

// Se satura por arriba y por abajo el ciclo de trabajo


recalculado
if ( d > _IQ (0.99) )
d = _IQ (0.99) ;
if ( d < _IQ (0.01) )
d = _IQ (0.01) ;
// Actualizamos las variables de error y ciclo de trabajo para
la siguiente iteracion
error_2 = error_1 ;
error_1 = error ;
d_2 = d_1 ;
d_1 = d ;

// Se actualiza el valor de CMPA del PWM1 :

val_CMPA = _IQmpyI32int (d , val_TBPRD ) ; // En cuenta ascendente -


descendente : CMPA = d * TBPRD
}
else
val_CMPA = 1250;

// Se escribe el valor del nuevo CMPA en el PWM para que lo


cargue en el siguiente ciclo .

81
EALLOW ;
EPwm1Regs . CMPA . bit . CMPA = val_CMPA ;
EDIS ;

PieCtrlRegs . PIEACK . bit . ACK1 =1; // Acknowledge del PIE de


la linea de interrupcion INT1
AdcbRegs . ADCINTFLGCLR . bit . ADCINT1 =1; // Acknowledge del ADCb de
su interrupcion

// Comprobar si ha habido overflow , al estar muestreando en


modo continuo //
if ( AdcbRegs . ADCINTOVF . bit . ADCINT1 == 1) {
AdcbRegs . ADCINTOVFCLR . bit . ADCINT1 = 1; // Hace un clear
sobre el bit de overflow
AdcbRegs . ADCINTFLGCLR . bit . ADCINT1 =1; // Acknowledge del
ADCb de su interrupcion
}
// EPwm1Regs . ETCLR . bit . SOCA =1; // Clear del flag de EPWMSOCA
}

82
Programa para la simulación en lazo cerrado del convertidor DC-DC reductor. MATLAB.

clear all ;
clc
close all ;

R = 1; %Ohm
L = 20 e -3; %H
C = 1e -06; %F

Vin = 1; %V

%FDT en lazo abierto


A_sys =[0 -1/ L ; 1/ C -1/( R * C ) ];
B_sys =[ Vin / L ;0];
C_sys =[0 1];
D_sys =0;
sistema = ss ( A_sys , B_sys , C_sys , D_sys ) ;
[ num , den ]= tfdata ( sistema ) ;
G = tf ( num , den )

f_PWM = 10 e3 ; %Hz
T_PWM = 1/ f_PWM ;
Tf = 3e -3;
Ts = 2e -6;
t = 0 : Ts : Tf ;

%Discretizando la f u n c i n de transferencia

Gz = c2d (G , T_PWM , ' tustin ') ;


Gz . variable = 'z ^ -1 '
numerador = Gz . numerator ;
denominador = Gz . denominator ;
a = cell2mat ( numerador ) ;
b = cell2mat ( denominador ) ;

% D i s e o del regulador
s = tf ( 's ') ;
fc = 1/10* f_PWM ;
wc = 2* pi * fc ;
MF = 60;
fz = fc * sqrt ((1 - sin ( MF * pi /180) ) /(1+ sin ( MF * pi /180) ) ) ;
fp = fc * sqrt ((1+ sin ( MF * pi /180) ) /(1 - sin ( MF * pi /180) ) ) ;
wz = 2* pi * fz ;
wp = 2* pi * fp ;
f0 = 1/(2* pi * sqrt ( L * C ) ) ;
fL = 1/10* fc ;
wL = 2* pi * fL ;

83
Gcm = ( fc / f0 ) ^2 * sqrt ( fz / fp ) ;
Gc = Gcm *(1+ s / wz ) *(1+ wL / s ) /(1+ s / wp )

Gcz = c2d ( Gc , T_PWM , ' tustin ') ;


Gcz . variable = 'z ^ -1 '
numerador = Gcz . numerator ;
denominador = Gcz . denominator ;
k = cell2mat ( numerador ) ; %Coeficientes del numerador
m = cell2mat ( denominador ) ; %Coeficientes del denominador

%Condiciones iniciales
y_1 = 0.5; %y [n -1]
y_2 = 0.5; %y [n -2]
u_1 = 0.5; %u [n -1]
u_2 = 0.5; %u [n -2]
e_1 = 0; %e [n -1]
e_2 = 0; %e [n -2]

% T e n s i n de referencia yref
yref1 = 0.5* ones (1 ,( length ( t ) -1) /2 +1) ;
yref2 = 0.3* ones (1 ,( length ( t ) -1) /2) ;
yref = horzcat ( yref1 , yref2 ) ;

for i = 1: length ( t )
if i == 1
e ( i ) = yref ( i ) - y_1 ;
u ( i ) = ( k (1) / m (1) ) * e ( i ) + ( k (2) / m (1) ) * e_1 + ...
( k (3) / m (1) ) * e_2 - ...
( m (2) / m (1) ) * u_1 - ( m (3) / m (1) ) *
u_2 ;
if u ( i ) > 0.999
u ( i ) = 0.999;
elseif u ( i ) < 0.001
u ( i ) = 0.001;
end
y ( i ) = ( a (1) / b (1) ) * u ( i ) + ( a (2) / b (1) ) * u_1 + ...
( a (3) / b (1) ) * u_2 - ...
( b (2) / b (1) ) * y_1 - ( b (3) / b (1) ) *
y_2 ;
elseif i == 2
e ( i ) = yref ( i ) - y (i -1) ;
u ( i ) = ( k (1) / m (1) ) * e ( i ) + ( k (2) / m (1) ) * e (i -1) + ...
( k (3) / m (1) ) * e_1 - ...
( m (2) / m (1) ) * u (i -1) - ( m (3) / m (1)
) * u_1 ;
if u ( i ) > 0.999
u ( i ) = 0.999;
elseif u ( i ) < 0.001

84
u ( i ) = 0.001;
end
y ( i ) = ( a (1) / b (1) ) * u ( i ) + ( a (2) / b (1) ) * u (i -1) + ...
( a (3) / b (1) ) * u_1 - ( b (2) / b (1) ) * y (i -1) - ( b (3) / b (1) ) * y_1 ;
else
e ( i ) = yref ( i ) - y (i -1) ;
u ( i ) = ( k (1) / m (1) ) * e ( i ) + ( k (2) / m (1) ) * e (i -1) + ...
( k (3) / m (1) ) * e (i -2) - ...
( m (2) / m (1) ) * u (i -1) - ( m (3) / m (1) ) * u
(i -2) ;
if u ( i ) > 0.999
u ( i ) = 0.999;
elseif u ( i ) < 0.001
u ( i ) = 0.001;
end
y ( i ) = ( a (1) / b (1) ) * u ( i ) + ( a (2) / b (1) ) * u (i -1) + ...
( a (3) / b (1) ) * u (i -2) - ( b (2) / b (1) ) * y (i -1) - ( b (3) / b (1) ) * y (i
-2) ;
end
end

plot (t , y )
axis ([0 3e -3 0 0.8])

85

También podría gustarte