implementación de una tarjeta nodo para la automatización...

158
Implementación de una Tarjeta Nodo Para la Automatización Parcial de una Vivienda Vía Red Eléctrica. Titulación: Ingeniería Técnica Industrial esp. Electrónica Industrial. AUTOR: Víctor Manuel Carayol Martínez. DIRECTOR: Esteban del Castillo Pérez FECHA: Octubre / 2004.

Upload: others

Post on 13-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Implementación de una Tarjeta Nodo Para la Automatización Parcial de una Vivienda Vía Red

Eléctrica.

Titulación: Ingeniería Técnica Industrial esp. Electrónica Industrial.

AUTOR: Víctor Manuel Carayol Martínez.

DIRECTOR: Esteban del Castillo Pérez FECHA: Octubre / 2004.

Agradecimientos:

A mis padres por su paciencia y apoyo incondicional. A Joaquín por su inestimable ayuda. A mis amigos por saber comprenderme y estar siempre cerca. Y a todo aquel que en algún momento confió en mi capacidad y me animó para llegar a este punto. Muchas Gracias.

Mónica y Jose Pedro Felicidades.

1. Índice.

1. Índice.

4

Índice:

1. ÍNDICE. .................................................................................................................................. 3

ÍNDICE:.......................................................................................................................................... 4

2. MEMORIA DESCRIPTIVA. ................................................................................................. 7 2.1. ANTECEDENTES. ............................................................................................................... 8 2.2. OBJETIVOS GENERALES..................................................................................................... 8 2.3. INTRODUCCIÓN A LA DOMÓTICA........................................................................................ 9

2.3.1. Definición del Término “Domótica” ....................................................................... 9 2.3.2. Sistemas de Control .............................................................................................. 10

2.4. TECNOLOGÍAS Y PROTOCOLOS UTILIZADOS EN LA DOMÓTICA.[1] ..................................... 10 2.4.1. CEBus. ................................................................................................................. 10 2.4.2. LonWorks / LonTalk.............................................................................................. 11 2.4.3. SCP. ..................................................................................................................... 12 2.4.4. BACnet. ................................................................................................................ 13 2.4.5. HAVi. ................................................................................................................... 14 2.4.6. Jini. ...................................................................................................................... 14 2.4.7. UPnP.................................................................................................................... 15 2.4.8. HAPi. ................................................................................................................... 15 2.4.9. TCP/IP. ................................................................................................................ 16 2.4.10. ZigBee. ................................................................................................................. 17 2.4.11. X-10...................................................................................................................... 17 2.4.12. BatiBus (convergencia a Konnex).......................................................................... 19 2.4.13. EIB (convergencia a Konnex)................................................................................ 19 2.4.14. EHS (convergencia a Konnex)............................................................................... 21 2.4.15. Konnex. ................................................................................................................ 22

2.5. MODELO DE REFERENCIA OSI DE LA ISO......................................................................... 23 2.5.1. La Capa Física. .................................................................................................... 24 2.5.2. La Capa de Enlace de Datos. ................................................................................ 25 2.5.3. La Capa de Red. ................................................................................................... 25 2.5.4. La Capa de Transporte. ........................................................................................ 25 2.5.5. La Capa de Sesión. ............................................................................................... 26 2.5.6. La Capa de Presentación. ..................................................................................... 26 2.5.7. La Capa de Aplicación.......................................................................................... 26

2.6. MEDIOS FÍSICOS PARA LA IMPLEMENTACIÓN. ................................................................... 27 2.6.1. Medios de Transmisión ......................................................................................... 27 2.6.1.1. Línea de Distribución Eléctrica............................................................................. 28 2.6.1.2. Cables de Cobre. .................................................................................................. 32 2.6.1.3. Fibra Óptica. ........................................................................................................ 32 2.6.1.4. Radiofrecuencia.................................................................................................... 33 2.6.1.5. Infrarrojos. ........................................................................................................... 33 2.6.2. Velocidad de Transmisión ..................................................................................... 33 2.6.3. Medios Físicos Destacados. .................................................................................. 34

2.7. PRESTACIONES DESEABLES. ............................................................................................ 38 2.8. PRESTACIONES FINALES. ................................................................................................. 39 2.9. COMPONENTES REALES EN LA IMPLEMENTACIÓN FINAL. .................................................. 40 2.10. EL MICROCONTROLADOR PARA ESTE PROYECTO. ............................................................ 42 2.11. DESARROLLO Y DISEÑO DE LAS TARJETAS. ...................................................................... 46

2.11.1. Tarjetas Nodo. ...................................................................................................... 46 2.11.2. Tarjeta de Potencia............................................................................................... 52

2.12. PROGRAMACIÓN DEL MICROCONTROLADOR..................................................................... 54 2.12.1. Programación del Nodo Maestro. ......................................................................... 55 2.12.2. Programación del Nodo Esclavo. .......................................................................... 66

3. MEMORIA DE CÁLCULO. ................................................................................................ 70 3.1. INTRODUCCIÓN: .............................................................................................................. 71 3.2. RED DE ACOPLO Y FILTROS. ............................................................................................. 71

1. Índice.

5

3.3. CÁLCULO DE LA VELOCIDAD MÍNIMA PARA LAS TARJETAS NODO. ................................... 77 3.4. CÁLCULO DEL CONSUMO DE POTENCIA............................................................................ 77

4. PLANOS................................................................................................................................ 80 4.1. ESQUEMA ELECTRÓNICO DE LAS TARJETAS NODO............................................................ 81 4.2. PCB DE LAS TARJETAS DE CONTROL................................................................................ 82

4.2.1. Botton................................................................................................................... 82 4.2.2. Top. ...................................................................................................................... 83

4.3. DISTRIBUCIÓN DE LOS COMPONENTES.............................................................................. 84 4.4. ESQUEMA ELECTRÓNICO DE LA TARJETA DE POTENCIA. ................................................... 85 4.5. PCB DE LA TARJETA DE POTENCIA. ................................................................................. 86

4.5.1. Botton................................................................................................................... 86 4.6. DISTRIBUCIÓN DE LOS COMPONENTES.............................................................................. 87

5. PRESUPUESTO. .................................................................................................................. 88 5.1. MEDICIONES. .................................................................................................................. 89

5.1.1. Elementos de las Tarjetas de Control. .................................................................. 89 5.1.2. Elementos de la Tarjeta de Potencia...................................................................... 91

5.2. CUADRO DE PRECIOS....................................................................................................... 92 5.2.1. Elementos de las Tarjetas de Control. ................................................................... 92 5.2.2. Elementos de la Tarjeta de Potencia...................................................................... 94

5.3. PRESUPUESTO. ................................................................................................................ 95 5.3.1. Elementos de la Tarjeta de Control. ...................................................................... 95 5.3.2. Elementos de la Tarjeta de Potencia...................................................................... 97 5.3.3. Diseño, Montaje y Programación. ........................................................................ 98

5.4. RESUMEN DEL PRESUPUESTO........................................................................................... 99 6. RESULTADOS Y CONCLUSIONES. ............................................................................... 100

6.1. RESULTADOS. ............................................................................................................... 101 6.2. CONCLUSIONES. ............................................................................................................ 104

7. PLIEGO DE CONDICIONES. ........................................................................................... 105 7.1. CONDICIONES TÉCNICAS. .............................................................................................. 106

7.1.1. Generalidades..................................................................................................... 106 7.1.2. Resistencias. ....................................................................................................... 106 7.1.3. Condensadores. .................................................................................................. 107 7.1.4. Inductores........................................................................................................... 107 7.1.5. Transistores y Diodos. ........................................................................................ 108 7.1.6. Placas de Circuito Impreso. ................................................................................ 108 7.1.7. Reglamento de Baja Tensión. .............................................................................. 109 7.1.8. Especificaciones Mecánicas. ............................................................................... 109 7.1.9. Interface. ............................................................................................................ 109 7.1.10. Suministro. ......................................................................................................... 110 7.1.11. Comunicaciones.................................................................................................. 110 7.1.12. El Microcontrolador. .......................................................................................... 110 7.1.13. Montaje y Cableado Interior. .............................................................................. 110

8. ANEXOS. ............................................................................................................................ 111 8.1. INTRODUCCIÓN. ............................................................................................................ 112 8.2. CÓDIGO: ....................................................................................................................... 112

8.2.1. Código de la Tarjeta Nodo Maestro. ................................................................... 112 8.2.1.1. Archivo ‘defs.h’. ................................................................................................. 112 8.2.1.2. Archivo ‘main.c’. ................................................................................................ 113 8.2.1.3. Archivo ‘funciones.h’. ......................................................................................... 114 8.2.1.4. Archivo ‘funciones.c’. ......................................................................................... 115 8.2.1.5. Archivo ‘inicia.h’................................................................................................ 122 8.2.1.6. Archivo ‘inicia.c’. ............................................................................................... 122 8.2.1.7. Archivo ‘intvect.h’. ............................................................................................. 125 8.2.1.8. Archivo ‘intvect.c’............................................................................................... 125 8.2.1.9. Archivo ‘isr.c’..................................................................................................... 126

1. Índice.

6

8.2.2. Código de la Tarjeta Nodo Esclavo. .................................................................... 129 8.2.2.1. Archivo ‘defs.h’. ................................................................................................. 129 8.2.2.2. Archivo ‘main.c’. ................................................................................................ 130 8.2.2.3. Archivo ‘funciones.h’. ......................................................................................... 131 8.2.2.4. Archivo ‘funciones.c’. ......................................................................................... 132 8.2.2.5. Archivo ‘inicia.h’................................................................................................ 141 8.2.2.6. Archivo ‘inicia.c’. ............................................................................................... 142 8.2.2.7. Archivo ‘intvect.h’. ............................................................................................. 145 8.2.2.8. Archivo ‘intvect.c’............................................................................................... 145 8.2.2.9. Archivo ‘isr.c’..................................................................................................... 146 8.2.2.10. Archivo ‘potencia.h’. ......................................................................................... 149 8.2.2.11. Archivo ‘potencia.c’. ......................................................................................... 149

8.3. HOJAS DE CARACTERÍSTICAS TÉCNICAS. ........................................................................ 153 8.3.1. Datasheet HCPL-800J (PLC Powerline DAA IC). ............................................... 153 8.3.2. Datasheet ST7537HS1 (Home automation modem). ............................................ 172

8.4. NORMATIVAS................................................................................................................ 182 8.4.1. UNE-EN 50065-1 (Transmisión de señales por la red eléctrica de baja tensión en la

banda de frecuencias de 3 kHz a 148’5 kHz). .................................................................................. 182 9. REFERENCIAS Y BIBLIOGRAFÍA................................................................................. 214

9.1. REFERENCIAS................................................................................................................ 215 9.2. BIBLIOGRAFÍA............................................................................................................... 216

2. Memoria Descriptiva.

2. Memoria Descriptiva.

8

2.1. Antecedentes.

Antiguamente una vivienda era un lugar de resguardo para vivir con un mínimo de instalaciones, en la actualidad se busca el confort. Gracias a las nuevas tecnologías se puede conseguir controlar las ventanas y las luces de una casa desde Internet, encender la calefacción con una llamada de móvil, que la nevera te envíe un e-mail con el listado de lo que se debe comprar de camino a casa, etc… Con esta automatización de las viviendas se consigue una mayor comodidad con un menor esfuerzo.

El concepto de edificio inteligente nace en EEUU a finales de los 70 y principios de los 80, gracias al auge de las telecomunicaciones y un periodo prospero en la construcción de edificios y oficinas. Desde entonces se ha denominado domótica (cuando va aplicado al hogar), edificios inteligentes (cuando va aplicado a edificios), edificios precableados (cuando incorporan una red de comunicaciones voz/datos estructurada y universal), edificios de altas tecnologías (capaces de utilizar tecnologías avanzadas de comunicación e información), edificios automatizados (cuando incorporan instalaciones de control de servicios técnicos y seguridad) u hogares automatizados (cuando se refiere a la vivienda). Los Franceses con una clasificación más general, domótica, cuando se refiere a la vivienda, e inmótica cuando se refiere a la edificación no residencial (hospitales, hoteles, estaciones, plantas industriales, etc…).

La “domótica” es el conjunto de servicios de una vivienda garantizado por los sistemas que realizan diversas funciones, las cuales pueden estar conectadas entre ellas a las redes interiores (redes locales) y exteriores de comunicación (Internet). Gracias a estos sistemas se obtiene un notable ahorro energético, una gestión eficaz de la casa, una buena comunicación con el exterior y un gran nivel de seguridad.

2.2. Objetivos Generales.

El objetivo de este proyecto, es consolidar los conocimientos adquiridos en asignaturas como teoría de circuitos, electrónica analógica, electrónica de potencia, sistemas digitales, sistemas informáticos, automatización, control automático, sistemas de telecomandamiento y otras, trabajando con tecnologías y dispositivos actuales.

Para ello como el nombre del proyecto indica, implementaré una tarjeta nodo para la automatización parcial de una vivienda. Más adelante se verá como se satisfacen las necesidades creadas, con un sistema de comunicación por red eléctrica. Finalmente la implementación será de dos tarjetas, una actuará como maestra y la otra como esclava, mis objetivos serán:

1. Estudiar la mayoría de los sistemas utilizados en “domótica” (Manejo de redes de área local) tanto los que tienen bus dedicado como los que utiliza la red eléctrica como bus de comunicación.

2. Justificar la decisión de utilizar un sistema de corrientes portadoras para la implementación de dichas tarjetas.

3. Justificar la utilización de los componentes para la implementación del sistema y posibles soluciones.

4. Justificar la utilización de un determinado microcontrolador, conociendo diferencias entres estos y teniendo muy en cuenta los recursos disponibles y el objetivo final del proyecto.

2. Memoria Descriptiva.

9

5. Diseño y elaboración de las dos tarjetas nodo para la comunicación.

6. Diseño y elaboración de la tarjeta de potencia para un caso determinado.

7. Programación del microcontrolador de las tarjetas de comunicación.

2.3. Introducción a la Domótica.

2.3.1. Definición del Término “Domótica”

Actualmente los sistemas para el control del hogar integran automatización, informática y nuevas tecnologías de la información. Para sintetizar esta nueva filosofía aplicada al sector doméstico, se ha acuñado un nuevo neologismo, domótica: "tecnología aplicada al hogar", formado por la raíz latina domus (casa), define todas las funciones y servicios proporcionados por una vivienda inteligente. En francés se utiliza un término similar, domotique formado por "domus" y "robotique" (robótica), y en inglés se utiliza la expresión home systems o smart house.

Según el diccionario "Larrouse" de la Real Academia de la Lengua Francesa, la domótica es el "conjunto de servicios proporcionados por sistemas tecnológicos integrados, como el mejor medio para satisfacer estas necesidades básicas de seguridad, comunicación, gestión energética y confort, del hombre y de su entorno más cercano".

Así pues se puede decir que la domótica es el resultado de la integración de los sistemas de gestión de seguridad, comunicaciones, gestión del confort y control energético.

Figura 2-1. Domótica, Integración de sistemas.

SEGURIDAD: De las personas y los bienes materiales delante de las agresiones externas e intrusiones.

COMUNICACIONES: Integración de sistemas de enlace entre el interior (red local) y el exterior de la casa (Internet).

GESTIÓN: Incluye todos aquellos automatismos que no se puede clasificar en ningún otro lugar, como por ejemplo ventanas, luces, audio, video, etc…

ENERGÍA: Control y distribución adecuada y eficiente de la energía.

2. Memoria Descriptiva.

10

2.3.2. Sistemas de Control

Los tipos básicos de las redes domóticas que nos podemos encontrar son dos.

- Sistemas punto a punto.

- Sistemas de bus.

Los sistemas punto a punto son sensores y actuadotes cableados directamente a un único nodo central, como por ejemplo las alarmas normales de hogar o el sistema SimonVox de Simon. Sus principales ventajas son el parecido a las instalaciones eléctricas actuales de una casa y el bajo coste de la centralita. Los inconvenientes son el elevado número de cables y la dependencia directa de la unidad de control.

Los sistemas de bus son diferentes nodos, más o menos inteligentes, comunicados a través de un bus. Estos sistemas pueden ser centralizados o descentralizados. Las principales ventajas respecto a los sistemas punto a punto, son que admiten mayores distancias y además en el caso de la caída de la centralita, en el caso más desfavorable (sistema centralizado) no significa la caída total de la red. Los inconvenientes son su elevado precio, el problema con la normalización y consecuentemente, compatibilidad de los protocolos y que el cableado no es tan simple como se podría pensar inicialmente.

Las estructuras de redes domóticas que se puede encontrar son en estrella, en anillo en árbol y una combinación de estas dependiendo de la aplicación. El control siempre podrá ser centralizado o descentralizado.

Figura 2-2. Estructuras de las redes domóticas.

2.4. Tecnologías y Protocolos utilizados en la Domótica.[1]

2.4.1. CEBus.

En el 1984 varios miembro de la EIA norteamericana (Electronics Industry Association) especificaron y desarrollaron un estándar llamado CEBus (Consumer Electronic Bus). En 1992 fue presentada la primera especificación.

Se trata de un protocolo, para entornos distribuidos de control, que esta definido en un conjunto de documentos. Como es una especificación abierta, cualquier empresa puede conseguir estos documentos y fabricar productos que implemente este estándar [2].

2. Memoria Descriptiva.

11

Nivel Físico.

Existen varios protocolos para que los electrodomésticos y equipos eléctricos puedan comunicarse dependiendo del medio a utilizar. Los más utilizados son, corrientes portadoras en las líneas de baja tensión, par trenzado con telealimentación, cable coaxial, infrarrojo, radiofrecuencia y fibra óptica.

Por ejemplo: Para la transmisión de datos por corrientes portadoras, el CEBus usa una modulación en espectro expandido, es decir, los datos se transmiten, uno o varios bits dentro de una ráfaga de señal que comienza en 100 kHz y termina en 400kHz (barrido) de duración 100 microsegundo. La velocidad media de transmisión es de 7500bps. Hay que destacar que el nivel físico del estándar del CEBus no cumple la norma europea relativa a transmisión de señal por las líneas de baja tensión (CENELEC EN-50065), por lo que no es aconsejable utilizarlo en Europa.

Protocolo.

En CEBus las tramas definidas pueden tener longitud variable en función de la cantidad de datos que se necesitan transmitir. Los tamaños oscilan entra el mínimo de 8 bytes y el máximo de 100 bytes.

Lo nodos en CEBus tienen una dirección fija establecida en fabrica que los identifica de forma unívoca en una instalación. Tienen más de 4000 millones de posibilidades.

El lenguaje de programación para el CEBus se llama CAL (Common Application Language) esta orientado a objetos (estándar EIA-600).

CIC.

La CIC (CEBus Industry Council) es una asociación de diferentes fabricantes de software y hardware que cerifica que los nuevos productos CEBus que salen al mercado cumplan toda la especificación.

La empresa Intellon Corporation dispone del hardware y el protocolo en un solo circuito y además proporcionan el entorno de desarrollo en el leguaje CAL [3]. [4].

2.4.2. LonWorks / LonTalk.

En el 1992 la empresa Echelon presentó la tecnología LonWorks. Desde principio muchas empresas han utilizado esta tecnología para implementar redes de control distribuidas y automatización. Su mayor inconveniente es su precio elevado, que ha imposibilitado su implantación en los hogares.

Esta tecnología ha tenido mucho éxito en las instalaciones profesionales, en las que es mucho más importante la fiabilidad y robustez del sistema que su precio. Destacar su arquitectura descentralizada que permite distribuir la inteligencia entre los sensores y los acturadores.

Según Echelon, su arquitectura es un sistema abierto a cualquier fabricante, pero la patente de su circuito integrado, hace que este sistema sea poco “abierto” [5].

Todos los nodos o dispositivos LonWorks, están basados en un microcontrolador llamo Neuron Chip. Este circuito integrado y su firmware que implementa el protocolo LonTalk fue desarrollado por Echelon en 1990.

2. Memoria Descriptiva.

12

Lo más destacado del Neuron Chip es:

- Tiene un identificado único, el Neuron ID, es de 48 bits y se graba en la memoria EEPROM durante la fabricación el circuito.

- Tiene un modelo de comunicaciones que es independiente del medio fisco sobre el que funciona, es decir, los datos pueden transmitirse en ondas portadoras, cable trenzado, fibra óptica, cable coaxial, radiofrecuencia, etc…

- El firmware que implementa el protocolo LonTalk proporciona servicios de transporte y routing extremo-a-extremo, es decir, esta incluido un sistema operativo que ejecuta y planifica la aplicación distribuida y que maneja las estructuras de datos que se intercambian los nodos.

Los circuitos se comunican enviándose telegramas que contienen la dirección destino, información para el routing, datos de control así como los datos de la aplicación del usuario y un checksum como código detector de errores. Un telegrama puede tener hasta 229 bytes de información neta para la aplicación distribuida.

Hay dos tipos de datos:

- Mensajes explícitos.

- Variable de red.

Los mensajes explícitos son la forma más sencilla de intercambiar datos entre dos aplicaciones.

Las variables de red proporcionan un modelo estructurado para el intercambio automático de datos distribuidos.

Echelon ha concedido licencia a tres fabricantes de semiconductores que pagan royalty por cada circuito fabricado. Son Toshiba, Motorota y Cypress.

Otros fabricantes de nodos o aplicaciones son Philips, Mitsubishi y ABB.

Medio Físico.

El Neuron chip proporciona un puerto especifico de cinco pines que puede ser configurado para actuar como interface de diversos transceivers de línea y funcionar a diferentes velocidades binarias.

LonMark.

LonMark es una asociación de fabricantes que desarrollan productos o servicios basados en redes de control LonWorks. Se encarga de especificar y publicar las recomendaciones e implementaciones que mejor se adaptan a cada uno de los dispositivos típicos de las redes de control [6].

2.4.3. SCP.

El SCP (Simple Control Protocol) es un intento de Micrososft y General Electric de generar un protocolo para redes de control que consiga afianzarse como la solución en todas las aplicaciones de automatización de edificios y viviendas [7].

Es un protocolo abierto y libre de royalties. Esta iniciativa, todo y que ya había trabajos previos, tiene dos años de vida. Su principal característica es la intención de unificar o poner orden en la amplia variedad de protocolos que existe hoy en los EEUU.

2. Memoria Descriptiva.

13

En esta convergencia trabajan el CIC (CEBus Industry Council) y las empresas que desarrollan UPnP (Universal Plug&Play). Destacar que el UPnP es una iniciativa de Microsoft y es competencia directa del Jini que lidera Sun Microsystems.

Nivel Físico.

Su nivel físico se basa en la transmisión de datos por las líneas eléctricas de baja tensión (ondas portadoras) del CEBus.

Las empresas Domosys, ITRAN Communications Ltd y Mitsubishi Electric Corporation, están desarrollando, circuitos integrados que implementan la especificación SCP en poco espacio y a bajo coste, haciendo posible su uso en multitud de electrodomésticos, dispositivos eléctricos y equipos de consumo de las viviendas [4].

También esta previsto el desarrollo en medios físicos como el par trenzado y la radiofrecuencia.

Protocolo.

Este protocolo esta optimizado para su uso en dispositivos eléctricos y electrónicos que tienen una memoria y una capacidad de proceso muy limitadas.

Como otros buses o protocolos de control distribuido, el SCP esta diseñado para funcionar sobre redes de control con un ancho de banda muy pequeño (<10 kbps), y funcionar correctamente con las condiciones de ruido de la red eléctrica de baja tensión, estas redes se llaman PLC (Power Line Communication).

2.4.4. BACnet.

Es un protocolo norteamericano para la automatización de viviendas y redes de control que fue desarrollado bajo el patrocinio de una asociación de fabricantes e instaladores de equipos de calefacción y aire acondicionado, a finales de los ochenta.

Su principal objetivo era crear un protocolo abierto, es decir, no propietario, que permitiera interconectar los sistemas de aire acondicionado y calefacción de las viviendas y edificios que permitiera una optima gestión energética.

Inicialmente se definió un protocolo que implementaba la arquitectura OSI de niveles y se decidió empezar usando, como soporte de nivel físico, la tecnología RS-485, similar al RS-232 pero sobre un par trenzado y transmisión diferencia de la señal, para hacer más inmune esta a las interferencias electromagnéticas.

La parte más destacable de este protocolo es el esfuerzo que ha realizado para definir un conjunto de reglas hardware y software que permite comunicarse a dos dispositivos independientes entre si estos usan protocolo como el EIB, el BatiBIS el EHS, el LonTalk, TCP/IP, etc…

El BACnet no esta cerrado a un nivel físico o a u protocolo de nivel 3 concreto. Define la forma en que se representan las funciones que pueden hacer cada dispositivo, llamados “objetos”, cada una con sus propiedades concretas. Como por ejemplo entradas/salida analógicas, digitales, bucles de control (PID,etc…),etc… Algunas propiedades son obligatorias y otras optativas, pero siempre debe configurarse la dirección o identificador de dispositivo para localizar este dentro de una instalación BACnet.

2. Memoria Descriptiva.

14

2.4.5. HAVi.

Una iniciativa de los fabricantes más importantes en equipos de entretenimiento como Grundig, Hitachi, Panasonic, Philips, Sharp, Sony, Thomson y Toshiba. Necesitavan un sistema estándar que permita compartir recurso y servicios entre televisión, los equipos HiFi, los videos, reproductores DVD,etc… El HAVi es una especificación software que permite la comunicación y ejecución total entre estos.

Con el HAVi los usuarios podrán utilizar la pantalla de televisión para gobernar el equipo de música, el video, el reproductor de DVD, la cámara de video, la videoconsola y todos los aparatos conectados en una misma vivienda sin necesidad de estar cerca de esta. Se podrá escuchar música en la habitación con los CDs del equipo del salón, utilizar un ordenador par reproducir películas DVD mientras estamos en la cocina, etc.. Como todos estos equipos estarán enlazados en una red domótica, se podrá disminuir el volumen cuando suene el teléfono o llamen a al puerta. Los sistema de alarma y antiincendio podrán utilizar la televisión como consola de visualización.

Tecnología.

El HAVi ha sido desarrollado para cubrir las demandas de intercambio de información entre los equipos de video y audio digitales que hay en los hogares actuales [9].

Si adquirimos un equipo con el logo HAVi de alguno de los fabricantes antes mencionados, tenemos que asegurado que:

- La interoperabilidad será total, cualquier otro dispositivo HAVi podrá gobernar al nuevo y este a la vez podrá gobernar a los que ya tenemos.

- Compatibilidad entre dispositivos de fabricantes diferentes.

- Plug&Play inmediato. Una vez conectado el bus IEEE 1394 al nuevo dispositivo este se anunciará al resto de equipos HAVi instalados en la vivienda y ofrecerá sus funciones y servicios a los demás.

- Podremos descargar de Internet las nuevas versiones de software, controladores que actualizan las prestaciones del equipo adecuándolo así a las necesidades de cada usuario o de su entorno.

Nivel Físico.

El HAVi ha escogido el estándar IEEE 1394 (llamado “i.Link â” o “FireWire â”) como soporte físico de los paquetes de datos. Este estándar, que alcanza velocidades de hasta 500 Mbps, es capaz de distribuir al mismo tiempo diversos paquetes de datos de audio y video entre diferentes equipos de una vivienda, además de todos los paquetes de control necesarios para la correcta distribución y gestión de todos los servicios.

2.4.6. Jini.

Esta tecnología ha sido desarrollada por Sun Microsystems, y proporciona un mecanismo sencillo para que diversos dispositivos conectados a una red puedan colaborar y compartir recursos sin necesidad de que el usuario final tenga que planifica y configurar dicha red. En esta red de equipos llamada “comunidad” cada uno proporciona a los demás los servicios, controladores e interfaces necesarios para distribuirse de forma optima la carga del trabajo o las tareas que deben realizar.

2. Memoria Descriptiva.

15

Tiene un procedimiento conocido con el nombre de “discovery” que hace que cualquier dispositivo que se conecte a la red sea capaz de ofrecer sus recursos a los demás, informando de su capacidad de procesamiento, memoria y de las funciones que es capaz de realizar. Al finalizar del discovery se ejecuta el procedimiento “join”, asignándole una dirección fija, es decir, una posición en la red.

Esta arquitectura es totalmente distribuida, no hay ningún dispositivo que haga el papel del controlador central o maestro de la red. Todos pueden hablar con todos y ofreces sus servicios a los demás. No es necesario el uso de un PC que controle a los dispositivos conectados a la red [10].

Tecnología.

Este sistema desarrollado por Sun Microsystems, ha aprovechado la experiencia de muchos de los conceptos en los que esta inspirado el lenguaje Java y, más concretamente, en la filosofía de la Máquina Virtual Java (JVM). El Jini puede funcionar en potentes estaciones de trabajo, en PCs, en pequeños dispositivos como cámaras de fotos, PDAs, móviles, etc…, o en electrodomésticos de línea marrón o blanca como TV, Vídeos, HiFi, etc...

2.4.7. UPnP.

UPnP (Universal Plug&Play) es una arquitectura software abierta y distribuida que permite a las aplicaciones de los dispositivos conectados a una red que intercambien información y datos de forma sencilla y transparente para que el usuario final. Esta arquitectura software esta por encima de protocolos como el TCP, el UDP, el IP, etc… y es independiente de estos.

El UPnP se encarga de todos los procesos necesarios par que un dispositivo conectado a una red pueda intercambiar información con el resto. Es independiente del fabricante, sistema operativo, lenguaje de programación de cada dispositivo y del medio físico utilizado para implementar la red.

El protocolo descubre cuando un nuevo equipo o dispositivo se conecta a la red, asignándole una dirección IP, un nombre lógico, informando a los demás de su capacidad de procesamiento y de su memoria además de las funciones que es capaz de hacer. El usuario final, de esta forma, no tiene que preocuparse de configurar la red [11].

2.4.8. HAPi.

(Home API) es un grupo de trabajo promovido por diferentes empresas cuyo objetivo es la especificación y desarrollo de un conjunto de servidos y interface de programación (Application Program Interface (API)) orientados hacia la automatización y control de las viviendas [12].

Es una iniciativa puramente orientada al software y que probablemente permitirá que diversas aplicaciones de control puedan funcionar sobre diferentes protocolos. Como por ejemplo el CEBus, el LonWorks, el HAVi e incluso las redes locales basadas en Ethernet y TCP/IP.

El HAPi facilitará la labor de los programadores de aplicaciones domóticas o de gestión de vivienda, con la creación de primitivas o APIs comunes para todos, que les

2. Memoria Descriptiva.

16

permitirán aumentar la portabilidad de las aplicaciones y el reaprovechamiento del código que ha sido especialmente diseñado para el control de dispositivos de vivienda.

Su mayor colaborador es el gigante Microsoft con un desarrollo HAPi para su sistema operativo Windows.

2.4.9. TCP/IP.

TCP/IP (Transmisión Control Protocol / Internet Protocol) más que un protocolo es un conjunto de protocolos que definen una serie de reglas y primitivas que permiten a una serie de máquinas muy distintas intercambiarse información mediante el uso de redes de área local “LANs” redes de área extensa”WAN”, redes publicas de telefonía, etc…El mayor ejemplo es Internet.

Este protocolo se puede definir en cinco niveles, que son:

1) Nivel Físico: Define los tipos de medio físico (cable de pares trenzados, coaxial, fibra óptica, etc…) y los niveles de señal que se inyectará en estos.

2) Nivel de Enlace: Prepara los paquetes de datos para su envío por medio físico en cuestión, resuelve las colisiones, corrige errores de paquetes o solicita el reenvío de los mismos.

3) Nivel de Red (IP): Los hosts (invitados) pueden introducir paquetes en la red, los cuales llegan al destinatario de forma independiente. No hay garantías de entrega ni de orden (IP no esta orientado a la conexión) gestiona la ruta de los paquetes y controla la congestión.

4) Nivel de Transporte: Es el nivel que realmente permite que dos máquinas conectadas TCP/IP puedan conversar entre sí. En este nivel pueden funcionar dos tipos de protocolos.

a. Transmission Control Protocol (TCP). Proporciona una conexión segura que permite la entrega sin errores de un flujo de bytes desde una máquina origen a una destino. Parte la trama de datos a enviar en paquetes discretos y los monta de nuevo en el destino. Maneja el control de flujo.

b. User Datagram Protocol (UDP). Es un protocolo no orientado a la conexión, por lo tanto no garantiza el reparto seguro del paquete enviado. En general, se usa el UDP cuando la aplicación que se monta encima, necesita tiempos de respuesta muy cortos más que fiabilidad en la entrega.

5) Nivel de Aplicación: Sobre él se montan las aplicaciones finales que nos facilitan la vida, destacan el correo electrónico, el navegador Web, el intercambio de ficheros FTP, y aplicaciones como el emule de intercambio de ficheros.

El protocolo TCP/IP permite trocear las tramas de datos de las aplicaciones y encapsularlos en pedacitos de longitud finita, con una dirección origen y un destino.

El protocolo TCP/IP no está optimizado para la domótica. Los protocolos destinados a la domótica están diseñados de forma que la parte útil de la trama sea lo mayor posible

2. Memoria Descriptiva.

17

respecto a los datos de control (direcciones y CRC). Los especialistas suelen usar dos formas para medir este factor:

- Ancho de banda neto, en (bits por segundo) bps. Un bus inyecta un flujo de 5400 bps de los que solo 4800 bps son útiles para la aplicación. Aquí el protocolo añade 600 bps.

- Overhead o tara, medido en %. En una trama de 55 bytes, son útiles 50, la tara sería del 10%.

El protocolo TCP/IP cuando se usa para transferir pequeñas cantidades de datos el coste en ancho de banda es muy alto, por ejemplo para enviar 2 bytes como el paquete mínimo necesita 20 bytes solo de campos de control.

Con lo dicho anteriormente no se entiende el porque de la utilización de este protocolo en la domótica. El Porque es debido a que es un protocolo muy estandarizado y muy utilizado por infinidad de ordenadores y otras aplicaciones, cosa que hace de este protocolo la herramienta ideal para asegurar la interconectividad. Además el abaratamiento de los microcontroladores y sus grandes velocidades hace que incorporar un microcontrolador que gestione una caldera, aire acondicionado, horno, nevera, etc.., mediante una conexión a Internet no tenga un incremente adicional en el coste final del producto.

2.4.10. ZigBee.

ZigBee es una alianza, sin ánimo de lucro de 25 empresas, la mayoría de ellas fabricantes de semiconductores, con el objetivo de auspiciar el desarrollo de implantación de una tecnología inalámbrica vía radio y bidireccional de bajo coste. Justifican el desarrollo de este estándar para cubrir el vacío que se produce por debajo del Bluetooth.

ZigBee, también es conocido con otros nombre como “HomeRF Lite”, es una tecnología inalámbrica con velocidades comprendidas entre 20 kB/s y 250 kB/s y rangos de 10 m a 75 m. Puede usar las bandas libres ISM de 204GHz, 868 MHz (Europa) y 915 MHz (EEUU). Una red puede estar formada por hasta 255 nodos. La mayor parte del tiempo el transceiver ZigBee esta dormido con objeto de reducir el consumo. La idea es alimentar un sensor ZigBee con dos pilas AA durante un mínimo de 6 meses y llegar hasta 2 años [13].

2.4.11. X-10.

Diseñado en Escocia entre los años 1976 y 1978 con el objetivo de transmitir datos por las líneas de baja tensón a muy baja velocidad (60 bps en EEUU y 50 bps en Europa) y costes muy bajos. Es uno de los protocolos más antiguos de los que actualmente se utilizan en la domótica. Como se utiliza la red eléctrica no es necesario instalar nuevos cables para la comunicación.

Es un protocolo no propietario, es decir, libre, cualquier persona puede fabricar dispositivos X-10. Esta obligado a utilizar los circuitos del fabricante escocés que diseño esta tecnología. Pero se destaca el precio de los royalty por ser casi simbólico.

Actualmente podemos encontrar en Europa tres grandes familias de productos basados en X-10, teóricamente son compatibles entres si.

2. Memoria Descriptiva.

18

- Netzbus.

- Timac.

- Home Systems.

Su precio es muy competitivo, de tal forma que es líder en el mercado norteamericano residencial y pequeñas empresas. Se puede afirmar que el X-10 es ahora mismo la tecnología más asequible para realizar una instalación domótica no muy compleja.

Nivel Físico.

El protocolo de corrientes portadoras utilizado en X-10 es muy sencillo. Consiste en enviar la información modulada en amplitud (AM) y de frecuencia fija a 120 kHz, con una amplitud de 6 Vpp en Estados unidos y de 2’8V en Europa. La señal se puede insertar tanto en un semiciclo positivo como negativo de la onda senoidal, la codificación de un bit a ‘1’ o un bit a’0’ depende de cómo se inyecte esta señal en los semiciclos. Esto significa que el protocolo denota un ‘1’ lógico enviando una ráfaga a 120 kHz y 6V de amplitud durante 1 milisegundo sobre la red de 60 Hz y un ‘0’ lógico mediante la ausencia de señal superpuesta a la de la red eléctrica. En Europa se representa el ‘1’ lógico enviando una ráfaga a 120 kHz y 2’8V de amplitud durante 1 milisegundo sobre la red de 50 Hz y un ‘0’ lógico mediante la ausencia de señal. El transceiver X-10 está pendiente de los pasos por cero de la onda senoidal de 50 Hz para insertar un instante después una ráfaga muy corta. En un sistema trifásico el pulso de 1 milisegundo se transmite tres veces para que coincida con el paso por cero en las tres fases.

La velocidad binaria viene impuesta por la frecuencia de red, en Europa es de 50 bps y en EEUU 60 bps.

La transmisión completa de una orden en X-10 necesita once ciclos de corriente. Esta trama se divide en tres campos de información.

1) Dos ciclos representan el Código de Inicio.

2) Cuatro ciclos representan el Código de casa (letras A-P).

3) Cinco ciclos representan o bien el Código Numérico (1-16) o bien el Código de Función (Encender, Apagar, Aumento de Intensidad, etc…).

Para aumentar la fiabilidad del sistema, la trama (Código de Inicio, Código de Casa y Código de Función o Numérico) se transmite siempre dos veces, separándolas por tres ciclos completos de corriente. En funciones de regulación de intensidad, se transmiten de forma continuada (por lo menos dos veces) sin separación de tramas.

Protocolo.

Hay tres tipos de dispositivos X-10, los que solo pueden transmitir órdenes, los que solo pueden recibirlas y los que pueden enviar y recibir ordenes.

Los transmisores pueden direccional hasta 256 receptores. Los receptores vienen dotados de dos pequeños conmutadores giratorios, uno con 16 letras y el otro con 16 números, que permiten asignar una dirección de las 256 posibles. En una instalación puede haber más de un receptor con la misma dirección, todos actuaran a la orden que se les dirija.

Los dispositivos bidireccionales, tienen la capacidad de responder y confirmar la correcta realización de una orden. Esto puede ser útil en sistemas conectados a un

2. Memoria Descriptiva.

19

ordenador que muestre los estados en que se encuentra una instalación domótica de la vivienda [14].

2.4.12. BatiBus (convergencia a Konnex).

Batibus fue una iniciativa de MERLIN GERIN, AIRELEC, EDF (Electricité de France) y LANDIS & GYR. Orientado a la gestión técnica de edificios, es un sistema formado por sensores de unión y actuadotes con un cierto grado de “inteligencia” que se utilizan para gobernar puertas, ventanas, alarmas antirrobo, de humo, etc… Este protocolo necesita un cable dedicado que una todos los nodos. La alimentación de los periféricos puede ser local o en del propio bus, con un máximo de 75 puntos telealimentados. La instalación de este cable se puede hacer en diversas topologías, en bus, en estrella, en anillo, en árbol o cualquier combinación de estas.

La velocidad binaria es única de 4800 bps, la cual es más que suficiente para la mayoría de las aplicaciones de control distribuido. Tuvo mucha importancia en Francia pero no ha avanzado y se ha quedado con tecnología obsoleta. Es principalmente un sistema caro.

A partir de LonWork y BatiBus se pueden encontrar entre otros: BITBus, Profibus, Modbus Modicon, FIP (Factory Instrumentation Bus), S-BUS y MIL-STD-1553B.

Protocolo.

Este protocolo es totalmente abierto, es decir, no propietario, sin royaltys.

A nivel de acceso este protocolo usa la técnica CSMA-CA (Carrier Sense Multiple Access with Collision Avoidance) similar a Ethernet pero con resolución positiva de las colisiones. Si dos dispositivos intenta acceder al mismo tiempo al bus ambos detectan que se esta produciendo una colisión, pero solo el que tiene más prioridad continua transmitiendo el otro deja de poner señal en el bus. Esta técnica es muy similar a la usada en el bus europeo EIB y también en el bus CAN (Controller Area Network) del sector del Automóvil.

La filosofía consiste en que todos los dispositivos BatiBus escuchen lo que ha enviado cualquier otro, todos procesan la información recibida, pero solo aquellos que hayan sido programados para ello. Filtraran la trama y la subirán a la aplicación.

Al igual que los dispositivos X-10, todos los dispositivos BatiBUS disponen de unos micro-interruptores circulares o miniteclados que permiten asignar una dirección física y lógica que identifica unívocamente a cada dispositivo conectado al bus.

La BCI (BatiBUS Club International) es la asociación que ha creado un conjunto de herramientas para facilitar el desarrollo de productos que cumplan esta especificación, y que ha conseguido el certificado como estándar europeo CENELEC [15].

2.4.13. EIB (convergencia a Konnex).

El EIB (European Installation Bus) es un sistema domótico desarrollado bajo la supervisión favorable de la Unión Europea con el objetivo de contrarrestar las importaciones de productos similares que se estaban produciendo desde el mercado

2. Memoria Descriptiva.

20

japonés y el norteamericano donde estas tecnologías se han desarrollado mucho antes que en Europa.

El objetivo principal era crear un estándar europeo, con el suficiente número de fabricantes, instaladores y usuarios, que permita comunicarse a todos los dispositivos de una instalación eléctrica como contadores, equipos de climatización, de custodia, de seguridad, de gestión energética y los electrodomésticos.

Esta basado en la estructura de niveles OSI y tiene una arquitectura descentralizada. Este estándar permite distribuir la inteligencia entre los sensores y los actuadores instalados en la vivienda.

Nivel Físico.

En un principio solo se contemplo el utilizar un cable de dos hilos como soporte físico de las comunicaciones, se pretendía que el nivel EIB.MAC (Médium Access Control) pudiera funcionar sobre los siguientes medios físicos.

- EIB.TP: sobre par trenzado a 9600 bps. Por estos dos hilos se suministra 24 Vdc para la telealimentación de los dispositivos EIB. Usa la técnica CSMA con arbitraje positivo del bus que evita las colisiones evitando así los reintentos y maximizando el ancho de banda disponible.

- EIB.PL: Corrientes portadoras sobre 230 Vac/50Hz (Power Line) a 1200/2400 bps. Usa la modulación SFSK (Spread Frequency Shift Keying) similar a la FSK pero con las portadoras más separadas. La distancia máxima que se puede lograr sin repetidor es de 600 metros.

- EIB.net: Usando el estándar Ethernet a 10 Mbps (IEC 802-2). Sirve de columna vertebral entre segmentos EIB, además de permitir la transferencia de telegramas EIB a través del protocolo IP a viviendas o edificios remotos.

- EIB.RF: Radiofrecuencia: Usando varias portadoras, se consiguen distancias de hasta 300 metros en campo abierto. Para mayores distancias o edificios con múltiples estancias se pueden usar repetidores.

- EIB.IR: Infrarrojo: Para el uso con mandos a distancia en salas o salones donde se pretenda controlar los dispositivos EIB instalados.

En la práctica, solo el par trenzado ha conseguido una implantación masiva mientras que los demás apenas han conseguido una presencia testimonial.

EIBA.

La EIBA es una asociación de 113 empresas europeas, líderes en el mercado eléctrico, que se unieron en 1990 para impulsar el uso e implantación del sistema domótico EIB.

La EIBA tiene su sede en Bruselas y todos sus miembros cubren el 80% de la demanda de equipamiento eléctrico en Europa. Las tareas principales de esta asociación son:

- Fijar las directrices técnicas para el sistema y los productos EIB, así como establecer los procedimientos de ensayo y certificación de calidad.

- Distribuye el conocimiento y las experiencias de las empresas que trabajan sobre el EIB.

- Encargar a laboratorios de ensayo las pertinentes pruebas de calidad.

2. Memoria Descriptiva.

21

- Concede a los productos EIB y a los fabricantes de estos una licencia de marca EIB con la que se podrán distribuir los productos.

- Colabora activamente con otros organismos europeos o internacionales en todas las fases de la normalización y adapta el sistema EIB a las normas vigentes.

- Lidera el proceso de convergencia a Konnex.

Según la EIBA (EIB Associaton) hay unos 10 millones de dispositivos EIB instalados por todo el mundo, unas 70.000 instalaciones, una gama de 4.500 productos diferentes, 113 empresas asociadas a la EIBA, y 70.000 instaladores cualificados [16], [17].

2.4.14. EHS (convergencia a Konnex).

Este estándar EHS (European Home System), fue favorecido por la Comisión Europea en el 1984 y ha sido otro de los intentos de crear una tecnología que permitiera la implantación en el mercado residencial de forma masiva. El resultado de esto fue la especificación EHS en le 1992. Esta basada en una topología de niveles OSI (Open Systems Interconnection), y se especifican los niveles físico, de enlace de datos, de red y de aplicación.

Desde el principio han estado involucrados los fabricantes más importantes de electrodomésticos de línea marrón y blanca. Las empresas eléctricas, las operadoras de telecomunicaciones y los fabricantes de equipamiento eléctrico. La principal idea ha sido y sigue siendo, crear un protocolo abierto que permitiera cubrir las necesidades de interconexión de los productos de todos estos fabricantes y proveedores de servicios.

La idea de cubrir las necesidades de automatización de la mayoría de las viviendas europeas cuyos propietarios no se pueden permitir el lujo de usar sistemas más potentes pero también más caros como LonWorks, EIB o Batibus, debido a la mano de obra especializada que requiere su instalación.

El EHS es el substituto natural por prestaciones y servicios, de la parcela que tienen el CEBus norteamericano y el HBS japonés y supera las prestaciones del X-10.

EHSA.

La asociación EHSA (EHS Association) es la encargada de desarrollar y llevar a cabo diversas iniciativas para aumentar el uso de la tecnología de las viviendas europeas. También se ocupa de la evolución y mejora tecnológica de EHS y de asegurar la compatibilidad entre fabricantes de productos con interface EHS [18].

Nivel Físico.

Entre el 1992 y el 1995 la EHSA consiguió el desarrollo de componentes electrónicos que implementaran la primera especificación. Como resultado nació un circuito integrado de ST-Microelectronics (ST7537HS1) que permitía transmitir datos por un canal serie asíncrono a través de las líneas de baja tensión de las viviendas (ondas portadoras o “Power Line Communication” PLC). Esta tecnología basada en modulación FSK, consigue velocidades de 2400 bps hasta 4800 bps y además también puede utilizar cable de pares trenzado como soporte de la señal.

Actualmente se están usando y/o desarrollando los siguientes medios físicos.

- PL-2400: Ondas Portadoras a 2400 bps.

2. Memoria Descriptiva.

22

- TP0: Par Trenzado a 4800 bps (igual al nivel físico del BatiBUS).

- TP1: Par Trenzado / Coaxial a 9600 bps.

- TP2: Par Trenzado a 64 kbps.

- IR-1200: Infrarrojo a 1200 bps.

- RF-1100: Radiofrecuencia a 1100 bps.

Protocolo.

El protocolo está totalmente abierto, cualquier fabricante asociado a la EHSA puede desarrollar sus propios productos y dispositivos que implementen el EHS.

Con una filosofía Plug&Play, se pretenden dar las siguientes ventajas:

- Compatibilidad total entre dispositivos EHS.

- Configuración automática de los dispositivos, movilidad de los mismos y ampliación sencilla de las instalaciones.

- Compartir un mismo medio físico entre diferentes aplicaciones sin interferirse entre ellas.

Cada dispositivo EHS tiene asociada una subdirección única dentro del mismo segmento de red que además de identificar unívocamente a un nodo también lleva asociada información para el enrutado de los telegramas por diferentes segmentos de red EHS.

2.4.15. Konnex.

El Konnex es una iniciativa de tres asociaciones europeas:

1- EIBA (European Installation Bus Association).

2- BatiBus Club International.

3- EHSA (European Home Systems Association).

Con el objeto de crear un único estándar europeo para la automatización de las viviendas y oficinas.

Los objetivos de esta iniciativa son:

- Crear un único estándar para la domótica e inmótica que cubra todas las necesidades y requisitos de las instalaciones profesionales y residenciales de ámbito europeo.

- Aumentar la presencia de estos buses domóticos en áreas como la climatización.

- Mejorar las prestaciones de los diversos medios físicos de comunicación sobretodo en la tecnología de radiofrecuencia.

- Introducir nuevos modos de funcionamiento que permitan aplicar una filosofía Plug&Play a muchos dispositivos típicos de una vivienda.

- Contactar con empresas proveedoras de servicios como las de telecos y las eléctricas con el objeto de potenciar las instalaciones de telegestión técnica de las viviendas o domótica.

2. Memoria Descriptiva.

23

En pocas palabras se trata de unir las fuerzas del EIB, BatiBus y EHS para crear un único estándar europeo capaz de competir en calidad, prestaciones y precios con otros sistemas norteamericanos como el LonWorks o CEBus.

Actualmente la asociación Konnex está terminado las especificaciones del nuevo estándar (versión 1.0) el cual será compatible con los productos EIB instalados. El nuevo estándar tendrá lo mejor del EIB, BatiBus y EHS y aumentará considerablemente la oferta de productos para el mercado residencial el cual ha sido, hasta la fecha, el punto débil de estas tecnologías.

La Versión 1.0.

La versión 1.0 del Konnex contempla tres modos de funcionamiento.

1- S.mode (System mode): Configuración de sistema, se utiliza la misma configuración que el EIB actual. Los diversos nodos de la nueva instalación son instalados y configurados por profesionales con ayuda de la aplicación software especialmente diseñada para este propósito.

2- E.mode (Easy mode): Configuración fácil, los dispositivos son programados en fábrica para realizar una función concreta. Aún así deben ser configurados algunos detalles en la instalación, ya sea con el uso de un controlador central o mediante unos microinterruptores alojados en el mismo dispositivo.

3- A.mode (Automatic mode): Configuración automática, con una filosofía Plug&Play ni el instalador ni el usuario final tienen que configurar el dispositivo. Este modo está especialmente indicado para ser usado en electrodomésticos, equipos de entretenimiento como consolas, televisiones, HiFi, etc…

“Convergencia”, Nivel Físico.

El nuevo estándar a nivel físico podrá funcionar sobre:

- (TP1) Par trenzado: Aprovechando la norma EIB equivalente.

- (TP0) Par trenzado: Aprovechando la norma BatiBus equivalente.

- (PL100) Ondas Portadoras: Aprovechando la norma EIB equivalente.

- (PL132) Ondas Portadoras: Aprovechando la norma EHS equivalente.

- Ethernet: Aprovechando la norma EIB.net.

- Radiofrecuencia: Aprovechando la norma EIB.RF.

2.5. Modelo de Referencia OSI de la ISO.

En diversos apartados de este proyecto se ha nombrado el modelo de referencia OSI (Open Systems Interconnection) de la ISO. Es un modelo de referencia sobre el que desarrollar una arquitectura de comunicaciones abierta para adoptar por todo sistema informático en una red de comunicaciones.

2. Memoria Descriptiva.

24

Los sistemas que adopten dicha arquitectura se llamarán sistemas abiertos, es decir, capaces de entenderse entre sí, independientemente de sus fabricantes, de su hardware y de su sistema operativo. El documento básico del modelo OSI vio la luz en 1983 (ISO 7498).

Algunas características de dicho modelo:

a) Es universal (apto para cualquier tipo de interacción entre procesos de aplicación de cualquier tipo, en cualquier contexto, en el presente y en el futuro).

b) Es abstracto (independiente de la tecnología empleada en su realización, del sistema operativo del sistema donde se implante y de la red).

El modelo OSI contempla una arquitectura de comunicaciones dividida en siete capas o niveles como se muestra en la figura 2-3 [20].

Figura 2-3. Modelo arquitectónico de siete capas propuesto por la ISO.

2.5.1. La Capa Física.

Algunas características de la capa física son:

a. Su contacto directo con los medios físicos de transmisión.

b. Ofrece un servició básico de transmisión de bits entre puntos adyacentes (conectados al mismo medio de transmisión). Dicho servicio no tiene por qué ser fiable (puede ser propenso a los errores).

c. Define las características mecánicas, eléctricas y de procedimiento para el inicio, mantenimiento y finalización del servicio anteriormente descrito.

d. La unidad de información en este nivel es el bit (a veces grupos de pocos bits: dibits, bytes).

e. En ella se definen aspectos como el acoplamiento al medio físico de transmisión (descripción mecánico-eléctrica de conectores, incluso antenas, lentes…); la técnica de modulación o codificación empleada; los nivesles de tensión, corriente o intensidad luminosa asociados a los distintos símbolos que representa uno o más bits; la duración de los bits

Aplicación

Presentación

Sesión

Transporte

Red

Enlace de datos

Física

2. Memoria Descriptiva.

25

(Tb) y por tanto la tasa de bits/s (R); similarmente, la tasa (baud rate) de símbolos/s; la sincronización de bit; etc.

2.5.2. La Capa de Enlace de Datos.

La capa de enlace de datos mejora el servicio de transmisión de bits –en bruto- de la capa física. Sus funciones son:

a. Control de errores.

b. Control de flujo.

c. Control de acceso a medios físicos compartidos.

2.5.3. La Capa de Red.

Esta capa situada por encima de la de enlace, aprovecha los servicios brindados pro esta y añade algunas características, como son:

a. Reenvío (relaying) de la información a través de los distintos enlaces y sistemas intermedios que constituyen una red de comunicaciones.

b. Encaminamiento (routing) de la información, es decir, elección del camino a seguir a través de la red en función de la optimización de algún criterio (coste, rapidez, seguridad, fiabilidad, equilibrio, etc.). El otro término relacionado es el de conmutación que se aplica más bien al proceso que sufre la información en los sistemas intermedios cuando ésta es encaminada.

c. Control de congestión, es decir, control de todas las comunicaciones que se producen a través de la red con el fin de que los recurso de esta se utilicen de la mejor forma posible.

d. Tarificación, cómputo de los costes incurridos en el envío de la información a través de la red en función de volumen, del tiempo empleado, de la distancia, o del grado de servició (calidad) ofrecido.

e. Interconexión (adaptación) entre redes.

f. La unidad de información en esta capa es el paquete o datagrama (para las redes de conmutación de paquetes).

2.5.4. La Capa de Transporte.

La capa de transporte solamente está realizada en los sistemas finales (aquellos que alojan a los procesos de aplicación que se comunican); no existen entidades de transporte en los sistemas intermedios. Se dice, entonces, que la capa de transporte opera extremo a extremo, al igual que las capas por encima de ésta.

Su misión principal es “esconder” las imperfecciones de las redes subyacentes a los procesos de aplicación, ofreciendo un servicio de comunicación de datos extremo a

2. Memoria Descriptiva.

26

extremo perfectamente fiable y de una calida pactada. Esto debe hacerlo, además, de forma eficiente, es decir, optimizando el uso de los recurso que tiene a su disposición.

2.5.5. La Capa de Sesión.

La capa de sesión fue una aportación relativamente nueva del modelo OSI de la ISO a las arquitecturas de comunicaciones. En efecto, podría pensarse que, dado el servicio perfectamente fiable que ofrece la capa de transporte, los procesos de aplicación no necesitarían nada más y podrían usar dicho servicio directamente.

Algunos de los servicios que dicha capa ofrece son:

a. Establecimiento, mantenimiento y finalización de la sesiones.

b. Gestión del diálogo y las actividades.

c. Sincronización y recuperación.

d. Gestión de los permisos (tokens) para realizar ciertas acciones.

e. Cierre ordenado de las conexiones.

2.5.6. La Capa de Presentación.

La capa de presentación está relacionada con el significado (semántica) y formato (sintaxis) de los datos intercambiados en una sesión entre procesos de aplicación. Si la capa de transporte ofrece un intercambio de datos fiable independiente de las redes y la capa de sesión estructura/enriquece ese intercambio de datos, la capa de presentación ofrece un servicio de intercambio de información, es decir, a nivel de dicha capa no se intercambian meramente grupos de byte, sino algo con significado (por ejemplo: textos escritos, vectores o matrices de números enteros o reales, imágenes, sonidos, etc.).

Se suele decir que el nombre más adecuado para la capa de Presentación hubiera sido el de capa de representación. Si el modelo OSI perseguía la interconexión de sistemas que fueran realmente abiertos, debía resolver el problema de los diferentes formatos con que cada sistema representaba localmente su información (dependiente del fabricante del sistema, de su hardware y de su sistema operativo). Es ahí donde interviene la capa de presentación.

El modelo OSI asigna a la capa de presentación tres funciones:

a. Representación común de la información (formatos, conversiones).

b. Seguridad en el intercambio de información (privacidad, protección autentificación).

c. Compresión de la información.

2.5.7. La Capa de Aplicación.

La capa de aplicación es la más superior del modelo arquitectónico y ofrece los llamados servicios de aplicación e incluso las aplicaciones más comunes y estandarizadas de forma completa.

2. Memoria Descriptiva.

27

Un proceso de aplicación es aquella parte de un sistema final que procesa información en un entrono de red OSI y que es invocado por un usuario o proceso local o remoto; suele dividirse conceptualmente en dos partes: el agente de aplicación (aquella parte del proceso de aplicación fuera del entorno OSI, dependiente del sistema local y que puede actuar como interfaz con el usuario u otros procesos internos) y la entidad de aplicación (aquella parte que pertenece a la capa de aplicación OSI).

2.6. Medios Físicos para la Implementación.

2.6.1. Medios de Transmisión

Los medios de transmisión son aquellas estructuras físicas que soportan la propagación de las ondas electromagnéticas, asociadas a los bits o a señales analógicas, permitiendo ser enviadas de un punto geográfico a otro. Constituyen, por tanto, la infraestructura más básica de toda red de comunicaciones.

Se pueden clasificar de muchas maneras, de forma genérica y para que conceptualmente quede claro, se pueden hacer dos grupos, medios guiantes y medios no guiantes.

En los medios guiantes, el campo electromagnético asociado a la información transportada está confinado alrededor de la estructura física del medio. Están realizados a base de:

a) Materiales de elevada conductividad eléctrica (cobre, aluminio, aleaciones, recubrimientos de plata, oro, etc.) o elevada conductividad óptica (vidrio silíceo).

b) Materiales dieléctricos, no necesarios desde el punto de vista de transmisión pero sí para ejercer funciones de soporte mecánico, de aislamiento o de protección (polietileno, nylon, teflón, PVC, papel, encerado, cauchos, etc.)

En los medios no guiantes, el campo electromagnético asociado a la información transportada no está confinado y se extiende por el material de soporte, éter (el espacio aéreo o el vacío). En realidad, no existe medio de transmisión y estamos hablando de transmisión por ondas de radio (desde la frecuencia más baja -VLF: Very Long Frequency- hasta las de frecuencias más elevadas – µW : micro-Waves-) o por ondas luminosas como infrarrojos o láser [20].

Cualquiera de las redes domóticas antes mencionadas se puede comunicar por diferentes medios físicos de transmisión.

- Par trenzado.

- Fibra òptica (transmite video).

- Coaxial (transmite video).

- Corrientes portadoras.

- R.F. (radio frecuencia).

- L.R (infrarrojos)

2. Memoria Descriptiva.

28

Los tres primeros son los utilizados normalmente en una obra moderna que se diseña pensando en una gestión domótica, los tres últimos son soluciones para evitar las costosas obras en edificios que no fueron diseñados con el concepto de domótica.

El medio de transmisión condiciona la respuesta a los impulsos del sistema, de forma frecuencial, en fase y en magnitud.

En el punto 2.4, he definido las tecnologías y protocolos más importantes y estandarizados en Europa. Hay muchos más, la mayoría son sistemas cerrados o propietarios, que limitan su uso a las empresas desarrolladoras.

El más destacado de todos es el estándar Konnex, porque esta apoyado por la Unión Europea, haciendo una gran apuesta por una estandarización europea tecnológicamente fuerte, es decir, rentable y a la vez potente. Es un estándar muy nuevo que se nutre de otras tecnologías y protocolos como el BatiBus, el EIB y el EHS.

Los medios físicos de transmisión utilizados actualmente por los sistemas domóticos son los que he nombrado en el sistema Konnex, red eléctrica, par trenzado, radio e infrarrojos. Los definiré en los siguientes puntos:

2.6.1.1. Línea de Distribución Eléctrica.

Este medio físico no es el medio más idoeno para la transmisión de datos, pero si es una alternativa, muy importante, a tener en cuenta para las comunicaciones domesticas por la razón, que más valoran la mayoría de usuarios doméstico, el bajo coste que implica su uso, porque se trata de una instalación existente.

Este medio utiliza líneas de pares de cables en paralelo, que son dos conductores que discurren próximos y paralelamente. Ofrece características de transmisión muy limitadas, sus principales desventajas son la captación de ruido, el acoplamiento con otras líneas próximas (diafonía) y las pérdidas por radiación a frecuencias elevadas.

Utilizar la línea de distribución para la comunicación implica utilizar para la comunicación todos los aparatos que están conectados a esta, el cableado de la casa, el cableado de distribución de la calle, el transformador de distribución, etc… Es decir, se deben considerar todas las cargas conectadas, desde los transformadores de distribución hasta llegar al enchufe de casa.

LA IMPEDANCIA.

La impedancia de la red eléctrica depende de muchos factores.

Unos datos importantes sobre este tema han sido divulgados por Malack y Engstrom de IBM (Laboratorio de compatibilidad electromagnético), que midieron la impedancia de la red eléctrica en seis países europeos, ver figura 2-4.

Estas mediciones muestran que la impedancia de la red eléctrica aumenta con la frecuencia y su rango está aproximadamente entre 5Ω y 100?Ω a 100kHz. Esta impedancia es determinada principalmente por dos parámetros

- Las cargas conectadas con la red.

- La impedancia del transformador de distribución.

2. Memoria Descriptiva.

29

Figura 2-4. Medidas de la red eléctrica en Europa (por Malaca y Engstrom).

También hay un tercer elemento que influye en la impedancia de la línea de alimentación de forma relevante, en particular en el interior de una red residencial. Es el representado por los filtros de EMI (Emisiones Electromagnéticas), instalados en las últimas generaciones de electrodomésticos (refrigeradores, lavadora, juegos de televisión, equipos de alta fidelidad, cargadores de móviles). El cableado parece tener un efecto relativamente pequeño. La impedancia es generalmente inductiva.

Para cargas típicamente resistivas, la atenuación esperada de la señal es de 2 a 50dB a 150kHz dependiendo del transformador de distribución usado y el tamaño de las cargas. Además, podría ser posible que las cargas capacitivas resonaran con la inductancia del transformador de distribución y causaran que la atenuación de señal, varíe bruscamente con la frecuencia [21].

La normativa vigente utiliza la UNE-EN 50065-1 donde se modela una red equivalente en impedancia a la red eléctrica, en función a la frecuencia de trabajo. Como podemos ver en la figura 2-5. [22]

2. Memoria Descriptiva.

30

Figura 2-5. Modelo ideal del circuito equivalente. Impedancia de puerto del dispositivo en ensayo.

EL RUIDO.

Los aparatos conectados al mismo devanado secundario del transformador de distribución de alimentación, son el origen principal del ruido. Las principales fuentes del ruido serán la conmutación de triacs usados en reguladores de luz, motores universales, conmutación del suministro eléctrico usado en aparatos pequeños (cargadores de móviles, PC’s portátiles) y lámparas fluorescentes.

La conmutación de los triacs genera el ruido síncrono con la señal de alimentación a 50Hz y este ruido aparece con los armónicos de 50Hz. Los motores universales que se encuentran en las batidoras o los taladros también crean ruido, pero no es tan potente como el ruido del regulador de luz, y en general no es síncrono con los 50Hz.

Además los reguladores de luz son, normalmente, activados por un período de tiempo largo mientras que los motores universales son usados intermitentemente durante periodos cortos de tiempo.

En los últimos años han aparecido otros aparatos que introducen ruido de forma notable en la red eléctrica. Son las ‘Lámparas Fluorescentes Compactas’ (CFL) y el cambio de energía que proporcionan los cargadores de baterías (por ejemplo la de los ordenadores portátiles o aparatos pequeños).

En muchos casos tienen una frecuencia de trabajo o algunos armónicos en el rango de la comunicación de línea de alimentación ‘Power Line Communication’ (PCL), que esta entre 10KHz y 150KHz. Por supuesto la presencia de los tonos ininterrumpidos exactamente en la frecuencia de canal de comunicación puede afectar la fiabilidad de la comunicación.

La figura 2-6 muestra el comportamiento de las fuentes de ruido antes mencionadas.

2. Memoria Descriptiva.

31

Figura 2-6. Espectros de un regulador de luz, un PC portátil, un PC de sobremesa, una lámpara CFL y un lámpara TLE.

Observando la gráfica se comprueba como el regulador de luz de 100 W es el elemento que introduce más ruido en la red, seguidamente de la fuente de alimentación de un PC portátil, a continuación el PC de sobremesa, la lámpara CFL y finalmente el fluorescente normal conjuntamente con el ruido normal de la red [21].

Así pues podemos concluir destacando sus cualidades más importantes de la comunicación por red eléctrica, que son:

a) Nulo coste de la instalación.

b) Facilidad de conexionado.

Y sus principales inconvenientes:

a) La impedancia de la red depende de las cargas (no es constante).

b) La red eléctrica acostumbra a ser muy ruidosa.

En lo referente a este medio físico hay tecnologías muy novedosas, para alta velocidad. Destacar la empresa española TECNOCOM, que ha investigado en lo que se conoce como PLC Networking “Power Line Communication Networking”. Esta presente en gran parte del mundo como Méjico, Perú, Chile, Brasil, Italia, Norte de África, China, Portugal y España. Su área tecnológica encargada de “Networking IP y Redes IP PLC” ofrece soluciones de banda ancha tilizando las líneas de distribución.

El PLC es la tecnología que permite la transmisón de voz y datos a través de la red eléctrica, actualmente con una velocidad de transmisión de 45 Mbps hasta 135 Mbps. A esto solo falta destacar que no hace falta instalación previa y que en cualquier enchufe eléctrico con la conexión de un modem PLC obtenemos comunicación de alta velocidad.

Fabricantes como el español DS2 ya consiguen anchos de banda de hasta 200 Mbps. Otros proveedores importantes son ASCOM y MAIN.NET

2. Memoria Descriptiva.

32

Utiliza portadoras de alta frecuencia [1’6 – 60] MHz, utilizando codificación ODFM (Orthogonal Frequency-Division Multiplexing).

Sus principales grupos de trabajo son PLCForum (Suiza) en Europa y HomePlug en EEUU, que se encargan del desarrollo y de la normalización de esta tecnología [23][24].

2.6.1.2. Cables de Cobre.

En este punto englobo tanto los de par trenzado como el coaxial, como soporte para la transmisión de datos son un buen medio. La infraestructura de las redes de comunicación actuales, tanto públicas como privadas, tiene en un porcentaje muy elevado, cables de cobre como soporte de transmisión de las señales eléctricas para la comunicación.

En el mercado principalmente podemos encontrar:

a) Cable U.T.P. (Unshielded Twisted Pair). Es cable de par trenzado no apantallado.

b) Cable S.T.P. (Shielded Twisted Pair). Es cable de par trenzado apantallado.

c) Cable coaxial.

Los cables de par trenzado, están formados por dos conductores trenzados (retorcidos) sobre si mismo, su geometría cambiante reduce la captación de ruido, las pérdidas por radiación y la diafonía entre pares cercanos. Ofrece mejores características de transmisión que la línea de pares paralela. Los apantallados STP ofrecen mejores características que los no apantallados UTP a un mayor coste.

La línea coaxial está formada por un conductor cilíndrico y otro conductor en el interior que discurre axialmente al primero. Su geometría hace que el campo electromagnético quede prácticamente confinado en su interior, reduciéndose de forma considerable la captación de ruido e interferencias así como las pérdidas por radiación. El material dieléctrico existente entre ambos conductores, necesario para mantener la estructura mecánica de la línea, influye notablemente en sus características. Existen multitud de líneas coaxiales disponible en le mercado con prestaciones que aumentan con el grosor de los conductores y la bondad del material dieléctrico. [20]

2.6.1.3. Fibra Óptica.

La transmisión de datos utilizando la velocidad de la luz, con técnicas de reflexión y refracción, se realiza por medio de la fibra óptica.

La fibra óptica esta constituida por un material dieléctrico transparente, conductor de luz, compuesto por un núcleo con un índice de refracción menor que el del revestimiento, que envuelve a dicho núcleo.

Sus principales ventajas son:

a) Fiabilidad en la transferencia de datos.

b) Inmunidad frente a interferencias electromagnéticas y de radiofrecuencias.

c) Alta seguridad en la transmisión de datos.

2. Memoria Descriptiva.

33

Sus principales inconvenientes:

a) Distancia entre los puntos de la instalación limitada (en el entorno doméstico estos problemas no existen).

b) Elevado coste de los cables y las conexiones.

c) Diseñada para transferencia de grandes cantidades de datos.

2.6.1.4. Radiofrecuencia.

La radiofrecuencia es un medio no guiante, puede parecer un sistema de transmisión idóneo para el control a distancia de los sistemas domóticos. Resulta particularmente sensible a las perturbaciones electromagnéticas del entorno.

Sus principales ventajas:

a) Alta sensibilidad a las interferencias.

b) Fácil intervención de las comunicaciones.

Sus principales inconvenientes:

a) Dificultades para la integración de las funciones de control y comunicación, en su modalidad de transmisión analógica.

2.6.1.5. Infrarrojos.

Este sistema es el más usado en la transmisión de datos dentro del hogar, como por en ejemplo en los mandos a distancia de videos, equipos de audio, etc.., tiene el gran inconveniente de la distancia a la que funciona y que se debe hacer ‘puntería’ para encarar el emisor con el receptor.

Se destaca:

a) Comodidad y flexibilidad en el uso.

b) Admiten gran número de aplicaciones.

Al tratarse de un medio de transmisión óptico es inmune a las radiaciones electromagnéticas producidas por los equipos domésticos o por los demás medios de transmisión (coaxial, cables pares, red de distribución de energía eléctrica, etc.).

2.6.2. Velocidad de Transmisión

La velocidad a la cual se intercambian información los diferentes elementos de control de la red se denomina velocidad de transmisión. El estándar de Konnex ofrece seis posibilidades, que son:

1) TP0: Par trenzado, norma BatiBus equivalente, 4800 bps.

2) TP1: Par trenzado, norma EIB equivalente, 9600 bps.

3) PL100 Ondas portadoras, norma EIB equivalente, 1200/2400 bps.

4) PL132 Ondas portadoras, norma EHS equivalente, 2400 bps.

2. Memoria Descriptiva.

34

5) Ethernet, norma EIB.net 10 Mbps.

6) Radiofrecuencia, norma EIB.RF, 1100 bps.

2.6.3. Medios Físicos Destacados.

En la actualidad los medios físicos más destacados para la automatización de los hogares son, el clásico par trenzado por su velocidad y fiabilidad de transmisión para viviendas de nueva construcción (TP0 y TP1), y la red eléctrica como medio más económico en viviendas ya construidas y que no tiene cableado un sistema de automatización (PL100 y PL132).

Como ejemplo de cable par trenzado, tenemos es TP1 utilizando el protocolo instabus EIB de Siemens. La ventaja de utilizar el medio físico TP1, es sobretodo, su alta velocidad relativa, que es de 9600 bps.

Según la información obtenida de Siemens, el protocolo EIB.TP, utiliza el transceiver FZE-1065E que necesita transformador (figura 2-7) o el FZE-1066 que no necesita transformador (figura 2-8), son fabricados por Siemens. Los dos transceivers están especialmente diseñados para utilizar con los microcontroladores de Motorota MC68HC05B6 y MC68HC705BE12. Estos microcontroladores son programados con las rutinas del protocolo EIB por Siemens.

Figura 2-7. Transceiver FZE-1065E con transformador.

Este es uno de los sistemas con más implantación en Europa a nivel de domótica. Las mayores características son la fiabilidad de su medio físico, su velocidad, facilidad de configuración y el gran número y variedad de dispositivos de los que disponen.[25]

2. Memoria Descriptiva.

35

Figura 2-8. Transceiver FZE-1066 sin transformador.

Como ejemplo de comunicación por red eléctrica destaco el EIB.PL corrientes portadoras sobre 230 Vac/50 Hz a 1200/2400 bps. El protocolo EHS tiene su equivalente con el sistema físico PL-2400, ondas portadoras a 2400 bps. Su convergencia a Konnex renombra estos sistemas con los nombres de PL100, aprovechando la norma EIB y PL132, aprovechando la norma EHS.

Para utilizar la red eléctrica como medio físico hay que tener en cuenta, que este método aporta grandes ventajas, como que todos los aparatos que se alimenten con la red pueden utilizar a esta para comunicarse y además su bajo coste a la hora de la instalación, la red ya existe. Pero también tiene grandes inconvenientes como es la impedancia característica de la línea, que depende directamente de las cargas en cada instante del tiempo, y el ruido presente en la línea, como se ha comentado en el punto 2.6.1.1.

En este punto también hay que tener en cuenta y valorar, la opción de utilizar la tecnología X-10, que consiste en enviar la información modulada en amplitud (AM) y una frecuencia constante de 120 kHz, con una amplitud de 2’8V durante 1 milisegundo.

En el caso del protocolo X-10, se suele utilizar el modem TDA5051A de Philips, que es un modem FSK (Frequency Shift Keying) dedicado para la transmisión ASK (Amplitude Shift Keying). El esquema recomendado por el fabricante es el de la figura 2-9.

2. Memoria Descriptiva.

36

Figura 2-9. Circuito para implementar un sistema de X-10.

La implementación de este circuito, como puede apreciarse, es bastante simple, y esta es su principal ventaja además de su módico precio, unos 8€ aproximadamente. Su principal desventaja es intrínseca a su funcionamiento, al ser una modulación ASK sobre una señal de 50 Hz, su velocidad es muy baja de 50 bps. Si se utiliza sin seguir el protocolo X-10 se puede hacer funcionar a un máximo de 1200 bps.[26]

En el caso del Konnex (EHS y EIB) el modem recomendado es de ST-Microelectronics, el ST7537HS1, que esta especialmente diseñado para el nivel físico PL-132, ondas portadoras a 2400 bps. También tenemos el nuevo transceiver ST7538 que se puede usar a 4800 bps. La mayor diferencia física entre estos dos dispositivos, esta en el número de pines, mientras que el modem ST7537HS1 tiene 28 pines el transceiver ST7538 tiene 44.

Como puede apreciarse en la figura 2-10, la implementación física del circuito de comunicación por red eléctrica, se realiza utilizando el ST-7537HS1, una etapa amplificadora para el driver de salida y un transformador como filtro pasabanda y aislador de la red

2. Memoria Descriptiva.

37

Figura 2-10. Diagrama esquemático de la conexión del ST7537HS1.

En la figura 2-11, se puede ver como la construcción del modem de comunicación por red eléctrica se realiza utilizando únicamente el transceiver 7538 y un transformador como filtro pasabanda y aislador de la red.

La gran ventaja del transceiver ST7538 está en el nivel de integración que ayuda a hacer las implementaciones de menor tamaño, simplificando el número de elementos pasivos.

Para trabajar utilizando la red eléctrica como medio físico de comunicación adaptándome al estándar de Konnex tengo dos opciones, el transceiver ST7538 o el modem ST7537S1. Ambos circuitos inyectan y reciben tramas de la línea eléctrica cumpliendo la normativa UNE-EN 50065-1 (Transmisión de señales por la red eléctrica de baja tensión en la banda de frecuencias de 3kHz a 148,5 kHz).

2. Memoria Descriptiva.

38

Figura 2-11. Diagrama esquemático de la conexión del ST7538.

2.7. Prestaciones Deseables. (Objetivos Deseables).

Como ya he dicho al principio, la domótica es el resultado de la integración de los sistemas de gestión de seguridad, comunicaciones, gestión del confort y control energético. Para conseguir estos objetivos plantearé la situación hipotética, de un hogar en el cual se encuentran una serie de sensores y actuadores que deben comunicarse entre sí para poder realizar la automatización de dicha vivienda.

Suponemos una vivienda con 10 luces, regulables o no, con 10 ventanas motorizadas, 8 habitaciones con sensores de temperatura y difusores de aire automáticos, 10 sensores de movimiento en todas las ventanas y puertas que dan al exterior, 8 sensores de humo, uno por habitación, un sensor en la bañera que permite el control de la temperatura del agua, 8 electroválvulas NC (Normalmente Cerradas) para controlar el agua caliente y fría en toda la casa y un PC que comunica todos estos elementos con la red externa, Internet, que puede estar o no conectado. Con todo esto conseguimos la gestión de seguridad, comunicaciones, gestión del confort y control energético, es decir, un sistema domótico.

Estudiando las necesidades y el número de sensores y actuadores, calcularé la velocidad mínima necesaria para la comunicación. Los actuadores como las 10 luces, los 10 motores de persiana, las 8 electroválvulas y los 8 difusores de aire no son en ningún caso críticos, todos estos elementos deben ser ‘inteligentes’ y solo actuaran cuando se les ordene. Lo de inteligentes significa que por cuestiones de seguridad, según la norma 50065-1 (punto 9 Funcionamiento Inadvertido) [22], “la transmisión de señales a través de la red de alimentación no debe utilizarse para controlar equipos que pudieran ser peligrosos

2. Memoria Descriptiva.

39

para las personas o las propiedades en el caso de funcionamiento inadvertido o en caso de que deje de funcionar.”

Los 8 sensores de temperatura que están situados en las habitaciones, no necesitan un refresco continuo, para mantener la temperatura correcta en una habitación los sensores pueden ser consultados cada 5 minutos e incluso a intervalos de tiempo mayores.

Los 10 sensores de movimiento, situados en ventanas y puertas y los 8 detectores de humo únicamente deben ser sensados cuando la alarma esta conectada y/o se detecta movimiento o humo, es el típico funcionamiento en un sistema distribuido, cuando detectaran una alarma, enviarían una trama dando la información.

El sensado más crítico es el encargado de regular y actuar en el agua de la bañera, el sensado debe hacerse cada 0’5 segundos y se debe actuar en consecuencia. Además la bañera tendrá un detector conectado directamente a las electroválvuas, sin utilizar la red eléctrica y de más alta prioridad para evitar un posible desbordamiento del agua en la bañera.

Según la EHSA (European Home Systems Association) un protocolo en domótica tiene la siguiente estructura:

PR SA DA CC BC Datos FCC 1 Byte 1 Byte 1 Byte 1 Byte 1 Byte 32 Byte 1 Byte

Figura 2-12. Formato del protocolo EHS.

Donde: PR (Priority Code) código de prioridad, SA (Source Address) dirección del emisor del mensaje, DA (Destination Address) dirección del destinatario, CC (Control Code) código de control, BC (Byte Count) byte contador, Datos hasta 256 bits y FCC (Frame Check code) código de chequeo de la estructura [18]. Esto hace un total de 38 bytes, es decir 304 bits.

Teniendo en cuenta estos datos, para que el sistema implementado pueda conseguir cumplir las expectativas creadas, y además conociendo las velocidades estándares de las que dispone el protocolo Konnex, utilizaré un modem de 2400 bps o superior. En la memoria de cálculo se detallan las operaciones.

Usar como referencia la tecnología Konnex me marca la utilización de un sistema estándar de modulación FSK (Frequency Shift Keying) para la comunicación con corrientes portadoras.

Se debe cumplir la normativa vigente, en especial la UNE-EN 50065-1, ‘Transmisión de señales por la red eléctrica de baja tensión en la banda de frecuencias de 3 kHz a 148’5 kHz’. Esto me obliga a utilizar un protocolo de acceso CSMA (Carrier-sense multiple-access), que esta definido en dicha norma.

2.8. Prestaciones Finales. (Objetivos Reales).

Para conseguir implementar el supuesto planteado, es necesario recurrir a la modularidad y dividir una automatización total en diferentes automatizaciones parciales. Con esto consigo simplificar el problema. Además la hipótesis planteada en el punto anterior, sería la automatización total de una vivienda, en realidad el objetivo de este proyecto es la implementación parcial de una vivienda.

2. Memoria Descriptiva.

40

Por este motivo la tarjeta nodo que implementaré, será capaz de conectarse en un sistema distribuido y actuar como un elemento más de la red domótica.

Si se observa el modelo OSI de la ISO, se puede apreciar la complejidad que tiene un sistema que siga todas las capas existentes, por este motivo este proyecto se centra principalmente en la primera capa, la capa física, es decir, con la tarjeta nodo implementada, se resuelven los problemas que surgen con el contacto directo del medio físico de transmisión, ofrece un servicio básico de transmisión de bits y define las características mecánicas, eléctricas y de procedimiento para el inicio, mantenimiento y finalización del servicio de comunicación (esto último lo define la UNE-EN 50065-1).

Finalmente para demostrar el funcionamiento de la comunicación por red eléctrica, implementaré dos tarjetas nodo con un gran número de posibilidades (entradas y/o salidas digitales, entradas analógicas, bus de expansión, conexión a PC, etc.). Una tarjeta trabajará como maestra y la otra como esclava. En el bus de expansión de la tarjeta esclava conectaré una tarjeta de potencia para controlar un motor y tres bombillas.

2.9. Componentes Reales en la Implementación Final.

Una vez he escogido el sistema físico, me pongo a buscar la disponibilidad del material que necesito para poder implementar el sistema.

La primera opción es del transceiver ST7538, la información técnica, datasheets y notas de aplicaciones es fácil de conseguir en la página web del fabricante [31].

El ST7538 es un modem FSK Half Duplex síncrono/asíncrono, diseñado para aplicaciones de redes de comunicación por la red eléctrica. Este funciona con una única fuente de alimentación y lleva un regulador de 5 V. El aparato es controlado por unos registros principales, programados por el interface serie síncrono. Tiene funciones adicionales como el watchdog, señal del clock de salida, salida de tensión y control de corriente, detección previa y time-out. Realizado con tecnología Multipower BCDV, esto permite la integración de estructuras DMOS, Bipolar y CMOS en el mismo chip.

Es un chip que fue comercializado a finales de septiembre del 2003. Este dato es bastante importante porque me resultó imposible poder conseguir que algún subministrador, o tienda de componentes electrónicos, me facilitara este chip.

La segunda opción es el modem ST7537HS1, es el antecesor del transceiver ST7538, fue comercializado a finales del junio del 1995, realizado gracias a la colaboración de EHSA (European Home Systems Association).

La información técnica, es también muy fácil de conseguir en la página web del fabricante [31].

El ST7537HS1 es un modem FSK Half Duplex asíncrono, diseñado para comunicaciones de automatización en hogares utilizando la red eléctrica cumpliendo con la UNE-EN 50065-1, un estándar de la CENELEC. Operan con dos tensiones una de 10 V para la parte analógica y otra de de 5 V para la interface del microcontrolador. Necesita de un interface para conectarse a la red eléctrica, en las aplicaciones de (ST) utilizan un transformador. Los datos se transmiten a una velocidad de 2400 bps con una frecuencia de transporte de 132’45 kHz.

Si se estudian las notas de aplicación que suministra el fabricante, se puede apreciar el gran estudio realizado en cuanto a las aplicaciones de automatización doméstica, la

2. Memoria Descriptiva.

41

utilización de la red eléctrica para la comunicación, impedancias medias de la red eléctrica en Europa, ruidos e interferencias que generan los principales electrodomésticos, etc..

En la aplicación que ellos (ST) recomiendan, utilizan un transformador, el TOKO T1002 N, su relación de vueltas es la que se muestra en la figura 2-13.

Figura 2-13. Relación de vueltas del transformador.

La búsqueda de este transformador, en multitud de distribuidores y tiendas de electrónica resultó ser infructuosa. Los parámetros que te proporciona el fabricante son muy escasos para la elaboración de uno manualmente. Además el coste de un transformador de estas características esta sobre los 6€, supuestamente por motivos de poca comercialización.

Es en este punto donde necesito encontrar un transceiver para la comunicación por red eléctrica que me mantenga el aislamiento galvánico del transformador.

El fabricante Agilent Technologies ha desarrollado un optoacoplador clasificado como PLC Powerline DAA IC, el HCPL-800J, ver figura 2-14.

El HCPL-800J es un circuito integrado con aislamiento galvánico preparado para el acceso de datos en powerline. Proporciona las características dominantes del aislamiento, de la línea conductora de Tx y del amplificador Rx como se requiere en el uso de modems para aplicaciones powerline y cumple la normativa UNE-EN 50065-1

Utilizado con un simple circuito de acoplamiento LC, el HCPL-800J ofrece una solución altamente integrada, como solución de AFE (Analog Frond End). La tecnología óptica del acoplador proporciona un aislamiento muy alto en el modo rechazo, facilitando una excelente representación de EMI (Emisiones Electromagnéticas) y una gran EMC (Compatibilidad Electromagnética). Su robusto comportamiento se realzada por las características inherentes de los dispositivos opto-aislantes, para bloquear con eficacia los transitorios perjudiciales que se generan en la red eléctrica.

Excelente comportamiento en la transmisión que se consigue con alta eficiencia y baja distorsión de línea en la etapa del driver. La robustez del transmisor se destaca más a fondo con funciones integradas de detección de sobre-intensidad y sobre-temperatura.

El HCPL-800J esta diseñado para trabajar con varios circuitos integrados transmisor-receptor y simplificar significativamente la implementación de un módem powerline. [27].

2. Memoria Descriptiva.

42

Figura 2-14. Diagramas de bloques del CI HCPL-800J PLC Powerline DAA de Agilent.

2.10. El Microcontrolador Para Este Proyecto.

Hay muchos fabricantes de microcontroladores, las principales son ST Microelectronics, Texas Instruments, Infineon Technologies, Intel Corp, Royal Philips Electronics, Analog Devices, National Semiconductors, Motorola Semiconductors, Toshiba, Microchip, NEC Corp., Mitsubishi, Hitachi Corp y Atmel Corporation. Todos tienen sus ventajas e inconvenientes y se deben valorar factores muy dispares desde prestaciones, relación calidad/predio, disponibilidad comercial y tipo de herramientas disponibles.

Para controlar los recursos de la tarjeta de este proyecto tengo tres microcontroladores con fuertes posibilidades.

1) ST90E28 MCU y el ST72C334J4, son los microcontroladores que recomiendan los fabricantes del modem y transceiver antes estudiado, ST-Microelectronics. ST es la primera empresa en cuanto a ventas de microcontroladores, pero la competencia es muy feroz.

Existen multitud herramientas para la programación, a nivel software la mayor parte son gratuitas y se pueden bajar de Internet. A nivel hardware la mayoría de herramientas, emuladores y programadores, son de pago, pero se pueden encontrar

2. Memoria Descriptiva.

43

esquemas de placas de programación como la MB372C: ST7-FLASH STICK-LPT, que es un programador de microcontroladores ST7 utilizando la conexión del puerto paralelo a un PC [31] . Sus ventajas:

- El coste del microcontrolador, el ST72C334J4 es de 11’04€.

- El software es gratuito.

Sus inconvenientes:

- Las buenas herramientas de hardware son caras.

- La universidad no dispone de estas herramientas.

2) DSP56F8XX de Motorota. Es un microprocesador híbrido con procesador digital de señal (DSP). Su principal ventaja es que se puede utilizar como único elemento para implementar el modem de comunicación domótica por red eléctrica, substituyendo los dos componentes que actualmente se están utilizando, el modem (ASIC) y el microcontrolador. Obsérvese la implementación del modem PLC, en la figura 2-15.

Las características principales de estos microcontroladores son, velocidad de 80MHz, 40MIPS, puertos de comunicación SCI, CAN, etc.., Conversión analógico-digital, ADC de 12 bits y una modulación de anchura de pulsos PWM de 15 bits. La codificación y decodificación de la señal se realiza por software.

Figura 2-15. Implementación de un modem PLC para la domótica.

Motorola es una marca muy reconocida por la calidad de sus microcontroladores, del software y hardware de desarrollo y el gran soporte técnico [28].

Su mayor inconveniente es el precio de este software y hardware de desarrollo. Para el DSP56F803 hay un kit que cuesta 300€. Sus ventajas:

- El coste del microcontrolador, DSP56F803 es de 10’06€.

- En grandes producciones la simplificación de elementos es siempre muy ventajosa.

2. Memoria Descriptiva.

44

Sus inconvenientes:

- Todas las herramientas de hardware son caras.

- La universidad no dispone de estas herramientas.

3) 18FXXX de la casa Microchip. Esta gran multinacional fabricante de microcontroladores ha sido muy importante en la estandarización de los microcontroladores, actualmente ha alcanzado el segundo puesto en el ranking mundial de fabricantes de microcontroladores de 8 bits.

El conjunto de microcontroladores PIC de 8 bits se distribuye en 4 gamas.

a) GAMA BÁSICA: Familias PIC12C5xx y PIC16C5x, con un repertorio de 33 instrucciones de 12 bits y dos niveles de pila.

b) GAMA MEDIA: Familias PIC12C6xx y PIC16Cxx, con un repertorio de 35 instrucciones de 14 bits, ocho niveles de pila y un vector de interrupciones.

c) GAMA ALTA: Familia PIC17Cxxx, con repertorio de 58 instrucciones de 16 bits, con niveles de pila y 4 vectores de interrupción.

d) GAMA MEJORADA: Familia PIC18Cxxx con 77 instrucciones de 16 bits, 32 niveles de pila y 4 vectores de interrupción.

Su esfuerzo por acompañar a todos los microcontroladores de unas herramientas buenas y eficaces para el desarrollo, hace de su conocido entorno MPLAB IDE (Integrated Development Environment), una herramienta de eficaz y de uso fácil. Este software es totalmente gratuito y se puede encontrar en su página web.

El conjunto actual de herramientas software es mayoritariamente gratuito, y podemos encontrar:

Figura 2-16. Tabla actual de la disponibilidad de las herramientas software de Microchip.

2. Memoria Descriptiva.

45

MPLAB C30: ES un compilador completo con las características ANSI C para la familia dsPIC30F.

MPLAB Visual Device Initialize: Es una poderosa herramienta para MCU de 16bit o DSP que genera código en ensamblador o en código C, de los esquemas gráficos que se construyen.

MPLAB IDE: Es el principal programa de herramientas, es el motor principal para todas las demás y es totalmente gratuito.

Motor Control Graphical User Interface (MC-GUI): Es una interface visual utilizada para configura motores, su gran rango de parámetros que se pueden seleccionar en un motor, como velocidad, temperatura, rotación, dirección, corriente, etc…

MPLAB C18: Es un compilador ANSI C, que completa el MPLAB IDE, haciendo más agradable su entorno de programación para las familias de PIC18CXXX y otros PICmicro® 8-bit MCUs. Con este software se puede debugar, simular y programar con herramientas como MPLAB ICD2.

MPLAB C17: Es un compilador ANSI C, que completa el MPLAB IDE, haciendo más agradable su entorno de programación.

Filter Lab filter design software: Es una novedosa herramienta utilizada para diseñar filtros.

De todos sus microcontroladores, una vez realizada una primera aproximación a las necesidades reales del dispositivo y futuras ampliaciones, los más interesantes para mi aplicación son lo de la familia PIC18Cxxx. Principalmente por dos razones.

La primera porque es un microcontrolador muy versátil, con multitud de posibles aplicaciones, fiable, muy fácil de programar y con un entorno de programación muy agradable y potente.

La segunda es porque las cualidades antes citadas y la despreciable diferencia de precio entre esta familia y la PIC16CxxC es tan insignificante que esta siendo cada vez menos utilizada en el mundo industrial.

Sus principales características son:

• Hasta 10MIPS a 10MHz • Amplio rango de funcionamiento

• Tensión (2.0V a 5.5V) • Frecuencia (0 a 40MHz) • Temperatura (-40ºC a 125ºC)

• Memoria flexible-Hasta 32k-bytes de memoria Flash auto-programable • Memoria de datos-256 bytes de EEPROM de datos

• ADC de 10-bit. Hasta 8 canales de entrada analógicos con ±1 LSB INL y ± 1 LSB DNL • Módulo CCP

• 4 salidas PWM con auto-shutdown • Pin-Out PICmicro® standard

• Pin compatible con dispositivos PIC de 28 y 40/44 pines • Compatibilidad de código

• El código de aplicación puede ser compartido entre los dispositivos PICmicro existentes.

2. Memoria Descriptiva.

46

• Compatibilidad de herramientas • Usa las herramientas de desarrollo ya existentes

El microcontrolador por todas estas razones y teniendo siempre en cuenta el objetivo final de mi aplicación es el PIC18F252. Es un microcontrolador con 32K de Flash, 1536 bytes de RAM y 256 bytes de Data EEPROM [29].

Sus características más destacadas:

- El coste del microcontrolador, el 18F252 es de 10€.

- El software de desarrollo es gratuito.

- Las buenas herramientas de hardware son muy baratas y accesibles.

- La universidad dispone de estas herramientas.

- Sus características técnicas cubren las expectativas de diseño.

2.11. Desarrollo y Diseño de las Tarjetas.

2.11.1. Tarjetas Nodo.

Una vez aclarados todos los conceptos previos, se definen claramente las características que satisface esta implementación.

Las tarjetas nodo tienen que cumplir los siguientes requisitos:

a) Conexión a la red eléctrica para realizar la comunicación y mantener el aislamiento galvánico, entre la parte de control y la red eléctrica.

b) Alimentar a los circuitos integrado directamente de la red sin necesidad de fuentes de alimentación externas.

c) Mostrar mediante señales luminosas (leds) el estado de la comunicación.

d) Permitir a medida de lo posible toda clase de futuras ampliaciones en las aplicaciones.

El circuito de la tarjeta nodo lo dividiré en cuatro partes:

1) Acceso al medio (HCPL-800J).

2) Modulador (ST-7537HS1).

3) Microcontrolador (PIC18F252).

4) Conexión con el PC (MAX 232).

5) Fuentes de alimentación.

El primer circuito como puede apreciarse en la figura 2-17, la conexión física del HCPL-800J y la red eléctrica.

2. Memoria Descriptiva.

47

La conexión del HCPL-800J sigue las recomendaciones del fabricante, poniendo los valores de bobinas, condensadores y resistencia que se indican en la hoja de datos técnicos. La red de acoplo lleva un varistor para evitar los posibles picos esporádicos de la red destruyan el chip, los filtros en la entrada y la salida formados por C3, L3 y C4, L4 respectivamente, son dos filtros pasabanda de 2º orden con una frecuencia de oscilación de 132 kHz. El factor de calidad es discutido en el apartado de filtros de la memoria de cálculos.

Figura 2-17. Circuito de acceso al medio en la comunicación por red eléctrica.

El siguiente circuito, figura 2-18, es la parte de modulación que comprende la parte analógica del modem FSK ST7537HS1 y la parte optoacoplada del HCPL-800J.

El HCPL-800J utiliza un condensador de desacoplo, de 100 nF, para eliminar los 2’5 V de continua que utiliza la salida del modem y una resistencia limitadora en la entrada Tx-in es de 47 kΩ, que garantiza un correcto funcionamiento del optoacoplador (led fotoemisor). También he puesto otro condensador de desacoplo de 100 nF para adaptar las diferentes tensiones que hay entre la entrada del modem y la salida del optoacoplador. El Tx-en, que es la patilla que se utiliza para poner al AFE (Analog Frond End) en el modo de transmisión, tiene conectada la patilla PABC. La señal de PABC se utiliza para alimentar la etapa de potencia, cuando el modem funciona con transformador (ver datasheet). En mi caso la he utilizado para controlar la patilla Tx-en, de esa forma cuando el modem esta en modo de recepción (Rx / Tx# = ‘1’) la salida PABC = ‘0’ con lo que el HCPL-800J esta también modo de recepción. Cuando Rx / Tx# =’0’ entonces PABC = ’1’ y el opto HCPL-800J se pone en modo de transmisión. Como la señal PABC esta comprendida entre 0 y 10 V he puesto un divisor de tensión para proporcionar a la entrada TX-en un valor comprendido entre 0 y 5 V.

La conexión del ST7537HS1, la he adaptado a mi aplicación siguiendo rigurosamente las recomendaciones del fabricante. Las líneas de Test (TEST1, TEST2, TEST3 y TEST4) las he conectado a un jumper para poder hacer pruebas en distintos modos de funcionamiento.

El modem utiliza un cristal de cuarzo es de 11.0592MHz y dos alimentaciones, una para la parte analógica o de modulación y la otra para la parte digital, donde encontramos los pines que van conectados al microcontrolador.

2. Memoria Descriptiva.

48

Figura 2-18. Circuito encargado de realizar la modulación y demodulación a 132 kHz.

El tercer circuito, figura 2-19, es la conexión del PIC18F252 con el resto de bloques. Como ya he dicho anteriormente, el PIC18F252 es un microcontrolador de 28 pines con muchas prestaciones, que en la estructura de los microcontroladores PIC quiere decir, que tiene tres puertos de entradas y/o salidas, el PORT A, el PORT B y el PORT C.

Los pines del modem CD (Carrier Detect), TxD (Línea de datos a enviar), RxD (Línea de datos recibidos) y Rx / Tx# (estado del modem) están conectados a unos leds, para que informen en todo momento de su estado, tienen un jumper (J2) para deshabilitar esta opción si se desea. Estas líneas también están conectadas al microcontrolador utilizando jumpers (J20) individuales para desconectar estas señales, si se desea, del microcontrolador.

Las conexiones con el modem y el puerto serie se hacen mediante el PORTC, que es utilizado para las comunicaciones, Los pines RC6 y RC7 están conectados a las patillas TxD y RxD del modem, además también se conectan a las patillas 10 y 9 del MAX232. El CD del modem se conecta al pin RC4, el pin para la selección de modos entre TxRx / al pin RC3 y el pin wathdog al pin RC5.

2. Memoria Descriptiva.

49

La patilla “Status” del HCPL-800J es la línea que indica sobrecalentamiento o exceso de intensidad en la salida (red eléctrica), esta conectada al pin RC2.

Los pines RC1 y RC0 tienen conectados unos jumpers para futuras ampliaciones.

La señal de salida del modem (pin 18 (CLK)), la utilizaré para sincronizar al PIC, esta será de la frecuencia 11,0592MHz. He conectado un jumper, para si se desea en futuras aplicaciones, anular esta señal y poner un cristal de distinta frecuencia (se deberán recalcular los valores de los timers). La señal de reset generada por el modem, pin 24, esta conectada al reset general del microcontrolador. De esta forma se produce un reset general cuando el wathdog no es refrescado correctamente, este refresco debe hacerse en un intervalo entre 800 µs y 1,5 segundos.

Figura 2-19. Esquema de la conexión del PIC18F252.

2. Memoria Descriptiva.

50

El PORT B es el que he utilizado para conectar los leds, que indican, si se desea, la información recibida o generada (depende del programa), también esta conectado íntegramente al bus de expansión, del que hablaré más adelante. Otra opción posible es utilizar las 3 interrupciones externas de las que dispone del microcontrolador, para ello solo hace falta habilitarlas con un jumper (J24). Otra opción es la conexión del RJ-11 que utiliza el Microchip MPLAB IC2 para programar o debugar el programa. El RJ-11 utiliza el pin 1 (MCLR# / Vpp), el pin RB6 y el pin RB7 para la programación, también utiliza la alimentación.

El PORT A, es utilizado para generar las entradas, en la placa he conectado un micro-switch de 6 interruptores. También se pueden habilitar las cuatro entradas analógicas de las que dispone el PIC, para ello he puesto unos jumpers en los pines que van del [RA0-RA3] con dos posiciones, entrada digitales o entradas analógicas. Los pines RA0, RA1, y RA2 también están conectados en el bus de expansión.

El bus de expansión es un conector, que esta pensado para poder realizar distintas aplicaciones utilizando la misma tarjeta nodo. Tiene ordenadamente conectados los pines por si se desea conectar un LCD (Liquid Crystal Display) con el driver HD44780, tiene un bus de 8 bits, tres bits de control, tensión de alimentación, masa y contraste.

El cuarto circuito es la conexión con el PC utilizando el puerto serie, para realizar este circuito solo he utilizado un MAX232 conectado a los pines del PORTC, RC6 y RC7 como se muestra en la figura 2-20. El MAX232 en su salida utiliza un conector DB-9.

Figura 2-20. Conexión al PC utilizando RS232.

Finalmente, los circuitos de alimentación. Debido a la utilización del Modem ST7537HS1 es necesario disponer de dos tensiones para alimentar, una de 10 V para la parte analógica y otra de 5 V para la parte digital. En la fuente de alimentación de 5 V también irán conectados el microcontrolador y el HCPL-800J (la parte conectada al modem). La figura 2-21-B muestra esta fuente.

2. Memoria Descriptiva.

51

Hay otra fuente de alimentación de 5 V (figura 2-21-A), esta fuente la llamo Vcc2 y la utilizo para alimentar la parte del HCPL-800J que esta conectar directamente a la red. Los valores son todos los recomendados por el fabricante (Ver datasheet).

Figura 2-21. A) Fuente de alimentación sin transformador. B) Fuentes de alimentación con transformador.

Con todos estos circuitos se han implementado dos tarjetas nodo iguales, la diferencia esta en el número de aplicaciones que queremos dar a cada tarjeta. Por ejemplo, la tarjeta que hace de maestro tiene montada la parte de comunicación con el PC, cosa que no es necesaria en la tarjeta que trabaja como esclava.

Como he dicho anteriormente este proyecto se centra en la primera capa OSI de la ISO, la capa física. Es por este motivo que he definido un pequeño protocolo para poder demostrar el correcto funcionamiento de las tarjetas pero sin ser muy riguroso. Las capas de enlace y red serían las encargadas de definir un protocolo tipo, como el que se muestra en la figura 2-12, que utiliza el EHS (Europa Home System).

Una vez implementadas las tarjetas nodo, he estado trabajando con ellas durante dos meses. La visualización de la información se ha hecho utilizando los leds que incorporan las tarjetas, el protocolo utilizado esta compuesto por tres bytes, el primer byte informa a quien va dirigido el mensaje (255 posibles receptores), el segundo byte es el comando (más adelante ya los definiré), depende de la aplicación y el tercer byte es el checksum, la comprobación de que el mensaje es correcto.

En este periodo de tiempo he estado estudiando los problemas con el medio físico, comprobando el funcionamiento de la comunicación con y sin filtros pasabanda de mayor o menor factor de calidad, en diferentes ubicaciones (para cambiar el valor de la impedancia y el número de interferencias), un hogar normal (ubicación ideal) y en la universidad (ubicación no ideal).

2. Memoria Descriptiva.

52

2.11.2. Tarjeta de Potencia.

Para hacer lo más real la posible, este proyecto se ha decidido implementar una tarjeta de potencia con ciertas aplicaciones.

Las aplicaciones serán la regulación de tres bombillas incandescentes y el control de un motor de persiana.

Las bombillas que he utilizado son de 25 Watios, con lo que los triacs que utilizo no necesitan disipador. Si se desean utilizar bombillas de una potencia mayor es posible que se necesite un disipador, se recomienda utilizar a partir de 100 W.

El motor de persiana, que podría ser también el de una puerta, utilizado finalmente ha sido un motor de continua de 12 V modelo EG-530AD-2F.

Las empresas dedicadas al sector de cierre de puertas y persianas, ya hace tiempo que han apostado fuertemente por la automatización del hogar (domótica). Empresas como BGM TECNOELEVACIÓN S.A., JOLLY MOTOR EPAÑA, METAL BLINDS, SOMFY, APRIMATIDC DOORS S.L., BFT puertas y automatismos, DALMACO MOTOR, CYACSA, FORSA AUTOMATISMOS, GAPOSA, MOTUS ESPAÑA y PUJOL MUNTALÁ entre otras ofrecen un sinfín de motores y automatismos para regular la apertura de puertas y persianas de todo tipos.

Hay motores para persianas tanto de corriente continua como de alterna, este parámetro depende del fabricante de ventanas o en su defecto del instalador, que escoge uno u otro modelo en función de la aplicación concreta. Pujol Muntalá ofrece el modelo Mini Maratón, que incorpora receptor de radiofrecuencia, un motor de 24 Voltios de corriente continua y la posibilidad de kit de batería. Jolly Motor tiene motores de centro de eje y motores tubulares de 220v y 24v.

Delante de esta situación la decisión a la hora de implementar la placa de potencia es situar dos relés con un máximo de 220 V 8 A y poner regletas en las entradas y salidas, de esta forma se puede configurar para que trabaje tanto con motores de corriente continua como motores de corriente alterna, si su consumo es mayor de 8 A, se le conectaran relés con mayor capacidad en los contactos.

En la figura 2-22, podemos ver un motor tubular con receptor de Sonfy y el motor central Winner de Pujol Muntalà. Esto muestra una pequeña parte de la gran variedad que existe hoy en el mercado [32] [33].

2. Memoria Descriptiva.

53

Figura 2-22. Motor tubular de SOMFY y Motor central de Pujol Muntalà.

En la figura 2-23 se puede ver el esquema de la placa de potencia íntegramente.

Figura 2-23. Esquema completo de la placa de potencia.

2. Memoria Descriptiva.

54

En esta placa hay un circuito detector de paso por cero, el circuito genera una interrupción cada vez que la onda senoidal pasa por cero, esta interrupción la conecto a la INT0 que es el pin RB0 del PIC. Los pines del RB1, RB2 y RB3 son los encargados de generar el disparo de los triacs. El circuito de disparo sigue al pie de la letra las recomendaciones del fabricante del optoacoploador MOC3020 [30]. Los pines RB4 y RB5 son los encargados de controlar los dos relés para el motor. Finalmente los pines RB6 y RB7 los he puesto para que emulen los finales de carrera de la persiana o puerta.

También he colocado un filtro de red, para evitar las EMI (emisiones electromagnéticas) generadas por la conmutación de los triacs que son tan problemáticas en la comunicación por red eléctrica.

2.12. Programación del Microcontrolador.

Para programar el microcontrolador he utilizado el software gratuito Microchip MPLAB IDE v.6.5 y el MPLAB C18 Demo versión 2.20 que hay en la página web del fabricante, Además del programador MPLAB IC2.

El protocolo que he utilizado para esta demo esta formado por 3 bytes. Las aplicaciones que se controlan a modo de ejemplo no necesitan muchos más. El protocolo pues, esta definido de la siguiente forma:

El primer byte es lo que se suele llamar como “Destination Address”, es la dirección destino que yo llamaré, nombre del destinatario del mensaje. Todas las placas que estén conectadas en la red reciben el mensaje pero solo responden a esta las que tienen ese

CÓDIGO Binario Hexa

Interpretación

0000-0000 0x00 Paro de Emergencia 0000-0001 0x01 Pulso, Motor izquierda 0000-0010 0x02 Pulso, Motor Derecha 0000-0011 0x03 Continuo, Paro de Motor 0000-0100 0x04 0000-0101 0x05 0000-0110 0x06 0000-0111 0x07 0000-1000 0x08 Pulso, Bombilla 1 0000-1001 0x09 Pulso, Bombilla 2 0000-1010 0x0A Pulso, Bombilla 3 0000-1011 0x0B 0000-1100 0x0C Continuo, Bombilla 1 0000-1101 0x0D Continuo, Bombilla 2 0000-1110 0x0E Continuo, Bombilla 3 0000-1111 0x0F 0101-0101 0x55 Trama incorrecta

….-…. … 1111-1110 0xFE Trama correcta 1111-1111 0xFF Configuración Predeterminada

Tabla 2-1. Codificación del comando en el protocolo utilizado.

2. Memoria Descriptiva.

55

nombre. Como se podrá ver más adelante las placas están programadas de forma que si su nombre no coincide con el recibido, dejen de escuchar el mensaje. Con este byte conseguimos poder tener 256 posibles dispositivos (más si repetimos direcciones) conectados en una instalación.

El segundo byte es el comando. Este dato sigue la codificación que puede verse en la tabla 2-1. Como puede observarse hay muchas posiciones vacías, esto demuestra lo antes citado, que con un protocolo de tres bytes, tenemos más que suficiente para la aplicación de demostración que estoy implementando.

El tercer byte es le llamado checksum ‘suma de control’. Este byte se genera haciendo una suma sin signo y sin bit de carry, de los dos primeros bytes. De esta forma cuando se recibe una trama se verifica si es correcta, si el último byte enviado coincide o no, con la suma de los dos primeros.

Como hay dos tarjetas nodo, la programación la dividiré en dos partes. La primera es la programación del nodo maestro y la segunda la programación del nodo esclavo.

En esencia las dos tarjetas siguen el mismo esquema, la mayor diferencia esta en la interpretación de las señales recibidas, el nodo maestro solo las muestra por los leds y el esclavo las acondiciona para actuar en la placa de potencia de la demostración.

2.12.1. Programación del Nodo Maestro.

En el diagrama de bloques de la figura 2-24 se muestra el funcionamiento del de la función principal ‘main ();’. Como su funcionamiento general esta basado en interrupciones, su estructura es muy simple como se puede observar.

.

Figura 2-24. Diagrama de bloques del main, función principal del maestro.

Configuración I/O, Timer

Inicialización

While (Siempre)

Inicio

2. Memoria Descriptiva.

56

Primero configura las entradas, las salidas y el timer 0 del microcontrolador, después inicializa las estructuras y variables que se utilizan a lo largo de todo el programa. Seguidamente y durante todo el periodo de tiempo que la tarjeta nodo este conectada, espera ser interrumpida por los eventos producidos, que han sido programados.

La figura 2-25, es el diagrama de bloques que representa la respuesta a la interrupción producida por el timer 0. Se puede decir que es la función más importante de todo el programa. Esta función es la encargada de sincronizar todos los eventos programados.

Figura 2-25. Diagrama de bloques de la respuesta a la interrupción TMR0.

No Enviando Trama?

Inicio TMR0

Inicializa TMR0

Refresca Wath-dog

Incrementa contadores

Enviar_Ocupado();

No

Modo Recibiendo Trama

Si Si

Detecta Trama?

Si

No

Recibiendo Trama?

Si

Pulsadores();

10 ms? No

Recivir_Ocupado();

Fin

2. Memoria Descriptiva.

57

Cuando se produce una interrupción por desbordamiento, esto ocurre cada 465.5 us, se aprovecha para actuar en los siguientes eventos:

a. Watchdog. Este evento es generado para producir un pulso aproximado de 0’5 ms al modem, de forma que la ausencia de este, por motivos espurios desconocidos, provoca un reset general en el microcontrolador y este se reinicializa.

b. Escaneo de los pulsadores. Cada 10 ms se mira el estado de los pulsadores, situados en el PORT A del microcontrolador.

c. Enviar trama. Como la norma UNE-EN 50065-1 obliga a utilizar un protocolo CSMA (Carrier Sense Multiple Access), cuando se utiliza una frecuencia portadora de 132’5 kHz en la comunicación por red eléctrica, en cada interrupción del timer 0, se comprueba si se esta enviando una trama, en el caso favorable, se salta a la función ‘Enviar_Ocupado();’.

d. Recibiendo trama. En el caso desfavorable, cuando se comprueba si se esta enviando una trama, se comprueba si es que se esta recibiendo una trama. En el caso favorable se salta a la función ‘Recibir_Ocupado();’.

e. En el caso de no estar enviando trama ni estar recibiendo trama, se comprueba, utilizando el pin CD ‘Carrier Detect’, si se esta recibiendo una trama.

La figura 2-26, representa el diagrama de bloques de la respuesta a la interrupción que se genera cuando se recibe un byte.

Cuando se recibe esta interrupción, se comprueba si el byte recibido tiene algún error, en caso afirmativo se notifica utilizando una variable llamada error a la cual se le asigna un valor entero para definir el tipo de error, seguidamente y/o en caso contrario se llama a la función ‘RxT (Trama *)’ que es la función que se utiliza para leer la trama recibida.

Los valores de los enteros son:

Error = 0⇒ No hay error.

Error = 1 ⇒ Error de sobrepasamiento (llegan 9 bits y no 8).

Error = 2 ⇒ Error de trama (llega el bit star antes del bit estop del byte anterior).

Error = 3 ⇒ Error de Checksum (no coincide el valor).

2. Memoria Descriptiva.

58

Registro Envía Byte Vacío.

Fin

TxT(Trama *); Envia Trama.

La figura 2-27, representa el diagrama de bloques de la respuesta a la interrupción que se genera cuando se ha enviado un byte.

Figura 2-26. Diagrama de bloques de la respuesta a la interrupción ‘Byte Recibido’.

Figura 2-27. Diagrama de bloques de la respuesta a la interrupción ‘Registro Envía Byte Vacío’.

Si

No

Error de sobrepasamiento ?

RxT (Trama *); Recibe la Trama.

Byte Recibido

Fin

Error tipo 1

Si

No

Error de Trama?

Error tipo 2

2. Memoria Descriptiva.

59

Cuando se envía un byte, se escribe en un registro ‘TXREG’, este registro pasa los datos a un ‘shift register’ el ‘TSR Register’, que es el encargado de enviarlos en serie. La interrupción se genera cuando los datos del ‘TXREG’ pasan al ‘TSR Register’. Cuando se produce esta interrupción se llama a la función TxT (Trama *), que es la encargada de enviar la trama de forma ordenada.

La siguiente figura, la 2-28, representa el diagrama de bloques de la función ‘Enviar_Ocupado();’, esta función es la que se ejecuta cuando se esta enviando o se desea enviar una trama.

Primero mira si el ‘hardware’ esta preparado, sin no lo está, es porque se quiere enviar una trama pero todavía no ha empezado. En consecuencia se mira si ha pasado el tiempo aleatorio, comprendido entre 85 ms y 115ms (según la UNE-EN 50065-1), una vez pasado este tiempo, siempre que no haya pasado 1,1 segundos, se comprueba que la línea eléctrica, el medio físico de transmisión, no este siendo utilizado. Si esta siendo utilizado, se captura un nuevo número aleatorio y se vuelve a repetir todo lo anterior. Si no está siendo utilizado se activa el ‘hardware’ y se inicializa el tiempo de espera (7 ms), que necesita el modem para enviar datos con seguridad. Si durante más de 1,1 seg el medio físico esta siendo utilizado, se activa el ‘hardware’ de todas formas, porque esto significa que el canal tiene mucho ruido o que un módulo se ha averiado y se a adueñado del canal de comunicación.

Informar al hardware que se va ha enviar una trama, es de vital importancia, porque el modem ST7537HS0 necesita un tiempo medio de establecimiento de la señal modulada, con lo que antes de enviar la trama, se debe esperar este tiempo para asegurar que la información enviada es la que se desea. En caso contrario, el primer byte nunca será enviado de forma correcta porque cuando el modem entra en el modo enviar genera unos valores totalmente aleatorios en la señal modulada.

Una vez pasado este tiempo (7ms, el caso más desfavorable) se empieza e enviar la trama.

Para asegurar que mi tarjeta nodo cumple la normativa y no se excede de tiempo ocupando la línea eléctrica, he puesto un contador que limita a 1 segundo, el tiempo máximo para ocupar el canal.

Una vez enviada la trama, como la norma exige que entre trama y trama exista un tiempo de 125ms, hay un retardo de 40 ms, desde el momento en que se acaba de transmitir una trama hasta que se habilita el flag para poder enviar otra. La suma del tiempo aleatorio mínimo más el retardo son 85 ms + 40 ms = 125ms, que es el tiempo mínimo exigido.

2. Memoria Descriptiva.

60

Figura 2-28. Diagrama de bloques de la función Enviar_Ocupado ().

Si

No

No

Inicio Enviar_Ocupado();

Enviando Trama Si

No

Modo recibir 1seg? Si

Ha pasado t aleatorio?

(85 ms < t aleatorio < 115ms)

Si

No

Hay alguien enviando?

Nuevo aleatorio

Hardware modo enviar.

Inicializa wait 7ms.

Incrementa contador

Modo enviar?

Si

Si

No 7 ms?

No

Modo Enviar?

No

1’1 s ? No

Hardware preparado?

Fin

Si

Si

No

Modo recibir 40ms? Si Trama Enviada?

No

Si

2. Memoria Descriptiva.

61

La figura 2-29, representa el diagrama de bloques de la función ‘TxT (Trama *);’, esta función es la encargada de enviar la trama de forma ordenada.

Cada vez que se genera una interrupción, por estar vacío el registro ‘TXREG’, se llama a esta función, esta envía todos los bytes y finalmente muestra el comando en los leds del PORTB.

La representación 2-30, es le diagrama de bloques de la funciones que utilizo para muestrear los pulsadores conectados al PORT A.

Cada 10 ms se mira si algún pulsador, de los conectados al PORT A del PIC, han sido pulsados, para esto, se llaman a las funciones ‘PulsaA0 (); PulsaA1 (); PulsaA2 (); …, PulsaA5 ();’.

Esta función esta diseñada para poder tener tres acciones en un solo pulsador. La primera acción es pulsador no apretado, la segunda es pulsador apretado en un intervalo corto (menor a 2 segundos) y la tercera, pulsador apretado durante un intervalo largo de tiempo (más de 2 segundos).

Figura 2-29. Diagrama de bloques de la función TxT (Trama *).

Si

No Último Byte de la Trama?

Muestra en el PORTB el Comando.

Fin

Modo recibir

Enviado Byte Final?

Tx(Byte); Envía Byte.

No

Si

Inicio TxT

(Trama *t)

2. Memoria Descriptiva.

62

Primero se mira si ha sido pulsado, si lo ha sido, se envía un comando ‘PULSO’ asociado a este pulsador, pero solo la primera vez. Pasados 10ms, se mira si el pulsador sigue activo, si es así, se sigue incrementando un contador interno, que se pone a cero cada vez que el pulsador se desactiva. Cuando desactivamos el pulsador, se mira si han pasado 2 segundos, si han pasado, se envía el comando ‘CONTINUO’ asociado al pulsador, sino no se hace nada.

La figura 2-31, representa el diagrama de bloques de la función ‘Transmitir (comando);’. Esta es la función que se encarga de crear la trama con el comando seleccionado por los pulsadores.

Cuanto se llama esta función, se mira si se esta ocupado enviando alguna trama, si se esta enviando, o todavía no han pasado 125ms de la última transmisión (reglas del CSMA de la UNE-EN 50065-1), no hace nada.

Esto se hace porque como ya he dicho con anterioridad, este proyecto solo se encarga de la primera capa del modelo de referencia OSI de la ISO, el poder utilizar dos pulsadores a la vez, es una opción descartada, la capa encargada de gestionar las colas es la capa de red, que no se trata en este proyecto.

Figura 2-30. Diagrama de bloques de las funciones PulsaAx ().

Comando ‘PULSO’

Si No Pulsado?

Pulsado t>2 Seg?

Comando ‘CONTINUO’

No 1ª Vez?

Si

No

Inicio PulsaAx();

Fin

Transmitir (comando);

Si

2. Memoria Descriptiva.

63

En caso de no estar ocupado, se captura el tiempo aleatorio de la variable creada para esto, y de esta forma me aseguro de que su valor nunca será predecible. Seguidamente prepara la trama, con el nombre del destinatario, en este caso la tarjeta nodo esclava, después el comando asociado al pulsador y la forma de pulsarlo y finalmente el checksum.

Finalmente avisa de que esta preparado para enviar y dependiendo del estado de la línea y el valor del numero aleatorio, el mensaje se enviará dentro de un espacio de tiempo comprendido entre [ 92 ms – 1,107 seg].

La siguiente figura, la 2-32 representa el diagrama de bloques de la función ‘Enviar_Ocupado ();’.

Esta función es llamada cada 0,5 ms, siempre que se este recibiendo una trama, con ella se comprueba que en todo momento se este recibiendo trama, utilizando el CD ‘Carrier Detect’, y además evita que la tarjeta nodo, no este esperando recibir una trama durante más de 1 segundo seguido, que es un tiempo máximo que establece la norma.

Figura 2-31. Diagrama de bloques de la función Transmitir (comando).

Captura aleatorio

Inicio Transmitir(comando);

Fin

Prepara Trama Enviar Ocupado

Ocupado Enviando otro

Byte?

No

Si

2. Memoria Descriptiva.

64

Recibiendo Trama o t < 1seg

Fin

Si

No Deshabilita interrupción Byte

recibido.

Recibiendo Trama == False

Inicio Recibir_Ocupado();

Para finalizar la figura 2-31, representa el diagrama de bloques de la función ‘RxT (Trama *);’.

Una vez habilitada la interrupción de byte recibido y después de comprobar si se ha producido algún error en la recepción de este, se llama a esta función.

Primero carga llama a la función ‘(Byte) Rx (void);’ que se encarga de retornar el byte recibido que ha provocado la interrupción y almacena el byte en la posición correcta de la estructura trama. Siguiendo el orden establecido, comprueba si ya ha recibido toda la trama, si no es así, sale de esta función y espera ser llamada de nuevo. Si de lo contrario, ya ha recibido toda la trama, comprueba que el mensaje sea para este nodo, el maestro. Si no lo es, ignora el mensaje, y sale de la función deshabilitando antes la interrupción de byte recibido. Si la trama es para este nodo, comprueba el byte de chesksum, si este no es correcto anota el error y sale de la función deshabilitando la misma interrupción. Si el byte de chesksum coincide entonces interpreta el código enviado, siguiendo la tabla 2-1 y sale de la función deshabilitando la interrupción de byte recibido.

Figura 2-32. Diagrama de bloques de la función Enviar_Ocupado ().

2. Memoria Descriptiva.

65

Figura 2-33. Diagrama de bloques de la función RxT (Trama *).

Inicio RxT

(Trama *t)

No

Ha terminado de recibir bytes ?

Interpreta (Byte);

La trama es para mi ?

(Byte) Rx (void); Lee Byte recibido.

No

Si

Fin

Deshabilita interrupción Byte

recibido.

Si

No Checksum O.K. ?

Error tipo 3 Si

2. Memoria Descriptiva.

66

2.12.2. Programación del Nodo Esclavo.

La programación del nodo esclavo, es muy parecida a la del nodo maestro, el protocolo funciona igual y la diferencia está, en que a la hora de interpretar el código, el nodo esclavo adapta la interpretación a la placa de potencia que tiene conectado en el bus de expansión.

Otras diferencias son que en esta tarjeta también se ha programado la interrupción externa INT0, situada en el pin RB0 del microcontrolador, y el la interrupción TMR1 del timer 1.

La interrupción INT0 la utilizo para detectar cuando la onda senoidal pasa por cero, de esta forma sé que tengo 10 ms para realizar el disparo de los triacs y que en función del tiempo que tarde después del paso por cero, la intensidad de la luz será inversamente proporcional, es decir, a más tiempo menos intensidad, consiguiendo que las bombillas estén totalmente apagadas cuando se dispara a los 10 ms, de haber recibido la interrupción, paso por cero.

La interrupción TMR0 la utilizo para generar de forma síncrona, a la onda senoidal, un timer de 0.250 ms, de esta forma puedo hacer 40 disparos en 10 ms.

La gráfica 2-24 también representa la función ‘main ();’de la tarjeta nodo esclavo.

La gráfica 2-25, es el diagrama de bloques de la respuesta a la interrupción producida por el timer 0 y también es igual.

La figura 2-26, representa el diagrama de bloques de la respuesta a la interrupción que se genera cuando recibe un byte, y es igual en la tarjeta nodo esclava.

La figura 2-27, representa el diagrama de bloques de la respuesta a la interrupción que se genera cuando el registro envía byte esta vacío, y también es igual en esta tarjeta.

La figura 2-28 es el diagrama de bloques de la función ‘Enviar_Ocupado ();’, la tarjeta nodo esclavo utiliza la misma función.

La figura 2-29 es el diagrama de bloques de la función ‘TxT (Trama *);’, y es igual en la tarjeta nodo esclavo. Además envía un byte de trama ok o trama no ok.

La figura 2-30 es el diagrama de bloques de las funciones ‘PulsaAx ();’, que es la misma en esta tarjeta nodo.

La figura 2-31, es la misma y representa el diagrama de bloques de la función ’Transmitir (comando)’. Esta es la función que se encarga de crear la trama con el comando seleccionado por los pulsadores.

La figura 2-32, también es igual y representa el diagrama de bloques de la función ‘Recibir_Ocupado ()’.

La figura 2-33, también es igual y representa el diagrama de bloques de la función ‘RxT (Trama *)’.

A continuación, únicamente mostraré los diagramas de bloques que son diferentes respecto a la programación de la tarjeta nodo maestra.

Así pues los nuevos diagramas de bloques son, la interrupción externa (INT0) y la interrupción del timer 1 (TMR1).

2. Memoria Descriptiva.

67

La función ‘Interpreta ();’ en esta tarjeta, es un poco más compleja que en la tarjeta nodo maestro, porque en la tarjeta maestro sólo se muestra la información del comando por los leds, en cambio en la tarjeta esclavo se debe actuar en la placa de potencia. De todas formas no pondré su diagrama de bloques porque su implementación es mediante la utilización de un simple ‘switch (comando)’, y en función del comando actúa de una u otra forma.

En la figura 2-34 muestro el diagrama de bloques de la respuesta a la interrupción generada cuando la onda senoidal pasa por cero. Cuando esta interrupción se produce se sincroniza el timer 1, cargando nuevamente el valor calculado (el timer 1 genera una interrupción cada 0’25 ms) y pone a cero el contador que utilizo para disparar los triacs.

Figura 2-34. Diagrama de bloques de la respuesta a la interrupción externa INT0.

Figura 2-35. Diagrama de bloques de la respuesta a la interrupción externa INT0.

Fin

Inicio TMR1

Inicializa TMR1 Incrementa contador

Ciclo_Luz ();

Disparo_Luz ();

Sincroniza Timer 1

Inicio INT0

Fin

paso0 = 0;

2. Memoria Descriptiva.

68

La figura 2-35 representa el diagrama de bloques de la respuesta a la interrupción. Cada 0,25 ms se genera un interrupción, después de inicializarse incrementa la variable paso0, que en la función ‘Disparo_Luz ();’ la utilizo para saber el punto exacto de disparo. Llama a las funciones ‘Ciclo_Luz ();’ y ’Disparo_Luz ();’.

La figura 2-36 representa el diagrama de bloques de la función ‘Ciclo_Luz ();’. Esta función la utilizo para mirar el estado de las bombillas. Las bombillas pueden estar, apagadas, encendidas con una intensidad constante, encendidas subiendo la intensidad de la luz o encendidas bajando la intensidad. Si esta encendida constante o apagada, no se hace nada, pero si lo esta subiendo o bajando la intensidad de la luz, modo de regulación automático, se incrementa el contador asociado para controla el tiempo de salto, este tiempo es cada cuanto tiempo se varia la intensidad. Finalmente yo utilizo 49 ms porque es valor calculado para que se puedan producir 40 interrupciones en 2 segundos. Pasado este tiempo se ejecuta la función ‘CicloluzX ();’, donde la X es el nombre de la bombilla sobre la que se actúa, esta función controla, que una vez la intensidad llega a la máxima intensidad, automáticamente se decrementa y a la inversa.

La figura 2-37 representa el diagrama de bloques de la función ‘Disparo_Luz ();’. Esta función se encarga de que el disparo dure 0,25ms, tiempo más que suficiente, y disparar el triac en el momento correcto.

Figura 2-36. Diagrama de bloques de la función Ciclo_Luz ();.

Fin

Si

t >= Tcambio

No

Inicio Ciclo_Luz();

Bombilla Regula Automática ?

CicloluzX();

2. Memoria Descriptiva.

69

Figura 2-37. Diagrama de bloques de la función Disparo_Luz ();.

Fin

Si

No

Inicio Disparo_Luz();

Triac Dispardo ?

Levanta disparo Triac

Disparar Triac ?

Si

No Dispara Triac

3. Memoria de Cálculo.

3. Memoria de Cálculo.

71

3.1. Introducción:

El objetivo de este apartado del proyecto es el análisis y justificación con los cálculos y gráficas pertinentes de aquellos apartados que se crea necesaria su especificación.

3.2. Red de acoplo y Filtros.

Este apartado esta dedicado a los filtros pasivos que se deben conectar en el HCPL-800J. No se han realizado cálculos, sino que se han comprobado, con un programa de simulación de circuitos, PSPICE, los filtros recomendados por el fabricante.

El circuito de la figura 3-1, muestra la red de acoplo simulada.

Figura 3-1. Circuito simulado con la red LC de acoplo.

Gráfica 3-1. Resultado de la simulación de la red de acoplo utilizada.

En primer lugar simulo la red de acoplo con los valores recomendados para trabajar

con una frecuencia de 132 kHz, que son L1 = 330 µH, L2 = 6’8 µH y C2 = 220 nF. En la entrada de la red de acoplo utilizo el modelo ideal del circuito equivalente de la red eléctrica que se muestra en la figura 2-5. En la salida pongo las impedancias equivalentes de Tx y Rx que proporciona el fabricante, Agilent Technologies, en la hoja de datos técnicos.

3. Memoria de Cálculo.

72

Una red de acoplo tiene la misión de adaptar las impedancias para conseguir máxima transferencia de potencia, de forma que la red eléctrica vea una impedancia de valor igual en la parte real pero con la parte imaginaria opuesta (compleja conjugada). A la vez, el HCPL-800J debe ver la impedancia de la red eléctrica de igual valor real y valor imaginario opuesto, a la que él tiene.

Para conseguir esto el fabricante aconseja utiliza un circuito paso alto sintonizado a 18’78 kHz y un filtro pasabanda en serie sintonizado a 61 kHz.

El filtro paso altos es el responsable del sobrepico que hay en la frecuencia a la que esta sintonizado (18’78 kHz) y el filtro pasabanda serie tiene un gran ancho de banda y un pequeño factor de calidad, el resultado de la conexión de los dos tiene el comportamiento que muestra la gráfica 3-1.

Con el simulador he podido comprobar que si se disminuye la frecuencia de resonancia del filtro pasabanda, el ancho de banda total también se hace más pequeño. También he simulado el filtro pasa altos, con la frecuencia de resonancia a 132 kHz, con esto se consigue poner el sobrepico a esta frecuencia. Todo ésto sólo se ha simulado porque recuerdo, que el objetivo principal de una red de acoplo es conseguir la máxima transferencia de potencia y si se modifican los valores esto no se consigue.

A Continuación simulo el filtro pasabanda que el fabricante recomienda poner en la entrada y salida de la señal modulada. El circuito es el mostrado en la figura 3-2.

Figura 3-2. Circuito simulado con el filtro pasabanda recomendado.

Se especifican diferentes valores de L3 y C3 en una tabla, este valor depende de la frecuencia a la que se desea trabajar. En mi caso es 132 kHz, con lo que el valor de L3 será 680 µH y el de C3 será de 2’2 nF. El valor de R5 no esta especificado por el fabricante.

Como este filtro sólo lo he puesto en la entrada de la señal, he puesto a la salida el circuito del modelo equivalente de la red eléctrica, mostrado en la figura 2-5, y la resistencia equivalente de Tx. A la salida he puesto la resistencia equivalente de Rx.

El valor de la resistencia en los filtros pasabanda, define el factor de calidad de este. Dependiendo del lugar donde tenga que aplicarse este filtro, debe tener un factor de calidad u otro. El factor de calidad se calcula utilizando la fórmula, que muestra la ecuación 3-1.

Ecuación 3-1.

Wfw

fifsfw

Q∆

=−

=

3. Memoria de Cálculo.

73

Donde ‘fw’ es la frecuencia de resonancia del filtro, ‘fs’ la frecuencia de corte superior y ‘fi’ frecuencia de corte inferior y ‘∆W’ es el ancho de banda del filtro.

Observando la ecuación 3-1 se puede comprobar como el factor de calidad es inversamente proporcional al ancho de banda, es decir, cuanto más grande es el ancho de banda del filtro menor es el factor de calidad y a la inversa.

En el programa Pspice he simulado este filtro sintonizado a 132 kHz y con cuatro valores de R5 distintos, el primero con R5 = 5’6 Ω (gráfica 3-2), el segundo con R5 = 56 Ω (gráfica 3-3), el tercero R5 = 560 Ω (gráfica 3-4) y el cuarto R5 = 5.6 kΩ (gráfica 3-5).

En la gráfica 3-2 se ve como el ancho de banda es muy grande, concretamente ∆W = 13 MHz, en consecuencia su factor de calidad es Q = 10-3.

Gráfica 3-2. Filtro pasabanda sintonizado a 132 kHz , con R5 = 5’6 Ω.

Gráfica 3-3. Filtro pasabanda sintonizado a 132 kHz , con R5 = 56 Ω.

En la gráfica 3-3 se ve como el ancho de de banda es menor, con un valor de ∆W = 1’2946 MHz y su factor de calidad Q = 0’1.

3. Memoria de Cálculo.

74

Gráfica 3-4. Filtro pasabanda sintonizado a 132 kHz , con R5 = 560 Ω.

Ahora en la gráfica 3-4, se ve como el ancho de de banda es mucho menor, para ser más exactos ∆W = 136 kHz y su factor de calidad Q = 0’97.

Gráfica 3-5. Filtro pasabanda sintonizado a 132 kHz , con R5 = 5’6 kΩ.

Por último la gráfica 3-5 muestra un ancho de banda pequeño, ∆W = 20’5 kHz y un factor de calidad Q = 6’4.

El fabricante recomienda utilizar factores de calidad pequeños en los filtros, porque cuanto mayor es factor de calidad, menor es la distancia a la que se pueden comunicar las tarjetas nodo. La explicación es lógica, cuanto más grande es R5, más señal se queda en esta resistencia.

El ancho de banda del primer filtro es muy grande, poner un filtro con estas características, no tiene sentido. Si no se pone filtro, utilizando únicamente la red de acoplo

3. Memoria de Cálculo.

75

se obtiene un ancho de banda ∆W = 100MHz, con el filtro y R5 = 5’6 Ω, se obtiene un ancho de banda ∆W = 13 Mz. A la práctica, esta diferencia de casi un orden de magnitud, no se nota. Las tarjetas nodo se comunican, con y sin filtro pero recibe gran parte del ruido de la red eléctrica (comprobado en el laboratorio) y muchos bytes se reciben de forma incorrecta.

La solución comienza a notarse, a partir de poner R5 = 56 Ω (gráfica 3-3). Las tarjetas nodo funcionan en casa pero son muy susceptibles al ruido, en distancias inferiores a los 3 metros se pierden más del 50% de las tramas. Le afectan las interferencias generadas por las fuentes de alimentación de PC’s de sobremesa, portátiles, fluorescentes, etc. Permite la comunicación en ambientes poco ruidosos (un hogar sin fuentes conmutadas, o sin reguladores de luz), pero en ambientes no ideales, por ejemplo la universidad se produce una gran perdida de tramas, superior al 80%.

La gráfica 3-4 es una solución intermedia, tiene un ancho de banda ∆W = 136’66 kHz y no tiene un valor de R5 muy elevado, con lo que la distancia de comunicación puede ser superior a 100 metros. Utilizar el filtro con R5 = 560 Ω, permite la comunicación en ambientes con niveles de ruido normales (hogares con varias fuentes conmutadas y algún regulador de luz), donde la señal eléctrica no tiene tanto ruido como en una industria. Con este valor he realizado pruebas en la biblioteca, en las aulas, laboratorio y sala d’usuaris de la ETSE, obteniendo un buen resultado. Más adelante los comentaré.

También he hecho pruebas con el último filtro (gráfica 3-5). Su gran ventaja es que las tarjetas nodo, se comunican cuando las cantidades de ruido en la red son elevadas. Su gran inconveniente es la distancia, poner una resistencia grande, R5 = 5’6 kΩ, provoca una gran caída de tensión en esta y la consecuente perdida de señal en largas distancias. En las pruebas realizadas, la distancia máxima no fue superior a 30 metros.

A continuación la figura 3-3, muestra el circuito simulado con los valores de R5 = 560 Ω y 5’6 kΩ.

Figura 3-3. Circuito simulado con la red de acoplo y el filtro pasabanda recomendados.

La gráfica 3-6, muestra el resultado de la simulación del circuito representado en la figura 3-3 con la R5 = 560 Ω. Este es el filtro que he escogido para la implementación final, el ancho de banda ∆W = 142 kHz y su factor de calidad Q = 0’93.

El pico en 18’7 kHz es, como antes he comentado, causado por la red de acoplo. Podría haber problemas con señales o ruidos de esta frecuencia pero afortunadamente el

3. Memoria de Cálculo.

76

pico es tan estrecho que sólo pasaría la señal senoidal a dicha frecuencia y esta es ignorada por el modem.

Gráfica 3-6. Filtro pasabanda sintonizado a 132 kHz , con R5 = 560 Ω, más la red de acoplo.

En la gráfica 3-7, se muestra el resultado de la simulación del circuito representado en la figura 3-3 con la R5 = 5’6 kΩ. El ancho de banda ∆W = 19’3 kHz y su factor de calidad Q = 6’8.

Gráfica 3-7. Filtro pasabanda sintonizado a 132 kHz , con R5 = 5’6 kΩ, más la red de acoplo.

En esta gráfica, el pico a 18’7 kHz es mucho más estrecho y como antes he comentado no ocasiona problemas en la comunicación.

3. Memoria de Cálculo.

77

3.3. Cálculo de la Velocidad Mínima Para las Tarjetas Nodo.

Como se especifica en el punto 2.7 de la memoria descriptiva, las tarjetas nodo se han implementado para poder utilizar un protocolo estándar, tipo Konnex de 38 bytes, como muestra la figura 2-12.

Teniendo en cuenta el caso más desfavorable, que sería la realización de una consulta cada medio segundo. Y que esta consulta consta de una trama de petición y otra trama de recepción. Los 38 bytes son 304 bits (con los bytes de 8 bits sin bit de paridad). En total para realizar una consulta cada medio segundo, se necesitan enviar 608 bits.

En la siguiente ecuación se calcula el valor necesario de la velocidad de transmisión.

Ecuación 3-2.

Como un modem funcionando a 1200 bps no seria suficiente, he escogido el ST7537HS1 que funciona a 2400 bps.

En la demo, he utilizado un protocolo de 3 bytes con un sistema de comunicación compuesto por una tarjeta nodo maestra y otra esclava. Con estos datos se puede muestrear, a los diferentes esclavos situados por toda la casa, cada 16 ms o cada 32 ms si se espera una respuesta.

3.4. Cálculo del Consumo de Potencia.

En este punto se justifica la utilización de de los reguladores de tensión LM7805 y el LM317 sin disipador.

Para estos cálculos siempre se tiene en cuenta, el caso más desfavorable, es decir el de mayor consumo. A continuación enunciaré el nombre de los dispositivos y su consumo, seguidamente realizaré los cálculos del sumatorio de consumo.

En le caso del HCPL-800J nos encontramos con dos consumos independientes, el consumo de la parte conectada a la red eléctrica, que en este caso, es una fuente de alimentación sin transformador, que llamo Vcc2. Y el otro consumo pertenece a la parte conectada con el modem, esta fuente la llamo Vcc 5+.

El consumo de la Vcc2 es de 56mA con una tensión de 5 V.

El consumo de la Vcc 5+ es de 28mA con una tensión de 5 V.

El ST 7537HS1 también tiene conectadas dos tensiones de valores diferentes, la primera es la que se utiliza para la parte digital, es la misma fuente que la del HCPL-800J, la Vcc 5+. La segunda es la tensión que se utiliza para la parte moduladora, la llamo Vcc 10+.

Los pines de salida tienen un valor máximo de 5mA. Como en mi caso hay 4 pines que están conectados a 4 leds, tendré en cuenta la suma de consumo de estos pines. 4 pines por 5mA es un total de 20mA.

El consumo de la Vcc 5+ es de 20mA con una tensión de 5 V.

bpsms

bitsseg1216

5006081

=⋅

3. Memoria de Cálculo.

78

El consumo de la Vcc10+ es de 30mA con una tensión de 10 V.

En último lugar tengo conectado el PIC18F252 conectado a la fuente Vcc 5+. A su consumo nominal le sumaré el consumo del PORT B, que tiene conectado una serie de leds que se utilizan para mostrar la información que se está transmitiendo (depende de la programación). El consumo nominal según el fabricante depende de los timers utilizados, de la frecuencia de trabajo y de muchos más parámetros, como este cálculo es aproximado, pondré el valor medio recomendado que es de 1.6mA. El valor máximo que puede entregar cada pin del PIC es de 25mA, los leds están diseñados para consumir 10mA. Si en el PORT B se encienden todos a la vez tenemos un consumo de 80mA. Para sobredimensionar estos cálculos consideraré 200mA.

Fuente Vcc2, fuente de alimentación sin transformador:

mALedmAJHCPLmA 5'59)(5'3)800(56 =+− Ecuación 3-3.

Fuente Vcc 10+, es el primer bloque de la fuente de alimentación con transformador a esta se le suma el consumo de la Vcc 5+ que es el segundo bloque:

Ecuación 3-4.

Ahora realizaré el cálculo de la potencia que disipan los reguladores.

Ecuación 3-5.

Ecuación 3-6.

Fuente Vcc2, fuente de alimentación sin transformador:

Ecuación 3-7.

Como ya había anunciado con anterioridad, el cálculo de disipadores para unas potencias tan pequeñas no es necesario. Los reguladores tienen un encapsulado del tipo TO-220, el rango de temperatura de trabajo esta entre 0 ºC y 125 ºC. De las hojas de características se puede deducir que su potencia sin disipador puede llegar a ser mayor a 1’67 Watios. El regulador que más se acerca es el que proporciona los 5 V para el microcontrolador, pero sin llegar a necesitar un disipador.

mALedmAFPICmA

VccHSSTmAVccHSSTmAJHCPLmA

1'283)(5'3)25218(6'201

)517537(30)1017537(20)800(28

=++

+−++−+−

( ) WatiosmAVVIVVccPot 849'01'2831013)10( =⋅−⇒⋅=+

( ) WatiosmAVVIVVccPot

mALedmAFPICmA

VccHSSTmAJHCPLmA

316'11'263510)5(

1'263)(5'3)25218(6'201

)517537(30)800(28

=⋅−⇒⋅=+

=+

+++−+−

( ) mWatiosmAVVIVVccPot 2555'5951'9)2( =⋅−⇒⋅=

3. Memoria de Cálculo.

79

Con estos cálculos también se justifica el uso de un transformador de 9 Voltios eficaces y 0’5 Amperios, porque se satisface con holgura el consumo de estas tarjetas.

La tarjeta de potencia únicamente tiene como consumo extra el amplificador operacional LM741 o el TL082, para utilizar en el detector de paso por cero, su consumo máximo es de 2’8 mA, que es muy soportable por la fuente de alimentación.

4. Planos.

4. Planos.

81

4.1. Esquema Electrónico de las Tarjetas Nodo.

4. Planos.

82

4.2. PCB de las Tarjetas de Control.

4.2.1. Botton.

4. Planos.

83

4.2.2. Top.

4. Planos.

84

4.3. Distribución de los Componentes.

4. Planos.

85

4.4. Esquema Electrónico de la Tarjeta de Potencia.

4. Planos.

86

4.5. PCB de la Tarjeta de Potencia.

4.5.1. Botton.

4. Planos.

87

4.6. Distribución de los Componentes.

5. Presupuesto.

5. Presupuesto.

89

5.1. Mediciones.

5.1.1. Elementos de las Tarjetas de Control.

Identificación Unidades Elemento Cantidad Largo Ancho Alto Total

TPxx unidad Regleta PCB 2 vias con paso de 5,08mm 3 3

Fuse1 unidad Fusible 630 mA 1 1 Fuse2 unidad Fusible 1A 1 1

L1 unidad Bobina de 330 uH 1 1 L2 unidad Bobina de 6,8 uH 1 1

L3, L4 unidad Bobina de 680 uH 2 2 L5 unidad Bobina 470 uH 1 1

C1, C5 unidad Condensador cerámico 1 uF 63 V 2 2

C2 X2 unidad Condensador tipo X2 polipropileno 220nF 250 V 1 1

C3, C4 unidad Condensador cerámico 2,2 nF 63 V 2 2

C14, C15 unidad Condensador electrolítico 2,2 uF 16 V 2 2

C16, C24, C25 unidad Condensador electrolítico 10

uF 16 V 3 3

C2, C10 unidad Condensador cerámico 22 nF 63 V 2 2

C6, C7,C8, C9, C11, C12,

C13, C17, C20, C23, C26, C27,

C33

unidad Condensador cerámico 100 nF 63 V 13 13

C19 unidad Condensador electrolítico 1000 uF 16 V

C18 unidad Condensador tipo X2 polipropileno 1,5uF 250 V 1 1

C21 unidad Condensador electrolítico 4700 uF 16 V

C22, C29, C30, C31,

C32 unidad Condensador electrolítico 1

uF 16 V 5 5

R1 unidad Resistencia de carbón 47 kΩ, 5%, 1/4 W

1 1

R2 unidad Resistencia de carbón 5 kΩ, 1%, 1/4 W

1 1

R4 unidad Resistencia de carbón 24 kΩ, 5%, 1/4 W

1 1

R5 unidad Resistencia de carbón 2 Ω, 5%, 1/4 W

1 1

R6, R7 unidad Resistencia de carbón 560 Ω, 5%, 1/4 W

2 2

5. Presupuesto.

90

R3, R8, R9, R10, R11, R12, R13, R16, R17, R18, R19, R24, R29, R30, R31, R32, R33, R34, R44, R46, R47,

R48

unidad Resistencia de carbón 10 kΩ , 5%, 1/4 W

11 11

R14 unidad Potenciómetro multivuelta de 1kΩ.

1 1

R15 unidad Resistencia de carbón 10 kΩ, 1%, 1/4 W

1 1

R20 unidad Resistencia de carbón 220

kΩ, 5%, 1/4 W 1 1

R21 unidad Resistencia de carbón 220 Ω, 5%, 1/4 W

1 1

R22 unidad Potenciómetro de 5 kΩ. 1 1 R23, R25, R26, R27,

R28 unidad Potenciómetro multivuelta de

10kΩ. 5 5

R35, R36, R37, R38, R39, R40, R41, R42,

unidad Resistencia SMD 2512 330 Ω, 5%, 1W

8 8

R43 unidad Resistencia de carbón 100 Ω, 5%, 1/4 W

1 1

R45, R49 unidad Resistencia de carbón 1 kΩ, 5%, 1/4 W

1 1

R50 unidad Resistencia de carbón 4,7 kΩ, 5%, 1/4 W 1 1

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J13

unidad Terminal de pines paso 2,54 mm. 36 vías, fila simple. 1 1

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J14

unidad Jumpers de paso 2,54 mm 20 20

J19, J21, J22, J23 unidad Micropulsador PCB 4 4

D7, D8, D9, D10 unidad Diodo led 3mm color amarillo 4 4

D12, D13, D14, D15, D16,D17, D18, D18

unidad Diodo led 3mm color rojo 8 8

D21, D22 unidad Diodo led 3mm color blanco 2 2

5. Presupuesto.

91

D6, D20 unidad Diodos rápidos 1N4148 2 2 Q1 unidad Transistor NPN BC108 1 1 Bus

expansión unidad Terminal recto PCB 4 vías (hembra) 3 3

Bus expansión,

J17 unidad Terminal recto PCB 2 vías

(hembra) 2 2

D23, D24 unidad Puente rectificador Fagor B80 C1500/1000 2 2

Z1 unidad Diodo zener de 9'1 V, 1 W 1 1 J27 unidad Terminal RJ11 1 1 J6 unidad Terminal DB-9 (Hembra) 1 1 U1 unidad HCPL-800J 1 1 U2 unidad ST7537HS1 1 1

U4, U6 unidad LM7805 2 2 U5 unidad LM317 1 1 U7 unidad PIC18F252 1 1 U9 unidad MAX232CPE 1 1

11 MEG unidad Cristal de cuarzo de 11,0592 MHz 1 1

Varsil 6,8 V unidad Transil P6KE6V8CP 1 1 Varistor1 unidad Varistor de 320 Voltios 1 1

unidad Transformador 9 V eficaz 0'5 Amp 1 1

unidad Zocalo PLCC 28 1 1 unidad Zócalo DIP 16 1 1 unidad Portafusibles 2 2

mm

Placa de fibra de vidrio con superficie de cobre.

Fotosensible positiva de doble cara.

1 130 160 2,5 1

unidad Micropulsador PCB 6 6

unidad Terminal recto PCB 10 vías (macho) 1 1

unidad Terminal recto PCB 10 vías (hembra) 1 1

unidad Terminal recto PCB 4 vías (macho) 2 2

unidad Terminal recto PCB 2 vías (macho) 1 1

mm Placa externa de topos 1 30 80 1 1

5.1.2. Elementos de la Tarjeta de Potencia.

Identificación Unidades Elemento Cantidad Largo Ancho Alto Total

TPxx unidad Regleta PCB 2 vías con paso de 5,08mm 8 8

C1, C2, C3 unidad Condensdador de políester 56 nF 250 V 3 3

R1, R2, R3 unidad Resistencia de carbón 330 Ω , 5%, 1/4 W 3 3

R4, R6, R8 unidad Resistencia de carbón 360 Ω , 5%, 1/4 W 3 3

5. Presupuesto.

92

R5, R7, R9 unidad Resistencia de carbón 470 Ω , 5%, 1/4 W 3 3

R10, R11 unidad Resistencia de carbón 470 kΩ , 5%, 1/4 W 2 2

R13 unidad Potenciómetro de 10 kΩ. 1 1

R1 unidad Resistencia de carbón 47 kΩ , 5%, 1/4 W

1 1

X1, X2, X3 unidad Triac BTA06-600 3 3 LS1,LS2 unidad Relé DCPO 5 Vdc 8A 2 2 Q1, Q2 unidad Transistor NPN BC108 2 2

U1 unidad C.I. LM741 1 1 U1, U2, U3 unidad Optoacoplador MOC3020 3 3

PR1 unidad Puente rectificador B40 C1000 1 1 SW1, SW2 unidad Micropulsador PCB 2 2

Bus expansión unidad Terminal recto PCB 4 vías 2 2

Bus expansión unidad Terminal recto PCB 2 vías 1 1

mm

Placa de fibra de vidrio con superficie de cobre. Fotosensible positiva de una cara de 100 x 120

mm

1 120 100 2,5 1

5.2. Cuadro de Precios.

5.2.1. Elementos de las Tarjetas de Control.

Identificación Unidades Elemento Precio unitario

TPxx unidad Regleta PCB 2 vias con paso de 5,08mm 0,73 €

Fuse1 unidad Fusible 630 mA 0,60 € Fuse2 unidad Fusible 1A 0,44 €

L1, L2, L3, L4 unidad Bobinas de uH 1 € L5 unidad Bobina 470 uH (120mA) 1,72 €

C1, C5 unidad Condensador cerámico 1 uF 63 V 0,38 €

C2 X2 unidad Condensador tipo X2 polipropileno 220nF 250 V 0,68 €

C3, C4 unidad Condensador cerámico 2,2 nF 63 V 0,10 € C14, C15, C16, C24,

C25 unidad Condensador electrolítico xx uF 16 V 0,17 €

C2, C10 unidad Condensador cerámico 22 nF 63 V 0,30 €

C6, C7,C8, C9, C11, C12,

C13, C17, C20, C23, C26, C27,

C33

unidad Condensador cerámico 100 nF 63 V 0,35 €

C19 unidad Condensador electrolítico 1000 uF 16 V 0,52 €

5. Presupuesto.

93

C18 unidad Condensador tipo X2 polipropileno 1,5uF 250 V 1,07 €

C21 unidad Condensador electrolítico 4700 uF 16 V 1,60 €

C22, C29, C30, C31,

C32 unidad Condensador electrolítico 1 uF 16 V 0,17 €

R1, R3, R4, R5, R6, R7, R8, R9, R10,

R11, R12, R13, R16, R17, R18, R19, R20, R21, R24, R29, R30, R31, R32, R33, R34, R43, R44, R45, R46, R47, R48, R49, R50

unidad Resistencia de carbón, 5%, 1/4 W 0,02 €

R14 unidad Potenciómetro multivuelta de 1kΩ. 1,00 € R2, R15 unidad Resistencia de carbón, 1%, 1/4 W 0,05 €

R22 unidad Potenciómetro de 5 kΩ. 0,40 € R23, R25, R26, R27,

R28 unidad Potenciómetro multivuelta de 10kΩ. 1,00 €

R35, R36, R37, R38, R39, R40, R41, R42,

unidad Resistencia SMD 2512 330 Ω, 5%, 1W 0,32 €

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J13

unidad Terminal de pines paso 2,54 mm. 36 vias, fila simple. 2,20 €

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J14

unidad Jumpers de paso 2,54 mm 0,09 €

J19, J21, J22, J23 unidad Micropulsador PCB 0,23 €

D7, D8, D9, D10, D12, D13, D14,

D15, D16,D17, D18, D18, D21, D22

unidad Diodo led 3mm color rojo 0,15 €

D6, D20 unidad Diodos rápidos 1N4148 0,04 € Q1 unidad Transistor NPN BC108 0,43 €

5. Presupuesto.

94

Bus expansión unidad Terminal recto PCB 4 vias (hembra) 0,63 €

Bus expansión,

J17 unidad Terminal recto PCB 2 vias (hembra) 0,42 €

J4,J5 unidad Puente rectificador Fagor B80 C1500/1000 1,25 €

Z1 unidad Diodo zener de 9'1 V, 1 W 0,15 € J27 unidad Terminal RJ11 2,35 € J6 unidad Terminal DB-9 (Hembra) 1,43 € U1 unidad HCPL-800J 2,80 € U2 unidad ST7537HS1 13,11 €

U4, U6 unidad LM7805 0,46 € U5 unidad LM317 0,52 € U7 unidad PIC18F252 10,32 € U9 unidad MAX232CPE 2,67 €

11 MEG unidad Cristal de cuarzo de 11,0592 MHz 0,47 € Varsil 6,8 V unidad Transil P6KE6V8CP 0,67 €

Varistor1 unidad Varistor de 320 Voltios 1,70 € unidad Transformador 9 V eficaz 0'5 Amp 5,84 € unidad Zocalo PLCC 28 0,88 € unidad Zócalo DIP 16 0,50 € unidad Portafusibles 1,50 €

unidad Placa de fibra de vidrio con superficie

de cobre. Fotosensible positiva de doble cara de 130 x 160 mm

10,00 €

unidad Cables y tornilleria 3,00 € unidad Micropulsador PCB 0,23 € unidad Terminal recto PCB 10 vias (macho) 1,20 € unidad Terminal recto PCB 10 vias (hembra) 1,20 € unidad Terminal recto PCB 4 vias (macho) 0,63 € unidad Terminal recto PCB 2 vias (macho) 0,42 € unidad Placa externa de topos de 30 x 80 mm 1,00 €

5.2.2. Elementos de la Tarjeta de Potencia.

Identificación Unidades Elemento Precio unitario

TPxx unidad Regleta PCB 2 vías con paso de 5,08mm 0,73 € C1, C2, C3 unidad Condensador de poliéster 56 nF 250 V 0,48 € R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11

unidad Resistencia de carbón, 5%, 1/4 W 0,02 €

R13 unidad Potenciómetro de 10 kΩ. 0,40 € X1, X2, X3 unidad Triac BTA06-600 1,47 € LS1,LS2 unidad Relé DCPO 5 Vdc 8A 3,57 € Q1, Q2 unidad Transistor NPN BC108 0,43 €

U1 unidad C.I. LM741 0,40 € U1, U2, U3 unidad Optoacoplador MOC3020 1,03 €

PR1 unidad Puente rectificador B40 C1000 0,60 € SW1, SW2 unidad Micropulsador PCB 0,23 €

5. Presupuesto.

95

Bus expansión unidad Terminal recto PCB 4 vías 0,63 €

Bus expansión unidad Terminal recto PCB 2 vías 0,42 €

unidad Placa de fibra de vidrio con superficie de cobre. Fotosensible positiva de una cara

de 100 x 120 mm 3,00 €

unidad Cables y tornillería 3,00 €

5.3. Presupuesto.

5.3.1. Elementos de la Tarjeta de Control.

Identificación Elemento Unidades Cantidad Precio unitario

Total parcial

TPxx Regleta PCB 2 vías con paso de 5,08mm unidad 3 0,73 € 2,19 €

Fuse1 Fusible 630 mA unidad 1 0,60 € 0,60 € Fuse2 Fusible 1A unidad 1 0,44 € 0,44 €

L1 Bobina de 330 uH unidad 1 1 € 1 € L2 Bobina de 6,8 uH unidad 1 1 € 1 €

L3, L4 Bobina de 680 uH unidad 2 1 € 2 € L5 Bobina 470 uH (120mA) unidad 1 1,72 € 1,72 €

C1, C5 Condensador cerámico 1 uF 63 V unidad 2 0,38 € 0,76 €

C2 X2 Condensador tipo X2 de polipropileno de 220nF 250 V unidad 1 0,68 € 0,68 €

C3, C4 Condensador cerámico 2,2 nF 63 V unidad 2 0,10 € 0,20 € C14, C15 Condensador electrolítico 2,2 uF 16 V unidad 2 0,17 € 0,34 € C16, C24,

C25 Condensador electrolítico 10 uF 16 V unidad 3 0,17 € 0,51 €

C2, C10 Condensador cerámico 22 nF 63 V unidad 2 0,30 € 0,60 €

C6, C7,C8, C9, C11, C12,

C13, C17, C20, C23, C26, C27,

C33

Condensador cerámico 100 nF 63 V unidad 13 0,35 € 4,55 €

C19 Condensador electrolítico 1000 uF 16 V unidad 0,52 € 0,00 €

C18 Condensador tipo X2 de polipropileno de 1,5uF 250 V unidad 1 1,07 € 1,07 €

C21 Condensador electrolítico 4700 uF 16 V unidad 1,60 € 0,00 €

C22, C29, C30, C31,

C32 Condensador electrolítico 1 uF 16 V unidad 5 0,17 € 0,85 €

R1 Resistencia de carbón 47 kΩ , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

R2 Resistencia de carbón 5 kΩ , 1%, 1/4 W

unidad 1 0,05 € 0,05 €

R4 Resistencia de carbón 24 kΩ , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

5. Presupuesto.

96

R5 Resistencia de carbón 2 Ω , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

R6, R7 Resistencia de carbón 560 Ω , 5%, 1/4 W

unidad 2 0,02 € 0,04 €

R3, R8, R9, R10, R11, R12, R13, R16, R17, R18, R19, R24, R29, R30, R31, R32, R33, R34, R44, R46, R47,

R48

Resistencia de carbón 10 kΩ , 5%, 1/4 W

unidad 11 0,02 € 0,22 €

R14 Potenciómetro multivuelta de 1kΩ. unidad 1 1,00 € 1,00 €

R15 Resistencia de carbón 10 kΩ , 1%, 1/4 W

unidad 1 0,05 € 0,05 €

R20 Resistencia de carbón 220 kΩ , 5%, 1/4 W unidad 1 0,02 € 0,02 €

R21 Resistencia de carbón 220 Ω , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

R22 Potenciómetro de 5 kΩ. unidad 1 0,40 € 0,40 € R23, R25, R26, R27,

R28 Potenciómetro multivuelta de 10kΩ. unidad 5 1,00 € 5,00 €

R35, R36, R37, R38, R39, R40, R41, R42,

Resistencia SMD 2512 330 Ω, 5%, 1W

unidad 8 0,32 € 2,56 €

R43 Resistencia de carbón 100 Ω , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

R45, R49 Resistencia de carbón 1 kΩ, 5%, 1/4 W

unidad 1 0,02 € 0,02 €

R50 Resistencia de carbón 4,7 kΩ , 5%, 1/4 W

unidad 1 0,02 € 0,02 €

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J13

Terminal de pines paso 2,54 mm. 36 vías, fila simple. unidad 1 2,20 € 2,20 €

J1, J2, J3, J8, J9, J18, J20,

J24, J25, J26, J10, J11, J12,

J14

Jumpers de paso 2,54 mm unidad 20 0,09 € 1,70 €

J19, J21, J22, J23 Micro pulsador PCB unidad 4 0,23 € 0,92 €

D7, D8, D9, D10 Diodo led 3mm color amarillo unidad 4 0,15 € 0,60 €

5. Presupuesto.

97

D12, D13, D14, D15, D16,D17, D18, D18

Diodo led 3mm color rojo unidad 8 0,15 € 1,20 €

D21, D22 Diodo led 3mm color blanco unidad 2 0,15 € 0,30 € D6, D20 Diodos rápidos 1N4148 unidad 2 0,04 € 0,08 €

Q1 Transistor NPN BC108 unidad 1 0,43 € 0,43 € Bus

expansión Terminal recto PCB 4 vías (hembra) unidad 3 0,63 € 1,89 €

Bus expansión,

J17 Terminal recto PCB 2 vías (hembra) unidad 2 0,42 € 0,84 €

J4,J5 Puente rectificador Fagor B80 C1500/1000 unidad 2 1,25 € 2,50 €

Z1 Diodo zener de 9'1 V, 1 W unidad 1 0,15 € 0,15 € J27 Terminal RJ11 unidad 1 2,35 € 2,35 € J6 Terminal DB-9 (Hembra) unidad 1 1,43 € 1,43 € U1 HCPL-800J unidad 1 2,80 € 2,80 € U2 ST7537HS1 unidad 1 13,11 € 13,11 €

U4, U6 LM7805 unidad 2 0,46 € 0,92 € U5 LM317 unidad 1 0,52 € 0,52 € U7 PIC18F252 unidad 1 10,32 € 10,32 € U9 MAX232CPE unidad 1 2,67 € 2,67 €

11 MEG Cristal de cuarzo de 11,0592 MHz unidad 1 0,47 € 0,47 € Varsil 6,8 V Transil P6KE6V8CP unidad 1 0,67 € 0,67 €

Varistor1 Varistor de 320 Voltios unidad 1 1,70 € 1,70 € Transformador 9 V eficaz 0'5 Amp unidad 1 5,84 € 5,84 € Zocalo PLCC 28 unidad 1 0,88 € 0,88 € Zócalo DIP 16 unidad 1 0,50 € 0,50 € Portafusibles unidad 2 1,50 € 3,00 €

Placa de fibra de vidrio con superficie

de cobre. Fotosensible positiva de doble cara de 130 x 160 mm

unidad 1 10,00 € 10,00 €

Cables y tornillería unidad 1 3,00 € 3,00 € Micro pulsador PCB unidad 6 0,23 € 1,38 € Terminal recto PCB 10 vías (macho) unidad 1 1,20 € 1,20 € Terminal recto PCB 10 vías (hembra) unidad 1 1,20 € 1,20 € Terminal recto PCB 4 vías (macho) unidad 2 0,63 € 1,26 € Terminal recto PCB 2 vías (macho) unidad 1 0,42 € 0,42 €

Placa externa de topos de 30 x 80 mm unidad 1 1,00 € 1,00 €

TOTAL 107,47 €

5.3.2. Elementos de la Tarjeta de Potencia.

Identificación Elemento Unidades Cantidad Precio unitario

Total parcial

TPxx Regleta PCB 2 vías con paso de 5,08mm unidad 8 0,73 € 5,84 € C1, C2, C3 Condensdador de políester 56 nF 250 V unidad 3 0,48 € 1,44 € R1, R2, R3 Resistencia de carbón 330 Ω , 5%, 1/4 W unidad 3 0,02 € 0,06 €

5. Presupuesto.

98

R4, R6, R8 Resistencia de carbón 360 Ω , 5%, 1/4 W unidad 3 0,02 € 0,06 € R5, R7, R9 Resistencia de carbón 470 Ω , 5%, 1/4 W unidad 3 0,02 € 0,06 €

R10, R11 Resistencia de carbón 470 kΩ , 5%, 1/4 W

unidad 2 0,02 € 0,04 €

R13 Potenciómetro de 10 kΩ. unidad 1 0,40 € 0,40 € R1 Resistencia de carbón 47 kΩ , 5%, 1/4 W unidad 1 0,02 € 0,02 €

X1, X2, X3 Triac BTA06-600 unidad 3 1,47 € 4,41 € LS1,LS2 Relé DCPO 5 Vdc 8A unidad 2 3,57 € 7,14 € Q1, Q2 Transistor NPN BC108 unidad 2 0,43 € 0,86 €

U1 C.I. LM741 unidad 1 0,40 € 0,40 € U1, U2, U3 Optoacoplador MOC3020 unidad 3 1,03 € 3,09 €

PR1 Puente rectificador B40 C1000 unidad 1 0,60 € 0,60 € SW1, SW2 Micropulsador PCB unidad 2 0,23 € 0,46 €

Bus expansión Terminal recto PCB 4 vías unidad 2 0,63 € 1,26 €

Bus expansión Terminal recto PCB 2 vías unidad 1 0,42 € 0,42 €

Placa de fibra de vidrio con superficie de cobre. Fotosensible positiva de una cara

de 100 x 120 mm unidad 1 3,00 € 3,00 €

Cables y tornillería unidad 1 3,00 € 3,00 € TOTAL 32,56 €

5.3.3. Diseño, Montaje y Programación.

Elemento Unidades Cantidad Precio unitario

Total parcial

Diseño de las tarjetas nodo. hora 65 15,00 € 975,00 € Diseño de la tarjeta de potencia. hora 15 15,00 € 225,00 €

Montaje de las tarjetas nodo. hora 24 15,00 € 360,00 € Montaje de la tarjeta de potencia. hora 8 15,00 € 120,00 €

Programación de las tarjetas nodo. hora 80 15,00 € 1.200,00 € TOTAL 2.880,00 €

5. Presupuesto.

99

5.4. Resumen del Presupuesto.

Elementos de la tarjeta nodo (Maestro) 107,47 €

Elementos de la tarjeta nodo (Esclavo) 107,47 €

Elementos de la tarjeta de potencia 32,56 €

Diseño, montaje y programación 2.880,00 € Presupuesto Ejecución Material 3.127,50 € Beneficio Industrial (6%) 187,65 € Gatos generales (13%) 406,58 € Presupuesto Ejecución Contrato 3.721,73 € I.V.A. (16%) 595,48 €

PRESUPUESTO DE LICITACIÓN 4.317,20 €

El presupuesto de la licitación del proyecto implementación de una tarjeta nodo para la automatización parcial de una vivienda vía red eléctrica, asciende a cuatro mil trescientos diecisiete euros con veinte céntimos.

Tarragona a 15 de Octubre del 2004

Ingeniero Técnico Industrial

Víctor Manuel Carayol Martínez.

Nº de Colegiado: E171T

Firma:

6. Resultados y Conclusiones.

6. Resultados y Conclusiones.

101

6.1. Resultados.

En este apartado muestro el resultado de las pruebas de campo realizadas. He realizado dos tipos de pruebas, la primera sin utilizar la tarjeta de potencia y una trama larga y la segunda con la tarjeta de potencia y la trama de tres bytes, utilizada en la demostración.

Para realizar la primera prueba he programado un vector con 50 bytes, este vector lo envía la tarjeta nodo maestro y la tarjeta nodo esclavo comprueba la recepción correcta de cada uno de los bytes de este vector, comparándolos con el mismo vector que ésta tiene. El nodo esclavo tiene un contador que se inicializa al principio de la recepción de trama, éste se encarga de contar el número de bytes mal recibidos. Al finalizar la trama muestra este número por los leds del PORTB, de los que dispone la tarjeta y pasados 200 ms (esta trama dura 174 ms), se envía el byte al nodo maestro, éste también lo muestra por los leds.

En la segunda prueba, he utilizado el programa de demostración haciendo que cuando el nodo esclavo recibe un byte, envía al nodo maestro un comando de trama correcta o trama incorrecta, que se envía una vez comprobado el checksum.

Todas las pruebas han sido realizadas en distintos lugares, en diversos rangos horarios y de forma repetida, para garantizar que la muestra es fiable.

Las tablas, resumen las pruebas hechas con los filtros escogidos. La tabla 6-1, es la que representa el filtro escogido, con una R5 = 560 Ω. En el laboratorio la tasa de fallos comienza a ser elevada a una distancia de 10 metros, en las aulas al igual que en la biblioteca, la distancia máxima esta en 50, en cambio en casa (objetivo de este proyecto) La distancia puede ser superior a 100 metros.

Laboratorios Aulas Biblioteca Casa 3 m 99% 99% 99% 99% 10 m 75% 99% 99% 99% 20 m 50% 99% 99% 99% 30 m 0% 99% 99% 99% 50 m - 80% 80% 97% 75 m - - - 92% 100 m - - - 90%

Tabla 6-1. Porcentaje de aciertos con el filtro de R5 = 560 Ω.

En la tabla 6-2, se resumen las pruebas hechas con el filtro de R5 = 5’6 kΩ, como puede observarse, la distancia de comunicación no aumenta sino que por lo contrario, disminuye de forma drástica (ejemplo claro en casa). La única mejora es la tasa de aciertos, que es muy superior al anterior.

Laboratorios Aulas Biblioteca Casa 3 m 99% 99% 99% 99%

10 m 99% 99% 99% 99% 20 m 90% 99% 99% 99% 30 m 0% 50% 50% 50% 50 m - 0% 0% 0% 75 m - - - 0%

100 m - - - 0%

Tabla 6-2. Porcentaje de aciertos con el filtro de R5 = 5’6 kΩ.

6. Resultados y Conclusiones.

102

De alguna forma se podría pensar que el filtro con R5 = 5’6 kΩ, es el más óptimo en un ambiente ruidoso. Pero cabe destacar que implementando un protocolo, que espere la respuesta a su mensaje inicial y se asegure de que el mensaje esta bien recibido, la tasa de fallos pierde valor frente a la poca distancia en la comunicación consiguida.

En la gráfica 6-1, puede apreciarse la señal que se inyecta en la red (Salida de Tx). La amplitud de la señal de salida es aproximadamente de unos 4 Vpp (Voltios pico a pico), se han capturado unos 100 µs, que es la cuarta parte de un bit modulado, en este caso es un ‘1’ lógico porque la frecuencia es de 131’85 kHz.

Puede observarse que la señal no está centrada en el cero sino que hace la forma de una senoide de 50 Hz; más concretamente, 100 µs de los 10 ms de la parte positiva de la onda senoidal.

Gráfica 6-1. Señal inyectada en la red eléctrica (salida Tx).

En la gráfica 6-2 representa la señal que recibe el HCPL-800J, después de los filtros pasivos, en el pin de entrada Rx. Se puede ver la trama que dura 17 ms, 7 ms de estabilización del modem más 10 ms de la trama formada por 3 bytes.

Con más detalle se aprecia la captura de 100 µs, en este caso también es un cuarto de un bit modulado y un ‘1’ lógico porque la frecuencia es de 131’85 kHz.

Destaco que la señal inyectada es de 4 Vpp aproximados, en cambio la recibida a escasos 3 metros es de unos 3’5 Vpp.

6. Resultados y Conclusiones.

103

Gráfica 6-2. Señal recibida de la red eléctrica después del filtro (entrada Rx).

En la gráfica 6-3, se representa la trama que recibe el microcontrolador (pin Tx), la salida del modem. Cabe destacar la claridad de la señal, que indica el correcto diseño de la placa para evitar interferencias externas, de la red eléctrica, del transformador y otros.

En esta gráfica se puede apreciar la forma de enviar bytes que tiene el PIC18F252, el primer byte es un ‘0x01’ (Nombre del esclavo), el segundo el comando, concretamente ‘0x00’ y el tercero el checksum (0x01 + 0x00 = 0x01). Como se ve en la gráfica, la secuencia de envío de la UART es: primero bit start ‘0’, luego el bit menos significativo del byte, en este caso un ‘1’, posteriormente el resto de bits hasta llegar al bit más significativo, en este caso todo son ceros, finalmente el bit stop ‘1’.

6. Resultados y Conclusiones.

104

Gráfica 6-3. Señal recibida en la UART del microcontrolador.

6.2. Conclusiones.

Con todo lo mostrado hasta este punto, se puede decir con absoluta seguridad que se ha creado una tarjeta nodo para la automatización de una vivienda, vía red eléctrica, con un alcance superior a los 100 metros, una gran fiabilidad y con gran capacidad para controlar y regular dispositivos a lo largo de toda la casa.

En lugares con un nivel de ruido alto, tipo industrial, como los laboratorios o las empresas con grandes maquinarias, no se aconseja utilizar estas tarjetas nodo. En caso de utilizarse se debe poner el filtro con la R5 = 5’6 kΩ y no superar distancias mayores de 25 metros.

Para la demostración se ha utilizado un sistema centralizado, con una tarjeta nodo maestro y una tarjeta nodo esclavo. Un protocolo formado por 3 bytes, utilizando un protocolo de acceso CSMA (Carrier-sense multiple-access), necesario para cumplir la norma (UNE-EN 50065-1).

En cuanto al software en futuras implementaciones se recomienda utilizar un protocolo del tipo Konnex, con 32 bytes, y aviso de recepción correcta para mejorar el rendimiento en la comunicación y asegurar la compatibilidad. Utilizando este protocolo el sistema puede ser totalmente descentralizado.

7. Pliego de condiciones.

7. Pliego de Condiciones.

106

7.1. Condiciones Técnicas.

7.1.1. Generalidades.

Para una correcta realización del montaje, deben tenerse en cuenta una serie de puntos, destacando el orden en que estos se desarrollan.

1- Encargo y compra de materiales y componentes necesarios.

2- Construcción de los inductores.

3- Fabricación de las placas de circuito impreso.

4- Montaje de los componentes en las placas fabricadas anteriormente.

5- Ajuste y comprobación de los parámetros par aun correcto funcionamiento.

6- Puesta en marcha del equipo.

7- Controles de calidad y de fiabilidad.

Todas estas partes, que en su conjunto forman la obra, deberán ser ejecutada por montadores que se someterán a las normas y reglas que la comunidad autónoma, país o comunidades internacionales tenga previstas para este tipo de montajes, no haciéndose así cargo el proyectista de los desperfectos ocasionados por su incumpliendo.

7.1.2. Resistencias.

Las resistencias serán de los valores óhmicos especificados. Todas las resistencias serán de ¼ W y con una tolerancia del 5% excepto las fijadas en los planos que lo indiquen de otra forma. Las pruebas a realizar en todas ellas son:

- Medidas de valores de tolerancia.

- Medidas de disipación y voltaje.

Estas pruebas se clasificaran:

- Potencia nominal

- Resistencias ajustables.

- Potenciometros.

La medida de los valores de resistencia y tolerancia se extenderán a todas las resistencias y todas tendrán que mantener su tolerancia dentro de unos limites comprendidos entre el 0’5 y el 5% según el tipo a que correspondan.

Las medidas de potencia se realizaran sometiendo a las resistencias a tensiones adecuadas para que su disipación sea la que indica el fabricante.

Se someterán a estas tensiones durante un tiempo de 6 horas para que permita verse con diferencia su variación de resistencia a lo largo del tiempo.

7. Pliego de Condiciones.

107

7.1.3. Condensadores.

Todos los condensadores serán de los valores capacitivos especificados en los planos. Su tensión máxima también se especifica en los planos.

Los condensadores electrolíticos serán de montaje vertical o horizontal según las especificaciones de los planos. Es necesario pone especial atención en no invertir la polaridad en el momento de montarlos.

La capacidad no nominal es la especificada por el fabricante y marca sobre el cuerpo del componente, mediante un código de colores (similar al empreado para el marcaje de resistores). También puede estar marcada una cifra y la letra de unidades (p para picofaradios, n para nanofaradios, µ para microfaradios y m para milifaradios).

Cada valor nominal ha de llevar asociada una tolerancia, que se marca mediante un color o mediante una segunda letra. Además suele marcar también la tensión nominal, y en el caso de condensadores cerámicos con coeficiente de temperatura establecido, el coeficiente de temperatura, ya sea con una franja de color o con una letra.

La elección del tipo de condensador a utilizar es también un punto a tener muy en cuenta en el montaje de un equipo de potencia. El mercado de este tipo de componente electrónico es muy amplio, existen así un amplio abanico de donde elegir.

Lo tipos de condensador más utilizados son los cerámicos y electrolíticos.

Condensadores cerámicos: Los materiales cerámicos son buenos aislantes térmicos y eléctricos. El proceso de fabricación consiste básicamente en la metalización de las dos caras del material cerámico. Se fabrican de 1pF a 1nF (grupo I) y de 1pF a 470nF (grupo II) con tensiones comprendidas entre 3 y 10000V. Su identificación se realiza mediante código alfanumérico. Se utilizan en circuitos que necesitan alta estabilidad y bajas pérdidas en altas frecuencias.

Condensadores electrolíticos: Pueden ser de aluminio, de tántalo, y su principal diferencia con los anteriores, es la apariencia física, las dimensiones de éstos no son demasiado elevadas incluso para grandes capacidades. Uno de los inconvenientes que presenta es que la resistencia serie que presentan es bastante elevada, con lo que las pérdidas e disparan, reduciéndose así considerablemente la vida media de este tipo de condensadores.

7.1.4. Inductores.

Todos los Inductores serán de los valores especificados en los planos o en su defecto, modelos equivalentes.

Su Intensidad máxima también se especifica en los planos, en caso contrario no será superior a 100mA.

7. Pliego de Condiciones.

108

7.1.5. Transistores y Diodos.

Los transistores y diodos utilizados serán los especificados en los planos, o en su defecto, modelos equivalentes.

Se verificaran estas condiciones conforme a las medidas siguientes:

- Medidas de los valores límites.

- Medidas de los parámetros de trabajo.

Las medidas de las tensiones, corrientes y potencias, se harán mediante un montaje de prueba que facilite y permita suministrar en cada caso y a cada uno de los transistores, las tensiones deseadas y disponiendo así de aparatos de medida de tensiones y corrientes que nos permitan controlar en cada momento las tensiones y corrientes que circulan por los transistores.

Si durante alguna de las pruebas realizadas resultara dañado algún componente, sin haber sobrepasado los límites específicos y los daños de fuesen de carácter permanente, no implica ningún tipo de compromiso por la firma en cuestión, siendo responsabilidad enteramente de la empresa o casa adjudicada.

7.1.6. Placas de Circuito Impreso.

Las placas de circuito impreso tendrán que tener aislamiento superficial igual o superior a 10M y serán de fibra de vidrio presensibilizadas positivamente, una a una cara y dos a doble cara.

Las dimensiones serán las necesarias para que puedan contenerse los esquemas.

La hoja de cobre tiene que tener un grosor normalizado de 0’075 mm para pistas de señal y de 0’76mm para las de potencia.

La separación mínima de pistas será de 1’14 mm, siempre que sea posible, mientras que los agujeros se harán con una broca de 1mm o inferior.

La realización de los circuitos impresos se realizará a partir de los planos, respectando estrictamente el diseño de las pistas.

Los conectores encargados de realizar las conexiones entre el exterior y las placas, así como las conexiones entre ellas, se revisaran para garantizar el correcto contacto con las placas y se imprimirán una serie de indicadores para su correcta colocación.

Una vez soldados los componentes y comprobados, se le aplicará una capa de barniz especial para evitar la posible oxidación del cobre con el paso del tiempo.

7. Pliego de Condiciones.

109

7.1.7. Reglamento de Baja Tensión.

Este reglamento dispone de unas normas necesarias en su cumplimiento, y que está relacionado con los aspectos técnicos a la hora de realizar el montaje. Las normas esenciales que el presente proyecto requiere son las que se presentan a continuación.

M.I.B.T. 017: Instalaciones interiores o receptores. Prescripciones de carácter general.

M.I.BT. 029: Instalaciones para tensiones pequeñas.

M.I.B.T. 030: Instalaciones para tensiones especiales.

M.I.B.T. 031: Receptores. Prescripciones generales.

M.I.B.T. 035: Receptores. Transformadores y autotransformadores. Reactancias y rectificadores . Condensadores.

M.I.B.T. 044: Normas U.N.E. de obligado cumplimiento.

7.1.8. Especificaciones Mecánicas.

Los requerimientos mecánicos en el montaje del prototipo son un punto muy a tener en cuenta para una correcta ejecución, siendo necesarias unas ciertas calidades den los materiales con el fin de que la solidez mecánica sea aceptable.

La mayoría de los componentes presentan una sujeción estable por soldadura directamente con la placa. Sin embargo, los circuitos impresos se insertan en la placa mediante zócalos (en algunos casos de doble cara) con el claro objetivo de realizar sustituciones de los integrados con una cierta facilidad, ya sea porque se ha dañado o porque se quieren realizar otras pruebas.

7.1.9. Interface.

El puerto serie del PC debe contar con un conector Sub-D9 macho, o en su defecto un conector Sub-D25 macho. Para el último caso será responsabilidad del usuario el proveerse con un adaptador Sub-D25/Sub-D9.

El puerto serie debe cumplir con el estándar RS-232C, proporcionando tensiones a partir de -12 V para el valor lógico “0” y tensiones a partir de +12 V para el valor lógico “1”.

La tina de corriente a la que se conecta el dispositivo maestro debe estar contenida en la red general donde se conecten el resto de dispositivos de red.

7. Pliego de Condiciones.

110

7.1.10. Suministro.

Se debe comprobar la regulación de línea del sistema de alimentación mediante red eléctrica convencional, para que se asegure una aportación de 5V y 10V. Los elementos pasivos de seguridad deben estar homologados y probados (los que puedan usarse repetidamente).

El suministro eléctrico debe ser regular y no sufrir constantes variaciones de tensión en la red eléctrica, de ser así el responsable de los desperfectos será la compañía suministradora de electricidad.

7.1.11. Comunicaciones.

Los dispositivos módem de red eléctrica deben ser testeados antes del montaje mediante el uso de las técnicas especificadas por el fabricante.

Los filtros deben actuar correctamente para la frecuencia portadora.

Los diferentes dispositivos deberán estar conectado bajo un mismo diferencial, evitando el paso por transformadores intermedios que atenúen la señal o incluso la anulen, evitando que las tramas lleguen a los dispositivos a partir de ciertas zonas.

Es conveniente que elementos que puedan ocasionar alteraciones y ruido en la red eléctrica estén debidamente aislados, siendo esto responsabilidad del proveedor de dicho elemento.

7.1.12. El Microcontrolador.

El microcontrolador debe ser configurado para comunicar a 2400 bps. Los pines deben ser configurados según su función, si son de entrada o de salida.

7.1.13. Montaje y Cableado Interior.

Todas las palcas realizadas para este montaje irán en el interior de cajas con unas características apropiadas de aislamiento delante de posibles interferencias, acciones ambientales externas y otros factores negativos para el funcionamiento del sistema.

El conexionado entre placas y otros elementos se realizará sin alterar el orden indicado en los planos.

15 de Octubre de 2004

Ingeniero Técnico Industrial:

Víctor Manuel Carayol Martínez

8. Anexos.

8. Anexos.

112

8.1. Introducción.

En este apartado he puesto toda la documentación necesaria para la realización de este proyecto. He incluido el código fuente de las tarjetas nodo, además de los datasheets de los chips más destacados, modem y acoplador con aislamiento galvánico, y una copia de la norma en la que se apoya este proyecto. Finalmente he incluido las referencias generales.

8.2. Código:

8.2.1. Código de la Tarjeta Nodo Maestro.

Este código esta formado por nueve ficheros, los ‘*.h’ contienen las definiciones utilizadas y los ‘*.C’ los algoritmos de programación.

8.2.1.1. Archivo ‘defs.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: defs.h Archivo que contiene Macros, Tipos y Constantes autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Contiene Macros, Tipos y Constantes que se utilizan a lo largo del programa _______________________________________________________________________*/ /*----------------------------------------------------------------------- CONSTANTES y MACROS -----------------------------------------------------------------------*/ #define BIT_0 1 // Habilita las prioridades #define EnablePriority() RCONbits.IPEN=1; // Habilita las interrup altas y/o bajas #define EnableInterruptHigh() INTCONbits.GIEH=1; #define EnableInterruptLow() INTCONbits.GIEL=1; // Nombre o identificador de las tarjetas nodo #define NOM_MASTER 0xFF #define NOM_SLAVE 0x01 #define TRUE (!0) #define FALSE 0 // Para que el número aleatorio siempre este entre 85ms y 115ms #define ALEMAX 0xF7 // 247 -> 115ms #define ALEMIN 0xB7 // 183 -> 85 ms // Número máximo en la trama utilizada #define NUMTRAMA 0x03 typedef unsigned char Bool; /* 8 bits */ typedef unsigned char Byte; /* 8 bits */ typedef unsigned int Word; /* 16 bits */

8. Anexos.

113

typedef struct soft_timer

Byte count; /* Tiempo antes de ejecutar la función asociada */ Bool incre; /* Incremental !0/decremental 0 */ void (*fun)(void); /* apunta a la función asociada */

Soft_t; typedef struct message

Byte mis[NUMTRAMA]; /* Acumula los 3 Bytes del mensaje */ int numbyte; /* Indica la posición del byte enviado */ Bool ocupado; /* Bandera que indica si esta ocupado o no */ Bool espera; /* Tiempo de (delay) ha pasado o no */

Mensaje ;

8.2.1.2. Archivo ‘main.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: main.c Archivo principal para la tarjeta nodo Maestro autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Se encarga de configurar el microcontrolador e inicializar las estructuras y variables _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "inicia.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ Soft_t T1; // Creo un T1 que tiene estructura soft timer Mensaje trama,trecibida;// Variables de tipo Mensaje int main() // Inicialización del timer TM0 IniTM0(); // Configuración de los puertos I/O IniPuertos(); // Inicialización Soft timers IniCont(&T1); // Habilito las prioridades EnablePriority(); // Habilito las interrup altas y/o bajas EnableInterruptHigh(); EnableInterruptLow(); // Inicialización de la USART IniUART();

8. Anexos.

114

// Inicializa las variables IniVars(); IniTrama(&trama); IniTrama(&trecibida); while (1) // No hace nada

8.2.1.3. Archivo ‘funciones.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: funciones.h Archivo que contiene las definiciones que utilizaré en programa principal autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ /*----------------------------------------------------------------------- DECLARACIONES DE FUNCIONES -----------------------------------------------------------------------*/ void PulsaA0(void); // Función para detectar la forma de pulsar A0 void PulsaA1(void); // Función para detectar la forma de pulsar A1 void PulsaA2(void); // Función para detectar la forma de pulsar A2 void PulsaA3(void); // Función para detectar la forma de pulsar A3 void PulsaA4(void); // Función para detectar la forma de pulsar A4 void PulsaA5(void); // Función para detectar la forma de pulsar A5 void Pulsadores(void); // Función que escanea los pulsadores void Transmitir(Byte); // Prepara la trama void Recibir(void); // Se prepara para recibir datos void Enviar_Ocupado (void); // Función para cuando se esta enviando void Recibir_Ocupado(void); // Función para cuando se esta recibiendo Byte Rx(void); // Función que recibe byte void Tx(Byte); // Función que envía byte void RxT(Mensaje *); // Función para recibir la trama void TxT(Mensaje *); // Función para enviar la trama void Interpreta(Byte); // Función que interpreta el comando recibido

8. Anexos.

115

8.2.1.4. Archivo ‘funciones.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: funciones.c Aquí están las definiciones de las funciones utilizadas en el PGM autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "inicia.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ extern Byte pulsa0,tmpa0,pulsa1,tmpa1,pulsa2,tmpa2,pulsa3,tmpa3,pulsa4; extern Byte tmpa4,pulsa5,tmpa5,error,aleatorio,taleatorio,timeout3,thard; extern Mensaje trama,trecibida; extern Word timeout1, timeout2, timeout4; /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A0 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA0 (void) if (!PORTAbits.RA0) // Si se ha pulsado if (pulsa0==0) // Primero envía pulso Transmitir(0x01); // Envía pulso pulsa0=1; // Anoto que esta pulsado tmpa0++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa0==1) // Siempre que se haya pulsado una tecla if (tmpa0 >= 20) // Si han pasado 2seg Transmitir(0x03); // Envía continuo tmpa0=0; // Reinicializo el contador pulsa0=0; // Borro el flag de pulsador on

8. Anexos.

116

/*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A1 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA1 (void) if (!PORTAbits.RA1) // Si se ha pulsado if (pulsa1==0) // Primero envía pulso Transmitir(0x02); // Envía pulso pulsa1=1; // Anoto que esta pulsado tmpa1++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa1==1) // Siempre que se haya pulsado una tecla if (tmpa1 >= 20) // Si han pasado 2seg Transmitir(0x03); // Envía continuo tmpa1=0; // Reinicializo el contador pulsa1=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A2 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA2 (void) if (!PORTAbits.RA2) // Si se ha pulsado if (pulsa2==0) // Primero envía pulso Transmitir(0x08); // Envía pulso pulsa2=1; // Anoto que esta pulsado tmpa2++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa2==1) // Siempre que se haya pulsado una tecla if (tmpa2 >= 20) // Si han pasado 2seg Transmitir(0x0C); // Envía continuo tmpa2=0; // Reinicializo el contador pulsa2=0; // Borro el flag de pulsador on

8. Anexos.

117

/*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A3 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA3 (void) if (!PORTAbits.RA3) // Si se ha pulsado if (pulsa3==0) // Primero envía pulso Transmitir(0x09); // Envía pulso pulsa3=1; // Anoto que esta pulsado tmpa3++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa3==1) // Siempre que se haya pulsado una tecla if (tmpa3 >= 20) // Si han pasado 2seg Transmitir(0x0D); // Envía continuo tmpa3=0; // Reinicializo el contador pulsa3=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A4 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA4 (void) if (!PORTAbits.RA4) // Si se ha pulsado if (pulsa4==0) // Primero envía pulso Transmitir(0x0A); // Envía pulso pulsa4=1; // Anoto que esta pulsado tmpa4++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa4==1) // Siempre que se haya pulsado una tecla if (tmpa4 >= 20) // Si han pasado 2seg Transmitir(0x0E); // Envía continuo tmpa4=0; // Reinicializo el contador pulsa4=0; // Borro el flag de pulsador on

8. Anexos.

118

/*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A5 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA5 (void) // Función para detectar la forma de pulsar A0 if (!PORTAbits.RA5) // Si se ha pulsado if (pulsa5==0) // Primero envía pulso Transmitir(0x00); // Envía pulso pulsa5=1; // Anoto que esta pulsado tmpa5++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa5==1) // Siempre que se haya pulsado una tecla if (tmpa5 >= 20) // Si han pasado 2seg Transmitir(0xFF); // Envía continuo tmpa5=0; // Reinicializo el contador pulsa5=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función que se ejecuta cada 10ms y hace el polling en los pulsadores. -----------------------------------------------------------------------*/ void Pulsadores(void) PulsaA0(); PulsaA1(); PulsaA2(); PulsaA3(); PulsaA4(); PulsaA5(); /*----------------------------------------------------------------------- Función que prepara los datos para enviar, forma la trama. -----------------------------------------------------------------------*/ void Transmitir(Byte comando) if (trama.ocupado == FALSE) // Si no esta ocupado en otra trama taleatorio = aleatorio; // Captura el tiempo aleatorio trama.numbyte = 0; // Empieza a enviar este byte trama.mis[0] = NOM_SLAVE; // Destino trama.mis[1] = comando; // Comando a enviar trama.mis[2] = (NOM_SLAVE + comando); // Checksum trama.espera = FALSE; // El (delay) no ha pasado (7ms) trama.ocupado = TRUE; // Ahora esta ocupado

8. Anexos.

119

/*----------------------------------------------------------------------- Función que se prepara para recibir datos, desactivar la transmisión. -----------------------------------------------------------------------*/ void Recibir(void) PORTCbits.RC3 = 1; // (Rx/!Tx)=1 Modem modo recibir TXSTAbits.TXEN = 0; // Deshabilito la emisión de datos /*----------------------------------------------------------------------- Función que actúa cuando se esta enviando, mira si la línea eléctrica no esta siendo utilizada y envía la trama cuando es posible. Prepara el hardware y espera que acabe de enviarse la trama siguiendo rigurosamente los tiempos límite de la norma. -----------------------------------------------------------------------*/ void Enviar_Ocupado (void)

// Si el hardware no esta preparado mira que la línea no este //siendo utilizada

if ((PORTCbits.RC3==1)&(trama.espera==FALSE)) taleatorio--; // Se espera un tiempo aleatorio timeout1++; // tiempo de limite medio físico ocupado if (taleatorio==0) // Si ha pasado el tiempo aleatorio //Si no han pasado 1'1s y CD=0 (línea ocupada) if ((timeout1<0x93B)&(PORTCbits.RC4==0)) taleatorio=aleatorio; //Vuelvo a capturar un

//nuevo tiempo aleatorio else // Hardware en modo enviar PORTCbits.RC3=0; // Aviso al hardwar voy a enviar timeout1=0; // Tiempo max esperando línea timeout2=0; // Tiempo max ocupada la línea thard=0; // Para que el hard se estabilice // Si estas ocupando la línea eléctrica if (PORTCbits.RC3==0) // Si el hardware esta avisado espera 7ms if (trama.espera==FALSE) // Aquí se cuenta el delay del modem y el tranceiver en emisión thard++; if (thard==0x0F) // Pasados 7ms trama.espera=TRUE;// Ya ha pasado el tiempo (7ms) TXSTAbits.TXEN = 1;// Enable la emisión de datos timeout2++; // tiempo de limite que puedo ocupar la línea // Aquí se mira que no se este ocupando la línea más de 1seg seguido if (timeout2==0x864) // Si pasa 1 segundo enviando Recibir(); // Deja de enviar

8. Anexos.

120

// Una vez enviada la trama, espera 125 ms entre trama y trama if ((PORTCbits.RC3==1)&(trama.espera==TRUE)) timeout3++; // Tiempo de limite antes de volver a enviar if (timeout3==0x56) // Si pasa 40 ms timeout3=0; // Tiempo entre trama y trama trama.ocupado = FALSE; // Ya se puede enviar otra vez /*---------------------------------------------------------------------- Función que actúa cuando se esta recibiendo una trama y comprueba si se ha dejado de recibir trama o ha pasado un tiempo límite máximo (1 segundo)que define la norma. -----------------------------------------------------------------------*/ void Recibir_Ocupado(void) timeout4++; // Cuenta el tiempo que esta ocupado if ((PORTCbits.RC4==1)|(timeout4==0x865)) // Deja de esperar el resto de trama timeout4=0; // Inicialización variable trecibida.ocupado=FALSE; // Deja de estar ocupado RCSTAbits.CREN = 0; // Deshabilito la recepción de datos /*----------------------------------------------------------------------- Función que actúa cuando se recibe una trama, acumula los bytes en la estructura asignada, al final comprueba, si la trama recibida es para este modulo, que la trama este bien recibida. comprobación de checksum. -----------------------------------------------------------------------*/ void RxT(Mensaje *tram) // Función para recibir la trama if ((tram->numbyte)< NUMTRAMA) // Se carga el Byte recibido tram->mis[tram->numbyte]=Rx();// Función que recibe un byte (tram->numbyte)++; // Se prepara para el siguiente byte // Cuando ya se han cargado todos los Bytes se mira si es para mi if (((tram->numbyte)==NUMTRAMA)&((tram->mis[0])==NOM_MASTER)) if ((tram->mis[0] + tram->mis[1]) == tram->mis[2]) //Checksum Interpreta(tram->mis[1]); // Se envia el comando else error=3; // Hay un error en la recepción de la trama tram->ocupado=FALSE; // Deja de estar ocupado RCSTAbits.CREN = 0; // Deshabilito la recepción de datos

8. Anexos.

121

/*----------------------------------------------------------------------- Función que captura el byte recibido y lo retorna a la salida. -----------------------------------------------------------------------*/ Byte Rx(void) Byte info; info=RCREG; return(info); /*----------------------------------------------------------------------- Función que envía la trama preparada anteriormente, finalmente muestra el comando enviado en los leds situados en el PORTB -----------------------------------------------------------------------*/ void TxT(Mensaje *tram) // Ya se ha enviado el Byte al Shift register if ((tram->numbyte) < (NUMTRAMA)) Tx(tram->mis[tram->numbyte]); // Envia byte else // final de trama if ((tram->numbyte) == (NUMTRAMA)) Tx(0xFF); // Int. cuando se envía el último byte else Recibir(); // Función deja de enviar PORTB=trama.mis[1];//muestra en el PORTB el mensaje /*---------------------------------------------------------------------- Función que escribe en el registro conveniente el byte a enviar. -----------------------------------------------------------------------*/ void Tx(Byte info) TXREG = info; /*---------------------------------------------------------------------- Función que interpreta el significado del comando recibido en una trama. -----------------------------------------------------------------------*/ void Interpreta(Byte comando) // Función que interpreta el comando recibido PORTB=comando; // Mensaje OK DATOS

8. Anexos.

122

8.2.1.5. Archivo ‘inicia.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: inicia.h Archivo que contiene las definiciones de las funciones de inicia.c autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ void IniTM0(void); // Inicialización del TM0 void IniTM1(void); // Inicialización del TM1 void IniIntExt(void); // Inicializa las interrupciones externas void IniPuertos(void); // Configuración de los puertos void IniUART(void); // Inicializa la USART void IniCont(Soft_t *); // Inicializa las estructuras del tipo soft timer void IniTrama(Mensaje *);// Inicializa las estructuras del tipo mensaje void IniVars(void); // Inicializa las variables

8.2.1.6. Archivo ‘inicia.c’. /*PROYECTEO PLC-04 CURSO 2003-04 ________________________________________________________________________ ARCHIVO: inicia.c Archivo que contiene todas las funciones de inicialización autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ Byte pulsa0,tmpa0,pulsa1,tmpa1,pulsa2,tmpa2,pulsa3,tmpa3,pulsa4,tmpa4,pulsa5,tmpa5; Byte tick0,tick1L,tick1H,aleatorio,taleatorio,error,timeout3,thard; Word timeout1, timeout2, timeout4; // Contadores para cumplir norma /*---------------------------------------------------------------------- Inicialización del timer TM0, con esta configuración genera una interrupción cada 465'5 us, con el clk que tiene se ejecuta una instrucción cada 91 ns, es decir, se producen unas 5115 instrucciones entre interrupciones. -----------------------------------------------------------------------*/ void IniTM0(void) INTCONbits.TMR0IE = 1; // Interrup por Overflow INTCONbits.TMR0IF = 0; // Limpia flag INTCON2bits.TMR0IP = 1; // Overflow High Priority T0CON = 0b11010111 ; // Enable timer,8 bit mode,

// clock internal,X,prescaler assigned,1:256 prescaler

8. Anexos.

123

tick0 = 0xFB; // Una interrupción cada 465'5 us TMR0 = tick0; // Carga el valor en el registro /*----------------------------------------------------------------------- Inicialización del timer TM1, con esta configuración genera una interrupción cada 249'4 us, con el clk que tiene se ejecuta una instrucción cada 91 ns, es decir, se producen unas 2741 instrucciones entre interrupciones. -----------------------------------------------------------------------*/ void IniTM1(void) PIE1bits.TMR1IE = 1; // Interrup por Overflow PIR1bits.TMR1IF = 0; // clear flag IPR1bits.TMR1IP = 1; // Overflow high priority T1CON = 0b10110001 ; // Enable Timer one operation 16bits,x,1:8

//prescaler,timer oscilator is shut-off,clock internal,timer1 on

tick1H = 0xFF; // Una interrupción cada x ms tick1L = 0xA9; // Una interrupción cada 0'2494 ms

TMR1H = tick1H; // Una interrupción cada x ms TMR1L = tick1L; // Una interrupción cada x ms /*----------------------------------------------------------------------- Inicialización de la interrupción externa INT0(RB0), Se produce cuando se genera un flanco ascendente en el pin RB0. -----------------------------------------------------------------------*/ void IniIntExt (void) INTCONbits.INT0IE = 1; // Activa interrupt 0 INTCONbits.INT0IF = 0; // Selección interrup externa INTCON2bits.INTEDG0 = 1;// Flanco ascendente INTCON2bits.RBIP = 1; // High Priority /*----------------------------------------------------------------------- Configura los puertos de entrada y/o salida del microcontrolador -----------------------------------------------------------------------*/ void IniPuertos (void) TRISA = 0xFF; // Todo entradas (6bits) ADCON1 = 0X7; // Entradas digitales (pag182) TRISB = 0b00000000; // B7-B0 salidas PORTB = 0b00000001; // Enciendo el primer bit TRISC = 0x94; // #10010100b PORTCbits.RC0=0; // Wath-Dog empieza en 0 /*----------------------------------------------------------------------- Configura la UART (Universal Asynchronous Receiver Transmitter) para recibir y transmitir datos a 2400 bps, generando interrupciones. Se pone en recepción por defecto. -----------------------------------------------------------------------*/ void IniUART (void) TXSTAbits.BRGH = 0; // Baja velocidad

SPBRG = 0x47; // Valor para conseguir 2400 bps Error -0'54%

8. Anexos.

124

TXSTAbits.SYNC = 0; // Modo asíncrono RCSTAbits.SPEN = 1; // Habilitado el puerto serie TXSTAbits.TX9 = 0; // Modo 8 bits, por defecto PIE1bits.TXIE = 1; // Habilito la interrupción de salida IPR1bits.TXIP = 0; // Interrup baja prioridad RCSTAbits.RX9 = 0; // Modo 8 bits, por defecto PIE1bits.RCIE = 1; // Habilito la interrupción de llegada IPR1bits.RCIP = 0; // Interrup baja prioridad // Activar la recepción RCSTAbits.CREN = 0; // Deshabilito la recepción de datos Recibir(); // Modem modo recibir /*---------------------------------------------------------------------- Inicializa las estructuras del tipo soft timer -----------------------------------------------------------------------*/ void IniCont(Soft_t *st1) st1->count=0x00; // Lo utilizo para polling interruptores st1->incre=TRUE; // Este contador es incremental st1->fun=Pulsadores; // Reasigno el puntero /*----------------------------------------------------------------------- Inicializa las estructuras del tipo mensaje -----------------------------------------------------------------------*/ void IniTrama(Mensaje *tram) tram->numbyte=0; // Indica la posición del byte enviado tram->ocupado=FALSE; // Bandera que indica si esta ocupado o no tram->espera=FALSE; // Bandera que indica si ha pasado el (delay) /*----------------------------------------------------------------------- Inicializa las variables utilizadas Esto teóricamente no hace falta si son extern se inicializan solas la primera vez, pero por si a caso. -----------------------------------------------------------------------*/ void IniVars(void) error=0; // Indica el tipo de error aleatorio=ALEMIN; // Valor del tiempo aleatorio min 85ms taleatorio=0; // Tiempo capturado aleatoriamente timeout3=0; // Tiempo entre trama y trama thard=0; // Tiempo que necesita el hardware para establecerse pulsa0=0; // Variables para funciones pulsadores tmpa0=0; // pulsa1=0; // tmpa1=0; // pulsa2=0; // tmpa2=0; // pulsa3=0; // tmpa3=0; // pulsa4=0; // tmpa4=0; // pulsa5=0; //

8. Anexos.

125

tmpa5=0; // timeout1=0; // Tiempo máx. que puede estar esperando la línea timeout2=0; // Tiempo máximo que puede ocupar la línea timeout4=0; // Tiempo máximo esperando un mensaje

8.2.1.7. Archivo ‘intvect.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: intvect.h Archivo con las definiciones de las constantes que se utilizan en el intvect.c autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Si no se ha definido antes se definen las constantes de los vectores de interrupciones _______________________________________________________________________*/ #ifndef INTVECT_H #define INTVECT_H #define HIGH_INT_VECTOR_ADDRESS 0x08 #define LOW_INT_VECTOR_ADDRESS 0x18 #endif

8.2.1.8. Archivo ‘intvect.c’. /*PROYECTO PLC-04 CURSO 2003-04 _______________________________________________________________________ ARCHIVO: invect.c Archivo que define las direcciones a las que deben saltar los vectores de interrupciones autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Punteros a los vectores de respuesta a interrupción de Baja y Alta prioridad _______________________________________________________________________*/ #include "intvect.h" extern void InterruptHandlerLow(void); extern void InterruptHandlerHigh(void); /*----------------------------------------------------------------------- Directivas al compilador para que salte a las rutinas de interrupción de alta prioridad cuando se produzca una interrupción de alta prioridad. -----------------------------------------------------------------------*/ #pragma code InterruptVectorHigh = HIGH_INT_VECTOR_ADDRESS void InterruptVectorHigh(void)

8. Anexos.

126

_asm goto InterruptHandlerHigh

// Salta a las rutinas de interrupción _endasm #pragma code /*----------------------------------------------------------------------- Directivas al compilador para que salte a las rutinas de interrupción de baja prioridad cuando se produzca una interrupción de baja prioridad. -----------------------------------------------------------------------*/ #pragma code InterruptVectorLow = LOW_INT_VECTOR_ADDRESS void InterruptVectorLow(void) _asm goto InterruptHandlerLow

// Salta a las rutinas de interrupción _endasm #pragma code

8.2.1.9. Archivo ‘isr.c’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: isr.c Archivo con las definiciones de las subrutinas de respuesta a las interrupciones autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: En los PIC18Fxx existen dos vectores de interrupciones, uno de de alta y otro de baja prioridad. Aquí se definen sus subrutinas. _______________________________________________________________________*/ #include <p18f252.h> #include "intvect.h" #include "defs.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ extern Byte tick0, error, aleatorio; extern Soft_t T1; extern Mensaje trama,trecibida; extern Word timeout4; /*----------------------------------------------------------------------- Aquí defino la subrutina de respuesta a la interrupción de baja prioridad y atiendo las interrupciones generadas por la UART, tanto al enviar como al recibir. -----------------------------------------------------------------------*/ #pragma interruptlow InterruptHandlerLow void InterruptHandlerLow(void) // Recibir -> se genera una int cuando RCREG esta lleno if (PIR1bits.RCIF)

8. Anexos.

127

// Miro si ha habido errores en la recepción if (RCSTAbits.OERR==1) // OERR ->bit de sobrepasamiento RCSTAbits.CREN = 0;// deshabilito la recepción de datos RCSTAbits.CREN = 1;// Habilito la recepción de datos co error=1; / Hay un error de sobrepasamiento if (RCSTAbits.FERR==1) // FERR ->error de trama error=RCREG; //Limpia el error error=2; // Hay un error en la trama RxT(&trecibida); // Función para recibir la trama PIR1bits.RCIF = 0; // Limpia el flag // Enviar -> Se genera una int pq el TXREG esta vacío if ((PIR1bits.TXIF)&(trama.ocupado==TRUE))

// Se genera una int pq el TXREG esta vacío TxT(&trama); // Función para enviar la trama trama.numbyte++; // Envío el siguiente Byte // Aquí no se limpia el flag /*----------------------------------------------------------------------- Aquí defino la subrutina de respuesta a la interrupción de alta prioridad y atiendo las interrupciones generadas por los timers e interrupciones externas. -----------------------------------------------------------------------*/ #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) // Se ha producido un Overflow Timer 0, cada 465,5us if (INTCONbits.TMR0IF) TMR0 = tick0; // Inicializa el contador hard 465'5us WD PORTC ^= BIT_0; // Wath-Dog periodo de 931us aleatorio++; // De aquí se coge el número aleatorio if (aleatorio==(ALEMAX+1)) aleatorio=ALEMIN;

// Mantiene el rango exigido por la norma T1.count++; // Para el escaneo de los pulsadores // Aquí se mira el estado de las entradas (Pulsadores) if ((T1.count)==0x0016) //cada 10 ms (T1.count) = 0; // Inicializo T1.fun(); // Polling de las teclas // Lo utilizo para enviar o recibir la trama if (trama.ocupado==TRUE) // Siempre que este enviando Enviar_Ocupado(); else // si no estas recibiendo

8. Anexos.

128

if (trecibida.ocupado==TRUE) // Si esta recibiendo Recibir_Ocupado(); else // Si no, mira si esta enviando información if (PORTCbits.RC4==0)

// Mira si esta ocupada la línea RCSTAbits.CREN = 1;

// Habilito la recepción de datos continua timeout4=0;

// Inicializa variable de espera trecibida.ocupado = TRUE;

// Ahora esta ocupado trecibida.numbyte = 0;

// Byte que voy a recibir INTCONbits.TMR0IF=0;// El flag de Overflou se limpia aquí. // Interrupción externa INT0 if (INTCONbits.INT0IF) INTCONbits.INT0IF=0;// Limpia el flag la int externa

8. Anexos.

129

8.2.2. Código de la Tarjeta Nodo Esclavo.

Este código esta formado por once ficheros, los ‘*.h’ contienen las definiciones utilizadas y los ‘*.C’ los algoritmos de programación.

8.2.2.1. Archivo ‘defs.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ARCHIVO: defs.h Archivo que contiene Macros, Tipos y Constantes autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Contiene Macros, Tipos y Constantes que se utilizan a lo largo del programa _______________________________________________________________________*/ /*----------------------------------------------------------------------- CONSTANTES y MACROS -----------------------------------------------------------------------*/ #define BIT_0 1 #define BOFF 0x28 // Bombilla apagada #define BMIN 0x27 // Bombilla mínima intensidad #define BMAX 0x03 // Bombilla máxima intensidad // Esto multiplicado por el timer1 = tiempo que tarda en subir o bajar de // intensidad #define TCAM 0x7F // Tiempo de cambio de intensidad automático // Habilito las prioridades #define EnablePriority() RCONbits.IPEN=1; // Habilito las interrup altas y/o bajas #define EnableInterruptHigh() INTCONbits.GIEH=1; #define EnableInterruptLow() INTCONbits.GIEL=1; // Nombre o identificador de las tarjetas nodo #define NOM_MASTER 0xFF #define NOM_SLAVE 0x01 #define TRUE (!0) #define FALSE 0 // Para que el número aleatorio siempre este entre 85ms y 115ms #define ALEMAX 0xF7 // 247 -> 115ms #define ALEMIN 0xB7 // 183 -> 85 ms // Número máximo en la trama utilizada #define NUMTRAMA 0x03 typedef unsigned char Bool; /* 8 bits */ typedef unsigned char Byte; /* 8 bits */ typedef unsigned int Word; /* 16 bits */ typedef struct soft_timer

Byte count; /* Tiempo antes de ejecutar la función asociada */ Bool incre; /* Incremental !0/decremental 0 */ void (*fun)(void); /* apunta a la función asociada */

Soft_t;

8. Anexos.

130

typedef struct message

Byte mis[NUMTRAMA]; /* Acumula los 3 Bytes del mensaje */ int numbyte; /* Indica la posición del byte enviado */ Bool ocupado; /* Bandera que indica si esta ocupado o no */ Bool espera; /* Tiempo de (delay) ha pasado o no */

Mensaje ;

8.2.2.2. Archivo ‘main.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ARCHIVO: main.c Archivo principal para la tarjeta nodo Esclavo autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Se encarga de configurar el microcontrolador e inicializar las estructuras y variables _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "inicia.h" #include "funciones.h" #include "potencia.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ Soft_t T1,T2,T3,T4; // creo estructuras soft timer Mensaje trama,trecibida; // La variable de tipo Mensaje int main() // Inicialización del TM0 IniTM0(); IniTM1(); // Configuración de los puertos IniPuertos(); // Inicialización Soft timers IniCont(&T1); T1.fun=Cicloluz1; // Reasigno el puntero IniCont(&T2); T2.fun=Cicloluz2; // Reasigno el puntero IniCont(&T3); T3.fun=Cicloluz3; // Reasigno el puntero IniCont(&T4); // Inicializa las interrupciones externas IniIntExt(); // Habilito las prioridades EnablePriority();

8. Anexos.

131

// Habilito las interrup altas y bajas EnableInterruptHigh(); EnableInterruptLow(); // Inicialización de la USART IniUART(); // Inicializa las variables IniVars(); IniTrama(&trama); IniTrama(&trecibida); while (1) // No hace nada

8.2.2.3. Archivo ‘funciones.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: funciones.h Archivo que contiene las definiciones que utilizaré en programa principal autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ /*-----------------------------------------------------------------------DECLARACIONES DE FUNCIONES -----------------------------------------------------------------------*/ void PulsaA0(void); // Función para detectar la forma de pulsar A0 void PulsaA1(void); // Función para detectar la forma de pulsar A1 void PulsaA2(void); // Función para detectar la forma de pulsar A2 void PulsaA3(void); // Función para detectar la forma de pulsar A3 void PulsaA4(void); // Función para detectar la forma de pulsar A4 void PulsaA5(void); // Función para detectar la forma de pulsar A5 void PulsaB6(void); // Función para detectar la forma de pulsar A4 void PulsaB7(void); // Función para detectar la forma de pulsar A5 void Pulsadores(void); // Función que escanea los pulsadores void Transmitir(Byte); // Prepara la trama void Recibir(void); // Se prepara para recibir datos void Enviar_Ocupado (void); // Actúa cuando se esta enviando void Recibir_Ocupado(void); // Actúa cuando se esta recibiendo Byte Rx(void); // Función que recibe byte void Tx(Byte); // Función que envía byte void RxT(Mensaje *); // Función para recibir la trama void TxT(Mensaje *); // Función para enviar la trama void Interpreta(Byte); // Función que interpreta el comando recibido

8. Anexos.

132

8.2.2.4. Archivo ‘funciones.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: funciones.c Aquí están las definiciones de las funciones utilizadas en el PGM autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "inicia.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ extern Byte pulsa0,tmpa0,pulsa1,tmpa1,pulsa2,tmpa2,pulsa3,tmpa3,pulsa4; extern Byte tmpa4,pulsa5,tmpa5,error,aleatorio,taleatorio,timeout3,thard; extern Byte bom1,bom2,bom3,bombilla1,bombilla2,bombilla3; extern Mensaje trama,trecibida; extern Word timeout1, timeout2, timeout4; // Contadores para cumplir norma /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A0 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA0 (void) if (!PORTAbits.RA0) // Si se ha pulsado if (pulsa0==0) // Primero envía pulso Transmitir(0x01); // Envía pulso pulsa0=1; // Anoto que esta pulsado tmpa0++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa0==1) // Siempre que se haya pulsado una tecla if (tmpa0 >= 20) // Si han pasado 2seg Transmitir(0x03); // Envía continuo tmpa0=0; // Reinicializo el contador pulsa0=0; // Borro el flag de pulsador on

8. Anexos.

133

/*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A1 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA1 (void) if (!PORTAbits.RA1) // Si se ha pulsado if (pulsa1==0) // Primero envía pulso Transmitir(0x02); // Envía pulso pulsa1=1; // Anoto que esta pulsado tmpa1++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa1==1) // Siempre que se haya pulsado una tecla if (tmpa1 >= 20) // Si han pasado 2seg Transmitir(0x03); // Envía continuo tmpa1=0; // Reinicializo el contador pulsa1=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A2 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA2 (void) if (!PORTAbits.RA2) // Si se ha pulsado if (pulsa2==0) // Primero envía pulso Transmitir(0x08); // Envía pulso pulsa2=1; // Anoto que esta pulsado tmpa2++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa2==1) // Siempre que se haya pulsado una tecla if (tmpa2 >= 20) // Si han pasado 2seg Transmitir(0x0C); // Envía continuo tmpa2=0; // Reinicializo el contador pulsa2=0; // Borro el flag de pulsador on

8. Anexos.

134

/*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A3 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA3 (void) if (!PORTAbits.RA3) // Si se ha pulsado if (pulsa3==0) // Primero envía pulso Transmitir(0x09); // Envía pulso pulsa3=1; // Anoto que esta pulsado tmpa3++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa3==1) // Siempre que se haya pulsado una tecla if (tmpa3 >= 20) // Si han pasado 2seg Transmitir(0x0D); // Envía continuo tmpa3=0; // Reinicializo el contador pulsa3=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función para detectar la pulsación del pulsador A4 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA4 (void) if (!PORTAbits.RA4) // Si se ha pulsado if (pulsa4==0) // Primero envía pulso Transmitir(0x0A); // Envía pulso pulsa4=1; // Anoto que esta pulsado tmpa4++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa4==1) // Siempre que se haya pulsado una tecla if (tmpa4 >= 20) // Si han pasado 2seg Transmitir(0x0E); // Envía continuo tmpa4=0; // Reinicializo el contador pulsa4=0; // Borro el flag de pulsador on

8. Anexos.

135

/*---------------------------------------------------------------------- Función para detectar la pulsación del pulsador A5 y la forma de pulsarlo. -----------------------------------------------------------------------*/ void PulsaA5 (void) // Función para detectar la forma de pulsar A0 if (!PORTAbits.RA5) // Si se ha pulsado if (pulsa5==0) // Primero envía pulso Transmitir(0x00); // Envía pulso pulsa5=1; // Anoto que esta pulsado tmpa5++; // Anoto el tiempo que esta pulsado 20=2seg else if (pulsa5==1) // Siempre que se haya pulsado una tecla if (tmpa5 >= 20) // Si han pasado 2seg Transmitir(0xFF); // Envía continuo tmpa5=0; // Reinicializo el contador pulsa5=0; // Borro el flag de pulsador on /*----------------------------------------------------------------------- Función que se ejecuta cada 10ms y hace el polling del final de carrera. -----------------------------------------------------------------------*/ void PulsaB6 (void) if (PORTBbits.RB6) // Si se ha pulsado PORTBbits.RB5=0; PORTBbits.RB6=0; /*---------------------------------------------------------------------- Función que se ejecuta cada 10ms y hace el polling del final de carrera. -----------------------------------------------------------------------*/ void PulsaB7 (void) if (PORTBbits.RB7) // Si se ha pulsado PORTBbits.RB5=0; PORTBbits.RB6=0;

8. Anexos.

136

/*---------------------------------------------------------------------- Función que se ejecuta cada 10ms y hace el polling en los pulsadores. -----------------------------------------------------------------------*/ void Pulsadores(void) PulsaA0(); PulsaA1(); PulsaA2(); PulsaA3(); PulsaA4(); PulsaA5(); PulsaB6(); PulsaB7(); /*---------------------------------------------------------------------- Función que prepara los datos para enviar, forma la trama. -----------------------------------------------------------------------*/ void Transmitir(Byte comando) if (trama.ocupado == FALSE) // si no esta ocupado en otra trama taleatorio = aleatorio; // Captura el tiempo aleatorio trama.numbyte = 0; // Empieza a enviar este byte trama.mis[0] = NOM_MASTER; // Destino trama.mis[1] = comando; // Comando a enviar trama.mis[2] = (NOM_MASTER + comando); // Checksum trama.espera = FALSE; // El (delay) no ha pasado (7ms) trama.ocupado = TRUE; // Ahora esta ocupado /*----------------------------------------------------------------------- Función que se prepara para recibir datos, desactivar la transmisión. -----------------------------------------------------------------------*/ void Recibir(void) PORTCbits.RC3 = 1; // (Rx/!Tx)=1 Modem modo recibir TXSTAbits.TXEN = 0; // Deshabilito la emisión de datos /*----------------------------------------------------------------------- Función que actúa cuando se esta enviando, mira si la línea eléctrica no esta siendo utilizada y envía la trama cuando es posible. Prepara el hardware y espera que acabe de enviarse la trama siguiendo rigurosamente los tiempos límite de la norma. -----------------------------------------------------------------------*/ void Enviar_Ocupado (void) // Si el hardware no esta preparado mira que la línea no este

//siendo utilizada if ((PORTCbits.RC3==1)&(trama.espera==FALSE)) taleatorio--; // Se espera un tiempo aleatorio timeout1++; // Tiempo de limite medio físico ocupado if (taleatorio==0) // Si ha pasado el tiempo aleatorio //Si no han pasado 1'1s y CD=0 (línea ocupada)

8. Anexos.

137

if ((timeout1<0x93B)&(PORTCbits.RC4==0)) taleatorio=aleatorio;

//Vuelvo a capturar un nuevo tiempo aleatorio else // Hardware en modo enviar PORTCbits.RC3=0;

// Aviso al hardware que voy a enviar timeout1=0; // Tiempo max esperando línea timeout2=0; // Tiempo max ocupada la línea thard=0; // Para que el hard se estabilice // Si estas ocupando la línea eléctrica if (PORTCbits.RC3==0) // Si el hardware esta avisado espera 7ms if (trama.espera==FALSE) // Aquí se cuenta el delay del modem y el tranceiver en emisión thard++; if (thard==0x0F) // Pasados 7ms trama.espera=TRUE;// Ya ha pasado el tiempo(7ms) TXSTAbits.TXEN = 1;// Enable la emisión de dato // Aquí se mira que no se este ocupando la línea más de 1seg seguido timeout2++; // Tiempo de limite que puedo ocupar la línea if (timeout2==0x864) // Si pasa 1 segundo enviando Recibir(); // Deja de enviar if ((PORTCbits.RC3==1)&(trama.espera==TRUE)) timeout3++; // Tiempo antes de poder volver a enviar if (timeout3==0x56) // Si pasa 40 ms timeout3=0; // Tiempo entre trama y trama trama.ocupado = FALSE; // Ya se puede enviar otra

8. Anexos.

138

/*---------------------------------------------------------------------- Función que actúa cuando se esta recibiendo una trama y comprueba si se ha dejado de recibir trama o ha pasado un tiempo límite máximo (1 segundo) que define la norma. -----------------------------------------------------------------------*/ void Recibir_Ocupado(void) timeout4++; // Cuenta el tiempo que esta ocupado if ((PORTCbits.RC4==1)|(timeout4==0x865)) // Deja de esperar el resto de trama timeout4=0; // Inicialización variable trecibida.ocupado=FALSE; // Deja de estar ocupado RCSTAbits.CREN = 0; // Deshabilito la recepción de datos /*---------------------------------------------------------------------- Función que actua cuando se recibe una trama, acumula los bytes en la estructura asignada, al final comprueba, si la trama recibida es para este modulo, que la trama este bien recibida. Comprobación de checksum. -----------------------------------------------------------------------*/ void RxT(Mensaje *tram) // Función para recibir la trama if ((tram->numbyte)< NUMTRAMA) // Se carga el Byte recibido tram->mis[tram->numbyte]=Rx();// Función que recibe un byte (tram->numbyte)++; // Se prepara para el siguiente byte // Cuando ya se han cargado todos los Bytes se mira si es para mi if (((tram->numbyte)==NUMTRAMA)&((tram->mis[0])==NOM_SLAVE)) if ((tram->mis[0] + tram->mis[1]) == tram->mis[2]) //Checksum Interpreta(tram->mis[1]); // Se envía el comando Transmitir(0xFE); // Transmite mensaje O.K. else error=3; // Hay un error en la recepción de la trama Transmitir(0x55); // Transmite mensaje No O.K. tram->ocupado=FALSE; // Deja de estar ocupado RCSTAbits.CREN = 0; // Deshabilito la recepción de datos /*---------------------------------------------------------------------- Función que captura el byte recibido y lo retorna a la salida. -----------------------------------------------------------------------*/ Byte Rx(void) Byte info; info=RCREG; return(info);

8. Anexos.

139

/*----------------------------------------------------------------------- Función que envía la trama preparada anteriormente, finalmente muestra el comando enviado en los leds situados en el PORTB -----------------------------------------------------------------------*/ void TxT(Mensaje *tram) // Ya se ha enviado el Byte al Shift register if ((tram->numbyte) < (NUMTRAMA)) Tx(tram->mis[tram->numbyte]); // Envía byte else // final de trama if ((tram->numbyte) == (NUMTRAMA)) Tx(0xFF); // Int. cuando el último byte esta enviado else Recibir(); // Función deja de enviar /*----------------------------------------------------------------------- Función que escribe en el registro oportuno el byte a enviar. -----------------------------------------------------------------------*/ void Tx(Byte info) // Función que envía byte TXREG = info; /*----------------------------------------------------------------------- Función que interpreta el significado del comando recibido en una trama. -----------------------------------------------------------------------*/ void Interpreta(Byte comando) switch (comando) case 0x01: // Motor pulso izquierda PORTBbits.RB4=1; // Motor on PORTBbits.RB5=0; // Por defecto derecha break; case 0x02: // Motor pulso derecha PORTBbits.RB4=1; // Motor on PORTBbits.RB5=1; // Por defecto derecha break; case 0x03: // Motor continuo parada PORTBbits.RB4=0; PORTBbits.RB5=0; break; case 0x08: // Bombilla 1 pulso

8. Anexos.

140

switch (bombilla1) case 0x00: // Si esta apagada bombilla1=2;// Enciende ciclo ascendente break; case 0x01: // Si esta encendida fija bombilla1=3;// Enciende ciclo descendente break; case 0x02: // Si esta en ciclo ascendente case 0x03: // Si esta en ciclo descendente bombilla1=1;// Ahora esta encendida fija break; break; case 0x09: // Bombilla 2 pulso switch (bombilla2) case 0x00: // Si esta apagada bombilla2=2;// Enciende ciclo ascendente break; case 0x01: // Si esta encendida fija bombilla2=3;// Enciende ciclo descendente break; case 0x02: // Si esta en ciclo ascendente case 0x03: // Si esta en ciclo descendente bombilla2=1;// Ahora esta encendida fija break; break; case 0x0A: // Bombilla 3 pulso switch (bombilla3) case 0x00: // Si esta apagada bombilla3=2;// Enciende ciclo ascendente break; case 0x01: // Si esta encendida fija bombilla3=3;// Enciende ciclo descendente break; case 0x02: // Si esta en ciclo ascendente case 0x03: // Si esta en ciclo descendente

8. Anexos.

141

bombilla3=1;// Ahora esta encendida fija break; break; case 0x0C: // Bombilla 1 continuo bom1=BOFF; // Bombilla OFF% >100% bombilla1=0; // Bombilla apagada break; case 0x0D: // Bombilla 2 continuo bom2=BOFF; // Bombilla OFF% >100% bombilla2=0; // Bombilla apagada break; case 0x0E: // Bombilla 3 continuo bom3=BOFF; // Bombilla OFF% >100% bombilla3=0; // Bombilla apagada break; case 0x00: // Paro de emergencia bom1=bom2=bom3=BOFF; // Bombilla OFF% >100% bombilla1=bombilla2=bombilla3=0; // Bombilla apagada PORTBbits.RB4=PORTBbits.RB5=0;// Paro del motor break; case 0xFF: // Todo 50% bom1=bom2=bom3=0x14; // Bombilla OFF% >50% bombilla1=bombilla2=bombilla3=1;// Bombilla encendida break;

8.2.2.5. Archivo ‘inicia.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: inicia.h Archivo que contiene las definiciones de las funciones de inicia.c autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ void IniTM0(void); // Inicialización del TM0 void IniTM1(void); // Inicialización del TM1 void IniPuertos(void); // Configuración de los puertos void IniUART(void); // Inicializa la USART void IniCont(Soft_t *); // Inicializa la estructuras soft timer void IniIntExt(void); // Inicializa las interrupciones externas void IniVars(void); // Inicializa las variables void IniTrama(Mensaje *);// Inicializa la estructura del mensaje

8. Anexos.

142

8.2.2.6. Archivo ‘inicia.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: inicia.c Archivo que contiene todas las funciones de inicialización autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "funciones.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ Byte pulsa0,tmpa0,pulsa1,tmpa1,pulsa2,tmpa2,pulsa3,tmpa3,pulsa4,tmpa4; Byte pulsa5,tmpa5; Byte tick0,tick1L,tick1H,aleatorio,taleatorio,error,timeout3,thard; Byte bom1,bom2,bom3,bombilla1,bombilla2,bombilla3,paso0; Word timeout1, timeout2, timeout4; // Contadores para cumplir norma /*----------------------------------------------------------------------- Inicialización del timer TM0, con esta configuración genera una interrupción cada 465'5 us, con el clk que tiene se ejecuta una instrucción cada 91 ns, es decir, se producen unas 5115 instrucciones entre interrupciones. -----------------------------------------------------------------------*/ void IniTM0(void) INTCONbits.TMR0IE = 1; // Interrup por Overflow INTCONbits.TMR0IF = 0; // Limpia flag INTCON2bits.TMR0IP = 1; // Overflow High Priority T0CON = 0b11010111 ; // Enable timer,8 bit mode,clock

//internal,X,prescaler assigned,1:256 prescaler tick0 = 0xFB; // Una interrupción cada 465'5 us TMR0 = tick0; // Carga el valor en el registro /*----------------------------------------------------------------------- Inicialización del timer TM1, con esta configuración genera una interrupción cada 249'4 us, con el clk que tiene se ejecuta una instrucción cada 91 ns, es decir, se producen unas 2741 instrucciones entre interrupciones. -----------------------------------------------------------------------*/ void IniTM1(void) PIE1bits.TMR1IE = 1; // Interrup por Overflow PIR1bits.TMR1IF = 0; // clear flag IPR1bits.TMR1IP = 1; // Overflow high priority T1CON = 0b10110001 ; // Enable Timer one operation 16bits,x,1:8

//prescaler,timer oscilator is shut-off,clock internal,timer1 on tick1H = 0xFF; // Una interrupción cada x ms tick1L = 0xA9; // Una interrupción cada 0'2494 ms TMR1H = tick1H; // Una interrupción cada x ms TMR1L = tick1L; // Una interrupción cada x ms

8. Anexos.

143

/*----------------------------------------------------------------------- Inicialización de la interrupción externa INT0(RB0), Se produce cuando se genera un flanco ascendente en el pin RB0. -----------------------------------------------------------------------*/ void IniIntExt (void) INTCONbits.INT0IE = 1; // Activa interrupt 0 INTCONbits.INT0IF = 0; // Selección interrup externa INTCON2bits.INTEDG0 = 1; // Flanco ascendente INTCON2bits.RBIP = 1; // High Priority /*----------------------------------------------------------------------- Configura los puertos de entrada y/o salida del microcontrolador -----------------------------------------------------------------------*/ void IniPuertos (void) TRISA = 0xFF; // Todo entradas 6bits ADCON1 = 0X7; // Entradas digitales pag182 TRISB = 0b11000001; // B5-B2 salidas B7,B6,B1 entradas PORTB = 0b00000001; // Enciendo el primer bit TRISC = 0x94; // #10010100b PORTCbits.RC0=0; // Wath-Dog empieza en 0 /*---------------------------------------------------------------------- Configura la UART (Universal Asynchronous Receiver Transmitter) para recibir y transmitir datos a 2400 bps, generando interrupciones. Se pone en recepción por defecto. -----------------------------------------------------------------------*/ void IniUART (void) TXSTAbits.BRGH = 0; // Baja velocidad no hace falta SPBRG = 0x47; // Valor para conseguir 2400 bps Error -0'54% TXSTAbits.SYNC = 0; // Modo asincrono RCSTAbits.SPEN = 1; // Habilitado el puerto serie TXSTAbits.TX9 = 0; // Modo 8 bits, por defecto PIE1bits.TXIE = 1; // Habilito la interrupción de salida IPR1bits.TXIP = 0; // Interrup baja prioridad RCSTAbits.RX9 = 0; // Modo 8 bits, por defecto PIE1bits.RCIE = 1; // Habilito la interrupción de llegada IPR1bits.RCIP = 0; // Interrup baja prioridad // Activar la recepción RCSTAbits.CREN = 0; // Deshabilito la recepción de datos Recibir(); // Modem modo recibir /*----------------------------------------------------------------------- Incicializa las estructuras del tipo soft timer -----------------------------------------------------------------------*/ void IniCont(Soft_t *st1) st1->count=0x00; // Polling interruptores cada 0.5 seg st1->incre=TRUE; // Este contador es incremental st1->fun=Pulsadores; // Reasigno el puntero

8. Anexos.

144

/*----------------------------------------------------------------------- Inicializa las estructuras del tipo mensaje -----------------------------------------------------------------------*/ void IniTrama(Mensaje *tram) tram->numbyte=0; // Indica la posición del byte enviado tram->ocupado=FALSE; // Bandera que indica si esta ocupado o no tram->espera=FALSE; // Bandera que indica si ha pasado el (delay) /*----------------------------------------------------------------------- Inicializa las variables utilizadas Esto teóricamente no hace falta si son extern se inicializan solas la primera vez, pero por si a caso. -----------------------------------------------------------------------*/ void IniVars(void) // Inicializa las variables // Inicialización error=0; // Indica el tipo de error aleatorio=ALEMIN; // Valor del tiempo aleatorio min 85ms taleatorio=0; // Tiempo capturado aleatoriamente timeout3=0; // Tiempo entre trama y trama thard=0; // Tiempo que necesita el hardware para establecerse pulsa0=0; // Variables para funciones pulsadores tmpa0=0; // pulsa1=0; // tmpa1=0; // pulsa2=0; // tmpa2=0; // pulsa3=0; // tmpa3=0; // pulsa4=0; // tmpa4=0; // pulsa5=0; // tmpa5=0; // timeout1=0; // Tiempo máximo que puede estar esperando la línea timeout2=0; // Tiempo máximo que puede ocupar la línea timeout4=0; // Tiempo máximo esperando un mensaje bom1=BOFF; // Para que no se enciendan la bombilla bom2=BOFF; // Para que no se enciendan la bombilla bom3=BOFF; // Para que no se enciendan la bombilla bombilla1=0; // Bombilla apagada bombilla2=0; // Bombilla apagada bombilla3=0; // Bombilla apagada paso0=0;

8. Anexos.

145

8.2.2.7. Archivo ‘intvect.h’. /*PROYECTO PLC-04 CURSO 2003-04 ________________________________________________________________________ ARCHIVO: intvect.h Archivo con las definiciones de las constantes que se utilizan en el intvect.c autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Si no se ha definido antes se definen las constantes de los vectores de interrupciones _______________________________________________________________________*/ #ifndef INTVECT_H #define INTVECT_H #define HIGH_INT_VECTOR_ADDRESS 0x08 #define LOW_INT_VECTOR_ADDRESS 0x18 #endif

8.2.2.8. Archivo ‘intvect.c’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: invect.c Archivo que define las direcciones a las que deben saltar los vectores de interrupciones autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: Punteros a los vectores de respuesta a interrupcion de Baja y Alta prioridad _______________________________________________________________________*/ #include "intvect.h" extern void InterruptHandlerLow(void); extern void InterruptHandlerHigh(void); /*---------------------------------------------------------------------- Directivas al compilador para que salte a las rutinas de interrupción de alta prioridad cuando se poduza una interrupcón de alta prioridad. -----------------------------------------------------------------------*/ #pragma code InterruptVectorHigh = HIGH_INT_VECTOR_ADDRESS void InterruptVectorHigh(void) _asm goto InterruptHandlerHigh

// Salta a las rutinas de interrupción _endasm #pragma code

8. Anexos.

146

/*----------------------------------------------------------------------- Directivas al compilador para que salte a las rutinas de interrupción de baja prioridad cuando se poduza una interrupcón de baja prioridad. -----------------------------------------------------------------------*/ #pragma code InterruptVectorLow = LOW_INT_VECTOR_ADDRESS void InterruptVectorLow(void) _asm goto InterruptHandlerLow

// Salta a las rutinas de interrupción _endasm #pragma code

8.2.2.9. Archivo ‘isr.c’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: isr.c Archivo con las definiciones de las subrutinas de respueta a las interrupciones autor: Víctor Manuel Carayol Martínez fecha: 21-05-04 NOTAS: En los PIC18Fxx existen dos vectores de interrupciónes, uno de de alta y otro de baja prioridad. Aquí se definen sus subrutinas. _______________________________________________________________________*/ #include <p18f252.h> #include "intvect.h" #include "defs.h" #include "funciones.h" #include "potencia.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ extern Byte tick0,tick1L,tick1H,error,aleatorio,paso0; extern Soft_t T4; extern Mensaje trama,trecibida; extern Word timeout4; /*---------------------------------------------------------------------- Aqui defino la subrutina de respuesta a la interrupción de baja prioridad, aqui atiendo las interrupciones generadas por la UART, tanto al enviar como al recbir. -----------------------------------------------------------------------*/ #pragma interruptlow InterruptHandlerLow void InterruptHandlerLow(void) // Recibir -> se genera una int cuando RCREG esta lleno if (PIR1bits.RCIF) // Miro si ha habido errores en la recepción if (RCSTAbits.OERR==1) // OERR ->bit de sobrepasamiento RCSTAbits.CREN = 0;// deshabilito la recepción de datos RCSTAbits.CREN = 1;// deshabilito la recepción de datos error=1; // Hay un error de sobrepasamiento

8. Anexos.

147

if (RCSTAbits.FERR==1) // FERR ->error de trama trecibida.mis[trecibida.numbyte]=RCREG; //Limpia el error error=2; // Hay un error en la trama RxT(&trecibida); // Función para recbir la trama PIR1bits.RCIF = 0; // Limpia el flag // Enviar -> Se genera una int pq el TXREG esta vacio if ((PIR1bits.TXIF)&(trama.ocupado==TRUE))

// Se genera una int pq el TXREG esta vacío TxT(&trama); // Función para enviar la trama trama.numbyte++; // Despues enviaré el siguiente Byte // Aqui no se límpia el flag /*----------------------------------------------------------------------- Aqui defino la subrutina de respuesta a la interrupción de alta prioridad, aqui atiendo las interrupciones generadas por los timers e interrupciones externas. -----------------------------------------------------------------------*/ #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) // Se ha producido un Overflow, cada 465,5us if (INTCONbits.TMR0IF) TMR0 = tick0; // Incicializa el contador hard 465'5us WD PORTC ^= BIT_0; // WathDog periodo de 931us aleatorio++; // De aqui se coge el número aleatorio

// Mantiene el rango exigido por la norma if (aleatorio==(ALEMAX+1)) aleatorio=ALEMIN; T4.count++; // Para el escaneo de los pulsadores // Aqui se mira el estado de las entradas (Pulsadores) if ((T4.count)==0x0016) //cada 10 ms (T4.count) = 0; // Inicializo T4.fun(); // Ejecuto la función asociada // Polling de las teclas // Lo utilizo para enviar o recibir la trama if (trama.ocupado==TRUE) // Siempre que estes enviando Enviar_Ocupado(); else // si no estas recibiendo

// Si esta recibiendo ahora if (trecibida.ocupado==TRUE)

8. Anexos.

148

Recibir_Ocupado(); else // Si no mira si estan enviando información

// Mira si esta ocupada la línea if (PORTCbits.RC4==0)

// Habilito la recepción de datos continua RCSTAbits.CREN = 1;

// Inicializa variable de espera timeout4=0;

// Ahora esta ocupado trecibida.ocupado = TRUE;

// Byte que voy a recibir trecibida.numbyte = 0; // Se ha producido un Overflou INTCONbits.TMR0IF=0;// El flag se limpia aquí. // Se ha producido un Overflow Timer 0, cada 249'4us if (PIR1bits.TMR1IF) // Si se ha producido un Overflow TMR1H = tick1H; // Una interrupción cada 0'2494 ms TMR1L = tick1L; // Una interrupción cada 0'2494 ms paso0++; // Cuenta el tiempo que falta para el pulso if (paso0==0xFF) paso0=0;// Evita que se bloquee el micro // Aqui se controlan los ciclos de regulación de las bombillas Ciclo_Luz(); // Aqui se comprueba si hay que disparar el tiristor de la bombilla Disparo_Luz(); // Se ha producido un Overflou PIR1bits.TMR1IF=0;// El flag se limpia aquí. // Interrupción externa INT0 if (INTCONbits.INT0IF) TMR1H = tick1H; // Una interrupción cada x ms TMR1L = tick1L; // Una interrupción cada x ms paso0=0; // La senyal senoidal pasa por 0 // Se ha producido una interrupción INT0 INTCONbits.INT0IF=0;// Limpia la int externa

8. Anexos.

149

8.2.2.10. Archivo ‘potencia.h’. /*PROYECTO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO: potencia.h Archivo que contiene las definiciones de las funciones de potencia.c autor: Víctor Manuel Carayol Martinez fecha: 21-05-04 NOTAS: Archivo que contiene las definiciones de las funciones que utilizaré en la tarjeta de potencia utilizada en la demo _______________________________________________________________________*/ /*----------------------------------------------------------------------- DECLARACIONES DE FUNCIONES -----------------------------------------------------------------------*/ void Ciclo_Luz (void); // Actua si las bombillas en ciclo ascen/descen void Disparo_Luz (void);// Comprueba si dispara tiristor -> bombilla on void Cicloluz1(void); // Ciclo de luz Bombilla 1 void Cicloluz2(void); // Ciclo de luz Bombilla 2 void Cicloluz3(void); // Ciclo de luz Bombilla 3

8.2.2.11. Archivo ‘potencia.c’. /*PROYECTEO PLC-04 CURSO 2003-04 _________________________________________________________________________ ARCHIVO:potencia.c Aquí estan las definiciones de las funciones de potencia autor: Víctor Manuel Carayol Martinez fecha: 21-05-04 NOTAS: Archivo que contiene la implementación de las funcionesiones que utilizaré en la tarjeta de potencia utilizada en la demo _______________________________________________________________________*/ #include <p18f252.h> #include "defs.h" #include "intvect.h" #include "inicia.h" #include "funciones.h" #include "potencia.h" /*----------------------------------------------------------------------- VARIABLES GLOBALES -----------------------------------------------------------------------*/ extern Byte bom1,bom2,bom3,bombilla1,bombilla2,bombilla3,paso0; extern Soft_t T1,T2,T3; /*----------------------------------------------------------------------- Función para actuar si las bombillas estan en un ciclo ascendente o descendente. -----------------------------------------------------------------------*/ void Ciclo_Luz (void) // Aquí se controlan los ciclos de regulación de las bombillas if(bombilla1 >= 2) T1.count++; if (T1.count==TCAM) // Aqui esperamos xx ms

8. Anexos.

150

T1.count=0; T1.fun(); // Ciclo de luz Bombilla 1 if(bombilla2 >= 2) T2.count++; if (T2.count==TCAM) // Aqui esperamos xx ms T2.count=0; T2.fun(); // Ciclo de luz Bombilla 2 if(bombilla3 >= 2) T3.count++; if (T3.count==TCAM) // Aqui esperamos xx ms T3.count=0; T3.fun(); // Ciclo de luz Bombilla 3 /*----------------------------------------------------------------------- Función que controla tiempo de disparo, cuanto y cando tiempo de disparo. -----------------------------------------------------------------------*/ void Disparo_Luz (void) // Esto compueba si se ha disparado algun tiristor y lo vuelve a 0 if (PORTBbits.RB1==0) PORTBbits.RB1=1; if (PORTBbits.RB2==0) PORTBbits.RB2=1; if (PORTBbits.RB3==0) PORTBbits.RB3=1; // Aquí se comprueba si hay que disparar el tiristor de cada bombilla if (paso0==bom1) PORTBbits.RB1=0; if (paso0==bom2) PORTBbits.RB2=0; if (paso0==bom3) PORTBbits.RB3=0;

8. Anexos.

151

/*----------------------------------------------------------------------- Función que controla la regulación automática de las bombillas. -----------------------------------------------------------------------*/ void Cicloluz1(void) switch (bombilla1) case 0x02: // Bombilla 1 ciclo ascendente bom1--; // Bombilla % if (bom1==BMAX) bombilla1=0x03; // Pasa al ciclo descendente break; case 0x03: // Bombilla 1 ciclo descendente bom1++; // Bombilla % if (bom1>=BMIN) bombilla1=0x02; // Pasa al ciclo ascendente break; /*----------------------------------------------------------------------- Función que controla la regulación automática de las bombillas. -----------------------------------------------------------------------*/ void Cicloluz2(void) switch (bombilla2) case 0x02: // Bombilla 2 ciclo ascendente bom2--; // Bombilla % if (bom2==BMAX) bombilla2=0x03; // Pasa al ciclo descendente break; case 0x03: // Bombilla 2 ciclo descendente bom2++; // Bombilla % if (bom2>=BMIN) bombilla2=0x02; // Pasa al ciclo ascendente break;

8. Anexos.

152

/*----------------------------------------------------------------------- Función que controla la regulación automática de las bombillas. -----------------------------------------------------------------------*/ void Cicloluz3(void) switch (bombilla3) case 0x02: // Bombilla 3 ciclo ascendente bom3--; // Bombilla % if (bom3==BMAX) bombilla3=0x03; // Pasa al ciclo descendente break; case 0x03: // Bombilla 3 ciclo descendente bom3++; // Bombilla % if (bom3>=BMIN) bombilla3=0x02; // Pasa al ciclo ascendente break;

8. Anexos.

153

8.3. Hojas de Características Técnicas.

8.3.1. Datasheet HCPL-800J (PLC Powerline DAA IC).

8. Anexos.

172

8.3.2. Datasheet ST7537HS1 (Home automation modem).

8. Anexos.

182

8.4. Normativas.

8.4.1. UNE-EN 50065-1 (Transmisión de señales por la red eléctrica de baja tensión en la banda de frecuencias de 3 kHz a 148’5 kHz).

9. Referencias y Bibliografía.

9. Referencias.

215

9.1. Referencias.

[1] Página Web http://www.casadomo.com/

[2] Página Web http://www.cebus.com/

[3] Página Web http://www.intellon.com/

[4] Página Web http://www.domosys.com/

[5] Página Web http://www.echelon.com/

[6] Página Web http://www.lonmark.com/

[7] Página Web http://www.microsoft.com/homenet/scp/

[8] Página Web http://www.bacnet.org/

[9] Página Web http://www.havi.org/

[10] Página Web http://www.jini.org/

[11] Página Web http://www.upnp.org/

[12] Página Web http://www.homeapi.org/

[13] Página Web http://www.zigbee.org/

[14] Página Web http://www.homesystems.es/

[15] Página Web http://www.batibus.com/

[16] Página Web http://www.eiba.org/

[17] Página Web http://www.konnex.org/

[18] Página Web http://www.ehsa.com/

[19] Página Web http://www.plcforum.org/ [20] Xavier Hesselbach Serra y Jordi Altés Bosch; Análisis de redes y sistemas de comunicaciones; Edicions UPC; 2002.

[21] AN1714 APLICATION NOTE, STMicroelectronics GROUP OF COMPANIES.

[22] UNE-EN 50065-1 Transmisión de señales por la red eléctrica de baja tensión en la banda de frecuencias de 3 kHz a 148.5 kHz.

[23] Página Web http://www.ds2.es/home/index_total.php

[24] Página Web http://www.tecnocom.es/

[25] Página Web http://www.siemens.es/

[26] José Luís Pelegrí Santamaría y José Antonio Barrado Rodrigo; Control de la Iluminación de una Vivienda Mediante la Red Eléctrica y un PC; proyecto de la ETSE; 2003.

[27] Página Web www.agilent.com/semiconductors/

[28] Página Web www.motorola.com/

[29] Página Web www.microchip.com/

[30] Página Web www.fairchildsemi.com/

[31] Página Web www.st.com/

[32] Página Web www.pujolmuntala.es/

[33] Página Web www.somfy.com/com/index.cfm/

9. Referencias.

216

9.2. Bibliografía.

[1] Jose Mª Quinterito González, Javier Lamas Graziani y Juan D. Sandoval González; Sistemas de Control para Viviendas y Edificios: Domótica; Editorial Thomson & Paraninfo, segunda edición (3311.02 QUI).

[2] Selfa Sastre, Ruben; Desarrollo de Elementos Separadores y de Filtrado para el Acondicionamiento de la red Eléctrica como canal de transmisión en la gestión domótica; Proyecto de la UPC (BRGF-Campus Nord – 1400300944).

[3] Leopoldo Molina y Jose M. Ruíz; Instalaciones automatizadas en viviendas y edificios; Editorial Mc Grau Hill. (3311.02 MOL).

[4] Xavier Hesselbach Serra y Jordi Altés Bosch; Análisis de redes y sistemas de comunicaciones; Edicions UPC; 2002.

[5] M.A Recasens & J. González, "Diseño de circuitos impresos con Orcad Capture y Layout v.9.2". Madrid: International Thomson, cop.1992. (2203.11 REC).

[6] M. Polonia. “Apuntes de la asignatura de Sistemas Electrónicos con Microcontroladores”. Universitat Rovira I Virgili. E.T.S.E Curso Académico 2001-2002.