Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018...

19
SISTEMAS ELECTRÓNICOS - N MÁSTER EN INGENIERÍA INDUSTRIAL Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo: INSTRUCCIONES No abra el cuadernillo hasta que se le indique. El examen consiste en un sistema electrónico que se ha dividido en dos problemas con un valor total de diez puntos. Se recomienda leer el enunciado completo antes de empezar a resolver el examen. Cada uno de los problemas deberá realizarse en una hoja de solución diferente. Aparte del enunciado y las hojas de solución, sobre la mesa solo podrá disponer del material de escritura estrictamente necesario (puede resolver el examen a lápiz si lo prefiere), una hoja tamaño A4 con anotaciones sobre la parte analógica y una calculadora no programable. Cualquier otro objeto (incluido el estuche) deberá encontrarse fuera de su alcance, en el interior de una bolsa o mochila cerrada que se depositará en un extremo del aula o debajo de su silla, durante la realización del examen. Las cajoneras, y las mesas y sillas de separación, se mantendrán completamente vacías. Los dispositivos electrónicos que dispongan de un módulo de comunicaciones (teléfonos móviles, tabletas, ordenadores, relojes inteligentes. . . ) permanecerán apagados. Salvo en situaciones excepcionales, no podrá ausentarse del aula. Si termina el examen más de 15 minutos antes de la hora oficial de finalización y quiere abandonar el aula, deberá avisar al profesor sin levantarse de su asiento y entregar, con su nombre correctamente consignado, el enunciado, las notas de acondicionamiento de sensores y cualquier hoja adicional que haya utilizado. No desgrape el cuadernillo. Calificación: Examen final SE-N, diciembre 2018 Curso 2018/2019 1 de 19

Transcript of Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018...

Page 1: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

Examen final SE-N, diciembre 2018(Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri)

Nombre: Grupo:

INSTRUCCIONES

No abra el cuadernillo hasta que se le indique.

El examen consiste en un sistema electrónico que se ha dividido en dos problemas con un valortotal de diez puntos.

Se recomienda leer el enunciado completo antes de empezar a resolver el examen.

Cada uno de los problemas deberá realizarse en una hoja de solución diferente.

Aparte del enunciado y las hojas de solución, sobre la mesa solo podrá disponer del materialde escritura estrictamente necesario (puede resolver el examen a lápiz si lo prefiere), una hojatamaño A4 con anotaciones sobre la parte analógica y una calculadora no programable.Cualquier otro objeto (incluido el estuche) deberá encontrarse fuera de su alcance, en el interiorde una bolsa o mochila cerrada que se depositará en un extremo del aula o debajo de su silla,durante la realización del examen. Las cajoneras, y las mesas y sillas de separación, se mantendráncompletamente vacías.

Los dispositivos electrónicos que dispongan de un módulo de comunicaciones (teléfonos móviles,tabletas, ordenadores, relojes inteligentes. . . ) permanecerán apagados.

Salvo en situaciones excepcionales, no podrá ausentarse del aula.

Si termina el examen más de 15 minutos antes de la hora oficial de finalización y quiere abandonar elaula, deberá avisar al profesor sin levantarse de su asiento y entregar, con su nombre correctamenteconsignado, el enunciado, las notas de acondicionamiento de sensores y cualquier hoja adicional quehaya utilizado.

No desgrape el cuadernillo.

Calificación:

Examen final SE-N, diciembre 2018Curso 2018/2019

1 de 19

Page 2: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

Introducción

Figura 1. Caldera con indicación de lossensores y actuadores.

Según los meteorólogos, este invierno será especialmentegélido en nuestro país, y es previsible que en los próximosmeses suframos varias olas de frío polar.1. Ante estaperspectiva, una empresa de climatización quiere adelantarsea sus competidores y aumentar su cuota de mercadomejorando la eficiencia y la seguridad de sus calderas decondensación de última generación.

La idea consiste en incorporar un sistema mínimamenteinvasivo —para que sea compatible con sus modelos decaldera más populares— que permita controlar la mezclade aire y gas durante la combustión, y la potencia de lacaldera en función de la demanda de energía térmica dela vivienda (alguien se está dando una ducha con aguacaliente, están encendidos los radiadores, o ambas cosas).Como no cuentan con ningún ingeniero en plantilla que sepade Sistemas Electrónicos, han contactado con usted para quediseñe un prototipo funcional que puedan probar antes deque acabe el año.

Especificaciones de hardwareLos sensores y actuadores del sistema se conectarán a un microcontrolador dsPIC33FJ128MC802 de

la siguiente forma:

AN0: Un sistema de percepción para determinar el color de la llama (que está relacionado con lacalidad de la combustión) construido con fotodiodos (problema 1.1). Cuando la combustión esóptima proporciona una salida de 1,65 V. A medida que la mezcla se hace más pobre en oxígeno, latensión aumenta, y si se enriquece (hay un exceso de oxígeno), disminuye.

AN1: Un termopar tipo J acondicionado para medir la temperatura en la cámara de combustióndesde 400 C con una sensibilidad de 7,5 mV/C (problema 1.2).

RB2: Una señal digital proveniente del termostato que proporciona un ‘1’ lógico cuando los radiadoresestán encendidos.

RB3: Una señal digital que da un ‘1’ lógico cuando se está consumiendo agua caliente sanitaria (ACS).

RB4: Un interruptor etiquetado como ON/OFF que da un nivel alto cuando se activa.

RB5: Un LED de notificación rojo, activo a nivel bajo.

RB10: Una servomotor que controla la entrada de aire a la caldera. El servomotor se controla conuna señal PWM que ha de variar entre el 0 % (válvula cerrada) y 100 % (válvula abierta).

RB12: Una señal digital, activa a nivel alto, para encender el quemador.

1Una ola de frío es un episodio de tres o más días de duración en los en los que al menos el 10 % de las estacionesmeteorológicas consideradas registran temperaturas mínimas por debajo del percentil 5, calculado a partir de la seriehistórica de los meses de enero y febrero del periodo 1971–2000. Fuente: tiempo.com (https://www.tiempo.com/noticias/divulgacion/tipos-de-olas-de-frio-en-espana.html)

2 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 3: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

RB14: Un circuito (problema 1.3) para controlar la válvula de gas. Dicha válvula se controla medianteuna señal analógica de 0 a 24 V, la cual se genera mediante una señal PWM en este pin.

Especificaciones de software

Al alimentar el sistema, el quemador comenzará apagado y las entradas de gas y de aire estaráncerradas.

Cuando se active el interruptor ON/OFF se arrancará la caldera. La caldera permanecerá encendidamientras el interruptor esté activo o hasta que se produzca un fallo de funcionamiento.

Mientras la caldera esté en funcionamiento, será necesario ejecutar dos tareas de control: una paracontrolar la entrada de aire en función del color de la llama mediante un control PI y otra paracontrolar la entrada de gas en función de las señales digitales que indican si están funcionando losradiadores y/o el agua caliente sanitaria.

Afortunadamente el diseño del controlador de la entrada de aire ya ha sido realizado, resultando enunas ganancias de:

• KP = 1,23.

• KI = 3,27.

Dichas ganancias están diseñadas teniendo en cuenta que el periodo de muestreo es de 1 ms, el colorde la llama está medido en lx y la salida del controlador es el factor de servicio del PWM, que varíaentre 0 y 100 %. El PWM se configurará con una frecuencia de conmutación de 10 kHz. Por último, lareferencia del sistema será constante y se establecerá a 0 lx para conseguir el color de llama óptimo.

Si en la tarea de control de la entrada de aire el controlador satura durante más de 2 s, se consideraráque ha ocurrido un fallo en la combustión.

La tarea de control de la entrada de gas se ejecutará con un periodo de muestreo de 250 ms. Estatarea se limitará a leer el estado de las entradas digitales, que indican si están los radiadoresencendidos y/o está consumiéndose agua caliente sanitaria, y regular la electroválvula variando latensión de salida necesaria en el pin RB14.

La tarea anterior también se encargará de vigilar si la temperatura de la cámara de combustión llegaa su valor esperado. Si pasados 30 s después de cambiar la consigna de temperatura (bueno, enrealidad se cambia la demanda energética) se detecta que la temperatura no llega al valor esperado,con un margen de error del ±5 %, se considerará que ha ocurrido un fallo de temperatura. Lastemperaturas esperadas se muestran en la siguiente tabla:

Tabla 1. Señales de control para la válvula de entrada de gas.

Demanda energética Tensión Válvula Temperatura CC [C]

Ninguna 0 V –Agua caliente sanitaria 6 V 500Calefacción (radiadores) 12 V 600Agua caliente y calefacción 24 V 700

Examen final SE-N, diciembre 2018Curso 2018/2019

3 de 19

Page 4: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

Cuando se apague la caldera, o bien por un fallo de funcionamiento o bien por la desactivación delinterruptor ON/OFF , se desconectarán el quemador y las entradas de aire y gas. En caso de apagadopor un fallo de funcionamiento se indicará en el LED la causa del fallo en código Morse, según latabla siguiente:

Tabla 2. Códigos de error en Morse.

Error Inicial Código Morse

Combustión C – . – .Temperatura T –

Un punto (.) tendrá una duración de 250 ms; una raya (–) y la separación entre símbolos del códigoMorse, el triple de esa cantidad; finalmente, el espacio entre letras será de cinco veces la duración deun punto.

Del encendido del LED en código Morse se encargará una tarea, la cual recibirá mediante una colaun carácter para indicar el mensaje a generar con el LED. Así, cuando se reciba el carácter ’C’ segenerará la letra C en Morse, cuando se reciba el carácter ’T’ se generará la letra T en Morse ycuando se reciba un carácter espacio se apagará el LED por completo. Cada vez que se reciba uncarácter, éste se reproducirá en el LED continuamente hasta que llegue otro carácter distinto.

Por último, existirá una tarea encargada de gestionar el estado de la caldera, que podrá estarencendida (ON), apagada (OFF) o en modo fallo (FALLO); en función del estado de los controladoresy del interruptor ON/OFF . Tenga en cuenta que el estado de la caldera tendrá que ser compartidopor el resto de tareas del sistema. Esta tarea se ejecutará con un periodo de muestreo de 1 s. Porúltimo, esta tarea será la encargada de gestionar el encendido y apagado del quemador, en funcióndel estado en el que esté la caldera.

Problema 1. Parte analógica --- (5 puntos)

Resuelva este problema en unos de los cuadernillos de color azul indicando claramente “analógica”en la primera página.

1.1. Control del color de la llama.

Para poder percibir el color de la llama, se han colocado dos filtros (uno azul y otro amarillo) entrela llama y sendos fotodiodos idénticos con sensibilidad k = 10 nA/lx. Durante el proceso de calibraciónde los sensores, se ha descubierto que la mezcla de gas y aire es óptima cuando la luz que atraviesa elfiltro amarillo (Y) es el doble de la que llega al fotodiodo situado detrás del filtro azul (B). En otraspalabras, si se expresa la diferencia con la siguiente ecuación

∆L = LY − 2LB (1)

la combinación correcta se da cuando ∆L = 0. En vista de este hallazgo, se ha decidido utilizar elcircuito de la Figura 2, en el que falta determinar el valor de los componentes.

a) (2 puntos) Calcular RB, RY , R1, R2 y E de forma que:

No sature ningún operacional si el rango de medida de ambos fotodiodos va de 0 a 1000 lx.

4 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 5: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

+

OA1

RB

vb

+

OA2

RY

vy

LB

LY

blue

yello

w

+

OA3

R2R1

R2

E

R1 voc

Figura 2. Circuito de acondicionamiento para detectar el color de la llama. Todos los operacionales son rail-to-raily alimentados entre 0 y 3,3 V.

La salida voc sea proporcional a ∆L con una sensibilidad de 10 mV/lx.

La salida valga 1,65 V cuando la combustión sea óptima.

Como los fotodiodos están polarizados en modo fotovoltaico (VD = 0 V), no hay corriente deoscuridad y la única intensidad que circula es la fotocorriente. Por tanto, las ecuaciones de la salida delos operacionales OA1 y OA2 son, respectivamente:

vb = RB · k · LB (2)

vy = RY · k · LY (3)

Nótese que ambas tensiones son positivas porque la fotocorriente es siempre inversa. En este caso,circula del terminal negativo de los operacionales hacia tierra. De hecho, de no ser así, como losamplificadores están alimentados entre 0 V y 3,3 V, saturarían porque la tensión de salida sería siemprenegativa.

Por otro lado, la ecuación de voc se puede calcular fácilmente por superposición de las tres fuentesindependientes vy, vb y E.

voc =R2

R1 +R2

(R2

R1+ 1

)vy −

R2

R1vb +

R1

R1 +R2

(R2

R1+ 1

)E (4)

Desarrollando los términos y simplificando se llega a la siguiente expresión:

voc =R2

R1 +R2

(

R2 +R1

R1

)vy −

R2

R1vb +

ZZR1

R1 +R2

(

R2 +R1

ZZR1

)E =

R2

R1(vy − vb) + E (5)

Sustituyendo vy y vb:

voc =R2

R1k (RY LY −RBLB) + E (6)

Examen final SE-N, diciembre 2018Curso 2018/2019

5 de 19

Page 6: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

De (6) se deduce que para que la salida sea proporcional a ∆L = LY − 2LB, RB = 2RY con lo que laexpresión de voc queda reducida a:

voc =R2

R1k RY (LY − 2LB)︸ ︷︷ ︸

∆L

+E (7)

Entre OA1 y OA2, el operacional que saturará antes es aquel que tiene una R mayor, es decir, el queestá conectado al sensor azul (OA1). Sustityendo LB = 1000 lx en (2):

vb = RB · 10 nA/lx · 1000 lx ≤ 3,3 V⇒ RB ≤ 330 kΩ⇒ RB = 330 kΩ RY = 165 kΩ (8)

Para tener que amplificar menos en etapas posteriores, se cogerá el valor máximo para RB. De estemodo, los errores del operacional OA3 influirán menos en la medida.

La segunda restricción del enunciado es la de la sensibilidad a la salida:

dvocd∆L

= 10 mV/lx =R2

R1k RY (9)

R2

R1=

10 · 10−3

165 · 103 · 10 · 10−9 ≈ 6,06⇒ R2 ≈ 6 kΩ R1 = 1 kΩ (10)

Finalmente, sustituyendo en (7) para ∆L = 0 se tiene que E = 1,65 V para que la salida valga1,65 V cuando la combustión es óptima.

b) (0.5 puntos) Modificar el circuito para substituir la batería E con un circuito (lo más sencilloposible — ¡no hace falta ni un operacional!) que utilice la fuente de alimentación de 3,3 V.

Aplicando Thévènin (al revés):

R2

E

1,65 V

es igual a

2R2

VCC

3,3 V

2R2

1.2. Termopar (1,5 puntos)

Como las temperaturas dentro de la cámara de combustión son muy elevadas, la medida seva a realizar con un termopar tipo J con sensibilidad 65µV/K. Para que la tensión a la salida seaindependiente de la temperatura ambiente (TA), el fabricante del termopar recomienda emplear unsensor integrado LM35. Como posiblemente recuerde, se trata de un sensor con salida en tensiónque presenta una sensibilidad α = 10 mV/C, y que suministra 0 V a 0 C. Se puede considerar que latemperatura ambiente variará entre 0 C and 50 C.

Empleando exclusivamente resistencias, amplificadores operacionales rail-to-rail, amplificadores deinstrumentación de ganancia 50 y fuentes de alimentación de ±3,3 V y ±5 V —además del termopar

6 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 7: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

y el integrado mencionados anteriormente—, diseñe un circuito de medida de temperatura con unasensibilidad de 7,5 mV/C y con salida de 0 V a 400 C. Deberá indicar explícitamente y justificar lastensiones de alimentación de todos los amplificadores que utilice.

El primer paso es asegurarse de que no circula corriente por el termopar. Para ello habrá queconectarlo directamente a un terminal de entrada de un amplificador. Aprovechando que se dispone deun amplificador de instrumentación, se puede utilizar para simplificar el diseño. A la salida del mismose conectará el LM35 para compensar el efecto de la temperatura ambiente Ta que introduce, con signonegativo, el termopar. Finalmente con un amplificador diferencial se puede realizar simultáneamente elajuste de cero y sensibilidad (Figura 3).

+

3,3 V

50TC

LM35

Ta

vTRT

vLMRL

+

3,3 V

vo

R2R1

Ez

Figura 3. Circuito de acondicionamiento del termopar.

Aplicando superposición, la salida del circuito es:

vo =

(RL

RT +RLvT +

RT

RT +RLvLM

)(R2

R1+ 1

)− R2

R1Ez (11)

vo =

(RL

RT +RL50SJ (TC − Ta) +

RT

RT +RLα Ta

)(R2

R1+ 1

)− R2

R1Ez (12)

Para conseguir que la salida sea independiente de Ta, se debe verificar que:

∂vo∂Ta

=

(− RL

RT +RL50SJ +

RT

RT +RLα

)(R2

R1+ 1

)= 0⇒ RT

RL=

50SJα

= 0,325 (13)

RL = 10 kΩ RT = 3,25 kΩ (14)

Además, la sensibilidad requerida a la salida impone que2:

∂vo∂TC

=RL

RT +RL50SJ

(R2

R1+ 1

)= 7,5 · 10−3 ⇒ R2

R1= 2⇒ R2 = 20 kΩ R1 = 10 kΩ (15)

2Recuerde que la sensibilidad es la misma en C y en Kelvin.

Examen final SE-N, diciembre 2018Curso 2018/2019

7 de 19

Page 8: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

Finalmente, para que la salida sea nula cuando TC = 400 C:

vo(TC = 400 C) = 7,5 mV/C · TC −R2

R1Ez = 0⇒ Ez = 1,5 V (16)

Al igual que en el problema anterior, hay que aplicar Thévenin para usar una fuente de 3,3 V:

Ez = 3,3 · R1B

R1A +R1B

R1 = R1A ‖ R1B

⇒ R1A = 22 kΩ R1B = 18,33 kΩ (17)

R1

Ez

1,5 V

Es igual a

R1A

Vcc3,3 V

R1B

Figura 4. Circuito equivalente para utilizar solo fuentes de 3,3 V.

Ya solo falta determinar las alimentaciones de los amplificadores. Como Ta varía entre 0 y 50 C:

En el rango de interés, la salida del amplificador de instrumentación variará entre 50SJ (400− 50)

y 50SJ (700 · 1,1 − 0), es decir, entre 1,1375 V y 2,5025 V, respectivamente3. Por tanto, puedealimentarse a tensión simple.

La salida del sumador hay que limitarla entre 0 y 3,3 V para evitar dañar el conversor A/D. Por diseñola salida vale 0 V a 400 C, y saturará a 3,3 V a 840 C. En este caso, la limitación de la alimentaciónes importante porque nada garantiza que TC no se salga del rango de medida. De hecho, cuando lacaldera esté arrancando, la temperatura será inferior a 400 C con toda seguridad.

1.3. Caudal de gas (1 punto)La caldera tiene un control (en bucle abierto) de caudal de gas que permite inyectar más o menos

cantidad de gas en función del modo de funcionamiento de la caldera. Así, cuando esté funcionandosólo la calefacción se seleccionará la cantidad mínima de gas, cuando esté funcionando sólo el aguacaliente sanitaria se seleccionará la cantidad media de gas y cuando funcionen simultáneamente lacalefacción y el agua caliente sanitaria, se seleccionará la cantidad máxima de gas.

La selección de la cantidad de gas inyectado se realiza mediante una señal analógica que ha de valer6 V para inyectar la cantidad mínima de gas, 12 V para inyectar la cantidad media de gas y 24 V parainyectar la cantidad máxima de gas. Cuando se quiera apagar la caldera dicha señal ha de ser 0 V parano inyectar gas.

Para generar esta señal analógica desde el microcontrolador se propone el siguiente circuito paraconvertir una señal PWM de 0 a 3,3 V en una señal analógica de 0 a 24 V.

3El factor de 1,1 se debe a que hay que poder medir la temperatura con un error de ±10 %.

8 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 9: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

RB14RB

Q1

RC

1 kΩ

+24 V

R

Vo

C

Nótese que el circuito funciona de forma parecida a un detector de amplitud de valor medio: enel colector del transistor tendremos un PWM entre 0 a 24 V, y si todo está bien diseñado, a la salidatendremos el valor medio de esa señal.

Calcule el valor de todos los componentes para que la salida Vo tenga un valor de rizado razonablecuando la frecuencia de la señal PWM presente en RB10 sea de 10 kHz. Suponga que el transistor tieneuna β igual a 100.

Básicamente, el filtro paso bajo tiene que “ver” un generador ideal de tensión para que funcionecome detector de valor medio; esto implica que R RC . A su vez, esta condición hace que la corrienteque fluye en R va a ser despreciable frente a la corriente de colector del transistor, y esto quiere decirque podemos diseñar este último como siempre.

La corriente IC cuando la salida RB10 es alta y el BJT sature será:

IC ≈24 V

1 kΩ= 24 mA (18)

y para garantizar la saturación

IB >ICβ

= 0,24 mA (19)

Podemos coger un factor de seguridad 5, por ejemplo, y diseñar el circuito por una corriente de base de1,2 mA que es más que aceptable para el micro:

RB =3,3 V − 0,7 V

1,2 mA≈ 2,2 kΩ (20)

Si la frecuencia del PWM es 10 kHz, el período es 100µs; para tener un rizado por ejemplo menorque el 1 % podemos elegir constante de tiempo del paso-bajo 100 veces mayor:

RC = 10 ms; R RC = 100 kΩ⇒ C = 100 nF (21)

Alternativamente se puede hacer la frecuencia de corte 100 veces menor que 10 kHz; salen valoresdistintos pero en el mismo orden de magnitud.

Finalmente, hay que tener cuidado que la lógica es invertida por el transistor: con RB10 siempre alto(duty cycle 100 %) la salida es nula (caldera apagada); para tener 6 V necesitamos que la salida delmicro esté baja un 25 % del tiempo, que coincide con duty cycle 75 %, y así siguiendo:

Examen final SE-N, diciembre 2018Curso 2018/2019

9 de 19

Page 10: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

Demanda energética Tensión Válvula duty cycle [ %]

Ninguna 0 V 100Agua caliente sanitaria 6 V 75Calefacción (radiadores) 12 V 50Agua caliente y calefacción 24 V 0

Problema 2. Parte digital --- (5 puntos) Resuelva este problema en unos de los cuadernillos de color azul indicando claramente “digital” enla primera página.

Para implantar el sistema ha de realizar los siguientes apartados:

a) (1 punto) Codifique la tarea de control de entrada de aire en función del color de la llama. Dichatarea ha de ser una tarea periódica con un periodo de muestreo de 1 ms. Tenga en cuenta quecomo el periodo de muestreo es pequeño, no puede usarse el sistema operativo para controlar latemporización. Por tanto se configurará el timer 2 para generar una interrupción cada milisegundoy en la rutina de atención a la interrupción se disparará esta tarea mediante un semáforo. Supongaque existe una función cuyo prototipo es:

void inicializarTimer2(int periodo);

que inicializa el timer 2 para que interrumpa cada periodo, en donde el parámetro periodo es eltiempo en décimas de milisegundos entre dos interrupciones consecutivas. En este apartado hade incluir también el código de la rutina de atención a la interrupción del timer 2, la cualtiene el siguiente prototipo:

void __attribute__ (( interrupt(no_auto_psv) )) _T2Interrupt(void);

Por último, tenga en cuenta que el flag de la interrupción del timer 2 es IFS0bits.T2IF.

b) (1 punto) Codifique la tarea de control de la entrada de gas. Recuerde que dicha tarea ha de seruna tarea periódica con un periodo de muestreo de 250 ms.

c) (1 punto) Codifique la tarea encargada de gestionar el LED. Para implantar la tarea se recomiendaesperar los mensajes de la cola con un timeout de 1,25 s, que es el tiempo entre caracteres. Unavez recibido un mensaje, se genera el carácter correspondiente en Morse (salvo que sea unespacio) y se vuelve a esperar el siguiente mensaje. De esta forma la espera a la llegada de unnuevo mensaje nos genera automáticamente el espacio entre caracteres Morse. Nótese que comocuando se produce un fallo la caldera se apaga, se considera que es imposible que se generen dosmensajes seguidos.

d) (1 punto) Codifique la tarea encargada de gestionar el estado de la caldera.

e) (1 punto) Escriba el programa principal con la inicialización del sistema.

/**

* Solución a la parte digital del examen final del curso 2018 -2019.

*/

#include <xc.h>

#include <stdint.h> // define los tipos uint8\_t, ...

10 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 11: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

#include "DriverPicTrainer/config.h"

#include "DriverPicTrainer/adc.h"

#include "DriverPicTrainer/pwm.h"

#include "Interrupciones.h" // Enable y Disable

#include "FreeRTOS.h" // Includes del Kernel

#include "semphr.h"

#include "queue.h"

#include "task.h"

// Parámetros del sistema

#define TRANSITORIO_TEMPERATURA 30000 // en ms

#define MARGEN_ERROR 0.05 // Error máximo de temperatura (5 %)

#define T_MAX_SAT 2000 // T. máximo que puede durar la saturación (ms)

// Variables compartidas con la interrupción

SemaphoreHandle_t sem_llama; // Semáforo de sincronización

// Variables compartidas entre tareas

typedef enum OFF , ON, FALLO t_estado; // Estado del sistema

t_estado estado = OFF; // Inicialmente la caldera debe estar apagada

QueueHandle_t cola_mensajes;

#define N_MENSAJES 20

#define TAM_MENSAJE 1 // Los mensajes son de un solo caracter.

// Definición de entradas y salidas

#define CANAL_LLAMA 0

#define CANAL_TEMP 1

#define PIN_RADIADOR 2

#define PIN_ACS 3

#define PIN_ON_OFF 4

#define PIN_LED 5

#define PIN_AIRE 10

#define PIN_QUEMADOR 12

#define PIN_GAS 14

// Prioridades de las tareas y tamaño de pila

#define PRIO_LLAMA 4

#define PRIO_TEMP 3

#define PRIO_ESTADO 2

#define PRIO_LED 1

#define TAM_PILA 100

// Periodo de muestreo de las tareas

#define TS_LLAMA 1 // Control de llama , en ms

#define TS_TEMP 250 // Control de temperatura , en ms

#define TS_ESTADO 1000 // Control del estado de la caldera , en ms

// Prototipos de las tareas y funciones auxiliares

void tareaLlama(void *pvParameters);

Examen final SE-N, diciembre 2018Curso 2018/2019

11 de 19

Page 12: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

void tareaTemperatura(void *pvParameters);

void tareaLED(void *pvParameters);

void tareaEstado(void *pvParameters);

void DesactivarCaldera(void);

int main(void)

inicializarReloj ();

// Pongo todas las salidas a 0 excepto las del LED y el gas (activas a

// nivel bajo) para que esté todo en reposo durante el arranque.

PORTB = 1<<PIN_LED | 1<< PIN_GAS;

// Configuro los pines de entrada y dejo los pines no usados como salidas

TRISB = (1<<PIN_ON_OFF | 1<<PIN_ACS | 1<< PIN_RADIADOR);

inicializarADCPolling (1 << CANAL_LLAMA | 1 << CANAL_TEMP);

// Se inicializa el PWM a 10 kHz

inicializarPWM (1<<PIN_AIRE | 1<<PIN_GAS , 10000);

setDcPWM(1<<PIN_AIRE , 0);

setDcPWM(1<<PIN_GAS , 10000); // El PWM del gas está invertido por el BJT

activarPWM(1<<PIN_AIRE | 1<<PIN_GAS);

inicializarTimer2(TS_LLAMA *10); // TS_LLAMA está en ms

// Semáforo de sincronización interrupción-tarea de control de llama

sem_llama = xSemaphoreCreateBinary ();

// Lo tomamos para evitar una primera ejecución sin datos.

xSemaphoreTake(sem_llama , (portTickType) 0 );

// Creamos la cola para los mensajes

cola_mensajes = xQueueCreate(N_MENSAJES , TAM_MENSAJE);

// Se crean las tareas

xTaskCreate(tareaLlama , "TLLA", TAM_PILA , NULL ,

PRIO_LLAMA , NULL);

xTaskCreate(tareaTemperatura , "TTMP", TAM_PILA , NULL ,

PRIO_TEMPERATURA , NULL);

xTaskCreate(tareaLED , "TLED", TAM_PILA , NULL ,

PRIO_LED , NULL);

xTaskCreate(tareaEstado , "TEST", TAM_PILA , NULL ,

PRIO_ESTADO , NULL);

vTaskStartScheduler (); // y por último se arranca el planificador.

return 0; // En teoría no se debe llegar nunca aquí.

/**

* Tarea que implementa el control de llama y entrada de aire. Es una tarea

* periódica con periodo de muestreo TS_LLAMA , el cual se controla mediante

* el Timer 2 usando un semáforo para la sincronización. El control

* implementado es un PI.

*

12 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 13: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

* @param pvParameters Parámetros de la tarea. No usado en esta tarea.

*/

void tareaLlama(void *pvParameters)

float color_llama; // Diferencia entre los colores azul y amarillo (lx)

uint16_t dato_adc;

t_estado c_estado;

float error , mando;

float int_error = 0;

uint16_t n_sat = 0; // número de periodos con el control saturado

char c_error;

while (1)

if(xSemaphoreTake(sem_llama , (portTickType) 2000 )== pdTRUE )

disable ();

c_estado = estado;

enable ();

switch (c_estado)

case OFF:

case FALLO:

break; // No hacemos nada

case ON:

vTaskSuspendAll (); // El ADC es un recurso compartido.

dato_adc = leerADCPolling(CANAL_LLAMA);

xTaskResumeAll ();

color_llama = (dato_adc /1023*3.3 -1.65) /.01; // Color llama en lx

error = 0 - color_llama; // la consigna son 0 lx

int_error += TS_LLAMA /1000.0 * error; // TS_LLAMA está en ms

mando = K_P * error + K_I * int_error;

if (mando > 100) // Saturación

mando = 100;

int_error -= T_S * error; // Antiwindup

n_sat ++; // Para medir el tiempo que está el control saturado

else if (mando < 0)

mando = 0;

int_error -= T_S * error;

n_sat ++;

else

n_sat = 0; // Si no hay saturación, ponemos la cuenta a 0

if(n_sat >= T_MAX_SAT) // 2 seg. saturado: fallo de combustión

DesactivarCaldera ();

disable ();

estado = FALLO; // Pasamos el estado del sistema a fallo

enable ();

c_error = 'C'; // mensaje de error de combustión

xQueueSend(cola_mensajes , &c_error , 0);

else

disable ();

Examen final SE-N, diciembre 2018Curso 2018/2019

13 de 19

Page 14: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

setDcPWM(1<<PIN_LLAMA , mando *100);

enable ();

break;

case default:

// Aquí no debería entrar nunca. Si entramos , damos fallo:

DesactivarCaldera ();

disable ();

estado = FALLO; // Pasamos el estado del sistema a fallo

enable ();

break;

/**

* Función para desactivar la caldera. Desactiva el PWM de la entrada de

* aire y de la válvula del gas y pone a 0 la salida del quemador.

* Como se llama desde dos tareas ha de ser reentrante , por lo que

* inhabilita la conmutación de tareas mientras está usando el PWM y

* el puerto B.

*/

void DesactivarCaldera(void)

vTaskSuspendAll (); // El PWM y el PORTB son recursos compartidos.

desactivarPWM(1<<PIN_AIRE | 1<< PIN_GAS);

// al desactivar el PWM se vuelve al valor del puerto B del arranque

// (ambas salidas desactivadas)

PORTB &= ~(1<< PIN_QUEMADOR);

xTaskResumeAll ();

void __attribute__ (( interrupt(no_auto_psv) )) _T2Interrupt(void)

BaseType_t xHigherPriorityTaskWoken = pdFALSE;

IFS0bits.T2IF = 0; // borro el flag de la interrupción del Timer 2

// Libero el semáforo para que se ejecute la tarea de control de llama

xSemaphoreGiveFromISR(sem_llama , &xHigherPriorityTaskWoken);

if(xHigherPriorityTaskWoken == pdTRUE )

taskYIELD (); // Si la liberación del semáforo ha despertado una tarea ,

// se fuerza un cambio de contexto

/**

* Tarea que implementa el control de la válvula de gas.

* La tarea lee las entradas digitales que indican el consumo de agua de

* la caldera y genera la señal PWM correspondiente.

14 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 15: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

* También se encarga de verificar si pasados 5 segundos después de un

* cambio de consigna se ha llegado al valor de temperatura correspondiente

* pasando al estado de fallo y apagando la caldera si esto no ocurre.

*

* La tarea es periódica con un periodo de muestreo de 250 ms, el cual se

* controla con el RTOS.

*

* @param pvParameters Parámetros de la tarea. No usado en esta tarea.

*/

// Se definen los factores de servcio para generar las tensiones de 0, 6, 12

// y 24 V. Como el transistor invierte la señal, los factores de servicio

// han de ser los recíprocos (100 - fs).

#define FS_PWM_0V (100 - 0/24*100) *100

#define FS_PWM_6V (100 - 6/24*100) *100

#define FS_PWM_12V (100 - 12/24*100) *100

#define FS_PWM_24V (100 - 24/24*100) *100

void tareaTemperatura(void *pvParameters)

TickType_t xLastWakeTime;

TickType_t xPeriodo;

t_estado c_estado;

int radiador , acs;

uint16_t dato_adc;

float temp , consigna_temp; // Uso floats para simplificar , ya que

// la temperatura es un valor real.

float consigna_temp_ant = 0; // Valor anterior de la consigna para

// detectar cambios.

int n_ciclos_cambio = 0; // Nº ciclos desde el cambio de consigna

char c_error;

// Calculo el periodo en ticks de reloj.

xPeriodo = TS_TEMP/portTICK_PERIOD_MS;

// Inicializa xLastWakeTime con el tiempo actual

xLastWakeTime = xTaskGetTickCount ();

while (1)

vTaskDelayUntil (& xLastWakeTime , xPeriodo ); // Espera siguiente periodo

disable ();

c_estado = estado;

enable ();

switch (c_estado)

case OFF:

case FALLO:

break; // No hacemos nada

case ON:

// Se ve el estado de las entradas digitales para obtener la consigna

// y de paso seleccionar el PWM correspondiente.

disable ();

radiador = (PORTB >> PIN_RADIADOR) & 1;

acs = (PORTB >> PIN_ACS) & 1;

if(radiador == 0 && acs == 0)

Examen final SE-N, diciembre 2018Curso 2018/2019

15 de 19

Page 16: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

consigna_temp = 0;

setDcPWM(1<<PIN_GAS , FS_PWM_0V);

else if(radiador == 0 && acs == 1)

consigna_temp = 500;

setDcPWM(1<<PIN_GAS , FS_PWM_6V);

else if(radiador == 1 && acs == 0)

consigna_temp = 600;

setDcPWM(1<<PIN_GAS , FS_PWM_12V);

else // ambas a 1

consigna_temp = 700;

setDcPWM(1<<PIN_GAS , FS_PWM_24V);

enable ();

// Ahora se mide el valor de la temperatura

vTaskSuspendAll (); // El ADC es un recurso compartido.

dato_adc = leerADCPolling(CANAL_TEMP);

xTaskResumeAll ();

// La temperatura nos llega con una sensibilidad de 7,5 mV/ºC y

// con el 0 V correspondiendo a 400 ºC

temp = (dato_adc *3.3/1023) /0.0075 + 400;

// Por último vemos si la temperatura no ha llegado a su consigna

// después de 5 segundos desde le cambio de consigna

if(consigna_temp != consigna_temp_ant)

n_ciclos_cambio = 0;

consigna_temp_ant = consigna_temp;

if(n_ciclos_cambio < TRANSITORIO_TEMPERATURA/TS_TEMP)

n_ciclos_cambio ++;

else // Fin del transitorio: ahora comparamos la temperatura

// con su consigna para dar fallo si hay una desviación

// mayor del 5 %

if( (temp > consigna_temp * (1 + MARGEN_ERROR) ||

(temp < consigna_temp * (1 - MARGEN_ERROR) )

DesactivarCaldera ();

disable ();

estado = FALLO; // Pasamos el estado del sistema a fallo

enable ();

c_error = 'T'; // mensaje de error de combustión

xQueueSend(cola_mensajes , &c_error , 0);

break;

case default:

// Aquí no debería entrar nunca. Si entramos , damos fallo:

DesactivarCaldera ();

disable ();

estado = FALLO; // Pasamos el estado del sistema a fallo

enable ();

break;

16 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 17: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

/**

* Tarea para generar mensajes en Morse por el LED.

* La tarea espera a que llegue un caracter por la cola , con un timeout

* de 1,25 segundos , que es el tiempo entre caracteres. Si no llega ningún

* caracter se volverá a bloquear a la espera de un caracter. Cuando llegue

* un mensaje , se generará el código Morse que corresponda y se volverá a

* esperar el siguiente mensaje de la cola , con el mismo timeout anterior.

* Si no llega ningún mensaje después del timeout , se volverá

* a generar el código Morse del caracter que se había recibido (se habrá

* esperado un espacio Morse entre el caracter anterior y este) y si ha

* llegado un nuevo caracter , se generará el código Morse correspondiente.

* Este proceso se repetirá indefinidamente. Tenga en cuenta que cuando

* llegue un espacio , el LED se mantendrá apagado todo el tiempo , hasta que

* llegue una C o una T.

*

* @param pvParameters Parámetros de la tarea. No usado en esta tarea.

*/

#define PUNTO 250

#define RAYA 750

#define SEP_SIMBOLO 750

#define ESPACIO 1250

void TareaLED(void *pvParameters)

char c_error = ' '; // Cadena para recibir los mensajes.

while (1)

if(xQueueReceive(cola_mensajes , &c_error , ESPACIO/portTICK_PERIOD_MS)

== pdTRUE)

// Llegados a este punto se visualiza en el LED o el nuevo carácter ,

// si ha llegado por la cola , o el anterior si no ha llegado ninguno

// nuevo tras el timeout. Nótese que c_error se ha inicializado a

// espacio para que inicialmente se visualice un espacio en el LED.

if(c_error == 'C') // Error de combustión. Se genera la C en Morse

disable (); // PORTB es un recurso compartido

PORTB &= ~(1<< PIN_LED);

enable ();

vTaskDelay(RAYA/portTICK_PERIOD_MS);

disable ();

PORTB |= (1<<PIN_LED);

enable ();

vTaskDelay(SEP_SIMBOLO/portTICK_PERIOD_MS);

disable ();

PORTB &= ~(1<< PIN_LED);

enable ();

vTaskDelay(PUNTO/portTICK_PERIOD_MS);

disable ();

PORTB |= (1<<PIN_LED);

enable ();

Examen final SE-N, diciembre 2018Curso 2018/2019

17 de 19

Page 18: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

vTaskDelay(SEP_SIMBOLO/portTICK_PERIOD_MS);

disable ();

PORTB &= ~(1<< PIN_LED);

enable ();

vTaskDelay(RAYA/portTICK_PERIOD_MS);

disable ();

PORTB |= (1<<PIN_LED);

enable ();

vTaskDelay(SEP_SIMBOLO/portTICK_PERIOD_MS);

disable ();

PORTB &= ~(1<< PIN_LED);

disable ();

vTaskDelay(PUNTO/portTICK_PERIOD_MS);

disable ();

PORTB |= (1<<PIN_LED);

enable ();

else if(c_error == 'T')

disable ();

PORTB &= ~(1<< PIN_LED);

enable ();

vTaskDelay(RAYA/portTICK_PERIOD_MS);

disable ();

PORTB |= (1<<PIN_LED);

enable ();

else // Un espacio. Aunque no es necesario , por si acaso se apaga

// el LED.

disable ();

PORTB |= (1<<PIN_LED);

enable ();

/**

* Tarea que implementa la máquina de estados de la caldera , aunque el

* estado también lo cambian las tareas de control del aire y del gas

* cuando detectan un fallo.

* La tarea es periódica con un periodo de muestreo de 1 segundo , el cual

* se controla con el RTOS.

*

* @param pvParameters Parámetros de la tarea. No usado en esta tarea.

*/

v

void tareaEstado(void *pvParameters)

TickType_t xLastWakeTime;

TickType_t xPeriodo;

int on_off;

char c_error;

// Calculo el periodo en ticks de reloj.

xPeriodo = TS_ESTADO/portTICK_PERIOD_MS;

18 de 19 Examen final SE-N, diciembre 2018Curso 2018/2019

Page 19: Examen final SE-N, diciembre 2018 - Academia Cartagena99 · Examen final SE-N, diciembre 2018 (Romano Giannetti, José Daniel Muñoz Frías, Jaime Boal Martín-Larrauri) Nombre: Grupo:

SISTEMAS ELECTRÓNICOS - NMÁSTER EN INGENIERÍA INDUSTRIAL

// Inicializa xLastWakeTime con el tiempo actual

xLastWakeTime = xTaskGetTickCount ();

while (1)

vTaskDelayUntil (& xLastWakeTime , xPeriodo ); // Espera siguiente periodo

on_off = (PORTB >>PIN_ON_OFF) & 1;

vTaskSuspendAll (); // Como voy a usar estado durante un momento ,

// inhabilito la conmutación de tareas

switch(estado)

case OFF:

PORTB &= ~(1<< PIN_QUEMADOR); // Quemador apagado

c_error = ' '; // Si llegamos aquí desde el estado Fallo

// hay que enviar un espacio a la tarea del LED

// para que se apague.

xQueueSend(cola_mensajes , &c_error , 0);

if(ON_OFF == 1)

estado = ON;

break;

case ON:

PORTB |= (1<<PIN_QUEMADOR); // Quemador endendido

if(on_off == 0)

estado = OFF;

break;

case FALLO:

PORTB &= ~(1<< PIN_QUEMADOR); // Aunque lo apaga la tarea que genera el

// fallo , lo mantengo apagado aquí por si

// acaso.

if(ON_OFF == 0)

estado = OFF;

break;

xTaskResumeAll ();

Examen final SE-N, diciembre 2018Curso 2018/2019

19 de 19