Sistema Regulador de Temperaturas Con Microcontroladores

170
Sistema de regulación de temperaturas con microcontroladores Proyecto fin de carrera Ingeniería Informática 2003-2004 Manuel Díaz García Dirigido por: D. Lino García Morales D. Antonio Cala Hurtado Universidad Europea de Madrid

description

regulador de temperatura proyecto

Transcript of Sistema Regulador de Temperaturas Con Microcontroladores

Page 1: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Proyecto fin de carrera Ingeniería Informática 2003-2004

Manuel Díaz García

Dirigido por: D. Lino García Morales

D. Antonio Cala Hurtado

Universidad Europea de Madrid

Page 2: Sistema Regulador de Temperaturas Con Microcontroladores
Page 3: Sistema Regulador de Temperaturas Con Microcontroladores

A mis padres y a mis hermanos, sois los verdaderos artífices

de este proyecto

Page 4: Sistema Regulador de Temperaturas Con Microcontroladores

Este documento ha sido preparado usando las plantillas del CERN PSS-05. Las plantillas del CERN PSS-05 han sido preparadas por el Grupo de Tecnología de Información y Programación (división ECP), CERN (Laboratorio Europeo de Física de Partículas) y conforme al estándar de Ingeniería del Software PSS-05 (ISBN 0-13-106568-8) definido por ESA (Agencia Espacial Europea) BSSC (Junta para la Estandarización y Control de Software).

This document has been prepared using the CERN PSS-05 Templates. The CERN PSS-05 Templates have been prepared by the Information and Programming Technology Group, ECP Division, CERN (The European Laboratory for Particle Physics) and conform to the PSS-05 Software Engineering Standards (ISBN 0-13-106568-8) defined by ESA (European Space Agency) BSSC (Board for Software Standardization and Control).[9.1]

Page 5: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Resumen

Este sistema regulará temperaturas usando microcontroladores en un entorno acotado. El objetivo fundamental de la regulación es obtener un equilibrio entre la temperatura, nivel de presión sonora y el consumo de los equipos de ventilación actuales. El sistema de regulación se realizará de manera tal que la integración en el entorno acotado no interfiera en su correcto y seguro funcionamiento.

Los ventiladores estándares (DC 12 v.) y la familia de microcontroladores PIC son candidatos óptimos para la regulación de temperatura por sus cualidades y nivel de integración que ofrecen. En la fase inicial se investigarán; diferentes sistemas de adquisición de temperaturas, modelos de control fácilmente integrables en esta arquitectura y métodos de actuación sobre ventiladores. El objetivo final es el desarrollo y puesta a punto de un sistema en tiempo real que cumpla los requisitos impuestos.

Usando ventiladores se debe tener en cuenta que la ventilación no refrigera, sólo disipa calor. Por ello se deben controlar las variables que faciliten dicha disipación; temperatura del espacio acotado o componente generador de calor, la velocidad del elemento de ventilación que influencia en ese espacio acotado, que es directamente proporcional al flujo de aire que disipará el calor, y el punto de operación definido por el usuario en función de sus necesidades particulares.

Este sistema está destinado tanto a profesionales del sector o grandes empresas industriales que deseen una regulación de temperaturas en espacios acotados y definidos, como al gran público que es entusiasta del mantenimiento de los PCs (cuyo uno de los principales problemas hoy en día es el calor).

Este gran público, por regla general, no posee mucha formación en el ámbito informático y/o electrónico, y la mayoría sin mucho poder adquisitivo, por lo que la línea de investigación dará mucho peso a los factores de coste, facilidad de realización, disponibilidad de materiales necesarios y versatilidad del sistema, dado que tiene que responder a muchas necesidades distintas (tipos de ventiladores, número y diferencias de componentes, flujos de aire de los distintos habitáculos, ...), aunque con unas finalidades comunes.

i

Page 6: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

ii

Page 7: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Summary

Temperatures will be regulated thanks to the system concerning by using microcontrollers in an annotated surrounding. The fundamental regulation finality is obtaining equilibrium among the temperature, sonorous pressure level and the consumption of the present day ventilation equipment. Regulation system will be done in a way so annotated surrounding integration does not interfere with its correct and safe functioning.

Standard fans and PIC microcontroller family are optimum candidates for temperature regulation because of the qualities and integration level they offer. In the beginning period it will be studied different systems of temperature acquisitions, control models easy to be integrated in this architecture and performance methods on ventilators. The final mission is a system development in real time that fulfils the requirements imposed.

While using ventilators, it has to bear in mind that ventilation does not refrigerate, it only dissipates heat. This is why variables that make easy dissipation have to be controlled. Those variables are: temperature of annotated space or components that generates heat, ventilation element velocity that influences in the annotated surrounding (directly proportional to the air flow that will dissipate the heat) and the operation point defined by the user in relation with his particular necessities.

This system is destined both sector professionals or large industrial enterprises who desire temperature regulations in an annotated surrounding and great public who is enthusiastic about the maintenance of their PC´s (as one of the principal problems nowadays it is heat).

As a general rule, this great public does not have a lot of formation in computer science and /or electronics scope, and most of them have not much purchasing power, this is why investigation line will give much more importance to the factor costs,

Accomplishment facility of necessary materials and system versatility since it must respond to many different necessities (different kind of ventilators, components number and differences, different cockpit air flows...) although with common purposes.

iii

Page 8: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

iv

Page 9: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Agradecimientos

Quiero agradecer su ayuda a todas aquellas personas que más o menos me han facilitado el camino para que este proyecto llegara a buen fin.

A mis directores de proyecto, que siempre me pedían más, a ellos les debo que me exija un poco más cada día, no sólo con este proyecto. Gracias.

A profesores de la Universidad Europea de Madrid, que de manera totalmente desinteresada y perdiendo parte de su tiempo me han enseñado infinidad de cosas, ayudándome y guiándome: Diego Gachet, Fernando Berenguer y Diego Galar.

A mis compañeros, que estoicamente soportaban disertaciones sobre PWM, por haberme acompañado en el camino, por compartir buenos y malos momentos.

A toda la gente de www.hardcore-modding.com, no sólo resultasteis de inspiración, sino también de compañía y ayuda en muchos momentos difíciles en que no se lograba ver la luz. Especialmente a Teo, Ygg, Canelo y Autist.

A muchas otras personas que con pequeños detalles y ayudas puntuales me han evitado muchos dolores de cabeza en la realización de este proyecto, especialmente a Pupe, Pilar, Kurt, Miguel, Conrado, Chema, Isabel y Alberto.

A todos vosotros, y a todos los que me haya podido dejar por descuido en el tintero, muchísimas gracias, este proyecto es para vosotros.

v

Page 10: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

vi

Page 11: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Lista de Contenidos

Resumen............................................................................................................... i Summary............................................................................................................. iii Agradecimientos................................................................................................. v

Lista de Contenidos.......................................................................................... vii Lista de Ilustraciones ........................................................................................ ix

Lista de Tablas ................................................................................................... xi 1 Introducción................................................................................................ 1

1.1 Organización de la memoria......................................................................................... 2

2 Descripción del problema.......................................................................... 3 2.1 Descripción .................................................................................................................. 3 2.2 Especificación .............................................................................................................. 5

2.2.1 Requisitos de usuario ....................................................................................... 5 2.2.2 Requisitos de sistema..................................................................................... 13

2.3 Ámbito............................................................................................................................ 19

3 Estado del arte.......................................................................................... 21

4 Solución propuesta .................................................................................. 25 4.1 Descripción ................................................................................................................ 25 4.2 Hardware .................................................................................................................... 26

4.2.1 Regulación de velocidad en motores DC....................................................... 26 4.2.2 Microcontroladores........................................................................................ 30 4.2.3 Microcontrolador 16F876 .............................................................................. 32 4.2.4 Interfaz de usuario ......................................................................................... 35 4.2.5 Adquisición de datos...................................................................................... 38 4.2.6 Conjunto ........................................................................................................ 40 4.2.7 Prototipo hardware final ................................................................................ 61

4.3 Software ..................................................................................................................... 67 4.3.1 Casos de uso................................................................................................... 67 4.3.2 Flujo de datos................................................................................................. 79 4.3.3 Programación del 16F876.............................................................................. 80 4.3.4 Estructura del programa................................................................................. 84 4.3.5 Algoritmo de control...................................................................................... 87

4.4 Presupuesto ................................................................................................................ 90

5 Pruebas ..................................................................................................... 92 5.1 Definición del sistema de pruebas .................................................................................. 92 5.2 Pruebas físicas ............................................................................................................ 95 5.3 Pruebas lógicas........................................................................................................... 96

vii

Page 12: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

6 Discusión y conclusiones ......................................................................102 6.1 Discusión de resultados ............................................................................................102 6.2 Conclusiones ............................................................................................................103

7 Evolutivos................................................................................................104

8 Definiciones.............................................................................................106 8.1 Términos...................................................................................................................106 8.2 Acrónimos ................................................................................................................108 8.3 Abreviaturas .............................................................................................................110

9 Referencias..............................................................................................112

Apéndice A.......................................................................................................114 Código fuente......................................................................................................................114

viii

Page 13: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Lista de Ilustraciones

Gráfico 1: Relación entre potencia consumida y temperatura ...........................................4

Grafico 2: Digital Doc 5+..................................................................................................21

Gráfico 3: Vantec Vortex..................................................................................................21

Gráfico 4: CoolerMaster AeroGate III ..............................................................................21

Gráfico 5: Esquema de funcionamiento del TC646 de Microchip....................................23

Gráfico 6: Distintos ciclos de trabajo de un PWM............................................................27

Gráfico 7: PWM a partir de comparadores ......................................................................28

Gráfico 8: Diagrama de un sistema microcontrolado.......................................................28

Gráfico 9: Configuraciones del controlador de motores DC, L293B ................................30

Gráfico 10: Diagrama por bloques de un microcontrolador .............................................30

Gráfico 11: Arquitectura Harvard .....................................................................................33

Gráfico 12: Patillaje del microcontrolador Microchip 16F876...........................................33

Gráfico 13: Patillaje del PCF8574....................................................................................36

Gráfico 14: Dimensiones del LCD DV24200....................................................................37

Gráfico 15: Patillaje de un MAX233A...............................................................................37

Gráfico 16: Patillaje de un MAX233A...............................................................................38

Gráfico 17: Circuito protector de LM35 ............................................................................39

Gráfico 18: Esquema eléctrico de la placa principal ........................................................41

Gráfico 19: Esquema eléctrico de la placa modular ........................................................43

Gráfico 20: Taladros y componentes de la placa principal ..............................................47

Gráfico 21: Fotolito placa principal, capa superior...........................................................49

Gráfico 22: Fotolito placa principal capa inferior..............................................................51

Gráfico 23: Taladros y componentes de la placa modular...............................................53

Gráfico 24: Fotolito placa modular capa superior ............................................................55

Gráfico 25: Fotolito placa principal capa inferior.............................................................57

Gráfico 26: Placa modular ...............................................................................................59

Gráfico 27: Placa modular montada y testeada...............................................................59

ix

Page 14: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Gráfico 28: Placa principal montada y testeada...............................................................59

Gráfico 29: Placa de pruebas con placa modular integrada ............................................60

Gráfico 30: Empaquetado industrial de las pcb necesarias para el sistema....................61

Gráfico 31: Componentes de la interfaz de usuario.........................................................62

Gráfico 32: Interfaz de usuario montada en el frontal ......................................................62

Gráfico 33: Parte trasera del frontal .................................................................................62

Gráfico 34: Sistema completo montado ...........................................................................63

Gráfico 35: Módulo de sonido y regulador de voltaje.......................................................63

Gráfico 36: Conectores para la interfaz (entrada, salida) ................................................64

Gráfico 37: MAX233 y los dos demultiplexores................................................................64

Gráfico 38: Conectores externos generales del sistema .................................................65

Gráfico 39: Placa modular completa ................................................................................65

Gráfico 40: Soldaduras de la placa modular ....................................................................66

Gráfico 41: Prototipo hardware final.................................................................................66

Gráfico 42: Diagrama de casos de uso............................................................................67

Gráfico 43: Diagrama de flujo de datos............................................................................79

Gráfico 44: Downloader a bootloader de Petr Kolomaznik ..............................................81

Gráfico 45: Protocolo I2C..................................................................................................83

Gráfico 46: Estructura del software del sistema...............................................................84

Gráfico 47: Esquema de control típico sobre procesos ...................................................87

Gráfico 48: Esquema de control con software embebido ................................................87

Gráfico 49: Caja ATX Casetek 1019 ................................................................................92

Gráfico 50: Modificación de cableado de ventilador ........................................................93

Gráfico 51: Sonda en el disipador de los procesadores ..................................................94

Gráfico 52: Sonda en el chasis del disco duro superior...................................................94

Gráfico 53: Sistema instalado completamente.................................................................95

Gráfico 54: Valores tridimensionales de sonoridad del sistema ......................................96

x

Page 15: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

Lista de Tablas

Tabla 1: Comparativa entre sistemas comerciales de regulación de ventiladores ..........22

Tabla 2: Comparativa de microcontroladores ..................................................................31

Tabla 3: Estructura de almacenamiento de datos ...........................................................86

Tabla 4: Características del Enermax UC-8FAB .............................................................93

Tabla 5: Voltajes CMOS ................................................................................................107

Tabla 6: Sistema de numeración BCD...........................................................................108

xi

Page 16: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores

xii

Page 17: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Introducción

1 Introducción

La idea de este sistema nació a partir de la necesidad de poder mantener un servidor en condiciones físicas óptimas de funcionamiento de manera desatendida, ofreciendo un compromiso entre el consumo de los medios de disipación del calor, así como sus alteraciones al medio que los rodea, y el respeto a la integridad del hardware que mantiene a temperaturas seguras de funcionamiento. Este concepto planteaba varias cuestiones.

5

10

15

20

25

30

35

El sistema debería saber que tipo de componente o naturaleza del espacio acotado regula en cada momento, conociendo todas sus variables necesarias para dicha regulación. Algunas de ellas las debería tomar en tiempo real, como la cantidad de aire que suministra por medio del control de la velocidad del ventilador o la temperatura del componente o espacio generador de calor; pero otras las tenía que tener almacenadas previamente, como la temperatura de funcionamiento óptima de ese espacio regulado.

De momento, el sistema ya debe contar con algún tipo de memoria interna, tener distintos tipos de sensores o elementos de medición para la temperatura y para el flujo de aire, y además el usuario debe conocer qué temperatura debe marcar para cada espacio acotado regulado en concreto. Normalmente los sistemas generadores de calor no tienen una temperatura específica para funcionar, sino que sus fabricantes definen un rango de temperaturas donde aseguran que el componente tiene un comportamiento estable y no corre riesgo físico de deterioro. Ese rango debe conocerlo el usuario y memorizar en el sistema regulador que punto de control desea para ese espacio acotado en concreto en función de sus necesidades.

La introducción de datos por parte del usuario genera nuevas necesidades. Se precisa de una (al menos) interfaz de usuario para poder introducirle los datos y para poder ver los datos que tiene introducidos. Además el sistema debería tener algún sistema para poder comunicarse con el usuario sin una intervención inmediata (por ejemplo para avisar de algún tipo de alarma).

Cada nueva necesidad genera nuevas opciones, toma de decisiones, valoraciones de integración de nuevos componentes en el sistema, pruebas de estos y efectos colaterales sobre los elementos ya existentes.

Esta memoria describirá todo el proceso de desarrollo del sistema. Desde su nacimiento como idea, las pruebas de un prototipo integrado en una producción real, distintas posibilidades a las decisiones tomadas, hasta la discusión de los resultados obtenidos mostrando posibles evolutivos al sistema desarrollado.

1

Page 18: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Introducción

1.1 Organización de la memoria

En primer lugar, se describe en profundidad el problema mostrando las necesidades claras y unívocas que tiene el sistema. Con ellas se definen los requisitos de usuario, a partir de los cuales, teniendo en cuenta las restricciones que marcan los objetivos principales del sistema, se definen los requisitos del sistema. Una vez definidos los requisitos se realiza una especificación completa del sistema, expresando claramente sus funcionalidades y su alcance; qué hace y qué no hace.

40

45

50

55

60

65

Tras la especificación del producto, se muestra un breve estado del arte en la actualidad. No sólo del producto definido en comparación con otros que tengan similar definición, sino también de las tecnologías que se pueden usar en el sistema para cumplir las especificaciones definidas.

Una vez vistas las distintas opciones y las posibles soluciones existentes en la actualidad al problema, se detalla la solución propuesta. Cómo se llega a ella, razones de las decisiones tomadas, diagramas de estados, de flujo y de casos de uso del sistema. Después y a partir del análisis realizado se diseña un prototipo. Con este diseño se procede a la realización física del prototipo para su entrada en pruebas.

En la siguiente parte se detalla el montaje e instalación del prototipo, con su manual de usuario, así como las pruebas realizadas con él comprobando que se cumplen los requisitos del sistema definido.

Estas pruebas producen unos resultados que se evalúan comprobando que el sistema cumple los requisitos definidos llegando el objetivo marcado. Los resultados se discuten, explicando efectos no esperados así como razonando los sí esperados o sus posibles desviaciones.

A partir de la discusión de las pruebas se realizan conclusiones sobre el sistema, abriendo nuevos caminos a posibles ampliaciones futuras, mostrando qué aspectos, funcionalidades o soluciones que exceden del ámbito de este sistema serían interesantes de integrar o colaborar con él.

Para terminar se muestra la relación de las referencias, definiciones y acrónimos usados en el documento, así como diversa información relevante ordenada en los distintos apéndices.

La memoria tiene una numeración de líneas en sus márgenes para favorecer la referenciación desde otros documentos, publicaciones o citas.

2

Page 19: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

2 Descripción del problema

En este capítulo se describirá en detalle el problema en concreto. El usuario marca una serie de funcionalidades que desea que tenga el producto, definiendo sus requisitos y restricciones, los cuales marcarán los requisitos del sistema.

70

75

80

85

90

95

100

2.1 Descripción

La temperatura generada por los componentes electrónicos es, en la mayoría de los casos, un problema a resolver por los fabricantes del sistema en cuestión. Para ello el producto incluye rejillas de ventilación, disipadores, ventiladores, equipos de refrigeración… Su misión es ofrecer un producto que se mantenga en las condiciones de trabajo óptimas.

Un usuario cuando compra piezas para realizar un producto a su medida, debe realizar ese mismo trabajo, para asegurar que todas van a trabajar en condiciones óptimas, usando las especificaciones que ofrece el fabricante. En la mayoría de los casos, un usuario normal, no dispone de medios para asegurar un entorno libre de ruidos que aseguren unas constantes en dichas condiciones, por ello se deben regular según las necesidades en tiempo real.

Para no tener que regular en tiempo real habitualmente se sobredimensionan los medios para mantener los componentes dentro de su rango de funcionamiento contando con un margen normal de operación. Por ejemplo, no se usa el mismo margen para un producto destinado a estar al aire libre que para estar en el interior de un edificio. El sobredimensionar los medios evita la necesidad de realizar cambios en tiempo real, genera productos versátiles y de sencillo manejo e instalación. Al ser sencillos y versátiles, su producción en serie los abarata haciéndolos todavía más populares.

Lo que no se suele tener en cuenta cuando se sobredimensiona una solución para un problema de calentamiento son los costes producidos a largo plazo. Continuamente se está gastando el máximo de energía para disipar un calor del que no se conoce el valor, ni se conoce la necesidad de disipación. Continuamente el elemento que disipa el calor está trabajando al cien por ciento, acortando así su esperanza de vida. Continuamente, en la mayoría de los casos, el elemento disipador está produciendo ruidos en el entorno.

Continuamente se está suponiendo que se necesita esa disipación para un correcto funcionamiento. Esto es todavía más patente tratándose de disipación de calor de componentes electrónicos que no siempre producen el mismo calor, sino que este varía proporcionalmente a la intensidad de trabajo.

3

Page 20: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

En el caso de los ordenadores, que muchos usuarios configuran a su gusto, ninguno de los principales componentes generadores de calor, trabajan al cien por ciento continuamente, por lo tanto no generan siempre el mismo calor, ni tienen las mismas necesidades de disipación en cada momento.

105

110

115

120

Gráfico 1: Relación entre potencia consumida y temperatura

En el Gráfico 1 se puede observar como la temperatura depende totalmente de la potencia consumida por el componente electrónico, y la potencia consumida depende de la cantidad de uso.

El sistema tiene que regular la temperatura asegurando que el componente trabaja dentro de su margen de seguridad. Dicho margen lo proporciona el usuario y el sistema controlará continuamente que la temperatura del componente esté dentro de ese margen generando más o menos disipación de calor.

El sistema tiene que estar diseñado para su funcionamiento en una caja de ordenador, regulando la temperatura de sus componentes internos siguiendo los razonamientos antes expuestos.

4

Page 21: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

2.2 Especificación

2.2.1 Requisitos de usuario

Identificador REQU-01 Regulación automática

Descripción El sistema debe mantener una temperatura marcada en un entorno acotado, independientemente del cambio de las condiciones

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad Ante cambios de temperatura ambiente y cambios en el ciclo de trabajo, el sistema mantiene el entorno a la temperatura marcada (medidor de temperaturas)

Identificador REQU-02 Punto de actuación

Descripción

Para el cumplimiento del requisito REQU-01 la temperatura marcada, punto de actuación, estará dentro del rango de temperatura de operación del entorno condicionado por los rangos de temperaturas externas

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad

El punto de actuación estará dentro de rango acotado entre el rango de temperatura de funcionamiento del entorno y el rango de temperatura del entorno condicionada por los agentes externos (medidor de temperaturas y especificaciones del entorno de operación)

5

Page 22: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-03 Multiplicidad de regulación

Descripción El sistema debe ser capaz de cumplir el REQU-01 en dos, como mínimo, entornos distintos simultáneamente

Importancia Esencial Prioridad 1

Estabilidad Total

Verificabilidad

Ante cambios de temperatura ambiente y cambios en el ciclo de trabajo, el sistema mantiene dos entornos distintos a sus temperaturas marcadas (distintas o iguales) (medidores de temperaturas simultáneos)

Identificador REQU-04 Actuación

Descripción Para cumplir el requisito REQU-01 el sistema debe poder actuar sobre uno o más componentes disipadores de calor

Importancia Negociable Prioridad 2

Estabilidad Total

Verificabilidad Para mantener una temperatura el sistema puede actuar sobre uno o más ventiladores (medidor de RPM)

Identificador REQU-05 Actuador

Descripción Para cumplir el requisito REQU-01 el sistema debe poder actuar sobre ventiladores estándar de cajas de ordenador (DC 12 V.)

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema actúa sobre la velocidad de ventiladores estándar de 12 voltios (ventilador estándar pc 12 voltios)

6

Page 23: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-06 Modificación de punto de operación

Descripción El sistema debe poder cambiar las temperaturas marcadas en tiempo real

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema mantiene un entorno a la temperatura marcada hasta que ésta se cambia, manteniéndolo a partir de ese momento a la nueva temperatura (medidor de temperatura)

Identificador REQU-07 Salida de datos

Descripción El sistema debe poder comunicarse con el usuario en tiempo real por, al menos, un método de visualización

Importancia Esencial Prioridad 1

Estabilidad Total

Verificabilidad El sistema ofrece información al usuario por algún sistema de comunicación digital (observar información en tiempo real)

Identificador REQU-08 Salida de datos (temperatura)

Descripción El sistema debe poder mostrar al usuario la temperatura de cada entorno, en tiempo real, por el método de comunicación del requisito REQU-07

Importancia Esencial Prioridad 2

Estabilidad Total

Verificabilidad El sistema ofrece información al usuario por algún sistema de comunicación digital (visualización de información y medidor de temperatura)

7

Page 24: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-09 Salida de datos (RPM)

Descripción El sistema debe poder mostrar al usuario la actuación sobre cada uno de los componentes disipadores de calor, en tiempo real, por el método de comunicación del requisito REQU-07

Importancia Esencial Prioridad 4

Estabilidad Total

Verificabilidad El sistema ofrece información al usuario por algún sistema de comunicación digital (visualización de información y medidor de RPM)

Identificador REQU-10 Entrada de datos

Descripción El sistema debe ofrecer al usuario un sistema de entrada de datos digital en tiempo real

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema recoge información al usuario por algún sistema de comunicación digital (entrada de información, REQU-06)

Identificador REQU-11 Regulación manual

Descripción El sistema debe poder estacionar los actuadores, a un nivel determinado por el usuario para cada uno de ellos independientemente, indefinidamente en el tiempo

Importancia Negociable Prioridad 3

Estabilidad Total

Verificabilidad El sistema actúa sobre todos los ventiladores para situarlos en un estado definido por el usuario por el sistema de entrada de datos (medidor de RPM)

8

Page 25: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-12 Regulación fija

Descripción El sistema debe poder estacionar los actuadores, a un nivel determinado por el usuario para todos ellos simultáneamente, indefinidamente en el tiempo

Importancia Negociable Prioridad 4

Estabilidad Total

Verificabilidad El sistema actúa sobre todos los ventiladores para situarlos en un estado definido por el usuario por el sistema de entrada de datos (medidor de RPM)

Identificador REQU-13 Persistencia de datos

Descripción El sistema debe mantener los datos de configuración entre distintas sesiones

Importancia Esencial Prioridad 5

Estabilidad Total

Verificabilidad

El sistema mantiene la última configuración introducida en el sistema, independientemente de haberse apagado tras la introducción del dato (visualización de información en tiempo real)

Identificador REQU-14 Recuperación de datos

Descripción El sistema debe poder leer la última configuración en cualquier momento que el usuario desee

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad

El sistema recupera y aplica la última configuración introducida en el sistema en cualquier momento que el usuario decida, independientemente de haberse realizado modificaciones desde el último (visualización de información en tiempo real)

9

Page 26: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-15 Guardado de datos

Descripción El sistema debe retener los datos de configuración en cualquier momento que el usuario desee

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema guarda la configuración actual introducida en el sistema, para recuperarla tras un posible reiniciado o instrucción de lectura de configuración (REQU-14)

Identificador REQU-16 Continuidad mínima

Descripción El sistema nunca debe apagar, por su propia decisión, completamente los actuadores, deben tener un punto de operación mínimo

Importancia Esencial Prioridad 5

Estabilidad Sujeto a cambios

Verificabilidad El sistema nunca apaga completamente los actuadores hasta en el caso que no se precise actuación, se configuran al mínimo valor (medidor de RPM)

Identificador REQU-17 Alarma

Descripción El sistema debe avisar al usuario cuando alguno de los actuadores deje de funcionar

Importancia Esencial Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema avisa cuando uno de los actuadores deja de funcionar (visualización de salida de datos y medidor de RPM)

10

Page 27: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-18 Ahorro

Descripción El sistema completo no debe consumir, de media en el tiempo, más corriente de la consumida por los actuadores si estuvieran configurados sobredimensionados

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema no consume más de lo que consumirían los actuadores independientemente en su configuración sobredimensionada (medidor de corriente continua)

Identificador REQU-19 Presión sonora

Descripción El sistema completo no debe producir, de media en el tiempo, más presión sonora de la producida por los actuadores si estuvieran configurados sobredimensionados

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad

El sistema no produce más presión sonora de lo que producirían los actuadores independientemente en su configuración sobredimensionada (medidor de presión sonora)

Identificador REQU-20 Emergencia

Descripción El sistema debe poder ser apagado completamente en caso de emergencia

Importancia Esencial Prioridad 5

Estabilidad Total

Verificabilidad El sistema dispone de un interruptor que lo apaga completamente (encendido/apagado)

11

Page 28: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQU-21 Dimensiones

Descripción El sistema deberá poder ser instalado en una caja de ordenador de formato ATX con una bahía de 5 ¼” libre

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema se instala en una bahía de 5 ¼” de una caja formato ATX (metro)

Identificador REQU-22 Seguridad

Descripción El sistema ante ausencia de configuración debe asumir una configuración sobredimensionada

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema pasa a estado sobredimensionado cuando no se le haya definido ningún tipo de configuración (medidor de RPM)

Identificador REQU-23 Coste

Descripción El sistema producido en serie no deberá tener un coste superior al de los productos de funcionalidades similares existentes en el mercado

Importancia Esencial Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema, pasado a producción en serie no cuesta más que otros sistemas de funcionalidades similares existentes (comparación precios y funcionalidades)

12

Page 29: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

2.2.2 Requisitos de sistema

Identificador REQS-01 Alimentación

Descripción El sistema estará alimentado por 5 y 12 v.

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema dispone de dos entradas de tensión, independientes entre sí, para 5 y 12 v. (medidor de voltaje)

Identificador REQS-02 Conector alimentación

Descripción El sistema dispondrá de conectores adecuados para alimentación desde una caja de pc estándar ATX

Importancia Negociable Prioridad 5

Estabilidad Sujeto a cambios

Verificabilidad

El sistema toma la alimentación de la fuente de alimentación ATX según el requisito de usuario REQU-21 por medio de un conector adecuado a las salidas del formato ATX (instalación)

Identificador REQS-03 Conectores actuadores

Descripción El sistema dispondrá de conectores adecuados para ventiladores estándares de 12 v.

Importancia Esencial Prioridad 5

Estabilidad Sujeto a cambios

Verificabilidad El sistema dispone de conectores para ventiladores estándar (instalación)

13

Page 30: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQS-04 Conectores medidores

Descripción El sistema dispondrá de conectores adecuados para poder realizar las lecturas de temperatura de los distintos entornos

Importancia Esencial Prioridad 5

Estabilidad Sujeto a cambios

Verificabilidad El sistema dispone de conectores para sondas de temperatura (instalación)

Identificador REQS-05 Funcionalidad única

Descripción El sistema al activar un tipo de configuración, debe desactivar los otros tipos

Importancia Esencial Prioridad 1

Estabilidad Sujeto a cambios

Verificabilidad Activar

Identificador REQS-06 Inmunidad

Descripción El sistema no debe verse perturbado en su funcionalidad por radiaciones electro magnéticas generadas por los componentes estándar de una caja de pc ATX

Importancia Negociable Prioridad 5

Estabilidad Sujeto a cambios

Verificabilidad El sistema funciona correctamente a pesar de estar en un medio con fuertes radiaciones electro magnéticas (correcto funcionamiento tras instalación)

14

Page 31: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQS-07 Aislamiento

Descripción El sistema no debe perturbar la funcionalidad de los componentes estándar de una caja de pc ATX

Importancia Esencial Prioridad 1

Estabilidad Total

Verificabilidad El sistema no interfiere en el funcionamiento de los distintos componentes de la caja (correcto funcionamiento tras instalación)

Identificador REQS-08 Robustez

Descripción

El sistema, tras su correcta instalación, no debe realizar operaciones para las que no está diseñado según sus especificaciones a pesar de entradas de información incorrectas por parte del usuario

Importancia Esencial Prioridad 4

Estabilidad Total

Verificabilidad

El sistema verifica que las entradas al sistema son algunas de las esperadas para realizar las funcionalidades, en caso contrario no realiza ninguna operación (no realizar operaciones ante entradas no definidas)

Identificador REQS-09 Eficiencia

Descripción El sistema no deberá realizar operaciones inútiles para cumplir con su funcionalidad durante su funcionamiento normal

Importancia Negociable Prioridad 6

Estabilidad Total

Verificabilidad

El sistema no pierde recursos realizando operaciones que el usuario no le haya definido, o no las tenga definidas para el cumplimiento de alguna operación (funcionamiento correcto según especificaciones)

15

Page 32: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQS-10 Ayuda

Descripción El sistema deberá ofrecer al usuario en el sistema de salida de datos ayudas a las operaciones que puede realizar en cada momento

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema muestra indicaciones de las posibilidades de operación posibles en cada momento al usuario (visualización del sistema de salida)

Identificador REQS-11 Actualización

Descripción El sistema debe poder actualizarse en caliente

Importancia Esencial Prioridad 0

Estabilidad Total

Verificabilidad El sistema se puede actualizar en caliente, tanto a nivel hardware (añadir nuevos actuadores) como a nivel software (distintas funcionalidades) (actualizar en caliente el sistema)

Identificador REQS-12 Humedad funcionamiento

Descripción El sistema debe funcionar correctamente en un entorno de humedad del rango 0-98%

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema funciona correctamente dentro de ese rango de humedades (funcionamiento entre 0-98% humedad)

16

Page 33: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQS-13 Temperatura funcionamiento

Descripción El sistema debe funcionar correctamente en un entorno con temperaturas del rango 0-90º C

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema funciona correctamente dentro de ese rango de temperaturas (funcionamiento entre 0-90º C)

Identificador REQS-14 Temperatura almacenamiento

Descripción El sistema debe funcionar correctamente tras haber sido almacenado en un entorno con temperaturas del rango -10-100º C

Importancia Negociable Prioridad 6

Estabilidad Sujeto a cambios

Verificabilidad El sistema funciona correctamente tras haber sido almacenado dentro de ese rango de temperaturas (funcionamiento tras almacenamiento entre -10-100º C)

Identificador REQS-15 Sonido

Descripción El sistema debe poseer un medio de emitir sonidos como sistema de comunicación adicional

Importancia Negociable Prioridad 3

Estabilidad Total

Verificabilidad El sistema tiene la capacidad de emitir sonidos (en caso de alarma)

17

Page 34: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

Identificador REQS-16 Conector comunicación

Descripción El sistema debe poseer un conector para poder comunicarse con otros sistemas

Importancia Negociable Prioridad 0

Estabilidad Total

Verificabilidad El sistema incluye un conector de comunicación para comunicarse con otros sistemas (actualización)

Identificador REQS-17 Intensidad admitida

Descripción El sistema debe poder alimentar ventiladores de 12 v. y 1 A como mínimo

Importancia Negociable Prioridad 0

Estabilidad Total

Verificabilidad El sistema está preparado para alimentar, de forma segura y continuada, ventiladores de 12 V. y un consumo de 1 A. (instalación)

18

Page 35: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

2.3 Ámbito 120

El sistema no tiene como objetivos:

Ofrecer soluciones específicas para distintos sistemas de ventilación/refrigeración para la disipación de calor de componentes electrónicos (disipadores, RL, Peltier, tipos de ventiladores, etc.…) en función de sus características especiales.

Ofrecer soluciones específicas para componentes caloríficos específicos, ni en función de sus cualidades ni disipación del calor.

125

130

135

140

Definir soluciones globales de ventilación/refrigeración para un usuario en particular, lo que único que ofrece es la capacidad de actualización para que el usuario lo configure a su medida.

Ofrecer un control preciso sobre la velocidad de ventiladores. El control que se realiza es por pasos discretos, y usado únicamente para realizar una regulación.

Ofrecer cualquier tipo de control entre diferentes entornos regulados. Cada entorno es independiente de los demás, y el sistema regula cada uno independientemente.

Ofrecer cualquier tipo de control sobre la eficiencia de los distintos componentes regulados. Los componentes de los entornos generadores de calor tendrán sus propias especificaciones y características, en función de las cuales serán más o menos eficientes. El sistema no controla su eficiencia, tan sólo la temperatura medida para ese entorno.

Memorizar los aspectos de visualización o de entrada de datos del usuario. El sistema se inicia siempre en la misma vista, esperando siempre unas entradas iniciales. El usuario puede grabar toda la configuración interna del sistema, pero no la vista o entradas por defecto.

19

Page 36: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Descripción del problema

20

Page 37: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Estado del arte

3 Estado del arte

Los periféricos de ordenador destinados a un mejor rendimiento de éste, a mejorar su apariencia o a realizar funciones que no son propias del hardware común, se engloban dentro de una materia autodesignada por sus entusiastas como modding.

145

Dentro de esta materia se pueden encontrar cientos de diseños de baybus, fanbus, reobus, electrobus, todos ellos destinados a regular la velocidad de ventiladores. De todos estos diseños hechos por particulares y de modelos comerciales, existen diversas características que los diferencian entre sí.

150

Por la gran cantidad de productos existentes con este propósito sólo se van a mencionar los que más se acercan a las premisas de este proyecto: control y adaptación digital. Con estas características sólo encontramos tres productos: El Digital Doc 5+ [9.2] de Macpower, el Vantec Vortex [9.3] y el CoolerMaster AeroGate III [

155 9.4] (revisada su última versión).

Grafico 2: Digital Doc 5+

160 Gráfico 3: Vantec Vortex

Gráfico 4: CoolerMaster AeroGate III

21

Page 38: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Estado del arte

A continuación se presenta una tabla comparando las características más importantes.

165

Características DD5+ Vortex AeroGateIII HM-Baybus

Entrada Digital X X X X

Monitorización Digital X X X X

Número máximo de ventiladores 8 1 4 12

Apagado/encendido

ventiladores X X X X

Regulación variable

ventiladores -- -- -- X

Regulación automática --* --* -- X

Monitorización Tª X X X X

Carga máxima 1 A 1 A 1.5 A 1 A

Variables externas -- -- -- X

Comunicación -- -- -- X

Coste aproximado 90 € 50 €* 50 € <120 €*

Tabla 1: Comparativa entre sistemas comerciales de regulación de ventiladores

* Notas: El Digital Doc (DD5) enciende y apaga los ventiladores según un margen definido por el usuario entre 5-10-15 y 20% sobre la temperatura de acción. El Vortex permite encender el ventilador, apagarlo y ponerlo a mitad de potencia. Su precio puede parecer elevado pero es una unidad de ventilación para discos duros con un ventilador silencioso tipo vortex. El precio del HM-Baybus es aproximado al alza (hay componentes similares que pueden costar más o menos, según la disponibilidad de estos) y sólo en material para un modelo que controle 12 ventiladores.

170

175 Como se observa en la tabla comparativa, la gran diferencia del proyecto con respecto a los productos comerciales más ambiciosos es la regulación totalmente variable de los ventiladores así como la posibilidad de incluir en el control variables externas y poderse comunicar con otros dispositivos.

22

Page 39: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Estado del arte

Con respecto a las tecnologías usadas en este campo, la regulación se suele hacer por potenciómetros en analógico y por PWM en digital. Estos métodos no cambian, son los más adecuados y los más usados para hacer este tipo de regulación. Lo que puede cambiar es donde esté aplicada esta regulación.

180

185

190

Puede aplicarse directamente en el agente actuador. En este caso el ventilador es “inteligente” puesto que lleva un circuito de control propio. O puede aplicarse externamente a él. Dentro de las soluciones externas se puede usar circuitos integrados específicamente diseñados para esta función o bien realizar placas a medida para dicho control. En este último caso se podrían hacer soluciones mixtas.

Los ventiladores inteligentes de 3 y de 5 hilos han alcanzado una gran aceptación a lo largo de los últimos años. Estos ventiladores proporcionan una tercera señal (salida de tacómetro) y un sensor de temperatura interna o externa. La medida de la temperatura de escape, como hace la mayoría de los ventiladores inteligentes, puede perjudicar al funcionamiento del sistema a causa del tiempo transcurrido entre la generación de calor extra localizada y el incremento de la temperatura del aire de escape.

Las placas controladoras se presentan como soluciones completas tanto CA como CC. Estas soluciones aportan un control avanzado, si bien resultan de coste elevado y no son óptimas para aplicaciones críticas en materia de espacio ocupado.

195

200

Estas placas pueden contener todo tipo de componentes según sus funcionalidades, pero normalmente incluyen circuitos integrados especializados, que tienen todo lo necesario para convertirse en un mini controlador para motores.

Gráfico 5: Esquema de funcionamiento del TC646 de Microchip

Por ejemplo, el Gráfico 5 nos muestra el esquema de funcionamiento del TC646 de microchip. La señal de temperatura se genera por medio de un termistor NTC de 205

23

Page 40: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Estado del arte

bajo coste. El ciclo de trabajo de salida, y en consecuencia la velocidad del ventilador, aumenta a medida que se incrementa la tensión en Vin. La salida de error en el ventilador se activa cuando no se detectan pulsos consecutivos en la patilla SENSE (R4 y C2), indicando así que el ventilador está atascado, abierto o desconectado. 210

215

220

El TC646 detiene automáticamente el funcionamiento del ventilador cuando la temperatura medida se encuentra por debajo de un valor mínimo establecido y programado por el usuario (fijado por R1 y R2), punto en el cual no se requiere ya la ventilación forzada de aire. Además del TC646, Microchip dispone de dos CI controladores de ventilador más con diversas combinaciones de funciones:

1. El TC642: idéntico al TC646, excepto en el hecho de que no incluye el modo de paro automático

2. El TC648: un controlador de la velocidad del ventilador del tipo PWM con modo de paro automático y detección de fallo por sobretemperatura.

Este tipo de circuitos son muy interesantes para este tipo de tareas, pero tienen un inconveniente (para sistemas de montaje por usuarios normales) de mucho peso; su fabricación, por regla general, es en tecnología SMD.

24

Page 41: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4 Solución propuesta

En este capítulo se describe detalladamente la solución propuesta. Por tratarse de un sistema de software embebido, se divide la exposición del sistema en dos partes; hardware y software.

225

230

235

240

245

250

En la primera se muestra el hardware del sistema, componentes, características y decisiones tomadas a partir de los requisitos del sistema.

En la segunda se describe el software embebido en el hardware. El diseño a partir de los requisitos del usuario, como maneja los recursos y las características especiales de los distintos componentes del hardware, así como posibles problemas en la implementación.

4.1 Descripción

Se propone un sistema de software embebido, por el cual se controla el hardware de determinada manera para cumplir con los requisitos del sistema y añadir, si procede, funcionalidades útiles para el cumplimiento de objetivos.

El hardware consta de un dispositivo programable central que controlará el funcionamiento general de todo el sistema a partir de las entradas del usuario a través de un teclado, para realizar operaciones de funcionamiento; y a través del estándar RS232 para su reprogramación en caliente.

Aparte de las entradas del usuario también tiene como entrada datos de otros dispositivos programables existentes en el sistema, cuya tarea es la de adquisición de datos, temperaturas y RPM, de una manera previamente establecida a través de programación embebida (también por el estándar RS232) y la del control específico para cada elemento actuador de cada entorno, modificando su PWM de alimentación.

Las salidas del dispositivo central serán un visualizador de cristal líquido alfanumérico y un generador de sonido. El puerto RS232 puede ser usado como salida por cualquiera de los dispositivos programables existentes en el sistema, tanto central como módulos. Estos últimos tienen como salida el voltaje que regula, en concreto, cada actuador sobre la temperatura de cada entorno calorífico.

Los dispositivos programables disponen de un sistema de comunicación interno, para que el dispositivo central pueda leer y recuperar información de ellos (maestro/esclavo).

25

Page 42: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.2 Hardware 255

260

265

270

275

280

285

Los requisitos del sistema se desglosan en todos aquellos conceptos que son propios de hardware. A partir de estos conceptos se estudian sus prioridades, dependencias, restricciones y efectos sobre el sistema global. Sobre ellos se estudian, antes de su implantación definitiva los objetivos del sistema.

El principal objetivo de este sistema es regular la disipación de calor de un entorno acotado por medio de la regulación del flujo de aire que ventilará ese entorno. El primer problema a resolver es como se realiza esa regulación.

4.2.1 Regulación de velocidad en motores DC

El hacer una regulación sobre ventiladores estándar DC 12 V. implica regular la velocidad de un motor de corriente continua de escobillas, que son los frecuentemente usados en cajas ATX y en componentes de disipación de ordenadores.

Esta regulación se puede hacer de varias maneras. Con retroalimentación, el sistema regulador posee una tabla con los valores de regulación y los valores de entrada, con los que al regular vigila que la retroalimentación sea la esperada, en caso contrario, corrige. Estas tablas normalmente las ofrece el fabricante. Es un buen sistema pero conlleva un coste elevado de componentes. Sin retroalimentación, el sistema no posee información alguna, se limita a ofrecer la salida que le entra.

Para este sistema no se precisa una regulación precisa sobre la velocidad angular del ventilador. Tan sólo se necesita conocer cuál es el mínimo y el máximo del funcionamiento puesto que sólo se va a aumentar o reducir. En ese rango, el sistema hará selecciones discretas según el valor que desee.

Un motor se regula variando el voltaje que lo alimenta o limitando la corriente que consume. La limitación de corriente es costosa, necesitando componentes difíciles de encontrar mientras que la variación de voltaje es un proceso simple.

Esta variación de voltaje se puede realizar por potenciómetros, pero uno de los requisitos del sistema es que las entradas del usuario deben ser discretas, es decir, sin usar ningún mando analógico. Existen potenciómetros digitales pero muy difíciles de encontrar y en la mayoría de los casos, se fabrican en SMD.

También existe el PWM. El PWM en sí mismo no es un voltaje, sino una modulación de pulsos, uno o cero, a una frecuencia fija y con un ciclo de trabajo variable. No es una medida continua, pero si se halla la media entre el tiempo que los pulsos están en alta y en baja (el ciclo de trabajo), ya se puede calcular un valor continuo.

26

Page 43: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

290

295

300

305

310

315

Gráfico 6: Distintos ciclos de trabajo de un PWM

El Gráfico 6 muestra distintos ciclos de trabajo, para un PWM. En este caso, se observa que el pulso es de 12 v. lo cual significa que es un pulso ya amplificado. Los generadores de PWM son generalmente dispositivos lógicos TTL que sólo ofrecen pulsos entre 0 y 5 v. (0 y 1 lógicos).

Con un PWM amplificado se puede alimentar directamente un motor DC, porque aunque no es un voltaje lineal, si la frecuencia del PWM es lo suficientemente alta, el bobinado del motor hace de inductancia, creando un valor continuo a partir de pulsos.

La frecuencia del PWM es un factor importante a la hora de alimentar motores. Una frecuencia pequeña puede resultar que el bobinado del motor no produzca la suficiente inductancia, con lo cual el motor vaya a saltos. Una frecuencia dentro del rango audible por el ser humano (20 Hz - 20 KHz) en algunos ventiladores puede producir un ruido molesto. La bobina de un motor dc consume más al arranque, lo que en este caso sería al inicio de cada pulso; este aumento de consumo daña el motor si la frecuencia no es lo suficientemente alta lo que puede acortar la vida del ventilador.

En principio se considera adecuada, para este sistema, cualquier frecuencia entre 20 y 100 KHz. Aunque depende en gran medida del sistema generador, no todos los sistemas generadores de PWM pueden ofrecer frecuencias tan altas y poder modificar el ciclo de trabajo de 0 al 100%.

Para generar un PWM se pueden usar diversos componentes y circuitos. El más barato de todos es usar un 555 en su configuración astable, produciendo una señal triangular. Esta señal se introduciría en un comparador con otro voltaje que le introduce el usuario. Según la altura de ese voltaje así será el ciclo de trabajo del PWM. El 555 a pesar de ser tan barato no soporta frecuencias muy altas, y si se requieren ciclos de trabajo de 0 a 100 se necesitan componentes adicionales.

27

Page 44: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

320 Gráfico 7: PWM a partir de comparadores

Las pruebas con el 555 a partir de circuitos propios y circuitos de terceras partes [9.5] no son satisfactorias, sin contar con que la regulación del voltaje plantea el mismo problema anteriormente citado y que se están usando gran cantidad de dispositivos para generar un solo PWM. 325

330

Existen circuitos integrados definidos concretamente para la generación de PWM, pero son difíciles de encontrar, muy orientados a problemas específicos (poca flexibilidad), fabricados en SMD y normalmente caros.

La solución es un circuito que ofrezca capacidades de generación de PWM de una forma flexible, que permita escalabilidad, cambio de funcionalidades y cumplir con los objetivos del sistema a nivel de alimentación de ventiladores. Estas características definen a un microcontrolador.

Gráfico 8: Diagrama de un sistema microcontrolado

En el Gráfico 8 se observa que el sistema a desarrollar tiene cada una de sus partes definidas en el diagrama de un sistema microcontrolado, contando con que los dispositivos de entrada pueden ser un teclado, un interruptor, un sensor, etc. y los de salida

335

LED's, zumbadores, interruptores de potencia, relés, etc. Hasta algunos de ellos producen PWM; por lo tanto, la solución adoptada para este sistema usa un microcontrolador. 340

Habiendo elegido el medio para generar el PWM, hay que amplificarlo (un microcontrolador ofrece señales ttl) a 12 v. para que sirva de alimentación a los ventiladores.

28

Page 45: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Una señal se puede amplificar de diversas maneras, usando operacionales, transistores, transformadores o circuitos integrados especializados. Pero se debe tener en cuenta que los ventiladores, según los modelos, dentro de los estándares de pc los hay desde un consumo de 0,05 A. hasta 1,2 A. Por requisitos del sistema, se debe soportar una carga de hasta 1 A. por ventilador.

345

350

355

360

Los operacionales no ofrecen gran cantidad de amperaje. Los transformadores ocupan demasiado espacio para el requisito del sistema de instalación.

Los transistores son baratos pero producen una caída de tensión. Por requisito del sistema, la alimentación de éste es de 5 y 12 V., y los ventiladores se alimentan a 12 V. Una caída de tensión del 5% produce que el pulso se reduce a 11,4 V.

Dentro de las pruebas realizadas con distintos tipos de transistores: bipolares (NPN o PNP), Darlington, Mosfet N y P; los que menor caída de tensión ofrecen son los Mosfet. Los Mosfet probados ofrecen una intensidad que supera exageradamente las exigencias del sistema, a pesar de ser de la gama baja. Su precio tampoco los hace demasiado asequibles, considerando además que deben usarse como mínimo dos.

Se decide usar un circuito integrado específico para control de motores; el L293B. Es un chip controlador de motores que puede usarse en múltiples configuraciones, disponiendo de cuatro puertos independientes para el control de cuatro motores simultáneos. También se puede usar para control de motores paso a paso y reversibles así como simultanear los canales dos a dos. Ofrece una carga máxima de 4 amperios, 1 A. por canal. Para este sistema y sobredimensionando el hardware para evitar riesgos de calentamiento, se configura para alimentar dos ventiladores, utilizando los cuatro puertos dos a dos. Que su coste relativamente caro se divida entre dos al usarlo para dos elementos distintos y su alta disponibilidad en cualquier tienda de electrónica, lo convierte en una buena opción para la amplificación de la señal de PWM.

365

370

29

Page 46: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 9: Configuraciones del controlador de motores DC, L293B

Tras haber solucionado la alimentación de los ventiladores, la siguiente cuestión es elegir un medio que pueda tomar decisiones para producir un PWM de más o menos ciclo de trabajo, en función de la elección del usuario y de la temperatura del entorno acotado.

375

380

385

390

Como se explicó anteriormente, el PWM se genera con un microcontrolador que disponga de estas salidas. Pero se tiene en cuenta que también hay microcontroladores que poseen conversores analógico digital, con los que se pueden leer los valores de la temperatura de sensores analógicos, que son los más accesibles para usuarios normales.

Un microcontrolador se puede programar, pueden tener entradas analógicas, generar PWM y hasta comunicarse con otros dispositivos, sean microcontroladores o no. La elección del microcontrolador adecuado ofrece solución a las principales cuestiones desarrolladas hasta ahora del sistema.

4.2.2 Microcontroladores

Un microcontrolador es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una o más tareas específicas, normalmente multiplexadas por software.

Gráfico 10: Diagrama por bloques de un microcontrolador

En el Gráfico 9 se puede ver que se parece bastante, conceptualmente, a un ordenador. Fuente de alimentación, circuito de reloj (un oscilador o cristal), CPU, memorias, y finalmente sus puertos de comunicación de entrada y salida para comunicarse con el exterior. Sus aspectos generales son:

395

400

Memoria ROM (Memoria de sólo lectura) Memoria RAM (Memoria de acceso aleatorio) Líneas de entrada/salida (I/O) También llamados puertos aunque son accesibles a nivel de puerta Lógica de control Coordina la interacción entre los demás bloques

A parte de estos aspectos, cada modelo de cada fabricante dispone de sus características especiales, que lo hacen afín a un propósito o a otro. Los principales

30

Page 47: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

fabricantes de microcontroladores son Motorola, Philips, Atmel, Intel, Microchip, SGS Thomson, Zilog y National COP.

En la universidad de Guadalajara se ha realizado un estudio comparativo entre los principales microcontroladores existentes en el año 1998 [

405 9.5]. No ofrece un valor

real para el día de hoy pero sí una visión estimativa de las diferentes marcas.

Los programas seleccionadas para la prueba son muy sencillos pero muy representativos de las acciones típicas que llevan a cabo las aplicaciones que utilizan microcontroladores, Son los siguientes: 410

Empaquetamiento de dos dígitos BCD. Control de un bucle que decrementa un contador hasta cero. Transmisión síncrona por desplazamiento en serie de 8 bits. Temporizador software de 10 ms. Exploración de un bit y salto si vale 1. 415

Programa BCD Bucle Bit y salto

Trx síncrona

Temp síncrona

Valores finales

MCU a) b) a) b) a) b) a) b) a) b) t v

COP800 20MHz 4 5 2 6 2 4 16 105 8 - 1.29 0,108

ST62 8MHz 10 45,2 2 9,75 3 8,12 19 390 10 - 2.10 1,045

MC68HC05 4,2MHz 10 10,5 3 2,86 3 2,38 20 126 11 - 2,24 0,136

Z86CXX 12MHz 4 2,33 3 1,83 3 2,38 21 68 9 - 1,51 0,212

8048/8049 11MHz 4 5,45 2 2,73 5 6,82 14 124 9 - 1,58 0,112

PIC16C5X 2 0,4 2 0,5 2 0,5 11 14,8 8 - 1 1

Tabla 2: Comparativa de microcontroladores

a) indica el tamaño del código en palabra y b) el tiempo de ejecución en µs t = tamaño relativo; v = velocidad relativa

La tabla muestra que el PIC es hasta un doscientos por ciento más veloz que otros modelos y su programación es mucho más eficiente. A pesar de los buenos resultados y como todos los fabricantes disponen de modelos que cumplen con creces los requisitos del sistema, no se puede tomar una decisión sin valorar los objetivos de disponibilidad, escalabilidad, precio y sencillez.

420

425

430

Los microcontroladores de Thomson y Nacional COP son muy difíciles de encontrar. Los Atmel son muy veloces, pero de coste muy elevado, además de haber poca variedad disponible y ser los encapsulados de gran tamaño. Los micros de Motorola son de coste algo elevado con respecto a Microchip, ante mismas características y periféricos, además de precisar distinto software de programación y programador para cada modelo.

31

Page 48: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Microchip ha creado los primeros microcontroladores RISC, tiene una experiencia muy larga en microcontrol. Ofrece un software de programación muy eficiente gratuitamente que sirve para toda la familia de micros.

Cada familia de microcontroladores son compatibles en patillaje y periféricos, y en la mayoría de los casos, el software de programación sirve para varios modelos distintos. Su herramienta de programación gratuita admite plugins de terceras partes con los que se pueden programar en distintos lenguajes sin necesidad de conocer los registros internos del microcontrolador.

435

440

445

450

455

460

Las gamas media y alta de Microchip soportan ICD (in circuit debugger) que permite hacer un debugger del programa como si estuviera en producción, visualizando los registros internos del circuito en tiempo real. Hay una amplia comunidad mundial que los usa, con muchos ejemplos, foros de ayuda, esquemas de programadores, hardware y programas desarrollados para microcontroladores Microchip, además de ser localizables a precios relativamente bajos en cualquier tienda de electrónica. Además, Microchip ofrece muestras gratuitas que envía gratuitamente a todo el mundo de la inmensa mayoría de sus microcontroladores (tienen un máximo admitido de muestras por persona).

Analizando las distintas propuestas, realizando unas preguntas en tiendas de electrónica normales, y estudiando los datasheets de los distintos modelos disponibles fácilmente, una opción muy adecuada para el sistema es el microcontrolador de Microchip 16F876.

4.2.3 Microcontrolador 16F876

Se dan unas breves nociones del microcontrolador y algunos aspectos de sus dispositivos. No pretende ser un manual de referencia o una hoja de especificación. La información completa sobre el microcontrolador está en Microchip [10.].

La arquitectura del microcontrolador sigue el modelo Harvard. Dispone de dos memorias independientes, una que contiene sólo instrucciones, y otra que contiene sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias, y por consiguiente la velocidad de proceso aumenta.

El Gráfico 10 muestra el esquema de la arquitectura:

32

Page 49: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 11: Arquitectura Harvard

465

470

La memoria de programa es donde se almacena el código fuente del programa que el procesador va a ejecutar. Dispone de una capacidad de 8 Kb en memoria tipo FLASH.

La memoria de datos se divide en dos zonas, la RAM (con un tamaño de 368 bytes) donde residen los registros de propósito general y específicos, y una EPROM de 256 bytes para almacenar datos que no se pierden al desconectar la alimentación.

Se utiliza la segmentación de aplicación de instrucciones: simultáneamente se ejecuta una instrucción y se busca el código de la siguiente.

475

Gráfico 12: Patillaje del microcontrolador Microchip 16F876

Se reseñan ahora las funcionalidades principales hardware que hacen de este microcontrolador uno de los más adecuados, las configuraciones software se reseñarán en la siguiente sección.

33

Page 50: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

La patilla 1, por defecto está configurada como reset. Precisa de un pequeño circuito de resistencias para que pueda efectuar resets físicos en el circuito. Para que el circuito funcione, esta entrada, cuando está configurada como reset, precisa tener un valor lógico de 1. Para ello se coloca una resistencia pull-up de 10 K. Cuando se quiere resetear, basta con dar a la entrada un 0 lógico (tierra). La conexión para el reset no puede ser directa a tierra, sino que para evitar un salto de corriente mayor de 80 mA., que produciría un bloqueo en el micro, se debe poner entre tierra y MCLR una resistencia en serie de 50-100 ohmnios.

480

485

490

495

500

505

510

El puerto A (patas de la 2 a la 7) es un puerto de 6 bits, que puede ser configurado, entre muchas otras cosas, como conversor analógico digital a nivel independiente unas puertas de otras. RA3 puede ser configurado, como se puede ver en el Gráfico 12, como Vref+. En ese momento, se convierte en una señal de entrada que servirá de referencia al módulo ADC. También se puede usar la alimentación propia del micro como referencia pero el poder introducir una señal de referencia independiente de la alimentación, permite instalar un estabilizador de tensión que asegure un valor constante y que los valores de la conversión analógica digital sean lo más fiables posibles.

En el sistema, las entradas ANx son usadas para leer los valores analógicos que generan los medidores de temperatura.

RA4 puede ser configurada como puerta de colector abierto, la cual sirve como activadora de un transistor PNP que alimente al buzzer sonoro requerido por el sistema (0 activado, 1 desactivado).

El PIC tiene dos módulos comparadores CCP1 y CCP2 que pueden ser configurados como moduladores de anchura de pulsos (generador PWM) de manera independiente. Su única restricción es que la frecuencia de funcionamiento de ambos módulos debe de ser la misma. Esta restricción no afecta al sistema que sólo requiere que sean independientes los ciclos de trabajo.

En el sistema, estas dos salidas, CCP1 y CCP2, irán al circuito amplificador L293B para que las amplifique a 12 V. y alimentar así a los ventiladores.

Las patillas 14 y 15, SCL y SDA, son las líneas en las que el microcontrolador tiene implementado su módulo hardware de comunicación I2C. Por requisitos del protocolo es necesario para su correcto funcionamiento poner en las dos líneas de comunicación, reloj y datos, una resistencia pull-up de 1 K. Es importante que esta resistencia sea única en cada línea, independientemente de la cantidad de dispositivos que haya conectados. 515

En el sistema, los dispositivos se comunicarán entre sí por medio de I2C. Además, se cumple con el requisito de escalabilidad del sistema, ofreciendo a futuros desarrollos un interfaz que se ha convertido en el estándar de hecho, a nivel mundial, de comunicación entre sistemas embebidos [9.7].

34

Page 51: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Las patillas 17 y 18, TX y RX, son las del puerto de comunicación estándar RS232 (puerto serie) del microcontrolador.

520

525

530

535

540

545

550

555

En el sistema, estas patas se usarán para la reprogramación en caliente del microcontrolador, así como un interfaz secundario de comunicación con el usuario (la mayoría de las veces usada como sistema de debugger).

El puerto B, es un puerto de 8 bits, configurable de diversas maneras, pero resaltan dos características de él. La patilla RB0 es una entrada para una interrupción externa directa gestionable por software. Los cuatro últimos bits del puerto también se pueden configurar de manera que produzcan una interrupción de software cuando cambia el valor de entrada en alguno de ellos. Estas características se usan para detectar cambios de valor en sistemas discretos, así como para leer pulsos. Estos cambios se pueden configurar para que interrumpan cuando el valor cambia de alta a baja, o al contrario. Independientemente de la configuración de RB0 o de estas últimas líneas, RB_1, RB_2 y RB_3 se pueden configurar como salidas digitales. Esto es especialmente útil cuando se quieren controlar dispositivos externos digitales, como líneas de enable, líneas de control o simplemente un LED.

En el sistema, RB_1, RB_2 y RB_3 controlarán las líneas de control de direccionamiento de la comunicación del puerto serie RS232. RB_4, RB_5, RB_6, y RB_7 serán usadas en su configuración de interrupción para detectar pulsaciones por parte del usuario en la interfaz de entrada del sistema.

Asimismo, en la situación de adquisición de datos del sistema, se usarán estas patillas para leer las RPM a través del tacómetro de los ventiladores. Esta configuración para interrupciones configura las patillas a un estado de alta impedancia, en las que pueden adoptar cualquier estado (0 o 1) con una mínima interferencia. Para evitar esto, se colocan en estas líneas unas resistencias pull-up de 10 K, con el fin que su valor por defecto fuera 1. Por lo tanto, la interrupción se produce al dar de entrada un 0. Esto debe tenerse en cuenta a la hora de diseñar el interfaz de entrada de datos con teclados.

4.2.4 Interfaz de usuario

Según el requisito de usuario de comunicaciones, el sistema debe comunicarse bidireccionalmente con el usuario. Eso implica un dispositivo de entrada y otro de salida.

La comunicación para la reprogramación es un interfaz de comunicación bidireccional, pero obliga al usuario usar un dispositivo externo que traduzca las señales RS232 a información, y al contrario. Esa es una restricción que no ha sido contemplada en las especificaciones, por lo que hay que considerar que el sistema debe ser, en sus funcionalidades directas con el usuario, un sistema independiente.

35

Page 52: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Según el requisito de usuario de dimensiones, la interfaz de usuario hardware no puede ocupar más de la superficie de un frontal de una bahía de 5 ¼” de una caja ATX, que es la superficie que queda visible al usuario. 560

En este espacio debe caber un visualizador de datos y un teclado para la entrada de datos. Como visualizador de datos, se puede usar un LCD de bajo coste. Estos son del tipo alfanuméricos controlados por el chip HD44780 de Hitachi o compatibles. Estos chips tienen la particularidad de poder trabajar en modo paralelo de 4 u 8 bits. También hay en el mercado LCD gráficos, y de comunicación serie, mucho más estéticos y cómodos de programar, pero el precio es mucho mayor y el sistema tiene restricción de coste, pero no de estética o sencillez de desarrollo.

565

570

575

Existen microcontroladores que ya implementan control de LCD por hardware. Este no es el caso del que se ha elegido para el sistema, por lo que hay que controlarlo por software. El control por software directo precisa, en el mejor de los casos, ocupar 7 patillas del microcontrolador (Enable, Read/Write, Function Select y 4 líneas de control) Esto es un gasto de patillas muy elevado contando con que el micro elegido tiene 22, de las cuales ya se ocupan de momento 15. En caso de necesitar implementar nuevas salidas/entradas hay que cambiar de modelo de microcontrolador. Para evitar eso, se incorpora al sistema un circuito integrado de expansión de 8 bits para el bus I2C. Este circuito es relativamente caro, pero no consume nada de recursos al microcontrolador, puesto que se une, como otro dispositivo más, al bus I2C, y proporciona una salida paralela al LCD.

580

585

Gráfico 13: Patillaje del PCF8574

El LCD elegido es un DV24200 alfanumérico, controlado por un HD44780, de 24x2 caracteres, retroiluminado en verde. Es un LCD muy barato y robusto que proporciona más de las características necesarias para el sistema. Sus dimensiones son muy adecuadas para las restricciones y sus características eléctricas se adaptan a las disponibles en el sistema. Además tiene la capacidad de poder regular su brillo y su contraste, lo cual es muy útil teniendo en cuenta que en el sistema la retroiluminación del LCD consume 30 veces más que el microcontrolador.

36

Page 53: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 14: Dimensiones del LCD DV24200

Para la entrada de información, el usuario dispone de un teclado con el que puede navegar por menús e introducir así la información al sistema. Este teclado puede estar formado por botones sencillos de bajo coste y alta resistencia que se conectan al puerto B de interrupciones del microcontrolador y a tierra, para hacer la interrupción a 0 lógico.

590

595

600

El sistema de reprogramación por puerto serie (RS232) precisa de un conversor de señales para convertir las señales de 12 V. del puerto serie de un PC a señales TTL que pueda interpretar el microcontrolador. El conversor típico para hacer esto es el barato y disponible MAX232. Pero este circuito precisa de 4 condensadores externos además de no poder convertir señales de mayor velocidad que 120 Kbps.

El sistema tiene capacidades mucho mayores, y a pesar del coste, se prefiere usar un MAX233A, que ahorra espacio (no precisan condensadores externos), simplifican el diseño de la placa y permiten velocidades de hasta 200 Kbps.

Gráfico 15: Patillaje de un MAX233A

605

37

Page 54: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Por el requisito de escalabilidad y de reprogramación en caliente, hay que poder llevar la señal de reprogramación a cualquier microcontrolador del sistema. Para ello se usan dos de/multiplexores, de 8 a 1/1 a 8, que se encargan de conmutar las líneas de TX y RX del MAX233A a los diferentes microcontroladores, en función de las líneas de control que definirá el microcontrolador central. Se debe de tener en cuenta que el sistema debe ser robusto y fiable, por lo que no debe quedar bloqueado en ningún momento y poderse recuperar de errores. Las líneas de control que genera el microcontrolador, inicialmente (sin programación) están en alta impedancia. Se aprovecha esta característica para poder programar micros vacíos, tan sólo con el bootloader (explicado en la sección de software). A las líneas de control se le colocan en serie unas resistencias pull-up, de manera que los de/multiplexores tengan en sus líneas de control, por defecto, un 111 (7). En las salidas 7 estarán las líneas de puerto serie del microcontrolador principal. A partir de programar el principal, se puede programar este para que direccione a otras direcciones.

610

615

620

El multiplexor/demultiplexor con mayor disponibilidad en las tiendas normales es el HEF4051B, de bajo coste y de conmutación lo suficientemente rápida para los propósitos del sistema.

625

630

635

Gráfico 16: Patillaje de un MAX233A

4.2.5 Adquisición de datos

Para la adquisición de datos de temperatura se han propuesto sondas analógicas, que son baratas por regla general, y de alta disponibilidad en tiendas. Se eligen las LM35. Son sondas relativamente baratas, de fácil manejo e instalación. Pueden medir hasta 160º C, ofreciendo en la salida un voltaje de 0,1 V./ºC, con una precisión de +/- 1º C.

En el sistema no se definen las distancias mínimas y máximas a las que pueden estar las sondas. El cable, en función de sus características y longitud, puede generar una carga capacitiva que afecte al resultado de la lectura. Para ello se emplea un cable apantallado a tierra y se aplica el circuito con la resistencia de 2K2 recomendada por el fabricante.

38

Page 55: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 17: Circuito protector de LM35

En la medición de las RPM de los ventiladores, se contarán los pulsos generados por el tacómetro del ventilador a través de las interrupciones del puerto B. El tacómetro realiza el cuenteo de revoluciones conmutando con tierra dos veces por cada revolución. Los pulsos del tacómetro tienen mucho ruido por su cercanía a la bobina del propio ventilador. Para poder leer los pulsos lo más limpiamente posible y evitar errores, se le aplica una resistencia pull-up; así también se crea la señal de pulsos de 5 V. que el microcontrolador interpreta como un 1 lógico. Además se coloca un condensador de 1

640

645

µ F entre la línea y tierra para corregir el ruido que suelen tener los pulsos al comienzo.

39

Page 56: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.2.6 Conjunto

Tras haber resuelto y definido las cuestiones necesarias de componentes y configuración para la consecución de los objetivos desde el punto de vista hardware, se une todo en una placa de circuito impreso, donde se realicen las conexiones necesarias y se puedan montar los conectores requeridos.

650

655

660

665

670

El sistema tiene una placa principal donde están los componentes que unen todas las funcionalidades del sistema, y sobre la que irán montados distintos o iguales módulos que ofrezcan la versatilidad y escalabilidad requerida.

En primer lugar se diseña el circuito eléctrico. Para el diseño se usa la herramienta Orcad Capture. Sus librerías no tienen todos los componentes que se usan en el sistema, por lo que hay que hacerlos para que a la hora de diseñar la placa, pida la plantilla para ese componente y se le pueda dar una genérica o parecida a otro componente que tenga el mismo patillaje. Resultan muy útiles los componentes de conectores que, sin funcionalidad alguna, permiten darles nuevos nombres y adaptarse a casi cualquier micro que se desee incluir.

Para el futuro desarrollo de la placa, y si va a ser serigrafiada con las plantillas de los componentes, así como con sus nombres, es preferible ponerles desde el principio nombres intuitivos (normalmente el nombre del componente) y, en caso de haber más de uno, ponerles numeración ordenada según su localización en la placa.

Estas reglas facilitan el montaje a partir de listas de componentes numeradas y evitan los errores, sobre todo a la hora de compra.

En las siguientes páginas se ven los esquemas eléctricos de la placa principal y de la placa modular.

40

Page 57: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

41

Gráfico 18: Esquema eléctrico de la placa principal

Page 58: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

42

Page 59: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

43

Gráfico 19: Esquema eléctrico de la placa modular

Page 60: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

44

Page 61: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

A partir de los diseños eléctricos se procede al diseño de las placas físicas. Este diseño se realiza con el programa Orcad Layout. Al crear un nuevo diseño pide las plantillas de cada uno de los componentes que encuentra en el diseño eléctrico de los cuales no tiene una plantilla en sus librerías con correspondencia exacta.

675

680

685

690

695

700

705

710

Aún cuando él coloque plantillas a componentes que reconozca y por alguna razón no quieran ponerse esas, se pueden cambiar en cualquier momento.

Cuando termina de rastrear las plantillas, coloca los componentes en la zona de trabajo, sin pistas, sólo con conexiones. A partir de ahí comienza la tarea manual.

El primer paso es fijar las dimensiones para introducir en ellas todos los componentes con sus respectivas pistas.

La placa principal tiene unas dimensiones para que, sin desperdiciar espacio, ocupe lo máximo aprovechable del ancho del espacio, para hacer el sistema lo más corto posible. Sus dimensiones son de 13.97 x 144.145 cm. (Ancho x Largo).

La placa modular, así mismo, tiene restricciones de espacio. Su posición forma un ángulo de 90º con la placa principal, con lo cual no puede medir de alto más que una bahía de 5 ¼” menos la distancia que ocupen las chapas de la caja que vaya a contener el sistema, y la distancia de base de la placa principal y un pequeño margen para las soldaduras. Sus dimensiones son 100.965 x 14.56 cm. (Largo x Alto).

El siguiente paso es definir la anchura de las pistas y su separación. El diseño del sistema con estos componentes es algo complejo en un espacio tan limitado, a pesar de ello, sólo se pueden utilizar placas de doble cara. Un usuario normal no tiene acceso a industrias que puedan hacer placas multicapa y se debe ofrecer la oportunidad de que se puedan realizar de manera casera; por eso mismo la anchura de las pistas se aumenta hasta 30 y la separación entre ellas hasta 30 también, ayudando a que si el proceso manual quema demasiado las pistas no se pierdan. Se desactivan todas las demás pistas y se procede a la colocación de componentes en el espacio disponible.

La colocación de los componentes es algo crítico si se quiere optimizar el espacio. Un solo giro de un componente puede cambiar totalmente toda la estructura de pistas de la placa. Para este sistema se ha procedido en primer lugar a una colocación “intuitiva” de componentes para luego hacer el auto ruta del programa para sólo dos capas.

El proceso automático de Orcad para pistas no es muy eficiente. De hecho, en 40 minutos de comprobaciones heurísticas le faltaban 2 nodos por unir. Pero el auto ruta sirve para limpiar la pantalla de conexiones y que dé una visión en conjunto de toda la placa con sus conexiones. A partir de ella se pueden tomar decisiones de colocación de componentes y de ruta de pistas para conseguir mayor aprovechamiento de espacio.

45

Page 62: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Otro aspecto cuando se diseñan placas con finalidad de fabricación casera, y éstas son de doble capa, es la conexión entre capas. Orcad realiza los puentes donde cree conveniente, asumiendo en todo momento que los agujeros de los componentes están metalizados y conducen entre capas.

715

720

725

En una placa casera eso no es posible, por lo tanto hay que evitar ante todo que los agujeros de componentes coincidan con agujeros entre capas.

Igualmente se ha de tener en cuenta a la hora de colocar los conectores para los distintos módulos, que estos, montados, no deben interferir con ningún otro componente, ni correr riesgo de contacto con ningún puente de soldadura para cuando estén montados los componentes en la placa.

Para evitar interferencias entre distintas pistas, y evitar en la medida de lo posible la emisión de radiaciones, se colocan en todos los espacios libres de las placas zonas de tierra, aislando pistas y componentes entre sí.

En las siguientes páginas se pueden ver los dos diseños de las placas principal y modular.

46

Page 63: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 20: Taladros y componentes de la placa principal

47

Page 64: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

48

Page 65: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 21: Fotolito placa principal, capa superior

49

Page 66: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

50

Page 67: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 22: Fotolito placa principal capa inferior

51

Page 68: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

52

Page 69: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 23: Taladros y componentes de la placa modular

53

Page 70: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

54

Page 71: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 24: Fotolito placa modular capa superior

55

Page 72: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

56

Page 73: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 25: Fotolito placa principal capa inferior

57

Page 74: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

58

Page 75: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Con los fotolitos se realizan pruebas de creación de las placas de manera manual (insolación + revelado + quemado), consiguiendo unos prototipos, montando luego los componentes y realizando los tests de continuidad.

730 Gráfico 26: Placa modular

Gráfico 27: Placa modular montada y testeada

Gráfico 28: Placa principal montada y testeada

59

Page 76: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

735

740

745

Gráfico 29: Placa de pruebas con placa modular integrada

Estos prototipos se testean eléctricamente y se comprueba su comportamiento teórico. Todos los resultados son los esperados excepto dos problemas. En la placa modular, al no ser los taladros metalizados, el bloque central de tierra se queda sin conexión, por lo que hay que hacer una soldadura externa. En el caso que los taladros sean metalizados este problema se solucionará. Otro problema es el reset por hardware. El microcontrolador principal no hace caso al reset en la línea MCLR. La respuesta a este problema está en los fusibles de configuración. En la sección de software se explicará el bootloader y los problemas que puede causar según los fusibles que se activen en su programación.

60

Page 77: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.2.7 Prototipo hardware final

Realizadas las pruebas necesarias en los prototipos iniciales, se realiza un prototipo final, preparado para el montaje y para su programación.

Para ello se encarga a una industria de circuitos impresos la fabricación de las placas del sistema, para su posterior soldado de componentes, montaje en la bahía y pruebas.

750

755

Se muestran fotografías de todas las partes del prototipo final para dar una explicación gráfica complementaria a la teórica expuesta anteriormente.

Gráfico 30: Empaquetado industrial de las pcb necesarias para el sistema

61

Page 78: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

760 Gráfico 31: Componentes de la interfaz de usuario

Gráfico 32: Interfaz de usuario montada en el frontal

Gráfico 33: Parte trasera del frontal

62

Page 79: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

765

Gráfico 34: Sistema completo montado

Se puede ver en el Gráfico 34 todas las partes hardware principales del sistema: placa principal, placas modulares e interfaz de usuario.

770 Gráfico 35: Módulo de sonido y regulador de voltaje

En el Gráfico 35, además del módulo de sonido y el regulador de voltaje, se pueden ver las resistencias pull-up del bus I2C, del reset y de las líneas de control de los de/multiplexores. El cristal de 4 MHz y sus dos condensadores de 22 pF estabilizadores para el 16F876-4 MHz.

63

Page 80: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

775

Gráfico 36: Conectores para la interfaz (entrada, salida)

Se puede observar en el Gráfico 36, además de lo descrito, la memoria EPROM y el driver I2C-paralelo.

Gráfico 37: MAX233 y los dos demultiplexores 780

64

Page 81: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 38: Conectores externos generales del sistema

De izquierda a derecha, las entradas de sondas de temperatura interior y exterior del sistema; molex de alimentación, interruptor del sistema y conector serie DB9 para el RS232. 785

Gráfico 39: Placa modular completa

En el Gráfico 39, de izquierda a derecha, resistencia pull-up de reset, microcontrolador, resistencias para leer (eventualmente) la corriente consumida por los ventiladores (5 cada uno), cristal, condensadores de cristal, resistencias pull-up de los tacómetros, conector unión a la placa principal, controlador de motores L293B, diodos para la alimentación de los ventiladores, resistencias anti-capacidad de las sondas de temperatura, condensadores para filtrar el ruido en el tacómetro y conectores, dos a dos, de sonda y ventilador.

790

65

Page 82: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

795

Gráfico 40: Soldaduras de la placa modular

Debido a la proximidad de las placas modulares en el sistema, por restricciones de espacio, es importante hacer las soldaduras lo más finas posibles.

Gráfico 41: Prototipo hardware final 800

66

Page 83: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.3 Software

Tras la implementación del sistema hardware adecuado a las necesidades del sistema se debe crear el software que lo controle y que realmente se ocupe de cumplir las funcionalidades con el hardware disponible.

Primero se definen los casos de uso del sistema, el interfaz de usuario y los diagramas de flujos de datos. Luego se explican brevemente ciertas características especiales de la programación del 16F876, que sirven como preámbulo a la implementación del software.

805

4.3.1 Casos de uso

810

Gráfico 42: Diagrama de casos de uso

67

Page 84: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-01 Encender/Apagar

Objetivo Encender o apagar el sistema

Actor/es Usuario

Precondiciones Tener alimentación de corriente

1) El usuario cambia de posición el interruptor de encendido

Flujo principal

2) El sistema cambia de estado, si estaba encendido se apaga y viceversa

Flujos alternativos

Poscondiciones

El sistema cambia de estado a encendido o apagado en función de su estado anterior. Si la configuración activa no se había guardado se pierde completamente. Si el sistema estaba apagado se enciende mostrando la pantalla de bienvenida.

Identificador CU-02 Ver estado del sistema

Objetivo Ver el estado del sistema, temperaturas de los canales que dispongan de ella, velocidades y valor PWM de los ventiladores

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa el botón izquierdo

Flujo principal

2) El sistema cambia el contenido del LCD. Mostrando, en orden, y cada 2 segundos el estado de cada uno de los módulos

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

La pantalla muestra indefinidamente, hasta la pulsación del botón derecho, el estado de los módulos del sistema

68

Page 85: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-03 Ver módulo comunicado

Objetivo Visualizar qué modulo tiene la comunicación serie activa en ese momento

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, abajo, izquierda.

Flujo principal

2) El sistema muestra en pantalla el módulo que tiene la comunicación activa

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

Identificador CU-04 Ver módulo activado para resetear

Objetivo Visualizar qué modulo tiene preparado para resetear en ese momento

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, abajo, derecho.

Flujo principal

2) El sistema muestra en pantalla el módulo que tiene preparado para resetear

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

69

Page 86: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-05 Ver valor de brillo

Objetivo Visualizar el valor que tiene el brillo de la pantalla LCD en ese momento

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, abajo, izquierdo.

Flujo principal

2) El sistema muestra en pantalla el valor actual del brillo

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

Identificador CU-06 Ver valor de contraste

Objetivo Visualizar el valor que tiene el contraste de la pantalla LCD en ese momento

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, abajo, derecho

Flujo principal

2) El sistema muestra en pantalla el valor actual del contraste para el canal seleccionado

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

70

Page 87: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-07 Ver valor de PWM de un canal

Objetivo Visualizar el valor de PWM que tiene un canal en concreto en ese momento, si la configuración manual está activada

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Estar activada la configuración manual

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, derecho, abajo, derecho

2) El sistema muestra en pantalla el valor de PWM del canal seleccionado y sus RPM actuales Flujo principal

3) El usuario pulsa botón derecho para desplazarse al siguiente canal

1) El sistema detecta una alarma en alguno de los ventiladores

2) Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Flujos alternativos

1) El usuario pulsa botón izquierdo, saliendo de la visualización de canales

Poscondiciones Ninguna

Identificador CU-08 Ver valor de fijo de PWM del sistema

Objetivo Visualizar el valor de PWM que tienen todos los canales del sistema en ese momento, si la configuración fija está activada

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Estar activada la configuración fija

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, derecho, derecho, abajo, derecho

Flujo principal 2)

El sistema muestra en pantalla el valor de PWM fijo para todos los canales del sistema

1) El sistema detecta una alarma en alguno de los ventiladores

Flujos alternativos

2) Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

71

Page 88: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-09 Ver valor de la temperatura fijada para un entorno

Objetivo Visualizar el valor de la temperatura fijada para un entorno en concreto en ese momento, si la configuración auto está activada

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Estar activada la configuración auto

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho 5 veces, derecho, abajo, derecho

2) El sistema muestra el valor de la temperatura fijada para el entorno seleccionado y su temperatura actual Flujo principal

3) El usuario pulsa botón derecho para desplazarse al siguiente entorno

1) El sistema detecta una alarma en alguno de los ventiladores

2) Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Flujos alternativos

1) El usuario pulsa botón izquierdo, saliendo de la visualización de entornos

Poscondiciones Ninguna

Identificador CU-10 Activar/Desactivar configuración manual

Objetivo Activar o desactivar la configuración manual, según el estado anterior

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, derecho, abajo, izquierdo

2) El sistema muestra el estado actual de la configuración Flujo principal

3) El usuario cambia el estado de la configuración pulsando botón arriba

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales

72

Page 89: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-11 Activar/Desactivar configuración fija

Objetivo Activar o desactivar la configuración fija, según el estado anterior

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho 4 veces, abajo, izquierdo

2) El sistema muestra el estado actual de la configuración Flujo principal

3) El usuario cambia el estado de la configuración pulsando botón arriba

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales

Identificador CU-12 Activar/Desactivar configuración auto

Objetivo Activar o desactivar la configuración auto, según el estado anterior

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho 5 veces, abajo, izquierdo

2) El sistema muestra el estado actual de la configuración Flujo principal

3) El usuario cambia el estado de la configuración pulsando botón arriba

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales

73

Page 90: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-13 Cambiar valor de brillo del LCD

Objetivo Cambiar el valor del brillo de LCD

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido 1) Se lanza el caso de uso Ver brillo

2) El usuario con los botones arriba y abajo, sube o baja el nivel de brillo del LCD Flujo principal

3) El usuario pulsa botón derecho guardando el nivel de brillo

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones La pantalla de LCD brilla más o menos según el valor

Identificador CU-14 Cambiar valor de contraste del LCD

Objetivo Cambiar el valor del contraste de LCD

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido 1) Se lanza el caso de uso Ver contraste

2) El usuario con los botones arriba y abajo, sube o baja el nivel de contraste del LCD Flujo principal

3) El usuario pulsa botón derecho guardando el nivel de contraste

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

La pantalla de LCD tiene más o menos contraste según el valor

74

Page 91: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-15 Cambiar modulo para resetear

Objetivo Cambiar el módulo preparado para resetearse

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) Se lanza el caso de uso Ver reset módulo

2) El usuario con los botones arriba y abajo, cambia de módulo, preparando su reinicialización Flujo principal

3) El sistema prepara la reinicialización de ese módulo

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones Ninguna

Identificador CU-16 Resetear módulo

Objetivo Resetear el módulo preparado para su reinicialización

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) Se lanza el caso de uso Ver reset módulo Flujo principal

2) El usuario pulsa el botón derecho reseteando el módulo seleccionado

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones El módulo seleccionado se resetea

75

Page 92: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-17 Cambiar módulo comunicado

Objetivo Cambiar el módulo comunicado por el puerto serie

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

1) Se lanza el caso de uso Ver módulo comunicado Flujo principal

2) El usuario con los botones arriba y abajo, cambia de módulo, cambiando la comunicación

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones El módulo seleccionado toma la comunicación serie

Identificador CU-18 Cambiar valor PWM canal

Objetivo Cambiar el valor PWM de un canal determinado

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Configuración manual activada

1) Se lanza el caso de uso Ver valor canal

2) El usuario con los botones arriba y abajo, cambia el valor PWM del canal visualizado Flujo principal

3) El usuario con el botón derecho cambia de canal

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

El módulo seleccionado cambia de valor PWM, cambiando así la velocidad del ventilador que controla

76

Page 93: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-19 Cambiar valor PWM fijo

Objetivo Cambiar el valor PWM fijo para todos los canales del sistema

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Configuración fija activada 1) Se lanza el caso de uso Ver valor fijo

Flujo principal 2)

El usuario con los botones arriba y abajo, cambia el valor PWM del sistema

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

Todos los canales del sistema cambian su valor al nuevo PWM, variando así las velocidades de los ventiladores que controla el sistema

Identificador CU-20 Cambiar temperatura entorno

Objetivo Cambiar el valor de la temperatura deseada para un entorno concreto

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido Configuración auto activada 1) Se lanza el caso de uso Ver temperatura entorno

2) El usuario con los botones arriba y abajo, cambia el valor de la temperatura deseada para ese entorno en concreto Flujo principal

3) El usuario con el botón derecho cambia de entorno

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones

El sistema guardará esa temperatura para ese entorno, aplicando todo el software de control a ese valor.

77

Page 94: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Identificador CU-21 Leer configuración

Objetivo Leer la configuración y aplicarla a todo el sistema

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

Flujo principal 1) El usuario pulsa 6 veces botón derecho desde la pantalla de bienvenida, botón abajo y botón derecho

1) El sistema detecta una alarma en alguno de los ventiladores

2) Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Flujos alternativos

1) No hay ninguna configuración guardada, el sistema aplica un valor 10 (máximo) a todos los canales

Poscondiciones

El sistema lee la configuración de la memoria y la aplica a todo el sistema

Identificador CU-22 Guardar configuración

Objetivo Leer la configuración y aplicarla a todo el sistema

Actor/es Usuario

Precondiciones Tener alimentación de corriente con el sistema encendido

Flujo principal 1) El usuario pulsa 6 veces botón derecho desde la pantalla de bienvenida, botón arriba y botón derecho

1) El sistema detecta una alarma en alguno de los ventiladores Flujos

alternativos 2)

Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón

Poscondiciones El sistema guarda la configuración activa en la memoria

78

Page 95: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.3.2 Flujo de datos

Gráfico 43: Diagrama de flujo de datos

79

Page 96: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.3.3 Programación del 16F876

Para el desarrollo de la sección lógica del sistema sobre el microcontrolador PIC16F876 se usa el compilador CCS [9.9], que compila código quasi-c (excepto cierto tipo de punteros, operaciones especiales sobre el sistema y algún tipo especial de datos) en instrucciones ensamblador para el microcontrolador. 870

875

880

885

Este micro permite reprogramarse más de mil veces, pero el proceso de programación, si no se usa hardware específico y costoso, implica quitar el circuito de la placa de producción, con todos los peligros que ello implica.

Bootloader

Para hacer más sencillo el proceso de programación y debugger, se hace uso de una característica especial de algunos microcontroladores, entre los que se cuenta el elegido para este sistema: puede escribir en su propia memoria de programa. Se puede insertar un pequeño programa que se ejecute siempre antes que ninguna rutina al resetear o encender el micro.

Este programa enviará una señal por el puerto serie RS232 del microcontrolador, esperando respuesta durante un tiempo. Si en este tiempo no le contesta nadie sigue con la ejecución normal del programa existente en la memoria del programa. Pero si la respuesta es el carácter estipulado anteriormente (a la hora de programar este pequeño programa), comienza a leer líneas de código del puerto serie y a grabarlas en la memoria de programa del microcontrolador, realizando así una programación en caliente.

A este tipo de programas se les llama “bootloader”. Hay diversos tipos de bootloaders, y no siempre usan el mismo puerto o el mismo sistema de comunicación (hay algunos en los que el que inicia la comunicación es el software del PC). Para este desarrollo se usa el de Shane Tolmie [9.10], uno de los más populares en la comunidad Microchip, por su seguridad, fiabilidad y sencillez de uso, a pesar de otros que son más pequeños y ocupan menos memoria.

890

Para descargar el programa desde el ordenador hay que usar un programa compatible con el bootloader grabado en el micro, para que puedan entenderse entre ellos. El usado para realizar esta tarea es el de Petr Kolomaznik [9.11]. 895

80

Page 97: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Gráfico 44: Downloader a bootloader de Petr Kolomaznik [9.11]

En cuanto el programa acaba de descargarse, el bootloader coloca la dirección de ejecución de programa a la primera línea de ejecución del código programado, realizando un reseteo transparente. 900

905

910

915

ADC

El programa que ejecutan los módulos se encarga de adquirir los datos necesarios para la funcionalidad del sistema: temperatura y velocidad del ventilador. Estos datos los adquiere de sistemas externos: una sonda de temperatura y el tacómetro del ventilador.

Para recuperar la temperatura debe usar la capacidad del microcontrolador de convertir valores analógicos en digital. La sonda usada en el sistema ofrece un voltaje de 0,1 V. por ºC. La precisión del periférico conversor ADC es como máximo de 10 bits, lo que significa que el valor de entrada lo compara con la señal de referencia (5 V.) y esa diferencia la muestra en 10 bits. Con 10 bits (210) se pueden representar 1024 valores distintos, por lo tanto, el valor en grados centígrados, del conversor analógico digital será: read_adc() * (5/1024) * 100.

El valor del ADC es multiplicado por el número de divisiones que ofrecen los 5 voltios de la señal de referencia, luego se multiplica por 100 para conseguir un valor en grados centígrados, y no en centésimas, tal como lo genera la sonda.

Se pueden ver ejemplos de lectura analógica en el código comentado, en el Apéndice A.

81

Page 98: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Interrupciones

Para la lectura de las revoluciones por minuto, tal como se explicó en la sección de hardware, se leen los pulsos del tacómetro del ventilador. Estos pulsos se pueden convertir en cuentas usando la característica de interrupción del puerto B del 16F876. Cada vez que se produce un paso de alta a baja en alguna de las puertas del puerto, se dispara la interrupción ejecutando el código que contenga.

920

925

930

935

Si este código es sumar uno a una variable global o estática, se están contando los pulsos de esa entrada. Para saber cuantas hay por minuto se necesita una unidad de tiempo por la que se pueda dividir la cantidad de pulsos medidos.

La unidad de tiempo la puede ofrecer la interrupción timer_0. El timer_0 interno del sistema se puede configurar para que desborde a ciertas cuentas, normalmente divisores del reloj del micro usado. Sabiendo la velocidad del micro y el divisor, se puede calcular cuantas veces por segundo se desborda; cada vez que se desborde, se ejecutará el código contenido en la interrupción timer_0.

Si el código del timer_0 es guardar el número almacenado por la interrupción del puerto B y reiniciar esa variable a 0, se tiene el número de cuentas que tiene ese pulso en la unidad de tiempo en que está configurado el timer_0.

Para más información sobre divisores o las interrupciones se recomienda el datasheet de Microchip [9.8].

PWM

El microcontrolador PIC16F876 dispone de dos módulos generadores de PWM, independientes entre sí, excepto por la frecuencia a la que trabajan, que debe ser siempre la misma. 940

945

El compilador CCS ofrece un medio muy sencillo para usarlos con efectividad. Tan solo hay que configurar los puertos como salida de PWM, fijar la frecuencia del Timer_2, que será la que marque la frecuencia de los PWM y luego fijar independientemente el ciclo de trabajo de cada uno de ellos.

No se precisa definir de nuevo la frecuencia para cambiar el ciclo de trabajo. Hay que tener especial cuidado al usar el PWM como una salida directa a un dispositivo que consuma mucha corriente. Esto podría dañar irremediablemente el circuito.

82

Page 99: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

I2C

Para la comunicación entre componentes, entre otros posibles, el PIC16F876 implementa el protocolo I2C. Este tipo de interfaz serie asegura una gran fiabilidad en la comunicación que llega a tolerar una velocidad máxima de 400 Kbps. Es capaz de interconectar hasta 128 dispositivos situados a gran distancia, por lo que el controlador se puede utilizar también en sistemas de gran tamaño.

950

955

960

965

El master es el que inicia y termina la transferencia general y provee de la señal de reloj. El esclavo (“slave”) es el dispositivo direccionado por el master, mediante 7 bits, lo que limita el número de componentes a 128.

En el protocolo I2C cada dispositivo tiene asignada una dirección de 7 o de 10 bits que envía el master cuando comienza la transferencia con uno de ellos. Tras la dirección se añade el bit de recepción/transmisión o lectura/escritura (R/W). Los datos se transmiten con longitud byte y al finalizar cada uno se inserta un bit de reconocimiento ACK. Debe existir un modulo de arbitraje que gestione que solo hay un maestro en cada instante sobre el bus compartido.

En el Gráfico 45 se puede ver el esquema del protocolo.

El compilador CCS ofrece rutinas muy cómodas para la implantación del protocolo, aunque se debe de tener cuidado con los tiempos de espera necesarios para la correcta transmisión de datos y con otras interrupciones que pueden interferir en la transmisión.

Gráfico 45: Protocolo I2C

970

83

Page 100: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.3.4 Estructura del programa

Gráfico 46: Estructura del software del sistema

975

980

El software del sistema se compone del software del sistema central y del de los módulos de adquisición de datos/actuadores.

El sistema central comienza con el código del bootloader, si no hay petición de reprogramación, el código sigue al main() del código programado. Se comienza inicializando el sistema, y los registros necesarios para las funciones de PWM que serán las que, en el módulo central, controlan el brillo y el contraste del LCD.

Se inicializan las variables globales, las interrupciones de botones y del timer, se lee la configuración anteriormente guardada en la EEPROM del micro, configurando el micro en ese momento con ella, si la hubiera, y se comienza la máquina de estados en su estado inicial (pantalla de bienvenida) para controlar los movimientos del usuario en los menús y los diferentes estados por los que pasa.

985

Se haya leído de la configuración, o la haya configurado el usuario (por los pasos definidos en los casos de uso) se ejecutan las instrucciones de la configuración en uso.

84

Page 101: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Las interrupciones pueden producir cambios de estado en cualquier momento, bien directa o indirectamente. Los botones interrumpen de manera directa, el Timer_0 cuando está activa la configuración auto, también. La alarma sin embargo es una consecuencia indirecta de Timer_0.

990

995

1000

1005

1010

1015

1020

Las configuraciones manual y fija, son sencillas, sólo realizan cambios (de necesitarlo) en el momento de su definición. Tan sólo se pueden ver intervenidas (al igual que la automática) por el sistema de alarma. La interrupción Timer_0, cada dos segundos verifica que todos los sistemas tengan sus variables de error a 0. En caso de no tenerlas, se interrumpen todos los procesos, y se lanza una alarma al usuario indicando el módulo que ha producido el error. Una vez que interviene el usuario se vuelve de nuevo al estado en que estaba el sistema anteriormente.

La configuración automática es la más complicada puesto que en ella interviene la interrupción Timer_0 y subsecuentemente, un proceso periódico de lectura y actualización de valores sin intervención del usuario, según el algoritmo de control.

La configuración automática cuando está activa verifica con periodicidad de un tiempo definido en programación (x veces la interrupción Timer_0) la temperatura de los elementos controlados y modifica la actuación sobre ellos en función del resultado del algoritmo de control a partir de esa temperatura leída, la temperatura deseada previamente introducida por el usuario (o leída de la configuración por defecto) y del error cometido anteriormente. El algoritmo de control se ve en el siguiente apartado.

Al mismo nivel que las configuraciones están las operaciones básicas ya no referentes a la funcionalidad, sino a la configuración del sistema, como son las características de comunicación y reset del sistema, y del visualizador, brillo y contraste, y las capacidades de guardar y leer configuraciones.

La parte de software introducido en los bloques modulares se encarga de la adquisición de datos y de ofrecerle disponibilidad al proceso principal para leerlos. Esos datos son de doble sentido, el módulo se encarga asimismo de actualizar la actuación sobre el sistema físico cuando esos datos, en su base de datos virtual, cambian (normalmente cambiados por toma de decisiones del usuario o del propio sistema).

85

Page 102: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Posición en el array Significado del valor

0 PWM canal 1

1 PWM canal 2

2 RPM canal 1

3 RPM canal 2

4 Temperatura canal 1

5 Temperatura canal 2

6 Alarma

7 Reset

Tabla 3: Estructura de almacenamiento de datos

La Tabla 3 muestra la colocación de los datos en la memoria física. Obsérvese la colocación dos a dos que facilita el acceso y modificación de los datos desde bucles y algoritmos recursivos, con el consecuente ahorro de memoria en la 1025 implementación del método

86

Page 103: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.3.5 Algoritmo de control

Para que la configuración auto pueda realizar su tarea de manera desatendida, debe existir alguien que la controle, actualizando los valores de actuación sobre los reguladores según las necesidades de cada momento para poder cumplir, o intentar cumplir con los objetivos marcados.

1030

Gráfico 47: Esquema de control típico sobre procesos

Para cumplir con los objetivos del sistema en la configuración auto, hay que sustituir la supervisión humana del Gráfico 47, por un proceso al que el usuario le marca unas directrices y él toma las decisiones adecuadas para su consecución.

1035

Gráfico 48: Esquema de control con software embebido

En el Gráfico 48 se observa el sistema de control a aplicar en un sistema embebido para el control de un sistema físico. 1040

1045

Los tipos de algoritmos de control más frecuentes son: Lógica difusa Sistemas expertos Redes neuronales Sistemas adaptativos Control tradicional, PID

87

Page 104: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Sobre todos ellos se ha elegido el control tradicional, PID, siguiendo la primera norma del control automático: no aplicar nunca un sistema de control más complejo que el que precise la aplicación. 1050

1055

1060

El control PID es el tipo de control más sencillo de todos, es de fácil implementación, se puede trazar y comprobar sus resultados con muy pocas variaciones, precisa de muy poco espacio en memoria y usa muy poco tiempo de proceso. Estas características lo hacen susceptible para sistemas embebidos.

El control de temperaturas, por regla general, es muy sencillo, y para este sistema el control no tiene muchas variables ni operaciones complejas.

El control PID basa su funcionamiento en la aplicación de constantes sobre operaciones básicas para el control del sistema; la proporcionalidad del error (para corregirlo), la derivación del error (para suavizar el efecto de la proporcionalidad) y la integración (que evita que el sistema se estabilice en un error).

Donde e es el error producido (valor deseado - valor actual)

El valor que marca la periodicidad de muestreo para aplicar el algoritmo es muy importante, la x citada en el apartado anterior, puesto que guarda estrecha relación con las constantes Kp, Ki y Kd. Si se introduce un valor de muestreo muy alto el sistema puede variar demasiado en ese período, lo cual produciría oscilaciones en el sistema, a pesar de que Kp fuese pequeña. Si se introduce un valor de muestreo muy pequeño, el algoritmo de control se puede sobresaturar, no resultando de utilidad la información retroalimentada.

1065

1070

1075

1080

1085

En este sistema se controlan temperaturas en entornos acotados. La temperatura es una medida continua que suele variar con relativa lentitud lo cuál hace pensar en un tiempo de muestreo muy alto, pero no todos los componentes varían su temperatura igual de rápido. Por lo que la mejor opción es realizar diversos ensayos para obtener una modelización, aunque sea muy sencilla, del sistema, que permita obtener los mejores valores de las constantes y sobre todo el tiempo de muestreo adecuado. Incluso, que sería lo más lógico, se podrían producir casos en que este tiempo de muestreo variara según el tipo de componente a controlar.

La implementación del algoritmo para este sistema difiere de las implementaciones tradicionales. La teoría de control clásica define que si se desea que la variable controlada crezca, debe crecer la actuación del controlador. Este sistema es al contrario. Cuando se desea que la variable controlada decrezca (temperatura) se debe aumentar la actuación (ventilador).

Se puede visualizar el algoritmo en C del control PID en el Apéndice Código fuente. Las variables Kp, Ki y Kd han sido elegidas por experimentación (fase de pruebas).

88

Page 105: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

89

Page 106: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

4.4 Presupuesto

El coste total de este sistema se desglosa en dos grandes apartados: hardware y software.

El software necesario para compilar los archivos fuente es el compilador CCS. El código del bootloader es gratuito, aunque también se pueden usar versiones de pago. La versión básica para este sistema cuesta 125 €.

1090

1095

Los componentes pueden variar mucho de precio de una tienda a otra, o mismamente, si se consiguen gratuitamente a través de muestras de fabricantes. Aquí se ofrece la lista de componentes necesaria para el montaje de las placas junto con su precio aproximado tomado como media entre varias tiendas de electrónica.

Placa principal:

Referencia Parte Cantidad Precio Precio Total C1, C5 22pF 2 0,02 0,05C2, C3, C4, C6, C7, C8, C11, C12 100nF 8 0,09 0,72C9 330nF 1 0,06 0,06C10 10nF 1 0,09 0,09J1, J2, J3, J4, J8, J10 10PIN Hembra 6 0,10 0,60J9 MOLEX4 1 0,30 0,30J7 CBTNS 1 0,40 0,40J6 CLCD 1 0,40 0,40LS1 BUZZER 1 1,50 1,50P1 DB9 1 0,20 0,20Q1, Q2 BD140 2 0,15 0,30R1, R3, R5, R6 10K 4 0,01 0,05R2, R4 1K 2 0,01 0,02R7, R8 2K2 2 0,01 0,02U1 PIC16F876 1 5,00 5,00U2 L78/L05TO92 1 0,50 0,50U3 PCF8574 1 3,00 3,00U4 24LC256 1 1,50 1,50U5, U6 HEF4051BP 2 1,00 2,00U7 MAX233 1 5,70 5,70Y1 4MHz 1 0,60 0,60Z1 DV24200 1 18,00 18,00 Total 41,02

1100

90

Page 107: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Solución propuesta

Placa modular:

Referencia Parte Cantidad Precio Precio Total C1, C2 1uF 2 0,02 0,05C3, C4 22pF 2 0,02 0,05D1, D2 D1N4007 2 0,02 0,04J1, J3 Motor 2 0,50 1,00J2, J4 Sonda 2 1,40 2,80J5 CM0 1 0,10 0,10R1, R2, R3, R4, R5, R8, R9, R10, R11, R12 10hm 10 0,01 0,12

R6, R13 1K 2 0,01 0,02R7, R14 2K2 2 0,01 0,02R15 10K 1 0,01 0,01U1 PIC16F876 1 5,00 5,00U2 L293B 1 3,13 3,13Y1 4MHz 1 0,60 0,60 Total 12,94

Las placas se pueden realizar de manera casera, con una insoladora, revelador, ácido y un taladro. El coste de todo el material es igual o mayor al que se consigue haciendo un pedido grande a un fabricante especializado, 15 €/conjunto para pedidos de 50 conjuntos de placas.

1105

1110

1115

En total y contando con que el software sólo se paga la primera vez:

41,02 € + 12,94 € + 15 € = 68,96 €

Este precio incluye componentes para una sola placa modular, que controlaría, según requisitos, dos ventiladores. Habría que añadir otros 12,94 € por cada módulo a mayores que se quisiera instalar, hasta un máximo en total de 6 módulos.

Haciendo una estimación basándose en el ahorro obtenido en la fabricación industrial de las placas, el sistema fabricado a gran escala costaría entre un 30-40% menos.

91

Page 108: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

5 Pruebas

5.1 Definición del sistema de pruebas

Para probar el sistema se monta en una caja que cumple los requisitos del sistema, una Casetek 1019A, ATX semitorre. A ésta se le añaden componentes caloríficos en abundancia, para poder probar todas las funcionalidades del sistema, así como hacer distintas configuraciones según los requisitos.

1120

1125

1130

1135

La caja incluye una fuente de alimentación de 460 W, 2 procesadores Opteron 242 1,8 GHz, 4 bancos de 512 Mb DDR ECC, una Hercules ATI All in Wonder con 128 Mb., 4 discos duros SATA 120 Gb. 7200 RPM configurados en RAID 0+1 (así se asegura un funcionamiento mínimo continuo), 1 disco duro IDE 120 Gb. 7200 RPM, unidad DVD y grabadora DVD.

Con los ventiladores por defecto: dos en la fuente de alimentación, uno en cada procesador y otro en la tarjeta gráfica, la caja alcanza 62º C en las sondas internas de la placa base.

La Casetek 1019A tiene espacio para 7 ventiladores adicionales, 4 de entrada y 3 de salida, configurados 2 de entrada hacia los discos duros, otros 2 de entrada hacia la placa base, 2 de salida desde la placa base y otro de salida superior. La suma de los 3 ventiladores de salida de la caja más el de la fuente de alimentación, equilibran el flujo de aire que recorre la caja.

Gráfico 49: Caja ATX Casetek 1019

92

Page 109: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

Los ventiladores usados son unos UC-8FAB, con sensor de tacómetro y conector molex de 3 pines. Su tabla de características es:

1140

RPM 1800 2300 2800 3400 Voltaje 12 V. 12 V. 12 V. 12 V. Intensidad 0,10 A. 0,14 A. 0,17 A. 0,23 A. Potencia 1,2 W. 1,68 W. 2,04 W. 2.76 W. Flujo de aire 26,87 CFM 33,23 CFM 36,76 CFM 39,80 CFM Ruido 26,5 dB 29,8 dB 30,1 dB 38,0 dB

Tabla 4: Características del Enermax UC-8FAB

Este modelo de ventilador tiene un potenciómetro integrado, por lo que se necesita modificar el cableado para que se ajuste al sistema. 1145

Gráfico 50: Modificación de cableado de ventilador

Se han instalado 4 sondas en los lugares de mayor generación de calor: fuente de alimentación, en los dos procesadores y en el disco duro superior, que por estar configurados en RAID, es seguro que siempre está tan o más caliente que cualquier otro inferior.

1150

93

Page 110: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

Gráfico 51: Sonda en el disipador de los procesadores

Gráfico 52: Sonda en el chasis del disco duro superior 1155

94

Page 111: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

5.2 Pruebas físicas

En las pruebas físicas se ha comprobado el cumplimiento de todas las especificaciones del sistema a nivel físico.

El sistema está montado en una caja ATX, en una bahía de 5 ¼”. Dispone de interfaz de usuario, entrada y salida. Dispone de conectores para sondas de temperatura y ventiladores, así como un conector para la comunicación serie. Dispone de un conector molex para su alimentación de la fuente de alimentación y un interruptor que lo enciende o apaga cuando hay alimentación.

1160

1165

Gráfico 53: Sistema instalado completamente

El conjunto de los 10 ventiladores, en su configuración sobredimensionada (100 %), sin el sistema conectado, consumen en su totalidad 3,1 A.

El sistema otorgando a todos los ventiladores el 100 %, consume 3,5 A. con la retroiluminación del LCD al máximo, y 3,3 A. con la retroiluminación mínima. En funcionamiento automático, se ha podido medir un valor mínimo de 1,2 A.

1170

95

Page 112: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

Las pruebas de sonoridad se realizaron con un sonómetro marca Cesva modelo SC-2C. En el gráfico 52 se observan los resultados de las mediciones.

El gráfico izquierdo representa la sonoridad de los ventiladores en su configuración por defecto, sin el sistema conectado. El gráfico de la derecha representa el valor medio sonoro obtenido para 10 minutos de configuración automática con el sistema en funcionamiento.

1175

Gráfico 54: Valores tridimensionales de sonoridad del sistema

Las mediciones del Gráfico 52 se han realizado en un espacio con una presión sonora entre 40,5 dB y 41,2 dB sin el sistema conectado. Las valores son las medidas realizadas a 30 cm. de la superficie de la caja.

1180

1185

1190

5.3 Pruebas lógicas

El funcionamiento del interfaz del usuario es correcto, no realizando ninguna operación en caso de no recibir una entrada esperada para ese estado.

Las configuraciones manual y fija funcionan perfectamente. Los ventiladores cambian cuando y al valor que se les ordena al instante.

Las visualizaciones de los valores de los canales son correctas aunque los valores de las temperaturas son oscilatorias en 1-2º C

La configuración automática ha sido probada para varios valores distintos de las constantes del algoritmo PID y diferentes valores de temperatura deseada para los distintos componentes regulados. Los resultados de las pruebas son las gráficas de las páginas siguientes.

96

Page 113: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

1195

97

Page 114: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

98

Page 115: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

99

Page 116: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

100

Page 117: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

1200

1205

1210

Esta última gráfica se ha realizado, con ventilación constante, para comprobar que el sistema controlado no es estrictamente lineal. Tiene muchas perturbaciones.

La primera gráfica se ha realizado para ver el comportamiento máximo de los componentes con máxima ventilación constante. Es importante ver como las temperaturas de los procesadores comienzan a fluctuar al alza en cuanto la ventilación de la fuente y del disco deja de ser máxima.

La segunda y tercera gráfica se ha realizado con con valores de Kp=1, Ki=1, Kd=1.

La cuarta gráfica se ha realizado con con valores de Kp=0, Ki=1, Kd=0.

Las pruebas son satisfactorias, el sistema regula adecuadamente, manteniendo los componentes en las temperaturas adecuadas y ahorrando lo posible en ventilación cuando no es necesario.

101

Page 118: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

6 Discusión y conclusiones

6.1 Discusión de resultados

El primer resultado que debe discutirse es la oscilación de las medidas de las temperaturas de 1º C. Esta oscilación puede deberse al error admitido por el fabricante de la sonda, de +/- 1º C y también puede deberse al conversor analógico digital del microcontrolador.

1215

1220

1225

1230

1235

1240

1245

El conversor analógico ya ha dado problemas anteriormente. Puede sufrir alteraciones aparentemente aleatorias, las cuales pueden deberse a la señal de entrada mismamente (ruidos electromagnéticos en los cables de las sondas, a pesar de haber cumplido las normas del fabricante) o bien la tensión de referencia que está recibiendo el módulo ADC generada por un 7805, no es tan buena como debiera.

En cualquier caso, no es preocupante. Este sistema trabaja en rangos de temperatura muy amplios, lo cual le hace resistente a pequeños errores de precisión que, por otro lado, también serían cortos en el tiempo, apenas unos segundos.

Con respecto al controlador PID, es importante conocer la naturaleza del sistema a controlar. Las gráficas muestran que indudablemente, los componentes, individualmente, se mantienen alrededor de la temperatura deseada. Pero se ve como hay una interrelación directa entre ellos.

Los procesadores no disponen de aire renovado, sino que sólo ventilan el disipador. Por lo tanto, es muy importante que los ventiladores ordenados por el disco duro, provean al interior de la caja de aire renovado.

Se aprecian serias diferencias entre las gráficas que tienen un tiempo de muestreo de 20 segundos a las de 10 segundos. 20 segundos es demasiado, da tiempo al componente a calentarse de nuevo, produciendo resultados muy bruscos, para luego enfriarse muy rápido de nuevo.

Con respecto a los valores Kp, Ki y Kd, no se aprecian muchas diferencias entre disponer unos valores u otros. Valores muy grandes es evidente que en un sistema tan lento, no dan buenos resultados, pero en valores bajos, el que mejor parece ceñirse a la temperatura deseada es cuando no tenemos en cuenta la proporcionalidad ni la derivación, produciendo solamente una acción integral.

Esto tiene sentido, porque las variaciones en temperatura no pueden ser nunca muy grandes, y por otro lado es beneficioso que varíe poco a poco, ayudando a filtrar los posibles errores del ADC.

102

Page 119: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Pruebas

6.2 Conclusiones

El sistema funciona bien según especificaciones y requisitos, pero es mejorable viendo algunos resultados.

En primer lugar, su naturaleza de no lineal, hace que los cambios sean a veces algo abruptos, independientemente del control usado. Eso es algo que no se puede cambiar.

1250

1255

1260

1265

1270

1275

A pesar de que los requisitos especifican que regula entornos independientes, se debe hacer una interrelación entre los entornos que se influencien mutuamente. Estas influencias actualmente se toman como perturbaciones a cada entorno independiente.

A parte del filtrado software que se realiza en el conversor A/D, otro filtrado a nivel de algoritmo de control daría más fiabilidad al sistema. Pero esto produciría una reducción del tiempo de muestreo, que en los mejores resultados es de 10 segundos. No se puede bajar mucho más, puesto que la frecuencia de adquisición de datos para cada canal es de 4 segundos. Por otro lado, un filtrado a nivel de algoritmo produciría mayor cantidad de código en el sistema central, el cual ya está al 86% de su capacidad, minimizando todas las funciones.

Otro aspecto a tener en cuenta es la naturaleza de los actuadores. Una de las razones por la que los valores nunca se estabilizan y tienen picos, a parte de su naturaleza no lineal, es la discretización de la velocidad dada en tan solo 8 pasos (de 20% a 100%).

Estos 8 pasos están limitados por restricción del microcontrolador, que a mayor frecuencia de PWM, menor es la discretización de su ciclo de trabajo. Se ha decidido trabajar a una frecuencia relativamente alta, 100 KHz, porque los ventiladores sufren menos desgaste (ver explicación PWM), alargando su vida útil.

Una posible solución sería bajar la frecuencia, a pesar del desgaste de los ventiladores, o subir la frecuencia, cambiando el microcontrolador por otro me mayor velocidad.

En conclusión, el sistema, para los requisitos y funcionalidades impuestas, y en función de las decisiones tomadas, funciona correctamente.

103

Page 120: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Evolutivos

7 Evolutivos

En orden de importancia.

Realizar otra/s iteración/es al análisis y diseño hardware, intentando reducir costes y espacio.

Aprovechar la EEPROM de la placa para introducir ahí los mensajes del LCD ahorrando espacio para incluir nuevas funcionalidades.

1280

1285

1290

Añadir la posibilidad de cambiar las constantes Kp, Ki y Kd del PID para ser más versátil.

Poder variar el tiempo de muestreo para cada componente controlado en particular.

Desarrollar y añadir un módulo que envíe y pueda recibir mensajes desde un móvil a otro grabado previamente, con instrucciones y datos (SMS)

Desarrollo de las librerías necesarias en CCS para controlar otros tipos de pantallas por I2C con el PCF8574A.

Integración en la placa principal de un reloj de tiempo real. Poder encender/apagar el ordenador a través de hardware a unas horas determinadas.

Añadir la funcionalidad de sonido al teclado.

Añadir la funcionalidad de sonido encendido/apagado.

Sustituir la interfaz de entrada, botonera, por un mando de infrarrojos.

104

Page 121: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Evolutivos

105

Page 122: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Definiciones

8 Definiciones 1295

1300

1305

1310

1315

Esta sección ofrece unas listas de definiciones de términos, acrónimos y abreviaturas usadas en este documento. Dichas listas están ordenadas alfabéticamente

8.1 Términos

Bootloader Cargador de arranque para dispositivos con software embebido. Es un pequeño código que es el primero en ejecutarse siempre, que espera durante cierto tiempo o pregunta al exterior si se le quiere reprogramar. En caso afirmativo recoge líneas de código y las graba en su memoria de programa, tras lo cual arranca el programa grabado desde su inicio.

Crosstalk Ruido producido al cambio de estado en una línea, que a su vez es inducido en las líneas próximas a ella. Este efecto se produce con mayor probabilidad cuando se trabaja a alta frecuencia

Darlington Configuración en la unión de dos transistores para aumentar el paso de corriente. Tipo de transistores que usa dos en cascada, amplificando el primero al segundo

Disipar Esparcir y desvanecer las partes de un todo

Modding Personalización de ordenadores personales, bien en decoración, aumento de rendimiento o añadiendo nuevas funcionalidades; normalmente usando medios caseros

106

Page 123: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Definiciones

1320

1325

1330

1335

MOS Dependiendo de la familia en concreto, se tienen unos valores distintos de tensión, estos son:

Mín Máx CMOS 15V (serie 4000) 3V 18V CMOS 5V (serie 74C) 3V 15V

CMOS 5V (serie 74HC) 3V 6V

Tabla 5: Voltajes CMOS

Pull-up Resistencia que en un circuito fuerza un estado lógico alto o "1", cuando el propio dispositivo que se conecta no pueda generarlo.

Refrigerar Hacer más frío un entorno u otra cosa por medios artificiales

RS-232 Norma de comunicaciones estándar entre distintos equipos. La transmisión se realiza sobre una línea no balanceada, tiene problemas de ruido y crosstalk, la velocidad de transmisión es baja, y la longitud de la línea esta en torno a los 30 mts. Como ventajas tenemos su bajo coste, y que es muy simple de implementar.

TTL Niveles de tensión que van dentro de una ventana de 5 voltios.

107

Page 124: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Definiciones

8.2 Acrónimos

BCD 1340

1345

1350

1355

1360

1365

Sistema de numeración binario de cuatro dígitos, que va del 0 al 9 Binary Coded Decimal

0000 0 0101 5 0001 1 0110 6 0010 2 0111 7 0011 3 1000 8 0100 4 1001 9

Tabla 6: Sistema de numeración BCD

CA Corriente alterna

CC Corriente continua

CERN European Laboratory for Particle Physics

CFM Medida de flujo de aire Cubic Feet per Minute

CHIP Circuito integrado Consolidated Highly Integrated Processor

EEPROM Memoria de sólo lectura programable y borrable electrónicamente Electronic Erasable Programmable Read Only Memory

ESA European Space Agency

I2C Especificación de transmisión de datos para sistemas embebidos diseñado por Philips en los años 80 Inter Integrated Circuit

LCD Visualizador de cristal líquido Liquid Crystal Display

LED Diodo emisor de luz Light-emitting diode

108

Page 125: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Definiciones

PCB Placa de circuito impreso Printed Circuit Board

RPM Revoluciones por minuto de un eje. Medida de velocidad angular Revolutions Per Minute 1370

1375

RL Refrigeración líquida

SMD Método de montaje de componentes electrónicos miniaturizados que consiste en montarlo sobre la superficie de la placa, sin zócalo, tan sólo unido a ella por estaño Surface mounted device

109

Page 126: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Definiciones

8.3 Abreviaturas

Baybus Controlador de ventiladores en base a interruptores.

Electrobus 1380

1385

Controlador de ventiladores en base a un integrado electrónico o transistor

Fanbus Bus de conexiones de ventiladores

Reobus Controlador de ventiladores en base a reóstatos de potencia

110

Page 127: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

111

Page 128: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Referencias

9 Referencias

[1] ESA Software Engineering Standards, ESA PSS-05-02, Issue March 1995 ESA Board of Software Standardization and Control (BSSC) ISBN 0-13-106568-8 1390

[2] MacPower Peripherals Ltd. Digital Doc 5+ http://www.macpower.com.tw/products/peripherals/dd/dd5plus

[3] Vantec Thermal Tecnologies Vortex Hard Drive cooling system 1395 http://www.vantecusa.com/p_vtxc01_sl.html

[4] CoolerMaster, Co. Ltd. Aerogate III http://www.coolermaster.com/index.php?LT=english&Language_s=2&url_place=product&p_serial=ALD-V03&other_title=0 1400

[5] Pulse Width Modulation http://www.cpemma.co.uk/pwm.html

[6] Universidad de Guadalajara, México Centro Universitario de Ciencias Exactas e Ingeniería Implementación de un sistema de desarrollo utilizando los microcontroladores PIC Microchip Technology, 1998

1405

http://proton.ucting.udg.mx/temas/microprocesadores/microchip/manual1.zip

[7] Philips Electronics Especificicación del bus I2C http://www.semiconductors.philips.com/buses/i2c/ 1410

[8] Microchip, Inc Microcontrolador PIC16F876 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010239

[9] CCS Inc. Compilador en C para microcontroladores de Microchip

1415

http://www.ccsinfo.com/picc.shtml

[10] Bootloader http://www.microchipc.com/PIC16bootload/

112

Page 129: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

[11] PIC Downloader 1420 http://www.ehl.cz/pic/pic_e.htm

113

Page 130: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

Apéndice A

Código fuente

Microcontrolador de la placa principal 1425

1430

1435

1440

1445

1450

1455

1460

/***********************************************

Master module HM-Baybus system

Manuel Díaz García

Computer Systems

European University of Madrid

September 2004

More information than comments in:

http://www.microchip.com (for 16F876 info)

http://www.ccsinfo.com (for CCS compiler info)

***********************************************/

#include <16F876.H> //Include 17F876 CCS library

#device ADC=10 //Define 10 bits to 16F876 ADC module output value

#use delay(clock=4000000) //Define de micro speed 4 Mhz

#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)

/*Define the RS232 operation mode:

BAUD=Set baud rate, XMIT=Set transmit pin, RCV=Set receive pin*/

#use i2c(Master,scl=PIN_C3,sda=PIN_C4)

/*Define the I2C operation mode: MASTER=I2C master mode,

SCL=specifies de SCL pin, SDA=specifies de SDA pin,*/

#use fast_io(a)

/*The fast method of doing I/O will cause the compiler to perform I/O

without programming of the direction register*/

#org 0x1F00, 0x1FFF void loader16F876(void) {}

/*Directive to reserve memory in compilation from 0x1F00 to 0x1FFF to

the bootloader code (more information in http://www.microchipc.com)*/

#include "lcd4_i2c.c"

//Include the library to print characters on a LCD by I2C and PCF8574

#include "functions_hm.h"

//Include the library with specific functions to project and 16F876

#priority rb

//This directive gives priority to rb interrupt over others

114

Page 131: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

115

typedef enum {U,D,L,R,NONE} button;

//Type definition to the buttons

button current_button=NONE;

//Used to know how button push the user 1465

1470

1475

1480

1485

1490

1495

1500

1505

int commodule = 0;

//Module that has the communication by RS232

int resetmodule = 0;

//Module that will be resetted

int lcdcontrast = 6;

//Value of the LCD contrast, by default 6

int lcdbright = 12;

//Value of the LCD bright, by default 12

int current_state = 0;

//Save the current_state of the system

short conffixed = 0;

//Save the state of the fixed configuration E/D

short confman=0;

//Save the state of the manual configuration E/D

int confmanvalues[10];

//Save between sessions the value of the manual configurations of channels

//5 modules -> 2 fans by module -> 10 values

short confauto=0;

//Save the state of the auto configuration E/D

signed int temperatures[4]={44,44,51,39};

//Save the values wanted to maintain in the controled components

void rightbutton();

//Method that will be called when the user push right button

//It´s used combined with current_state

void leftbutton();

//Method that will be called when the user push right button

//It´s used combined with current_state

void upbutton();

//Method that will be called when the user push right button

//It´s used combined with current_state

void downbutton();

//Method that will be called when the user push right button

//It´s used combined with current_state

void commoduleupdate();

//Method that changes the control lines of de/multiplexers to

//communicate the selected module in commodule

void lcdupdate90();

//Method that update the view in LCD with current_state

void printmodule(int, short);

//It prints in LCD the name of the (module, channel)

#separate void autoconf(short);

Page 132: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

116

//This method does the control when the configuration auto is enabled

//Shows the control temperatures values and allow change them 1510

1515

1520

1525

1530

1535

1540

1545

1550

1555

//Refresh the LCD when the value changes

//Also regulates the fans with an PID algorithm

//It has the separate directive, because it is too big to be saved in the free

//spaces in banks. Then the compiler is forced to begin a bank with it.

void setpwmmanual();

//This method put all fans in the system to the values saved in confmanvalues

//Update the contrast of LCD with the value saved in lcdcontrast

//When the value is 20 (invisible) it turns off the contrast

void lcdcontrastupdate(){

if (lcdbright==20)

set_pwm2_duty(-1);

else

set_pwm2_duty(lcdcontrast);

}

//Update the bright of LCD with the value saved in lcdbright

//When the value is 40 (maximum) it turns off the bright

void lcdbrightupdate(){

if (lcdbright==40)

set_pwm1_duty(-1);

else

set_pwm1_duty(lcdbright);

delay_ms(50);

}

//This method puts the system in an alarma state, until the user push any button

void alarmnow(int cvmodulel, int cvalarml){

short loop = 0;

disable_interrupts(int_rb); //Disable for not do when push a button

set_pwm2_duty(2);

printf(lcd_putc,"\fALARMA Error en ");

printmodule(cvmodulel,cvalarml-1);

while(cvalarml>0){

if (loop==0){

set_pwm1_duty(0); //LCD bright max

loop=1;

}else{

set_pwm1_duty(-1); //LCD bright off

loop=0;

}

beep(150);

delay_ms(250);

Page 133: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

117

beep(50);

delay_ms(250);

beep(50);

delay_ms(500); //Three sounds

if (!input(PIN_B4)||!input(PIN_B5)||!input(PIN_B6)||!input(PIN_B7)){ 1560

1565

1570

1575

1580

1585

1590

writei2c(cvmodulel,6,0); //It changes the value of alarm in the

//module with errors

delay_ms(20);

cvalarml=0;

lcdbrightupdate(); //Change the bright of LCD to user value

lcdcontrastupdate(); //Change the contrast of LCD to user value

}

}

enable_interrupts(int_rb); //Enable the interrupts in the buttons again

}

//This method changes all values of confmanvalues and execute de setpwmmanual()

// changing all values in the system

void setpwmall(int value){

int i=0;

delay_ms(50);

for (i=2;i<10;i++){

confmanvalues[i]=value;

}

setpwmmanual();

}

//This method it´s reading the values of the modules each 2 seconds (timer_0)

//Also changes the view of the LCD to show the values of each channel when

// the user wants see the system status

//When it finishes the channels it begins again from first

void secuentialview(){

static short cvchannel=1;

static int cvmodule=0x10;

int cvrpm =0;

int cvpwm =0;

int cvtemp =0;

int cvalarm=0;

Page 134: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

118

if (cvchannel==0)

cvchannel=1; 1595

1600

1605

1610

1615

1620

1625

1630

1635

1640

else{

if (cvmodule==0x60){

cvmodule=0x20; //The first module is in this address

} else {

cvmodule=cvmodule+0x10;

}

cvchannel=0;

}

if (current_state==90){ //90 is the state that the user wants see the

//system status

cvpwm=readi2c(cvmodule, cvchannel);

delay_ms(20);

cvrpm=readi2c(cvmodule, cvchannel+2);

delay_ms(20);

cvtemp=readi2c(cvmodule,cvchannel+4);

delay_ms(20);

printf(lcd_putc,"\f");

printmodule(cvmodule,cvchannel);

printf(lcd_putc,"\nPWM=%i RPM=%lU", cvpwm, (int16)cvrpm*15);

if (cvtemp>0){

printf(lcd_putc," Temp=%i",cvtemp);

}

}

cvalarm = readi2c(cvmodule,6);

delay_ms(20);

if (cvalarm>0 && cvalarm<4){ //This module has an error -> ALARM!!!

alarmnow(cvmodule,cvalarm);

}

}

//System interrupt with the internal clock timer_0

//It´s needed configurate before the timer

#int_timer0

void timer_0_isr (void) {

static byte timer_0_count = 0;

static byte timer_auto = 0;

if (timer_0_count < 31) {

timer_0_count++;

} else {

secuentialview(); //Test the modules

if (confauto==1){

Page 135: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

119

if(timer_auto<5){

timer_auto++;

} else {

timer_auto=0;

autoconf(4); //Update the auto values with the PID algorithm 1645

1650

1655

1660

1665

1670

1675

1680

1685

//each 10*2=20 seconds

}

}

timer_0_count = 0; //reset counter

}

set_timer0 (8);

}

//Interrupt detects changes on PortB

#int_rb

void detect_rb_change() {

short b4,b5,b6,b7; //last 4 lines

static short last_b4=1,last_b5=1,last_b6=1,last_b7=1;

b4=input(PIN_B4);b5=input(PIN_B5);b6=input(PIN_B6);b7=input(PIN_B7);

if (last_b7 && !b7) {delay_ms(50);current_button=R;rightbutton();}else

if (last_b6 && !b6) {delay_ms(50);current_button=U;upbutton();}else

if (last_b4 && !b4) {delay_ms(50);current_button=D;downbutton();}else

if (last_b5 && !b5) {delay_ms(50);current_button=L;leftbutton();}

last_b4=b4;last_b5=b5;last_b6=b6;last_b7=b7;

}

//Method to reset the module saved in resetmodule

//See the functions_hm.h library

void resetnow(){

disable_interrupts(int_timer0);

printf(lcd_putc,"\fEspere");

if (resetmodule==0){

commodule=0;

commoduleupdate();

delay_ms(10);

resetcpu();

} else {

writei2c(0x10*resetmodule,7,1); //Send the reset command to module

}

if (commodule==resetmodule) delay_ms(10000); //Reset to reprogram it

else delay_ms(2000); //Only reset

enable_interrupts(int_timer0);

}

//Changes the value of all channels in the system with the values saved

// in confmanvalues

Page 136: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

120

void setpwmmanual(){

int i;

for (i=0;i<10;i++){ 1690

1695

1700

1705

1710

1715

1720

1725

1730

writei2c(0x20+0x10*(int)(i/2),i%2,confmanvalues[i]);

delay_ms(20);

}

}

//The methods lcdupdateXX() updates the view in the LCD

//They know the machine state by the value of current_state

//This methods are launched by the method of buttons

void lcdupdate0(){

switch(current_state){

case 0:{

beep(50);

printf(lcd_putc,"\f Bienvenido a HM-Baybus");

break;

}

}

}

void lcdupdate10(){

switch(current_state){

case 10:{

printf(lcd_putc,"\f%c Comunicacion - %c",127,126);

break;

}

case 11:{

printf(lcd_putc,"\f%c Comunicacion | Reset %c",127,126);

break;

}

case 12:{

printf(lcd_putc,"\f%c Resetear???\nModulo %i+/- Si%c",127,resetmodule,126);

break;

}

case 13:{

printf(lcd_putc,"\f RS232 %c\nModulo=%i+/-",126,commodule);

break;

}

}

}

void lcdupdate20(){

switch(current_state){

case 20:{

Page 137: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

121

printf(lcd_putc,"\f%c Pantalla - %c",127,126); 1735

1740

1745

1750

1755

1760

1765

1770

1775

1780

break;

}

case 21:{

printf(lcd_putc,"\f%c Brillo | Contraste %c",127,126);

break;

}

case 22:{

printf(lcd_putc,"\fBrillo %c\nActual=%i+/-",126,10-lcdbright/4);

break;

}

case 23:{

printf(lcd_putc,"\f%c Contraste\nActual=%i+/-",127,10-lcdcontrast/2);

break;

}

}

}

void lcdupdate30(){

switch(current_state){

case 30:{

printf(lcd_putc,"\f%c Conf. manual - %c",127,126);

break;

}

case 31:{

if (confman==1){

printf(lcd_putc,"\f%c Desactivar manual\nConfigurar %c",127,126);

}

else

printf(lcd_putc,"\f%c Activar manual",127);

break;

}

case 32:{

break;

}

case 33:{

printf(lcd_putc,"\f Conf. manual %c\n",126); //It test the value of

if (confman==1) printf(lcd_putc,"A"); //variable, then the user

else printf(lcd_putc,"Desa"); //can enable or

printf(lcd_putc,"ctivada +"); //disable

break;

}

}

}

void lcdupdate40(){

switch(current_state){

case 40:{

printf(lcd_putc,"\f%c Conf. fija - %c",127,126);

Page 138: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

122

break;

}

case 41:{

if (conffixed==1){ 1785

1790

1795

1800

1805

1810

1815

1820

1825

printf(lcd_putc,"\f%c Desactivar fija\nConfigurar %c",127,126);

}

else

printf(lcd_putc,"\f%c Activar fija",127);

break;

}

case 42:{

printf(lcd_putc,"\f%c Valor PWM fijo\nActual=%i+/-",127,confmanvalues[0]);

break;

}

case 43:{

printf(lcd_putc,"\fConf. fija %c\n",126);

if (conffixed==1) printf(lcd_putc,"A");

else printf(lcd_putc,"Desa");

printf(lcd_putc,"ctivada +");

break;

}

}

}

void lcdupdate50(){

switch(current_state){

case 50:{

printf(lcd_putc,"\f%c Conf. auto - %c",127,126);

break;

}

case 51:{

if (confauto==1){

printf(lcd_putc,"\f%c Desactivar auto\nConfigurar %c",127,126);

}

else

printf(lcd_putc,"\f%c Activar auto",127);

break;

}

case 52:{

break;

}

case 53:{

printf(lcd_putc,"\fConf. auto %c\n",126);

if (confauto==1) printf(lcd_putc,"A");

else printf(lcd_putc,"Desa");

printf(lcd_putc,"ctivada +");

Page 139: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

123

break;

} 1830

1835

1840

1845

1850

1855

1860

}

}

void lcdupdate80(){

switch(current_state){

case 80:{

printf(lcd_putc,"\f%c Grabar+ Leer- Config",127);

break;

}

case 81:{

printf(lcd_putc,"\fLeer Config +\nSi %c",126);

break;

}

case 82:{

printf(lcd_putc,"\fGrabar Config - Si %c",126);

break;

}

}

}

//Read the configuration of the system from the internal EEPROM

//If no configuration was saved befor, it puts all values to max

void readconf(){

int temp=0;

temp=read_eeprom(200);

delay_ms(10);

lcdcontrast=temp;

lcdcontrastupdate();

temp=read_eeprom(201);

delay_ms(10);

lcdbright=temp;

lcdbrightupdate();

temp=read_eeprom(202);

delay_ms(10);

Page 140: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

124

if (temp>0){ 1865

1870

1875

1880

1885

1890

1895

1900

if (temp==1){

conffixed=1;

confman=0;

confauto=0;

temp=read_eeprom(203);

delay_ms(10);

setpwmall(temp);

} else {

if (temp==2){

confman=1;

conffixed=0;

confauto=0;

for (temp=0;temp<10;temp++){

confmanvalues[temp]=read_eeprom(203+temp); //recover the values

delay_ms(10);

}

setpwmmanual();

} else {

if (temp==3){

confman=0;

conffixed=0;

confauto=1;

for (temp=0;temp<4;temp++){

temperatures[temp]=read_eeprom(203+temp); //recover the temps

delay_ms(10);

}

} else {

setpwmall(10);

}

}

}

} else {

confman=0;

conffixed=0;

confauto=0;

setpwmall(10);

}

}

Page 141: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

125

//This method saves the current configuration of the system

//If none configuration is in use, it only save the state of contrast and bright 1905

1910

1915

1920

1925

1930

1935

1940

//of the LCD

void writeconf(){

int i=0;

write_eeprom(200,lcdcontrast);

delay_ms(10);

write_eeprom(201,lcdbright);

delay_ms(10);

if (conffixed ==1){

write_eeprom(202,1);

delay_ms(10);

write_eeprom(203,confmanvalues[0]);

delay_ms(10);

} else {

if (confman ==1){

write_eeprom(202,2);

delay_ms(10);

for (i=0;i<10;i++){

write_eeprom(203+i,confmanvalues[i]);

delay_ms(10);

}

} else{

if (confauto ==1){

write_eeprom(202,3);

delay_ms(10);

for (i=0;i<4;i++){

write_eeprom(203+i,temperatures[i]);

delay_ms(10);

}

} else {

write_eeprom(202,-1);

delay_ms(10);

}

}

}

}

Page 142: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

126

//This method does the control when the configuration manual is enabled

//Shows the PWM values for the channels and allow change them

//Refresh the LCD when the value changes and applyes the change

//It has the separate directive, because it is too big to be saved in the free

//spaces in banks. Then the compiler is forced to begin a bank with it. 1945

1950

1955

1960

1965

1970

1975

1980

#separate

void manualconf(short operation){

static int cmmodule=0x20;

static short cmchannel=1;

static int pwmvaluem=0;

static int rpmvaluem=0;

disable_interrupts(int_timer0);

delay_ms(20);

if (operation==0){

if (cmchannel==1){

cmchannel=0;

if (cmmodule==0x60) cmmodule=0x20;

else cmmodule=cmmodule+0x10;

} else cmchannel=1;

pwmvaluem=readi2c(cmmodule,cmchannel);

delay_ms(20);

} else {

if (operation==1 && pwmvaluem<10){

pwmvaluem++;

} else {

if (operation==2 && pwmvaluem>0){

pwmvaluem--;

}

}

writei2c(cmmodule,cmchannel,pwmvaluem);

delay_ms(20);

}

confmanvalues[((int)(cmmodule/16)-2)*2+cmchannel]=pwmvaluem;

rpmvaluem=readi2c(cmmodule,cmchannel+2);

delay_ms(20);

printf(lcd_putc,"\f%c%c ",127,127);

printmodule(cmmodule,cmchannel);

printf(lcd_putc," %c\nPWM=%i+/- RPM=%lU",126,pwmvaluem,(int16)rpmvaluem*15);

enable_interrupts(int_timer0);

}

Page 143: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

127

//This method does the control when the configuration auto is enabled

//Shows the control temperatures values and allow change them

//Refresh the LCD when the value changes

//Also regulates the fans with an PID algorithm

//It has the separate directive, because it is too big to be saved in the free 1985

1990

1995

2000

2005

2010

2015

2020

//spaces in banks. Then the compiler is forced to begin a bank with it.

#separate

void autoconf(short operation){

static int pos = 0; //Static to save the position between calls

static signed int errors2[4]={0,0,0,0}; //Static to save the last error for

// each component

static signed int errors[4]={0,0,0,0}; //Static to save the last error for

// each component

int const modulos[4]={0x60,0x60,0x20,0x50}; //Addresses that have the components

//that will be controlled

char const cadenas[21]={"CPU1 CPU2 FA Disco"};

signed int kp=0,ki=1,kd=0; //Constants to the PID algorithm

signed int error=0;

int temp1= 0;

signed int temp2=0;

signed int temp3=0;

if (operation == 0){ //In this operations only refresh the LCD view

disable_interrupts(int_timer0);

printf(lcd_putc,"\f%c%c Fijar temp. ",127,127);

for (temp1=0;temp1<5;temp1++)

printf(lcd_putc,"%c",cadenas[temp1+pos*5]);

printf(lcd_putc," %c\n",126);

temp1=readi2c(modulos[pos],(pos%2)+4);

delay_ms(20);

printf(lcd_putc,"Fijada=%i+/- Actual=%i",temperatures[pos],temp1);

enable_interrupts(int_timer0);

}

if (operation == 1){ //Increments the value of the desired temperature

if (temperatures[pos]<70) temperatures[pos]++;

}

if (operation == 2){ //Decrements the value of the desired temperature

if (temperatures[pos]>20) temperatures[pos]--;

}

if (operation == 3){ //Increments the pos

if (pos==3) pos=0;

else pos++;

}

Page 144: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

128

if (operation == 4){ //PID Control

for (temp1=0;temp1<4;temp1++){

error=readi2c(modulos[temp1],(temp1%2)+4); //Current temp of component 2025

2030

2035

2040

2045

2050

2055

2060

2065

delay_ms(20);

error=(signed int)temperatures[temp1]-(signed int)error;

temp2 =(signed int)Kp*((signed int)error-(signed int)errors[temp1]);

//PROPORTIONAL

temp2 = (signed int)temp2 + (signed int)Ki*(signed int)error; ///

INTEGRATE

temp2 = (signed int)temp2 + (signed int)Kd*(signed int)(((signed int)error-

(signed int)errors[temp1])-

((signed int)errors[temp1]-(signed int)errors2[temp1])); /// DERIVATE

errors2[temp1]=errors[temp1];

errors[temp1]=error;

temp3=readi2c(modulos[temp1],temp1%2); //Current PWM

delay_ms(20);

temp3=(signed int)temp3-(signed int)temp2;

if (temp3>(signed int)10) temp3=10; //If more than max then max

if (temp3<(signed int)2) temp3=2; //If less than min then min

if (temp1==2){ //Component 2

writei2c(modulos[temp1],0,temp3);

delay_ms(20);

writei2c(modulos[temp1],1,temp3);

delay_ms(20);

writei2c(modulos[temp1]+0x20,0,temp3);

delay_ms(20);

writei2c(modulos[temp1]+0x20,1,temp3);

delay_ms(20);

} else {

if (temp1==3){ //Component 3

writei2c(modulos[temp1],0,temp3);

delay_ms(20);

writei2c(modulos[temp1],1,temp3);

delay_ms(20);

writei2c(modulos[temp1]-0x20,0,temp3);

delay_ms(20);

writei2c(modulos[temp1]-0x20,1,temp3);

delay_ms(20);

} else {

writei2c(modulos[temp1],temp1%2,temp3); //Component 1 and 2

delay_ms(20);

}

}

//Only for error=readi2c(modulos[temp1],(temp1%2)+4);

//debug delay_ms(20);

// printf("t=%i c=%i t=%i d=%i v=%D pwm=%D\r",

(int8)((getadc(1)*500)/1024), temp1,error,temperatures[temp1],temp2,temp3);

Page 145: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

129

} 2070

2075

2080

2085

2090

2095

2100

2105

2110

}

}

//The methods of buttons define the machine states and call to the methods

//that refresh the LCD

//Some of them, also do simple operations on global values

void upbutton(){

switch (current_state){

case 11:{

current_state=10;

lcdupdate10();

break;

}

case 12:{

if (resetmodule<6){

resetmodule++;

lcdupdate10();

}

break;

}

case 13:{

if (commodule<6){

commodule++;

commoduleupdate();

lcdupdate10();

}

break;

}

case 21:{

current_state=20;

lcdupdate20();

break;

}

case 22:{

if (lcdbright>3){

lcdbright=lcdbright-4;

lcdbrightupdate();

lcdupdate20();

}

break;

}

Page 146: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

130

case 23:{

if (lcdcontrast>1){

lcdcontrast--;

lcdcontrast--; 2115

2120

2125

2130

2135

2140

2145

2150

2155

lcdcontrastupdate();

lcdupdate20();

}

break;

}

case 31:{

current_state=30;

lcdupdate30();

break;

}

case 32:{

manualconf(1);

break;

}

case 33:{

if (confman==1){ //If the configuration is enabled, the user

confman=0; //can disable it

setpwmall(10);

} else { //Enable

confman=1;

conffixed=0;

confauto=0;

}

lcdupdate30();

break;

}

case 41:{

current_state=40;

lcdupdate40();

break;

}

case 42:{

if (confmanvalues[0]<10){

confmanvalues[0]++;

if (confmanvalues[0]==1) confmanvalues[0]++; //Min value = 2

setpwmall(confmanvalues[0]);

lcdupdate40();

}

break;

}

Page 147: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

131

case 43:{

if(conffixed==0){

confman=0;

conffixed=1;

confauto=0; 2160

2165

2170

2175

2180

2185

2190

2195

2200

}else{

setpwmall(10);

conffixed=0;

}

lcdupdate40();

break;

}

case 51:{

current_state=50;

lcdupdate50();

break;

}

case 52:{

autoconf(1);

autoconf(0);

break;

}

case 53:{

if (confauto==1){ //Disable the conf and put all values to max

confauto=0;

setpwmall(10);

} else {

confman=0;

conffixed=0;

confauto=1;

}

lcdupdate50();

break;

}

case 80:{

current_state=82;

lcdupdate80();

break;

}

case 81:{

current_state=80;

lcdupdate80();

break;

}

}

}

void downbutton(){

Page 148: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

132

switch (current_state){

case 10:{

current_state=11; 2205

2210

2215

2220

2225

2230

2235

2240

2245

lcdupdate10();

break;

}

case 20:{

current_state=21;

lcdupdate20();

break;

}

case 12:{

if (resetmodule>0){

resetmodule--;

lcdupdate10();

}

break;

}

case 13:{

if (commodule>0){

commodule--;

commoduleupdate();

lcdupdate10();

}

break;

}

case 22:{

if (lcdbright<37){

lcdbright=lcdbright+4;

lcdbrightupdate();

lcdupdate20();

}

break;

}

case 23:{

if (lcdcontrast<19){

lcdcontrast++;

lcdcontrast++;

lcdcontrastupdate();

lcdupdate20();

}

break;

}

Page 149: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

133

case 30:{

current_state=31;

lcdupdate30();

break;

} 2250

2255

2260

2265

2270

2275

2280

2285

2290

case 32:{

manualconf(2);

break;

}

case 40:{

current_state=41;

lcdupdate40();

break;

}

case 42:{

if (confmanvalues[0]>0){

confmanvalues[0]--;

if (confmanvalues[0]==1) confmanvalues[0]--;

setpwmall(confmanvalues[0]);

lcdupdate40();

}

break;

}

case 50:{

current_state=51;

lcdupdate50();

break;

}

case 52:{

autoconf(2);

autoconf(0);

break;

}

case 80:{

current_state=81;

lcdupdate80();

break;

}

case 82:{

current_state=80;

lcdupdate80();

break;

}

}

}

void leftbutton(){

Page 150: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

134

switch (current_state){

case 0:{

current_state=90; 2295

2300

2305

2310

2315

2320

2325

2330

2335

break;

}

case 10:{

current_state=0;

lcdupdate0();

break;

}

case 11:{

current_state=13;

lcdupdate10();

break;

}

case 12:{

current_state=11;

lcdupdate10();

break;

}

case 20:{

current_state=10;

lcdupdate10();

break;

}

case 21:{

current_state=22;

lcdupdate20();

break;

}

case 23:{

current_state=21;

lcdupdate20();

break;

}

case 30:{

current_state=20;

lcdupdate20();

break;

}

case 31:{

current_state=33;

lcdupdate30();

break;

}

case 32:{

current_state=31;

Page 151: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

135

lcdupdate30(); 2340

2345

2350

2355

2360

2365

2370

2375

break;

}

case 40:{

current_state=30;

lcdupdate30();

break;

}

case 41:{

current_state=43;

lcdupdate40();

break;

}

case 42:{

current_state=41;

lcdupdate40();

break;

}

case 50:{

current_state=40;

lcdupdate40();

break;

}

case 51:{

current_state=53;

lcdupdate50();

break;

}

case 52:{

current_state=51;

lcdupdate50();

break;

}

case 80:{

current_state=50;

lcdupdate50();

break;

}

}

}

Page 152: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

136

void rightbutton(){ 2380

2385

2390

2395

2400

2405

2410

2415

2420

switch (current_state){

case 0:{

current_state=10;

lcdupdate10();

break;

}

case 10:{

current_state=20;

lcdupdate20();

break;

}

case 11:{

current_state=12;

lcdupdate10();

break;

}

case 12:{

resetnow();

current_state=12;

lcdupdate10();

break;

}

case 13:{

current_state=11;

lcdupdate10();

break;

}

case 20:{

current_state=30;

lcdupdate30();

break;

}

case 21:{

current_state=23;

lcdupdate20();

break;

}

case 22:{

current_state=21;

lcdupdate20();

break;

}

Page 153: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

137

case 30:{

current_state=40;

lcdupdate40(); 2425

2430

2435

2440

2445

2450

2455

2460

2465

break;

}

case 31:{

if (confman==1){

current_state=32;

manualconf(0);

}

break;

}

case 32:{

manualconf(0);

break;

}

case 33:{

current_state=31;

lcdupdate30();

break;

}

case 40:{

current_state=50;

lcdupdate50();

break;

}

case 50:{

current_state=80;

lcdupdate80();

break;

}

case 41:{

if (conffixed==1){

current_state=42;

lcdupdate40();

}

break;

}

case 43:{

current_state=41;

lcdupdate40();

break;

}

Page 154: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

138

case 51:{

if (confauto==1){

current_state=52;

autoconf(0);

} 2470

2475

2480

2485

2490

2495

2500

break;

}

case 52:{

autoconf(3);

autoconf(0);

break;

}

case 53:{

current_state=51;

lcdupdate50();

break;

}

case 81:{

readconf();

current_state=80;

lcdupdate80();

break;

}

case 82:{

writeconf();

current_state=80;

lcdupdate80();

break;

}

case 90:{

current_state=0;

lcdupdate0();

break;

}

}

}

Page 155: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

139

#separate

void init_circuit(){

//View init

setup_timer_2(T2_DIV_BY_1,40,1); //LCD contrast, from 1 to 40 2505

2510

2515

2520

2525

2530

2535

2540

setup_ccp1(CCP_PWM); //PWM1 RC2

setup_ccp2(CCP_PWM); //PWM2 RC1

lcdbrightupdate(); //Update the LCD bright

lcdcontrastupdate(); //Update the LCD contrast

lcd_init();

//Controller init

current_state=0; //Init system state = 0

lcdupdate0(); //Launch the view

//Communications

commodule = 0; //Module with default comm

commoduleupdate(); //Update the control lines of comm

resetmodule = 0; //Default module to reset

readconf(); //Read the last conf

set_tris_A(0x2F); //Configure port A as input

setup_port_a(A_ANALOG_RA3_REF); //Setup the ADC configuration RA3 reference

setup_adc(ADC_CLOCK_DIV_32); //Time to ADC converter

setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); //Setup Timer0 to interrupt (1/(4

Mhz/256))=0,064 sec.

set_timer0 (8); //0,064 sec - 8 cycles * 32 = 2

seconds

current_button=NONE; //First button state = NONE

set_tris_b(0xF0); //Configure the port B 11110000=b4-b7 inputs

ext_int_edge(L_TO_H); //Low to high interrupt type

enable_interrupts(INT_RB); //Change on port b interrupt activated

enable_interrupts(INT_TIMER0); //Timer0 overflow interrupt activated

enable_interrupts(GLOBAL); //All interrupts defined begin

//Sound test

beep(150);

delay_ms(150);

beep(50);

delay_ms(75);

beep(50);

//System started

}

Page 156: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

140

void main() {

loader16F876(); //Bootloader memory reserved

init_circuit(); //Init the circuit

while (true){ //Infinite loop 2545

2550

2555

2560

2565

2570

2575

}

}

//It prints in LCD the name of the (module, channel)

void printmodule(int pmodule, short pchannel){

switch (pmodule){

case 0x20:{

if (pchannel==0){

printf(lcd_putc,"FA");

}else{

printf(lcd_putc,"Superior");

}

break;

}

case 0x30:{

printf(lcd_putc,"Trasero%i",pchannel+1);

break;

}

case 0x40:{

printf(lcd_putc,"Lateral%i",pchannel+1);

break;

}

case 0x50:{

printf(lcd_putc,"Frontal%i",pchannel+1);

break;

}

case 0x60:{

printf(lcd_putc,"CPU%i",pchannel+1);

break;

}

}

}

Page 157: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

141

//Method that changes the control lines of de/multiplexers to

//communicate the selected module in commodule

//B0, B1, B2 and B3 configurated as outputs in init_circuit() 2580

2585

2590

2595

2600

2605

2610

2615

void commoduleupdate(){

switch (commodule){

case 0:{

output_high(PIN_B3);

output_high(PIN_B2);

output_high(PIN_B1);

break; }

case 1:{

output_low(PIN_B3);

output_low(PIN_B2);

output_low(PIN_B1);

break; }

case 2:{

output_low(PIN_B3);

output_low(PIN_B2);

output_high(PIN_B1);

break; }

case 3:{

output_low(PIN_B3);

output_high(PIN_B2);

output_low(PIN_B1);

break; }

case 4:{

output_low(PIN_B3);

output_high(PIN_B2);

output_high(PIN_B1);

break; }

case 5:{

output_high(PIN_B3);

output_low(PIN_B2);

output_low(PIN_B1);

break; }

case 6:{

output_high(PIN_B3);

output_low(PIN_B2);

output_high(PIN_B1);

break; }

}

}

Page 158: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

142

2620

Page 159: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

143

Microcontrolador de la placa modular /***********************************************

Slave module HM-Baybus system

Manuel Díaz García 2625

2630

2635

2640

2645

2650

2655

2660

2665

Computer Systems

European University of Madrid

September 2004

More information than comments in:

http://www.microchip.com (for 16F876 info)

http://www.ccsinfo.com (for CCS compiler info)

***********************************************/

#include <16F876.H> //Include 17F876 CCS library

#device ADC=10 //Define 10 bits to 16F876 ADC module output value

#use DELAY(CLOCK=4000000) //Define de micro speed 4 Mhz

#use I2C(SLAVE,SCL=PIN_C3,SDA=PIN_C4,address=0x60,FORCE_HW)

/*Define the I2C operation mode: SLAVE=I2C slave mode,

SCL=specifies de SCL pin, SDA=specifies de SDA pin,

FAST=fast I2C especification,

FORCE_HW=Use hardware I2C functions (only if micro support)*/

#use RS232(BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7)

/*Define the RS232 operation mode:

BAUD=Set baud rate, XMIT=Set transmit pin, RCV=Set receive pin*/

#use fast_io(a)

#use fast_io(b)

/*The fast method of doing I/O will cause the compiler to perform I/O

without programming of the direction register*/

#org 0x1F00, 0x1FFF void loader16F876(void) {}

/*Directive to reserve memory in compilation from 0x1F00 to 0x1FFF to

the bootloader code (more information in http://www.microchipc.com)*/

#include "functions_hm.h"

//Include the library with specific functions to project and 16F876

#priority ssp

//This directive gives priority to ssp interrupt over others

typedef enum {NOTHING,CONTROL_READ,ADDRESS_READ,READ_COMMAND_READ} I2C_STATE;

//Type definition to determine the state of the I2C communication

byte slaveinfos[0x8];

//Array of values that the micro shares with the master

short update = 1;

//Update is designed to don´t refresh the data all time in the infinite loop

// of main. The clock interrupt changes the value each 2 seconds

unsigned int16 tach1=0, tach2=0;

Page 160: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

144

//They have the pulses of the tacometer of fans. The clock, when calculate

// the RPM each 2 seconds, assign them 0 again

2670

2675

2680

2685

2690

2695

2700

2705

2710

//Method of interrupt by activity in SSP (I2C) bus

//It receive the data or receive permission to write a data

#INT_SSP

void ssp_interupt (){

static i2c_state fstate=NOTHING;

static byte address=0x00;

static byte incoming=0;

if (i2c_poll() == FALSE) {

if (fState == ADDRESS_READ) {

i2c_write (slaveinfos[address]);

fState = NOTHING;

}

}

else {

incoming = i2c_read();

if (fState == NOTHING){

fState = CONTROL_READ;

}else if (fState == CONTROL_READ) {

address = incoming;

fState = ADDRESS_READ;

}else if (fState == ADDRESS_READ) {

slaveinfos[address] = incoming;

fState = NOTHING;

}

}

}

//Method of interrupt by activity in the high pins of port B

//It adds a signal to the pulses of tachometer

#int_rb

void detect_rb_change() {

short enc1;

short enc2;

static short last_enc1=1;

static short last_enc2=1;

enc1 = input(PIN_B5);

enc2 = input(PIN_B6);

if (last_enc1 && !enc1) {tach1++;}

if (last_enc2 && !enc2) {tach2++;}

last_enc1=enc1;

last_enc2=enc2;

}

//Init the module

Page 161: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

145

void initmodule(){

int i; 2715

2720

2725

2730

2735

2740

2745

2750

2755

for (i=0;i<0x08;i++)

slaveinfos[i] = 0; //Init values array

setup_timer_2(T2_DIV_BY_1,9,1); //4Mhz, 100 Khz PWM module

//See the datasheet to calculate others duty cycles

output_high(PIN_C1); //Init Pin C1 as output

output_high(PIN_C2); //Init Pin C2 as output

setup_ccp1(CCP_PWM); //Mode PWM CPP1

setup_ccp2(CCP_PWM); //Mode PWM CPP2

slaveinfos[0]=10; //Init PWM Channel 1 value

slaveinfos[1]=10; //Init PWM Channel 2 value

set_tris_A(0x2F); //It configures the port A to input

setup_adc_ports(A_ANALOG_RA3_REF); //It configures the ADC mode

setup_adc(ADC_CLOCK_DIV_32); //Set the time for each reading of ADC

setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); //Setup Timer0 to interrupt

// (1/(4 Mhz/256))=0,064 sec.*32 - 8 cycles =2 seconds

set_timer0 (8);

enable_interrupts(int_timer0);

set_tris_b(0xF0); //It configures the port B to input

enable_interrupts(INT_RB);

enable_interrupts(INT_SSP);

enable_interrupts(GLOBAL); //Enable all interrupts

}

#int_timer0

void timer_0_isr (void) {

static byte timer_0_count = 0;

if (timer_0_count < 31) {

timer_0_count++;

} else {

update = 1;

timer_0_count = 0;

slaveinfos[2]=tach1; //For calculate RPM1

slaveinfos[3]=tach2; //For calculate RPM2

tach1=0;

tach2=0;

}

set_timer0 (8);

}

Page 162: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

146

void updateinfos(){

int temp;

static byte duty1=10,duty2=10,channel=0; //Static variables

if (duty1!=slaveinfos[0]){ //Verify if the duty1 has been changed 2760

2765

2770

2775

2780

2785

2790

2795

2800

duty1=slaveinfos[0]; //Save the new value

set_pwm1_duty(duty1); //Init PWM1 (10=100%..0=0%)

}

if (duty2!=slaveinfos[1]){ //Verify if the duty1 has been changed

duty2=slaveinfos[1]; //Save the new value

set_pwm2_duty(duty2); //Init PWM2 (10=100%..0=0%)

}

if (channel==0){ //Verify the channel that has to update

slaveinfos[4]=(int8) ((getadc(1)*500)/1024); //Read Temperature channel 1

temp = getadc(0);

printf("Canal 6 I1=%i PWM1=%i\r",temp,slaveinfos[0]);

if (slaveinfos[0]>1 && slaveinfos[2]==0){ //ALARM!!! It´s stopped

if (slaveinfos[6]==0){

slaveinfos[6]=1;

} else {

if (slaveinfos[6]==2){

slaveinfos[6]=3;

}

}

}

channel=1;

} else {

slaveinfos[5]=(int8) ((getadc(4)*500)/1024); //Read Temperature channel 4

temp = getadc(2);

printf("Canal 6 I2=%i PWM2=%i\r",temp,slaveinfos[1]);

if (slaveinfos[1]>1 && slaveinfos[3]==0){ //ALARM!!! It´s stopped

if (slaveinfos[6]==0){

slaveinfos[6]=2;

} else {

if (slaveinfos[6]==1){

slaveinfos[6]=3;

}

}

}

channel=0;

}

if (slaveinfos[7]==1){ //Signal for reset the CPU (see the functions_hm.h)

delay_ms(500);

resetcpu();

}

}

Page 163: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

147

void main (){

loader16F876(); //Bootloader instruction to reserve memory

initmodule(); 2805

2810

2815

2820

2825

2830

2835

2840

2845

delay_ms(2000);

while (TRUE) {

if (update) {

updateinfos();

update = 0;

}

}

}

Librería de funciones /***********************************************

Functions library HM-Baybus system

Manuel Díaz García

Computer Systems

European University of Madrid

September 2004

More information than comments in:

http://www.microchip.com (for 16F876 info)

http://www.ccsinfo.com (for CCS compiler info)

***********************************************/

//Definitions of registers 16f876//Initial values

#byte PCL=0x02

#byte FSR=0x04//0x00

#byte INTCON=0x0B//0x00

#byte STATUS=0x03//0x00

#byte TMR0=0x01//0x00

#byte TMR1H=0x0F//0x00

#byte TMR1L=0x0E//0x00

#byte T1CON=0x10//0x00

#byte TMR2=0x11//0x00

#byte PR2=0x92//0xff

#byte T2CON=0x12//0x00

#byte SSPADD=0x93//0x00

#byte SSPSTAT=0x94//0x00

#byte SSPCON=0x14//0x00

#byte SSPCON2=0x91//0x00

#byte SPBRG=0x99//0x00

#byte RCREG=0x1A//0x00

Page 164: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

148

#byte TXREG=0x19//0x00

#byte TXSTA=0x98//0x02 2850

2855

2860

2865

2870

2875

2880

2885

#byte RCSTA=0x18//0x00

#byte PIR2=0x0D//0x00

#byte PIR1=0x0C//0x00

#byte PIE1=0x8C//0x00

#byte TRISC=0x87//0xff

#byte TRISB=0x86//0xff

#byte TRISA=0x85//0x3f

#byte PORTC=0x07//0x00

#byte PORTB=0x06//0x00

#byte PORTA=0x05//0x00

#bit i2cen = 0x14.5 //0x00

/* Method to reset the micro. In a software reset the micro

doesn´t recover initial state, then some registers (I2C, RS232)

must be restored to initial values before the reset instruction

See 16F876 datasheet for more information about this registers*/

void resetcpu(){

disable_interrupts(GLOBAL);

delay_ms(50); // >200ms for downloader sync

FSR = 0x00; // clean up special purpose registers

PIR1 = 0x00;

PIR2 = 0x00;

TMR2 = 0x00;

T2CON = 0x00;

PIE1 = 0x00;

PR2 = 0xff;

STATUS = 0x00;

TMR0 = 0x00;

INTCON = 0x00;

T1CON = 0x00;

TMR1L = 0x00;

TMR1H = 0x00;

SPBRG = 0x00;

TXSTA = 0x02;

RCSTA = 0x00;

TXREG = 0x00;

RCREG = 0x00;

reset_cpu(); // then jump to reset vector

}

Page 165: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

149

2890

2895

2900

2905

2910

2915

2920

2925

//Recover an adc value, with the times necessary to a good read

//It do a software filter with average of 30 reads

int16 getadc(byte channel){

int i = 0;

int32 added=0;

delay_us(300);

set_adc_channel(channel);

for (i=0;i<30;i++){

delay_us(300);

added = added + read_adc();

delay_us(100);

}

return ((int16) (added/30));

}

//Generate sound on a buzzer on pin A4 (open collector)

//It´s needed a transistor to give current for micro security

void beep(int time){

output_bit(PIN_a4,0);

delay_ms(time);

output_bit(PIN_a4,1);

}

//It reads a value from a slave I2C device connected to the I2C bus

//Disable all interrupts before use it or when another

// process can interrupt reading

byte readi2c(byte address, byte pos){

byte out;

i2c_start();

i2c_write(address); //slave can read.

i2c_write(pos);

i2c_start();

i2c_write(address+1); //slave can write.

out = i2c_read(0);

i2c_stop();

return out;

}

Page 166: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

150

//It writes a value in a slave I2C device connected to the I2C bus

//Disable all interrupts before use it or when another 2930

2935

2940

// process can interrupt writing

writei2c(byte address, byte pos,byte data){

byte out;

i2c_start();

i2c_write(address); //slave can read.

i2c_write(pos);

i2c_write(data);

i2c_stop();

return out;

}

Page 167: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

151

Librería de rutinas del LCD //-----------------------------------------------------------------------------

// Title: lcd4_i2c.c

// Description: Driver for common LCD 4 row modules using I2C protocol. 2945

2950

2955

2960

2965

2970

2975

2980

2985

// Date: May-2002

// Ver.Rev.: 1.1

// Author: XP8100 ([email protected]) #Based on the routines LCD.C from

CCS#

// Modified: To HM-Baybus Project by Manuel Díaz

//-----------------------------------------------------------------------------

//

// lcd_init() Must be called before any other function.

//

// lcd_putc(c) Will display c on the next position of the LCD.

// The following have special meaning:

// \f Clear display

// \n Go to start of second line

// \b Move back one position

//

// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)

//

//-----------------------------------------------------------------------------

// LCD pins D0-D3 are not used.

//-----------------------------------------------------------------------------

//

// Commment : Control of a compatible LCD HITACHI from a bus I2C with

// an EXPANDER of I/O with connection I2C. The tests of these

// routines have been programmed using the IC PCF8574P of Phillips.

// I use 4 bits mode programming. The 8 bits mode programming

// is possible if you uses 2 x PCF8574P.

//

// As defined in the following structure the pin connection is as follows:

//

// PCF8574P LCD

// ======== ======

// P0 Enable

// P1 RS

// P2 RW

// P3 No connect

// P4 D4

// P5 D5

// P6 D6

// P7 D7

//

// THIS DOCUMENT IS PROVIDED TO THE USER 'AS IS'

Page 168: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

152

//-----------------------------------------------------------------------------

#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines

#define lcd_line_two 0x40 // LCD RAM address for the second line 2990

2995

3000

3005

3010

3015

3020

3025

#define lcd_line_three 0x14 // LCD Ram address for the 3 line

#define lcd_line_four 0x54 // LCD Ram address for the 4 line

#define IOE_ADDR 0x70 // I2C addr for i/o expander PCF8574P

byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6}; // These bytes

need to be sent to the LCD to start it up.

byte address; // The following are used for setting the I/O port direction register.

void lcd_send_nibble( byte n, byte type ) {

switch (type) {

case 'C' :

i2c_write(n << 4);

delay_cycles(1);

i2c_write(n << 4 | 0x01);

delay_us(2);

i2c_write(n << 4 & 0xFE);

break;

case 'D' :

i2c_write(n << 4 | 0x02);

delay_cycles(1);

i2c_write(n << 4 | 0x03);

delay_us(2);

i2c_write(n << 4 & 0x02);

break;

}

}

void lcd_send_byte( byte n, byte type ) {

delay_ms(1);

lcd_send_nibble(n >> 4, type);

lcd_send_nibble(n & 0xf, type);

}

Page 169: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

153

void lcd_init() {

byte i;

i2c_start();

i2c_write(IOE_ADDR); 3030

3035

3040

3045

3050

3055

3060

3065

lcd_send_nibble(0, 'C');

delay_ms(15);

for (i=1;i<=3;++i) {

lcd_send_nibble(3, 'C');

delay_ms(5);

}

lcd_send_nibble(2, 'C');

delay_ms(5);

for (i=0;i<=3;++i) {

lcd_send_byte(LCD_INIT_STRING[i], 'C');

}

i2c_stop();

}

void lcd_gotoxy( byte x, byte y) {

i2c_start();

i2c_write(IOE_ADDR);

switch(y){

case 1: address= 00; break;

case 2: address= lcd_line_two; break;

// case 3: address= lcd_line_three; break;

default: address= 00; break;

// default: address= lcd_line_four; break;

}

address+=x-1;

lcd_send_byte(0x80|address, 'C');

i2c_stop();

}

void lcd_gotonl (){

/* switch(address){

case 00 : address= lcd_line_two; break;

// case lcd_line_two : address= lcd_line_three; break;

// case lcd_line_three: address= lcd_line_four; break;

default : address= 00; break;

}*/

address= lcd_line_two;

lcd_send_byte(0x80|address, 'C');

}

Page 170: Sistema Regulador de Temperaturas Con Microcontroladores

Sistema de regulación de temperaturas con microcontroladores Código fuente

154

void lcd_putc( char c) { 3070

3075

3080

i2c_start();

i2c_write(IOE_ADDR);

switch (c) {

case '\f' : lcd_send_byte(1, 'C');

delay_ms(2);

break;

case '\n' : lcd_gotonl(); break;

case '\b' : lcd_send_byte(0x10, 'C'); break;

default : lcd_send_byte(c, 'D'); break;

}

i2c_stop();

}