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
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 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
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; } }