Comunicación a través de redes de alimentación en...

61
Equation Chapter 1 Section 1 Proyecto Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Mención en Intrumentación electrónica y control Comunicación a través de redes de alimentación en corriente continua [PLC] Autor: Valentín Gutiérrez Gil Tutor: Alfredo Pérez Vega-Leal Departamento de Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2016

Transcript of Comunicación a través de redes de alimentación en...

Equation Chapter 1 Section 1

Proyecto Fin de Grado

Grado en Ingeniería Electrónica, Robótica y Mecatrónica

Mención en Intrumentación electrónica y control

Comunicación a través de redes de alimentación en

corriente continua [PLC]

Autor: Valentín Gutiérrez Gil

Tutor: Alfredo Pérez Vega-Leal

Departamento de Ingeniería Electrónica

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2016

iii

Proyecto Fin de Grado

Grado en Ingeniería Electrónica, Robótica y Mecatrónica

Comunicación a través de redes de alimentación en

corriente continua [PLC]

Autor:

Valentín Gutiérrez Gil

Tutor:

Alfredo Pérez Vega-Leal

Profesor contratado doctor

Depatamento de Ingeniería Electrónica

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2016

v

Proyecto Fin de Grado: Comunicación a través de redes de alimentación en corriente continua [PLC]

Autor: Valentín Gutiérrez Gil

Tutor: Alfredo Pérez Vega-Leal

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2016

El Secretario del Tribunal

vii

A mi familia

ix

Agradecimientos

Antes de hablar de nadie debería agradecer a mi familia el apoyo recibido durante todos los años de la

carrera que, de alguna forma, se ven reflejados en este trabajo. Han sido duros, y quizás más para

vosotros que habéis tenido que aguantarme día a día, sobre todo en época de exámenes. Por todo esto

os doy las gracias, ya que no habría llegado hasta aquí si no fuera así.

Tras esto, agredecer a mi tutor, Alfredo Pérez Vega-Leal no solo por la oportunidad que me dio al

aceptar este proyecto de forma improvisada y con poca información por mi parte que ofrecerle, si no

por su inestimable ayuda y preocupación en el desarrollo del mismo.

A los jefes de taller del departamento de electrónica, Agustín Díaz Cárdenas y Andrés González

Santamaría por su pronta respuestas a mis inesperadas peticiones. Gracias por la confianza que me

habéis brindado que me ha hecho sentirme uno más en el departamento.

Y no puedo acabar sin agradecer a mis compañeros de clase con los que he caminado para llegar al

punto en el que me encuentro ahora. Mención a parte se merece Noelia Fernández, cuya motivación y

desempeño en frustar mis problemas ha hecho de la carrera algo incluso disfrutable.

Gracias a todos,

Valentín Gutiérrez Gil

Resumen

El trabajo consiste en la realización de una aplicación funcional para comunicarse a través de una red

de alimentación de corriente continua. La aplicación se debe realizar desde el mínimo nivel asumible,

nivel de componente y chips embedidos, hasta un protipo capaz de comunicarse con otro en el caso de

necesitar intercambiar información.

Abstract

The work involves performing a functional application to communicate through a network of DC

power. The application must be made from the minimum acceptable level, component level and

embededd chips, up to a prototipe able to communicate with another in case it needs to exchange

information.

Índice

Agradecimientos ix

Resumen i

Abstract i

Índice i

Índice de Tablas i

Índice de Figuras i

Descripción del proyecto 1

1.1 Sistemas de luminarias LED 1

1.2 Descripción del dispositivo 1

1.2.1 Decisiones de diseño 1

Diseño del dispositivo 3

2.1 Oscilador de onda cuadrada 3

2.1.1 Obtención de valores 3

2.2 Circuito de escritura 6

2.3 Circuito de lectura 6

Montaje del prototipo 9

3.1 Generador de onda a 1 MHz 9

3.1.1 Adaptador para el chip SN74HC14 9

3.1.2 Señal producida 9

3.2 Adaptador para chip AD8061 10

3.3 Ensayo del prototipo 11

3.3.1 Explicación del experimento 11

3.3.2 Resultados 12

Aplicación en entorno simulado 17

4.1 Definición del caso 17

4.2 Diseño del circuito 17

4.2.1 Esquemas del circuito 17

4.2.2 Características del circuito 19

4.2.3 Fotolito del diseño 20

4.3 Programación de los microcontroladores 22

4.3.1 Funciones generales 22

4.3.2 Funciones específicas 23

4.4 Lista de componentes 23

4.5 Preparación del entorno 24

4.6 Resultados del ensayo 24

4.6.1 Medidas tomadas en el prototipo 25

Conclusiones 27

Referencias 11

Anexo A: Código del medidor de temperatura 11

Anexo B: Código de la calefacción 11

ÍNDICE DE TABLAS

Tabla 4-1: Lista de consumos 20

Tabla 4-2: Lista de componentes 23

ÍNDICE DE FIGURAS

Figura 2-1: Esquema del oscilador de onda cuadrada con disparador de Schmitt. 3

Figura 2-2: Modelo del oscilador en Matlab Simulink. 4

Figura 2-3: Red RC demasiado rápida 5

Figura 2-4: Red RC en el límite 5

Figura 2-5: Red RC para oscilador de onda cuadrada. 5

Figura 2-6: Esquema del circuito de lectura completo 6

Figura 2-7: Esquema del circuito de lectura. 6

Figura 3-1: Fotolito para el adaptador TSOP-DIP necesario para el disparador (no escalado). 9

Figura 3-2: Disparador de Schmitt soldado al adaptador DIP. 9

Figura 3-3: Salida del oscilador. 10

Figura 3-4: Fotolito para el adaptador SOT23-DIP necesario para el disparador (no escalado). 10

Figura 3-5: AD8061 soldado al adaptador SOT23. 10

Figura 3-6: Ensayo del prototipo. 11

Figura 3-7: Salida del oscilador antes de inyectarse en la red. 12

Figura 3-8: Línea de 12 V a la salida del emisor (arriba) y a la entrada del receptor (abajo). 13

Figura 3-9: Señal en el receptor tras pasar por el condensador de desacoplo. 13

Figura 3-10:Salida del detector de evolvente. 14

Figura 3-11: Entrada del pin de lectura del receptor. 14

Figura 3-12: Polo positivo de la funte de tensión continua antes de la bobina. 15

Figura 3-13: Entrada de 12 V del regulador de tensión. 15

Figura 4-1: Circuito detector de temperatura en servidores. 18

Figura 4-2: Circuito detector de temperatura en servidores. 19

Figura 4-3: Fotolito del circuito detector de temperatura en servidores (no escalado). 21

Figura 4-4: Fotolito de la bobina de aislamiento (no escalado). 21

Figura 4-5: Fotolito del circuito de la calefacción (no escalado). 22

Figura 4-6: Ampliación huella del microcontrolador en las placas de circuito impreso. 25

Figura 4-7: Alimentación del oscilador (amarillo) y entrada de la UART (azul) de la placa de

servidores. 25

Figura 4-8: Salida de 12 V de la fuente de alimentación. 26

Figura 4-9: Nodo de tierra. 26

1

DESCRIPCIÓN DEL PROYECTO

l proyecto consiste en la realización de un dispositivo capaz de transferir datos a través de una

red de alimentaciñón de corriente continua. Este tipo de redes se pueden encontrar en edificios

con luminarias LED, en vehículos o en parques fotovoltáicos. En todos los ejemplos se podría

encontrar alguna aplicación útil para este proyecto aunque, en este caso, el trabajo se centra en el

primero.

1.1 Sistemas de luminarias LED

El principal motivo por el cual el uso de este tipo de luminarias está en aumento es por su alto

rendimiento en comparación a sus predecesoras. El bajo consumo se debe principalmente a que la

mayoría de potencia absorvida se transforma en fotones dentro del espectro visible, por lo que no no

emite apenas calor. Al no sobrecalentarse su vida útil es más larga y, con ello, no requieren de un

mantenimiento continuo.

En el proyecto se ha tratado de mantener todas estas características, ya que sería contraproducente

empeorar el funcionamiento de todo el sistema por el uso del mismo. En gran medida esto se traducirá

en mantener los microcontroladores en reposo mientras no se requiera de su funcionamiento y en

apagar los dispositivos activos el mayor tiempo posible.

1.2 Descripción del dispositivo

El instrumento constará de un microcontrolador encargado de la lectur, procesado y envío de datos así

como de la ejecución de las actuaciones necesarias en el sistema al que esté conectado. Para este

proyecto se ha decidido utilizar el MSP-EXP430G2 de Texas Instrument, el cual, por sus

características, es suficiente para la aplicación que se va a realizar.

Las otras dos partes diferenciadas serán denominadas como el circuito de lectura y el circuito de

escritura. Se encargarán de leer del microcontrolador para transmitir por la red y de leer de la red para

transmitir al microcontrolador respectivamente.

1.2.1 Decisiones de diseño

La red de alimentación tendrá una tensión de 12 V.

La alimentación de los dispositivos activos se hará a 5 V.

Para transmitir los datos a través de la red se va utilizar modulación en amplitud con una

portadora a 1 𝑀𝐻𝑧.

E

Descripción del proyecto

2

3

DISEÑO DEL DISPOSITIVO

omo se mencionó anteriormente, este circuito será el encargado de tomar los datos transmitidos

por el microcontrolador y modularlos para su inyección en la red eléctrica. Para realizar esta

función se ha escogido una portadora a 1 MHz que será generada por un oscilador. La portadora

deberá estar centrada a la tensión de la red, para distorsionar lo menos posible. Además, aunque esto

no se puede comprobar en este capítulo, deberá de tener potencia suficiente para transmitir a la

distancia necesaria. En el caso que estamos abordando se considera dicha distancia como 100 metros.

2.1 Oscilador de onda cuadrada

Una de las formas más populares de realizar el montaje de un

oscilador es mediente el disparador de Schmitt (Schmitt Trigger)

de la serie 74C14. Son chips CMOS caracterizados por una alta

impedancia en la entrada, un consumo bajo y unas tensiones de

alimentación de hasta 15 V.

El disparados de Schmitt funciona como una puerta inversora con

retraso (delay), de ahí su símbolo. Gracias a este retraso y a la

ganancia, que se puede considerar infinita en el caso ideal, se

contruye un oscilador fácilemente con el circuito que aparece en la

Figura 2-1.

En este preoyecto se ha elegido el 74HC14 de NXP

Semiconductors (Hoja de datos [1]).

2.1.1 Obtención de valores

La ecuación característica de la frecuencia se puede deducir fácilmente analizando las tensiones a la

entrada y la salida, quedando:

𝑓 =1.2

𝑘 ∙ 𝑅𝐶

(2-1)

Donde 𝑓 está expresado en 𝐻𝑧, 𝑅 en Ω, 𝐶 en 𝐹. 𝑘 es un factor cuyo valor depende de la tensión de

alimentación del chip. En la Figura 15 de la hoja de datos del dispositivo se pueden encontrar los

distintos valores que toma. Para este apartado se va a usar el valor aproximado de 1 ya que lo

alimentaremos a 5 V.

Aun así, pese a tener una expresión para obtener la frecuencia tan sencilla, es sabido por medio de la

teoría de osciladores que no todas las combinaciones de 𝑅𝐶 nos darán un oscilador al uso. Es muy

C

Figura 2-1: Esquema del

oscilador de onda cuadrada

con disparador de Schmitt.

Diseño del dispositivo

4

probable que o la red de realimentación sea tan rápida que no de tiempo a inversor a salir de su estado

saturado o tan lenta que no pueda cargarse el condensador, lo que provocaría ondas triangulares en vez

de cuadradas.

Para ilustrar este fenómeno se ha realizado un análisis en Matlab Simulink que se muestra en el

siguiente apartado.

2.1.1.1 Modelo del oscilador

Figura 2-2: Modelo del oscilador en Matlab Simulink.

Para el modelo del disparador de Schmitt se han utilizado los dos bloques superiores de la Figura 2-2.

El llamado Relay es un bloque propio de la librería de Simulink haciendo la función de invertir la

entrada. Se ha configurdo de forma que si la entrada supera el valor correspondiente al 70% de la

alimentación pone la salide a cero, por otro lado, si la entrada está por debajo del 30% la salida sube a

5 V. Recordemos que 5 V es la tensión a la que alimentaremos el dispositivo.

Por otra parte, para modelar el retraso se ha usado una función de tranferencia de primer orden con el

polo puesto en el valor del retraso que indica la hoja del datos del SN74HC14.

La red de realimentación RC, el bloque inferior, se ha obtenido haciendo ecuaciones nodales a la

entrada y a la salida.

La simulación del sistema por medio de este modelo, pese a estar incompleto, nos ha permitido obtener

unos valores límites para la resistencia y el condensador. Fijando el valor de la resistencia en 10 𝑘Ω y

variando el valor del condensador se pueden obtener diferentes resultados cualitativamente

interesantes para su uso.

Si utilizamos una red demasiado rápida vemos que el inversor se mantiene en un estado de saturación,

siendo incapaz de salir (Figura 2-3). Aumentando el valor del condensador se observa que el

comportamiento empieza a mejorar, llegando a dar ondas triangulares (Figura 2-4). Finalmente, como

se aprecia en la Figura 2-5, se pueden conseguir ondas cuadradas a partir de capacidades más altas de

5 𝑝𝐹.

5 Comunicación a través de redes de alimentación en corriente continua [PLC]

Figura 2-3: Red RC demasiado rápida Figura 2-4: Red RC en el límite

Figura 2-5: Red RC para oscilador de onda cuadrada.

Diseño del dispositivo

6

2.2 Circuito de escritura

El resto de componentes a valorar no se les supone tan

problemáticos como el oscilador. Para ahorrar en consumo se ha

utilizado un transistor BJT de tipo P, el 2N2907 (Hoja de datos

[2]). Es más conocido su análogo en N, el 2N2222. Es un

transistor bastante robusto y permite conmutaciones a alta

frecuencia, al menos suficientes para las que puede dar el

microcontrolador.

Para inyectar la corriente en la red se utiliza un condensador de

4.7 𝑛𝐹, que, junto a la impedancia de la red, forma un filtro paso

alto que elimina la componente de continua de la señal cuadrada

generada por el oscilador.

2.3 Circuito de lectura

Figura 2-7: Esquema del circuito de lectura.

Tras haber modulado la señal digital con una portadora a 1𝑀𝐻𝑧 en el receptor se debería demodular

para su lectura por el microcontrolador. El circuito de la Figura 2-7 hace esta función.

En la entrada de datos la señal lo primero que se encuentra es un filtro paso alto, como a la salida del

circuito de escritura, que a parte de elmininar la componente de continua nos permite desacoplar el

circuito de la red gracias al condensador.

La siguiente etapa se trata de un detector de evolvente, los valores de la resistencia y la capacidad

deben de producir una constante de tiempo más lenta (mayor) que el periodo de la señal que queremos

seguir. Bajo esta condición se deben escoger valores tales que la capacidad no sea tan grande como

para exigirle demsiada corriente al diodo. Además, la resistencia debe ser lo suficientemente pequeña

como para permitir la carga y descarga del condensador rápidamente.

Figura 2-6: Esquema del circuito

de lectura completo

7 Comunicación a través de redes de alimentación en corriente continua [PLC]

𝑓 =1.2

𝑅𝐶=

1.2

18 ∙ 103 ∙ 120 ∙ 10−6= 555.6 𝑘𝐻𝑧

(2-2)

En la Ecuación 2-2 se ha calculado la constante de frecuencia del detector de evolvente. Se puede

apreciar que la expresión es idéntica a la obtenida para generar la onda, por lo que se puede mantener

un parámero fijo modificar el segundo para hacer que tome un valor adminisible. La red escogida ha

sido con una capacidad de 120 𝑝𝐹, con la intención de repetir el mayor número de componentes

posibles, y una resistencia de 18 𝑘Ω.

La segunda etapa ya da señales cuadradas con un alto rizado, pero aun no alcanzaríanel valor que el

microcontrolador, alimentado a 5 V, necesitaría para entenderla. Por esta razón se ha añadido una

tercera etapa comparadora con un amplificador operacional de alta velocidad en cadena abierta para

obtener su máxima ganancia.

El funcionamiento del OPAMP referenciando con respecto a tierra no sería el idóneo, ya que cualquier

ruido haría que este saltase provocando errores en la lectura o lecturas ficticias en el caso más extremo.

Para solucionar estos eventos se optó por poner un divisor resistivo que permita elevar la tensión de

referencia con la que comparamos. El valor de la tensión se puede sacar fácilmente tal como se muestra

en la ecuación 2-3.

𝑣+ = 5 𝑉103

103 + 104= 0.45 𝑉

(2-3)

El OPAMP escogido fue el AD8061 (Hoja de datos [4]) por poder responder a altas frecuencias en la

señal de entrada.

9

MONTAJE DEL PROTOTIPO

n este capítulo se encuentran las medidas realizadas en los circuitos anteriores ya montados en

placas de prueba. Para las medidas mostradas se empleó el SDS 1102FCL de SIGLENT, que se

encuenta en el laboratorio de electrónica.

Mencionar también que todas las placas reveladas se han diseñado con Altium y han sido imprimidas

y reveladas en el laboratio.

3.1 Generador de onda a 1 MHz

3.1.1 Adaptador para el chip SN74HC14

Antes de realizar este apartado se tuvo que revelar una placa para poder usar el chip SN74HC14 en la

placa de prueba. El resultado se muestra en la Figura 3-1.

Figura 3-1: Fotolito para el adaptador TSOP-

DIP necesario para el disparador (no escalado).

Figura 3-2: Disparador de Schmitt soldado al

adaptador DIP.

3.1.2 Señal producida

Como se pretendía, con los valores de resistencia y condensador obtenidos el conjunto produce un

oscilador de onda cuadrada a 1 MHz, tal como se muestra en la Figura 3-2.

E

Montaje del prototipo

10

Figura 3-3: Salida del oscilador.

3.2 Adaptador para chip AD8061

Como en el caso anterior, se tuvo que preparar un adaptador para poder utilizar el amplificador

operacional en una placa de pruebas.

Figura 3-4: Fotolito para el adaptador SOT23-

DIP necesario para el disparador (no escalado).

Figura 3-5: AD8061 soldado al adaptador

SOT23.

11 Comunicación a través de redes de alimentación en corriente continua [PLC]

3.3 Ensayo del prototipo

Figura 3-6: Ensayo del prototipo.

El esquema utilizado para el ensayo de ambos circuitos es el que se muestra en la Figura 3-6. Como se

puede apreciar aparecen elementos nuevos que no han aparecido anteriormente en los circuitos, por lo

que a continuación se procederá a su justificación.

3.3.1 Explicación del experimento

El primer elemento es la bobina colocada justo a la salida de la fuente. Es una red de continua, que se

puede representar como la batería de 12 V conectada a la bobina. Una fuente de continua es vista por

la señal de 1 𝑀𝐻𝑧 como un cortocircuito, por lo que podría suceder que la señal se pierda antes de

llegar al punto de lectura. Sin embargo, con la bobina de 680 𝜇𝐻 se obtiene una impedancia de módulo

4.3 𝑘Ω.

|𝑍| = 𝐿𝜔 = 680 ∙ 10−6 ∙ 106 ∙ 2𝜋 = 4.27 𝑘Ω (3-1)

Después se solucionó la alimentación de los dispositivos activos por medio de un regulador de tensión.

Montaje del prototipo

12

Se eligió el LM7805 (Hoja de datos [3]) por su versatilidad en la tensión de entrada para dar 5 V a la

salida. Además, se le añadió un filtro paso bajo para asegurar que la portadora no entorpezca su

funcionamiento ni el de los dispositivos activos.

Para este experimento se utilizaron dos MSP430G2553 (Hoja de datos [5]) de Texas Instruments. El

principal motivo de su uso es que ya se había trabajado con él con anterioridad y se tenían existencias

suficientes para este tranajo. Además, cumple con las especificaciones que habíamos pedido que

tuviera, como su modo de “Ultra baja potencia consumida” que permite al microcontrolador no

consumir la mínima energía hasta que tiene que realizar alguna función.

Finalmente se utiliza un cable estándar de dos polos con una longitus de 100 metros para mandar los

datos. Se realiza un código sencillo, que no se incluye en la memoria, de forma que el microcontrolador

que escribe solo mande cierto caracter cada ciclo de reloj. El receptor solo tendrá que leer ese carácter

cada vez que llegue, y, en el caso de que se reciba uno diferente, apagar un led.

El experimento se puede ver en el video adjunto que contiene el disco con el que se entrega esta

memoria. Aun así, en dicho video se observa como, estando los dos dispositivos separados por un

cable de corriente de 100 m el led no llega a apagarse.

3.3.2 Resultados

Se van a presentar una serie de capturas del osciloscopio donde se apunta dónde fueron tomadas y qué

se observa. Para realizar estas medidas se utilizó como señal de disparo el pin de envío de datos del

microcontrolador. De esta forma se puede comparar directamente lo que se pretende mandar con el

estado de dicha señal en cada punto del circuito.

Figura 3-7: Salida del oscilador antes de inyectarse en la red.

Como cabía esperar, al encender y apagar el inversor este requiere de un tiempo de establecimiento

para sincronizarse la onda a 1 𝑀𝐻𝑧. Aun así, en esta medida se puede ver que este tiempo es

desprecible respecto a la duración de un bit.

13 Comunicación a través de redes de alimentación en corriente continua [PLC]

Figura 3-8: Línea de 12 𝑉 a la salida del emisor (arriba) y a la entrada del receptor (abajo).

Pese a que en la Figura 3-8 no se pudo capturar el envio del mismo carácter para comparar mejor las

dos señales se observa que la señal llega al receptor sin problemas. Sigue siendo una onda de 4 V pico

a pico a 1 𝑀𝐻𝑧, aunque tiene más acentuadas el error causado por la llegada al régimen permanente

de los condensadores.

Figura 3-9: Señal en el receptor tras pasar por el condensador de desacoplo.

El efecto del condensador de desacoplo sobre la portadora se observa en la Figura 3-9. La tasa de envío

Montaje del prototipo

14

de bits ya no es despreciable frente al tiempo que tarda el condensador en llegar a un régimen que

permita el paso de la portadora al completo. Esto implica que la amplitud de la onda irá disminuyendo

con el tiempo hasta alcanzar un mínimo de, en este caso, 4 V pico a pico.

Figura 3-10:Salida del detector de evolvente.

Al distorsionarse la onda en el proceso de acoplamiento a la red era de esperar un resultado como en

la Figura 3-10 con el detector de evolvente. En esta captura se puede observar que la amplitud de la

onda no es constante en señales que solo duren un bit, pero sí que es puede determinar un valor mínimo.

Por esa razón se configuró el comparador con un valor de 0.5 𝑉.

Figura 3-11: Entrada del pin de lectura del receptor.

El pin de lectura del microcontrolador se muestra en la Figura 3-11. Se puede observar que la señal se

transmite correctamente. Hay que tener en cuenta que para mejor visualización se configuró el

osciloscopio para que eliminrara la componente de continua de la señal, por eso aparece un decremento

en la tensión al mandar un cero. También se observa un estrechamiento de los bits que se podría

solucionar disminuyendo la tensión del nodo de entrada prositivo del comparador o reduciendo la

velocidad de carga del condensador del detector de evolvente.

Para asegurar la efectividad de los aislamientos en las diferentes alimentaciones del sistema se tomaron

medidas en ambos puntos, obteniéndose lo que aparece en la Figura 3-10 y 3-11. Pese a que aparece

un pequeño rizado, hay que tener en cuenta que las bobinas utilizadas no son tan grandes como para

que la impedancia sea del orden del megaohmio, este no tiene efecto en el funcionamiento del resto de

15 Comunicación a través de redes de alimentación en corriente continua [PLC]

componentes.

Figura 3-12: Polo positivo de la funte de tensión continua antes de la bobina.

Figura 3-13: Entrada de 12 V del regulador de tensión.

17

APLICACIÓN EN ENTORNO SIMULADO

Como se mencionó al principio del documento, el objetivo del trabajo no era solo el desarrollo del

prototipo, si no demostrar en un caso práctico que su uso es viable. En este capítulo se detallarán los

pasos seguidos para el diseño, preparación y montaje del sistema a ensayar.

4.1 Definición del caso

En la actulidad lo que prima es el control del consumo tanto en una vivienda como en edificios de

oficinas ya que se ha demostrado que por medio de estas prácticas se consigue un ahorro considerable

en la factura. Otra de las características favorables de este tipo de control es que permite aumentar la

seguridad y, por lo tanto, alargar la vida de los dispositivos.

El caso que se va a tratar en este apartado va a ser el de una estación de refrigeración de servidores

que, por alguna razón, supera el límite de temperatura admitido en su funcionamiento. Este sistema se

encuentra en un edificio donde la potencia contratada está limitada y repartida, según necesidad, en los

diferentes sistemas que se utilizan.

Para que el sistema de refrigeración pueda aumentar el consumo de potencia y enfriar los servidores

deberá realiar una petición a otro que tenga menos prioridad, como podría ser la propia calefacción del

edificio. Como era de esperar, el edificio cuenta con una instalación de luminarias LED por toda la

planta. El problema de cortes en la red a causa de interruptores abiertos se presupone que en esa planta

se usa el dispositivo para encender y apagar las luces.

4.2 Diseño del circuito

4.2.1 Esquemas del circuito

Unificar los circuitos anteriores en uno solo es relativamente sencillo. Como el microcontrolador tiene

el pin de escritura y de lectura por separado no habría más que conectarlos entre sí.

Para hacer el experimento más realista, la placa que se encuentra midiendo la temperatura de los

servidores tendrá un sensor de temperatura que se construirá como un divisor resistivo de una

resistencia fija y una NTC. El problema de la no-linealidad de este sensor se resuelve por medio del

microcontrolador.

Para mostrar la potencia permitida a cada sistema se va a utilizar una barra de leds de la serie HDSP

4840, Avago Technologies (Hoja de datos [5]). Al inicio cada uno tendrán la mitad de la potencia

máxima admisible, lo que se mostrará en la barra de leds como la mitad de la serie encendida.

Además, resulta evidente comprobar que cada placa requiere de un regulador de tensión propio para

Aplicación en entorno simulado

18

alimentar a los dispositivos activos, por lo que se han añadido con su correspondiente filtro.

Finalmente, se va hacer que la fuente de alimentación general, el rectificador a 12 V, se encuentre

debidamente aislado para permitir que las señales salgan por él.

Estas son todas las contemplaciones que se han tenido para diseñar los circuitos de las Figura 4-1. El

otro circuito se ha omitido ya que el único cambio es la eliminación del divisor resistivo para medir

temperatura.

Figura 4-1: Circuito detector de temperatura en servidores.

19 Comunicación a través de redes de alimentación en corriente continua [PLC]

4.2.2 Características del circuito

4.2.2.1 Impedancias de entrada y salida

Figura 4-2: Circuito detector de temperatura en servidores.

Para determinar las impedancias de entrada y salida del dispositivo se ha usado el esquema de la Figura

4-2.

El cálculo de la impedancia de salida resulta trivial debido a que el inversor tiene salida en tensión, por

lo que podemos tomar su impedancia de salida como nula, dejando únicamente al condensador 𝐶3 con

efecto a la salida del dispositivo.

𝑍𝑜 =1

2𝜋𝐶3𝑓=

1

2𝜋 ∙ 4.7 ∙ 10−9 ∙ 106= 33.86 Ω

(4-1)

Para el cálculo de la impedancia de salida se simplifica aplicando el principio de tierra virtual en los

nodos de entrada del amplificador operacional. Según este principio, si el amplificador operacional

tiene una ganacia suficientemente alta las tensiones en los nodos de entrada se puede considerar

iguales. Como el divisor resistivo estaría entre dos tierras de pequeña señal, la tensión en el nodo

intermedio sería cero, por lo tanto en el otro nodo de entrada se tendría una tierra virtual. Así, se reduce

el cálculo a simplemente el condensador de desacoplo.

𝑍𝑖 =1

2𝜋𝐶4𝑓=

1

2𝜋 ∙ 10 ∙ 10−6 ∙ 106= 0.02 Ω

(4-2)

Como se puede observar, demasiado baja a esa frecuencia, por lo que se puede considerar un

cortocircuito dejando únicamente como resistencia de entrada la del amplificador operacional.

4.2.2.2 Potencia consumida

En este apartado se realizará un cálculo de la potencia necesaria que requiere el dispositivo para

funcionar correctamente.

Aplicación en entorno simulado

20

Como todos los dispositivos están alimentados a 5 𝑉 el cálculo se reduce a sumar el consumo de cada

uno de ellos a esa tensión.

*Todos los datos han sido tomados de las correspondiente hojas de datos

Tabla 4-1: Lista de consumos

Dispositivo Corriente consumida

SN74HC14 Máximo: 50 𝑚𝐴

AD8061 6.8 𝑚𝐴

MSP430G2553 Procesador: 0.95 𝑚𝐴

Conversor AD: 0.42 𝑚𝐴

Barra de LEDs 20 𝑚𝐴 por LED: 200 𝑚𝐴

Total: 258.17 𝑚𝐴

Por lo tanto, sin tener en cuenta el consumo medio de las resistencias, ya se está exigiendo al regulador

de tensión una potencia de 1.3 𝑊. Si planteamos que el regulador de tensión tampoco disipa potencia

podemos aproximar, por tanto, la corriente de entrada del mismo a 107.6 𝑚𝐴, que es lo que debería

ser capaz de soportar la bobina a la entrada del mismo.

4.2.3 Fotolito del diseño

Para realizar estas placas se van a aprovechar los adaptadores a DIP que se hicieron con anterioridad.

Además se ha realizado una tercera placa para añadir el aislamiento a la fuente de 12 V fuera de los

dispositivos, ya que si no fuera así la señal no saldría a la red.

21 Comunicación a través de redes de alimentación en corriente continua [PLC]

Figura 4-3: Fotolito del circuito detector de temperatura en servidores (no escalado).

Figura 4-4: Fotolito de la bobina de aislamiento (no escalado).

Aplicación en entorno simulado

22

Figura 4-5: Fotolito del circuito de la calefacción (no escalado).

4.3 Programación de los microcontroladores

En los Anexos A y B aparece el código de ambos microcontroladores completo para su mejor lectura.

En este apartado se procederá a la explicación de las líneas de código.

4.3.1 Funciones generales

En esta sección trataremos las funciones que necesitas ambos microcontroladores para realizar las

tareas básicas de la simulación.

4.3.1.1 Mandar dato [char send(char chain);]

Esta función es la encargada de mandar los datos que necesita a través del pin de la UART. Tiene una

peculiaridad en el inicio de la ejecución. Tiene un modo de autocomprobación para asegurarse de que

la cadena se ha embiado correctamente. Aprovechando que cada dispositivo se tiene que leer a sí

mismo al mandar cualquier cosa por la línea, una vez efectuado el envío se lee el registro de recepción

de la UART, con lo que se cerciona que el número es igual al que se pretendía mandar.

4.3.1.2 Control de la barra de LEDs [void barra(char level);]

Esta función recibe un número entre 0 y 10 y enciende la cantidad correspondientes de LEDs en la

barra.

23 Comunicación a través de redes de alimentación en corriente continua [PLC]

4.3.2 Funciones específicas

4.3.2.1 MIcrocontrolador de los servidores

4.3.2.1.1 Medidor de temperatura [void convert(void);]

Aunque lo esperable es que esta función devolviera el valor de la temperatura para ahorrar peso en el

código se interpreta directamente el registro del conversor analógico digital del microcontrolador.

Además de realizar la conversión, determina la potencia necesaria que debería usar el sistema de

refrigeración de servidores y lo almacena en una variable global para su posterior uso.

4.3.2.1.2 Interrupcio n de recepccio n de datos [#pragma vector = USCIAB0RX_VECTOR __interrupt void ReceiveInterrupt(void);]

Esta función interrumpe el funcionamiento del microcontrolador, es decir, su estado de reposo, cada

vez que se produce un evento de recepción de datos. Además, esta función es prioritaria con respecto

a la interrupción del temporizador, que se ejecutaría después en caso de conflicto.

Como esta es la estación prioritaria no se han considerado la recepción de órdenes de ningún tipo, por

lo que solo se ha implementado el saludo con el otro microcontrolador.

4.3.2.1.3 Interrupcio n del reloj [#pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void);]

Aquí se encuentra el funcionamiento principal de la estación. Desde aquí se llama a las funciones para

encender o apagar los LEDs correspondientes, ejecutar las conversiones, mandar órdnenes y esperar

respuesta y realizar el saludo al otro microcontrolador.

4.3.2.2 Microcontrolador de la calefacción

4.3.2.2.1 Interrupcio n de recepccio n de datos [#pragma vector = USCIAB0RX_VECTOR __interrupt void ReceiveInterrupt(void);]

Más compleja que anteriormente. Ahora tiene comparaciones extras para realizar una respuesta en

función de la orden que le haya pedido el otro microcontrolador.

4.3.2.2.2 Interrupcio n del reloj [#pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void);]

Por su parte, la interrupción del temporizador es mucho más sencilla. Solo realiza el saludo y enciende

los LEDs dependiendo de la potencia que le quede disponible, que es modificada según las repsuestas

a las órdenes del otro microcontrolador.

4.4 Lista de componentes

*Totales para todo el proyecto

Tabla 4-2: Lista de componentes

Componente Cantidad

Rectificador de tensión de 12 V y 1 A con

salida jack 1

Conector jack 1

Aplicación en entorno simulado

24

Bobina de 560 𝜇𝐻 1

Bobina de 680 𝜇𝐻 2

Condensador electrolítico de 10 𝜇𝐹 2

Condensador cerámico de 120 𝑝𝐹 4

Condensador cerámido de 4.7 𝑛𝐹 2

Regulador de tensión LM7805 2

Microcontrolador MSP430G2553 2

Transistor 252907 2

Resistencia de 1 𝑘Ω 4

Resistencia de 10 𝑘Ω 6

Resistencia de 18 𝑘Ω 2

Resistencia de ? ? 𝑘Ω 1

Resistencia NTC de 47 𝑘Ω 1

Diodo 2

Barra de LEDs HDSP 4840 2

OPAMP AD8061 2

Disparador de Schmitt SN74HC14 2

4.5 Preparación del entorno

Todos las placas de circuito impreso se han dispuesto es una lámina de metacrilato de 16 x 21 cm

conectadas entre sí por 9 metros de cable. Este sistema se alimenta por medio de un rectificador de 12

V y 1 A por medio de un conector jack.

4.6 Resultados del ensayo

Pese a que lo esperado era que el sistema funcionara en la primera conexión se detectaron problemas

en las pruebas que se hicieron.

Durante el diseño de las placas de circuito impreso no se observó que los microcontroladores no

estaban en contacto con el plano de tierra, lo que impediría que este pusiera los niveles correctos en la

UART al mandar datos o en la barra de LEDs para encenderlos o apagarlos (Figura 4-7 (Rojo)).

25 Comunicación a través de redes de alimentación en corriente continua [PLC]

Sin salirse de este segmento se pasó por alto que el pin de

restauración del microcontrolador es activo a nivel alto, por lo que

necesitaría estar conectado a alimentación para que no tenga efecto

en el funcinamiento (Figura 4-7 (Azul)).

Estos dos errores se han solventado por medio de cables rígidos

soldados por debajo de la placa.

Tras solventar estos errores el funcionamiento de la placa era

relativamente correcto, hasta que se hizo trabajar por más de un

minuto. Aunque se tomaran precauciones para que ningún

componente sufiera daños en esta prueba, limitando la corriente de

la fuente de alimentación del laboratorio a 1 A, primero saltó la

bobina que evita la pérdida de señal por la fuente de alimentación

y posteriormente las que protegen el regulador de tensión.

Cambiar dichas bobinas por otras más pequeñas, 330 𝜇𝐻, pero

que soporten hasta un amperio de corriente podría haber sido una

solución a este error. Con este cambio los filtros seguirían

realizando su función, al disminuir la inductancia el espectro se desplaza a la izquierda, lo que implica

que el filtro impida el paso de más frecuencias que antes. Sin embargo, el aislamiento de la fuenta no

es suficiente, como veremos a continuación.

4.6.1 Medidas tomadas en el prototipo

Figura 4-7: Alimentación del oscilador (amarillo) y entrada de la UART (azul) de la placa de

servidores.

En la Figura 4-8 se comprueba que, efectivamente, pese a estar mandando el saludo correctamente el

dato, las interferencias generadas por la portadora en la alimentación de los dispositivos activos es

demsiado alta como para permitir a los mismos trabajar correctamente.

Figura 4-6: Ampliación huella

del microcontrolador en las

placas de circuito impreso.

Aplicación en entorno simulado

26

Figura 4-8: Salida de 12 V de la fuente de alimentación.

Como se había bajado el valor de la bobina de los filtros del regulador de tensión el filtro paso bajo

debe seguir cumpliendo su efecto por lo que el problema debe de estar en la bobina que aisla la fuente

de alimentación. En la Figura 4-9 se observa como, donde en el anterior ensayo la señal no conseguía

entrar en la fuente, ahora pasa a través de ella sin problemas.

Figura 4-9: Nodo de tierra.

Permitir a la portadora pasar a la fuente de alimentación conlleva que el nodo de tierra que estamos

usando como referencia se perturbe en la misma magnitud que la señal, por lo que todo lo que depende

de la referencia no funcionará correctamente.

27

CONCLUSIONES

Como resultado de las pruebas realizadas es posible concluir que es posible comunicarse con

dispositivos utilizando la alimentación de los mismos. Para ello se deben aislar correctamente las

fuentes de alimentación o los dispositivos sensibles a los mismos. Tras el trabajo se ha determinado

que lo más importante es mantener a la portadora dentro de las zonas en las que queremos que tenga

efecto y, posteriormente, precuparse del resto de componentes.

Cuando se trata de un único emisor y un único receptor las condiciones de trabjo son más sencillas. El

oscilador inyecta a la portadora en la red y esta se traslada a través de ella hasta el receptor, que la

interpreta sin tener que mandar una respuesta.

En el caso de requerirse que dos dispositivos se comuniquen entre sí aparecen nuevos problemas.

Primero, los aislamientos deben soportar mayores corrientes que en el diseño original debido al

aumento de dispositivos que consumen potencia. Segundo, como no es el único interlocutor, se debe

revisar cada mensaje que se envía para asegurarse que se ha enviado correctamente. Tercero, el

protocolo de envío debe tener en cuenta que si la línea está ocupado, lo cual se puede detectar por un

mensaje mal enviado, deberá esperar un tiempo hasta que esté libre y poder mandar su cadena.

11

REFERENCIAS

[1] Farnell, [En línea]. Available: http://www.farnell.com/datasheets/2000343.pdf. [Último acceso:

04 09 2016].

[2] SGS-THOMSON MICROELECTRONICS, [En línea]. Available:

http://pcbheaven.com/datasheet/2n2905_2907.pdf. [Último acceso: 04 09 2016].

[3] FAIRCHILD, [En línea]. Available:

https://www.fairchildsemi.com/datasheets/LM/LM7805.pdf. [Último acceso: 05 09 2016].

[4] Analog Devices, [En línea]. Available: http://www.analog.com/media/en/technical-

documentation/data-sheets/AD8061_8062_8063.pdf. [Último acceso: 05 09 2016].

[5] Texas Instruments, [En línea]. Available: http://www.ti.com/lit/ds/symlink/msp430g2253.pdf.

[Último acceso: 05 09 2016].

[6] Avago Technologies, [En línea]. Available: http://www.avagotech.com/docs/AV02-1798EN.

[Último acceso: 06 09 2016].

11

ANEXO A: CÓDIGO DEL MEDIDOR DE

TEMPERATURA

/* VALENTIN GUTIERREZ GIL * TFG: Aplicacion PLC * GIERM - 2015/2016 * _____________ * | MSP430G2553 | * | | * 5V |Vcc GND| GND * | | * NC |P1.0 P2.6| NC * | | * READ |P1.1 P2.7| NC * | | * WRITE |P1.2 TEST| NC * | | * SENSOR |P1.3 RESET| NC * | | * T10 |P1.4 P1.7| T1 * | | * T9 |P1.5 P1.6| T2 * | | * T8 |P2.0 P2.5| T3 * | | * T7 |P2.1 P2.4| T4 * | | * T6 |P2.2 P2.3| T5 * |_____________| * * 5V -> Alimentación GND -> TReferencia de tensión * Ti -> Barra de LEDs NC -> No conectado * READ -> UART RXD WRITE -> UART TXD * */ #include "msp430.h" char send(char chain); // Funcion para asegurar envio void barra(char level); // Funcion para encender la barra void convert(void); // Funcion de conversion del ADC unsigned char poten = 0; // Potencia permitida unsigned char potenn = 0; // Potencia necesaria unsigned char potenm = 5; // Potencia maxima unsigned char state = 0; // Estado maquina principal unsigned char state_send = 0; // Estado de la funcon send() unsigned char counter = 0; // Contador de espera de respuesta unsigned char list[10]; // Lista de prioridad de sensores conectados unsigned char serie = 1; // Serie de este sensor unsigned char prior = 9; // Prioridad de este sensor unsigned char sended = 0; // Lo que manda el sensor

Anexo A: Código del medidor de temperatura

12

12

unsigned char active = 0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Paramos Watch dog //------------------- Condiguracion de relojes -------------------// if (CALBC1_1MHZ == 0xFF) while(1); // Comprobamos fallo de calibración DCOCTL = 0; // Seleccionar los ajustes mas bajos de DCOx y MODx BCSCTL1 = CALBC1_1MHZ; // Establecer rango DCOCTL = CALDCO_1MHZ; // establecer DCO paso y modulación //-------- Configuracion del TIMER --------// CCTL0 = CCIE; // Habilitar interrupcion del CCR0 TACTL = TASSEL_2 + MC_1 + ID_3; // SMCLK/8, upmode CCR0 = 1000; // 1.25 kHz //-------- Configuracion de puertos --------// P1DIR |= BIT4 + BIT5 + BIT6 + BIT7; // P1.(4,5,6,7) salida digital P1OUT &= ~(BIT5 + BIT5 + BIT6 + BIT7); // Set a 0 P2DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; // P2.(0,1,2,3,4,5) salida digital P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); // Set a 0 P1SEL |= BIT3; // P1.3 entrada analogica //-------- Establecer P1.(1,2) para la UART --------// P1SEL |= BIT1 + BIT2; // P1.1 UCA0RXD entrada P1SEL2 |= BIT1 + BIT2; // P1.2 UCA0TXD salida //-------- Configurar la UART(USCI_A0) --------// UCA0CTL1 |= UCSSEL_2 + UCSWRST; // USCI Clock = SMCLK,USCI_A0 disabled UCA0BR0 = 0x1B; // 104 From datasheet table- UCA0BR1 = 0; // -selects baudrate = 9600,clk = SMCLK UCA0MCTL = UCBRS_1; // Modulation value = 1 from datasheet UCA0CTL1 &= ~UCSWRST; // Clear UCSWRST to enable USCI_A0 //-------- Configurar ADC --------// ADC10CTL1 = INCH_3 + ADC10DIV_3 ; ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE; ADC10AE0 |= BIT3; ADC10CTL0 |= ENC + ADC10SC; // Inicio de muestreo y conversion //---------------- Habilitar interrupciones ------------------// IE2 |= UCA0RXIE; // Enable the Receive interrupt _BIS_SR(LPM0_bits + CPUOFF + GIE); } #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF);

13 Comunicación a través de redes de alimentación en corriente continua [PLC]

} #pragma vector = USCIAB0RX_VECTOR __interrupt void ReceiveInterrupt(void) { unsigned char data = UCA0RXBUF; if (data < 100 && data != serie*10) { active == 1; } IFG2 &= ~UCA0RXIFG; // Clear RX flag } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { unsigned char jump = 0; unsigned char data = UCA0RXBUF; switch(state) { case 0: counter = 0; barra(10); sended = serie*10; jump = send(sended); if (jump == 1) state++; break; case 1: barra(9); counter++; if (counter >= 30) { state = 0; } else if (active == 1) { state++; counter = 0; } break; case 2: if (potenn <= potenm) { poten = potenn; } else { state++; } break; case 3: sended = 100 + 2*10 + potenn-potenm; jump = send(sended); if (jump == 1) state++; break; case 4: if (data >= (100 + serie*10) && data < (100 + (serie+1)*10)) { potenm = data - 100 - serie*10 + potenm; state = 1; } break; } if (state > 1) { convert();

Anexo A: Código del medidor de temperatura

14

14

barra(poten); } P1IFG &= ~BIT3; // Borra flag de interrupcion } char send(char chain) { UCA0TXBUF = chain; // Transmitimos la cadena if (UCA0RXBUF == chain) { // Si se lee lo que se manda, se ha enviado correctamente return 1; } return 0; } void barra(char level) { switch(level) { case 0: P1OUT &= ~(BIT4 + BIT5 + BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); break; case 1: P1OUT &= ~(BIT5 + BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4; break; case 2: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; break; case 3: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0; break; case 4: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1; break; case 5: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2; break; case 6: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3; break; case 7: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~BIT5; P1OUT ^= BIT4 + BIT5;

15 Comunicación a través de redes de alimentación en corriente continua [PLC]

P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4; break; case 8: P1OUT &= ~(BIT6 + BIT7); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; case 9: P1OUT &= ~BIT7; P1OUT ^= BIT4 + BIT5 + BIT6; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; case 10: P1OUT ^= BIT4 + BIT5 + BIT6 + BIT7; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; } } void convert(void) { ADC10CTL0 |= ENC + ADC10SC; // Inicio de muestro y conversion if (ADC10MEM >= 1000){ potenn = 1; } else if (ADC10MEM >= 900) { potenn = 2; } else if (ADC10MEM >= 800) { potenn = 3; } else if (ADC10MEM >= 700) { potenn = 4; } else if (ADC10MEM >= 650) { potenn = 5; } else if (ADC10MEM >= 590) { potenn = 6; } else if (ADC10MEM >= 400) { potenn = 7; } else if (ADC10MEM >= 300) { potenn = 8; } else if (ADC10MEM >= 100) { potenn = 9; } else { potenn = 10; } }

11

ANEXO B: CÓDIGO DE LA CALEFACCIÓN

/* VALENTIN GUTIERREZ GIL * TFG: Aplicacion PLC * GIERM - 2015/2016 * _____________ * | MSP430G2553 | * | | * 5V |Vcc GND| GND * | | * NC |P1.0 P2.6| NC * | | * READ |P1.1 P2.7| NC * | | * WRITE |P1.2 TEST| NC * | | * NC |P1.3 RESET| NC * | | * T10 |P1.4 P1.7| T1 * | | * T9 |P1.5 P1.6| T2 * | | * T8 |P2.0 P2.5| T3 * | | * T7 |P2.1 P2.4| T4 * | | * T6 |P2.2 P2.3| T5 * |_____________| * * 5V -> Alimentación GND -> TReferencia de tensión * Ti -> Barra de LEDs NC -> No conectado * READ -> UART RXD WRITE -> UART TXD * */ #include "msp430.h" char send(char chain); // Funcion para asegurar envio void barra(char level); // Funcion para encender la barra unsigned char poten = 5; // Potencia permitida unsigned char state = 0; // Estado maquina principal unsigned char state_send = 0; // Estado de la funcon send() unsigned char counter = 0; // Contador de espera de respuesta unsigned char serie = 2; // Serie de este sensor unsigned char prior = 3; // Prioridad de este sensor unsigned char sended = 0; // Lo que manda el sensor unsigned char active = 0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Paramos Watch dog //------------------- Condiguracion de relojes -------------------//

Anexo B: Código de la calefacción

12

12

if (CALBC1_1MHZ == 0xFF) while(1); // Comprobamos fallo de calibración DCOCTL = 0; // Seleccionar los ajustes mas bajos de DCOx y MODx BCSCTL1 = CALBC1_1MHZ; // Establecer rango DCOCTL = CALDCO_1MHZ; // establecer DCO paso y modulación //-------- Configuracion del TIMER --------// CCTL0 = CCIE; // Habilitar interrupcion del CCR0 TACTL = TASSEL_2 + MC_1 + ID_3; // SMCLK/8, upmode CCR0 = 1000; // 1.25 kHz //-------- Configuracion de puertos --------// P1DIR |= BIT4 + BIT5 + BIT6 + BIT7; // P1.(4,5,6,7) salida digital P1OUT &= ~(BIT5 + BIT5 + BIT6 + BIT7); // Set a 0 P2DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; // P2.(0,1,2,3,4,5) salida digital P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); // Set a 0 //-------- Establecer P1.(1,2) para la UART --------// P1SEL |= BIT1 + BIT2; // P1.1 UCA0RXD entrada P1SEL2 |= BIT1 + BIT2; // P1.2 UCA0TXD salida //-------- Configurar la UART(USCI_A0) --------// UCA0CTL1 |= UCSSEL_2 + UCSWRST; // USCI Clock = SMCLK,USCI_A0 disabled UCA0BR0 = 0x1B; // 104 From datasheet table- UCA0BR1 = 0; // -selects baudrate = 9600,clk = SMCLK UCA0MCTL = UCBRS_1; // Modulation value = 1 from datasheet UCA0CTL1 &= ~UCSWRST; // Clear UCSWRST to enable USCI_A0 //---------------- Habilitar interrupciones ------------------// IE2 |= UCA0RXIE; // Enable the Receive interrupt _BIS_SR(LPM0_bits + CPUOFF + GIE); } #pragma vector = USCIAB0RX_VECTOR __interrupt void ReceiveInterrupt(void) { unsigned char data = UCA0RXBUF; unsigned char i = 0; if (data < 100 && data != serie*10) { sended = send(serie*10); if (sended == 1){ active = 1; } } else if (data < 200) { data = data - 100; while(data >= 10) { i++; data = data - 10; } sended = 100 + 1*10 + data;

13 Comunicación a través de redes de alimentación en corriente continua [PLC]

UCA0TXBUF = sended; poten = poten - data; } IFG2 &= ~UCA0RXIFG; // Clear RX flag } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { unsigned char data = UCA0RXBUF; switch(state) { case 0: barra(0); if (active == 1) state++; break; case 1: barra(poten); break; } P1IFG &= ~BIT3; // Borra flag de interrupcion } char send(char chain) { UCA0TXBUF = chain; // Transmitimos la cadena if (UCA0RXBUF == chain) { return 1; } return 0; } void barra(char level) { switch(level) { case 0: P1OUT &= ~(BIT4 + BIT5 + BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); break; case 1: P1OUT &= ~(BIT5 + BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4; break; case 2: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; break; case 3: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT1 + BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0; break; case 4: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1;

Anexo B: Código de la calefacción

14

14

break; case 5: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT3 + BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2; break; case 6: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~(BIT4 + BIT5); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3; break; case 7: P1OUT &= ~(BIT6 + BIT7); P2OUT &= ~BIT5; P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4; break; case 8: P1OUT &= ~(BIT6 + BIT7); P1OUT ^= BIT4 + BIT5; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; case 9: P1OUT &= ~BIT7; P1OUT ^= BIT4 + BIT5 + BIT6; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; case 10: P1OUT ^= BIT4 + BIT5 + BIT6 + BIT7; P2OUT ^= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5; break; } }

11