You are on page 1of 170

Sistema de regulacin

de temperaturas con
microcontroladores
Proyecto fin de carrera
Ingeniera Informtica
2003-2004

Manuel Daz Garca


Dirigido por:

D. Lino Garca Morales


D. Antonio Cala Hurtado

Universidad Europea de Madrid

A mis padres y a mis hermanos,


sois los verdaderos artfices
de este proyecto

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 Tecnologa de Informacin y Programacin (divisin
ECP), CERN (Laboratorio Europeo de Fsica de Partculas) y conforme al estndar de Ingeniera del
Software PSS-05 (ISBN 0-13-106568-8) definido por ESA (Agencia Espacial Europea) BSSC
(Junta para la Estandarizacin 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]

Sistema de regulacin de temperaturas con microcontroladores

Resumen
Este sistema regular temperaturas usando microcontroladores en un entorno
acotado. El objetivo fundamental de la regulacin es obtener un equilibrio entre la
temperatura, nivel de presin sonora y el consumo de los equipos de ventilacin
actuales. El sistema de regulacin se realizar de manera tal que la integracin en el
entorno acotado no interfiera en su correcto y seguro funcionamiento.
Los ventiladores estndares (DC 12 v.) y la familia de microcontroladores PIC son
candidatos ptimos para la regulacin de temperatura por sus cualidades y nivel de
integracin que ofrecen. En la fase inicial se investigarn; diferentes sistemas de
adquisicin de temperaturas, modelos de control fcilmente integrables en esta
arquitectura y mtodos de actuacin 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 ventilacin no refrigera, slo
disipa calor. Por ello se deben controlar las variables que faciliten dicha disipacin;
temperatura del espacio acotado o componente generador de calor, la velocidad del
elemento de ventilacin que influencia en ese espacio acotado, que es directamente
proporcional al flujo de aire que disipar el calor, y el punto de operacin definido
por el usuario en funcin de sus necesidades particulares.
Este sistema est destinado tanto a profesionales del sector o grandes empresas
industriales que deseen una regulacin de temperaturas en espacios acotados y
definidos, como al gran pblico que es entusiasta del mantenimiento de los PCs
(cuyo uno de los principales problemas hoy en da es el calor).
Este gran pblico, por regla general, no posee mucha formacin en el mbito
informtico y/o electrnico, y la mayora sin mucho poder adquisitivo, por lo que la
lnea de investigacin dar mucho peso a los factores de coste, facilidad de
realizacin, disponibilidad de materiales necesarios y versatilidad del sistema, dado
que tiene que responder a muchas necesidades distintas (tipos de ventiladores,
nmero y diferencias de componentes, flujos de aire de los distintos habitculos,
...), aunque con unas finalidades comunes.

Sistema de regulacin de temperaturas con microcontroladores

ii

Sistema de regulacin 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 PCs (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

Sistema de regulacin de temperaturas con microcontroladores

iv

Sistema de regulacin de temperaturas con microcontroladores

Agradecimientos

Quiero agradecer su ayuda a todas aquellas personas que ms o menos me han


facilitado el camino para que este proyecto llegara a buen fin.

A mis directores de proyecto, que siempre me pedan ms, a ellos les debo que me
exija un poco ms cada da, no slo 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 enseado infinidad de cosas,
ayudndome y guindome: Diego Gachet, Fernando Berenguer y Diego Galar.
A mis compaeros, que estoicamente soportaban disertaciones sobre PWM, por
haberme acompaado en el camino, por compartir buenos y malos momentos.
A toda la gente de www.hardcore-modding.com, no slo resultasteis de inspiracin,
sino tambin de compaa y ayuda en muchos momentos difciles en que no se
lograba ver la luz. Especialmente a Teo, Ygg, Canelo y Autist.
A muchas otras personas que con pequeos detalles y ayudas puntuales me han
evitado muchos dolores de cabeza en la realizacin 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,
muchsimas gracias, este proyecto es para vosotros.

Sistema de regulacin de temperaturas con microcontroladores

vi

Sistema de regulacin 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

Introduccin................................................................................................ 1
1.1

Organizacin de la memoria......................................................................................... 2

Descripcin del problema.......................................................................... 3


2.1

Descripcin .................................................................................................................. 3

2.2

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

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

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

Solucin propuesta .................................................................................. 25

4.1

Descripcin ................................................................................................................ 25

4.2

Hardware .................................................................................................................... 26
4.2.1 Regulacin 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 Adquisicin 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 Programacin del 16F876 .............................................................................. 80
4.3.4 Estructura del programa................................................................................. 84
4.3.5 Algoritmo de control...................................................................................... 87

4.4

Presupuesto ................................................................................................................ 90

Pruebas ..................................................................................................... 92
5.1 Definicin del sistema de pruebas .................................................................................. 92
5.2

Pruebas fsicas ............................................................................................................ 95

5.3

Pruebas lgicas........................................................................................................... 96

vii

Sistema de regulacin de temperaturas con microcontroladores

Discusin y conclusiones ...................................................................... 102


6.1

Discusin de resultados ............................................................................................102

6.2

Conclusiones ............................................................................................................103

Evolutivos................................................................................................ 104

Definiciones............................................................................................. 106

8.1

Trminos...................................................................................................................106

8.2

Acrnimos ................................................................................................................108

8.3

Abreviaturas .............................................................................................................110

Referencias.............................................................................................. 112

Apndice A....................................................................................................... 114


Cdigo fuente......................................................................................................................114

viii

Sistema de regulacin de temperaturas con microcontroladores

Lista de Ilustraciones
Grfico 1: Relacin entre potencia consumida y temperatura ...........................................4
Grafico 2: Digital Doc 5+ ..................................................................................................21
Grfico 3: Vantec Vortex..................................................................................................21
Grfico 4: CoolerMaster AeroGate III ..............................................................................21
Grfico 5: Esquema de funcionamiento del TC646 de Microchip....................................23
Grfico 6: Distintos ciclos de trabajo de un PWM............................................................27
Grfico 7: PWM a partir de comparadores ......................................................................28
Grfico 8: Diagrama de un sistema microcontrolado.......................................................28
Grfico 9: Configuraciones del controlador de motores DC, L293B ................................30
Grfico 10: Diagrama por bloques de un microcontrolador .............................................30
Grfico 11: Arquitectura Harvard .....................................................................................33
Grfico 12: Patillaje del microcontrolador Microchip 16F876...........................................33
Grfico 13: Patillaje del PCF8574....................................................................................36
Grfico 14: Dimensiones del LCD DV24200....................................................................37
Grfico 15: Patillaje de un MAX233A...............................................................................37
Grfico 16: Patillaje de un MAX233A...............................................................................38
Grfico 17: Circuito protector de LM35 ............................................................................39
Grfico 18: Esquema elctrico de la placa principal ........................................................41
Grfico 19: Esquema elctrico de la placa modular ........................................................43
Grfico 20: Taladros y componentes de la placa principal ..............................................47
Grfico 21: Fotolito placa principal, capa superior...........................................................49
Grfico 22: Fotolito placa principal capa inferior..............................................................51
Grfico 23: Taladros y componentes de la placa modular...............................................53
Grfico 24: Fotolito placa modular capa superior ............................................................55
Grfico 25: Fotolito placa principal capa inferior.............................................................57
Grfico 26: Placa modular ...............................................................................................59
Grfico 27: Placa modular montada y testeada...............................................................59

ix

Sistema de regulacin de temperaturas con microcontroladores

Grfico 28: Placa principal montada y testeada...............................................................59


Grfico 29: Placa de pruebas con placa modular integrada ............................................60
Grfico 30: Empaquetado industrial de las pcb necesarias para el sistema....................61
Grfico 31: Componentes de la interfaz de usuario.........................................................62
Grfico 32: Interfaz de usuario montada en el frontal ......................................................62
Grfico 33: Parte trasera del frontal .................................................................................62
Grfico 34: Sistema completo montado ...........................................................................63
Grfico 35: Mdulo de sonido y regulador de voltaje .......................................................63
Grfico 36: Conectores para la interfaz (entrada, salida) ................................................64
Grfico 37: MAX233 y los dos demultiplexores................................................................64
Grfico 38: Conectores externos generales del sistema .................................................65
Grfico 39: Placa modular completa ................................................................................65
Grfico 40: Soldaduras de la placa modular ....................................................................66
Grfico 41: Prototipo hardware final.................................................................................66
Grfico 42: Diagrama de casos de uso............................................................................67
Grfico 43: Diagrama de flujo de datos............................................................................79
Grfico 44: Downloader a bootloader de Petr Kolomaznik ..............................................81
Grfico 45: Protocolo I2C..................................................................................................83
Grfico 46: Estructura del software del sistema...............................................................84
Grfico 47: Esquema de control tpico sobre procesos ...................................................87
Grfico 48: Esquema de control con software embebido ................................................87
Grfico 49: Caja ATX Casetek 1019 ................................................................................92
Grfico 50: Modificacin de cableado de ventilador ........................................................93
Grfico 51: Sonda en el disipador de los procesadores ..................................................94
Grfico 52: Sonda en el chasis del disco duro superior...................................................94
Grfico 53: Sistema instalado completamente.................................................................95
Grfico 54: Valores tridimensionales de sonoridad del sistema ......................................96

Sistema de regulacin de temperaturas con microcontroladores

Lista de Tablas
Tabla 1: Comparativa entre sistemas comerciales de regulacin de ventiladores ..........22
Tabla 2: Comparativa de microcontroladores ..................................................................31
Tabla 3: Estructura de almacenamiento de datos ...........................................................86
Tabla 4: Caractersticas del Enermax UC-8FAB .............................................................93
Tabla 5: Voltajes CMOS ................................................................................................107
Tabla 6: Sistema de numeracin BCD...........................................................................108

xi

Sistema de regulacin de temperaturas con microcontroladores

xii

Sistema de regulacin de temperaturas con microcontroladores


Introduccin

10

15

20

25

30

35

Introduccin
La idea de este sistema naci a partir de la necesidad de poder mantener un servidor
en condiciones fsicas ptimas de funcionamiento de manera desatendida,
ofreciendo un compromiso entre el consumo de los medios de disipacin 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.
El sistema debera saber que tipo de componente o naturaleza del espacio acotado
regula en cada momento, conociendo todas sus variables necesarias para dicha
regulacin. Algunas de ellas las debera 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 tena que
tener almacenadas previamente, como la temperatura de funcionamiento ptima de
ese espacio regulado.
De momento, el sistema ya debe contar con algn tipo de memoria interna, tener
distintos tipos de sensores o elementos de medicin para la temperatura y para el
flujo de aire, y adems 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 especfica para funcionar, sino que sus
fabricantes definen un rango de temperaturas donde aseguran que el componente
tiene un comportamiento estable y no corre riesgo fsico 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 funcin de sus necesidades.
La introduccin 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. Adems el sistema debera tener
algn sistema para poder comunicarse con el usuario sin una intervencin inmediata
(por ejemplo para avisar de algn tipo de alarma).
Cada nueva necesidad genera nuevas opciones, toma de decisiones, valoraciones de
integracin 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 produccin
real, distintas posibilidades a las decisiones tomadas, hasta la discusin de los
resultados obtenidos mostrando posibles evolutivos al sistema desarrollado.

Sistema de regulacin de temperaturas con microcontroladores


Introduccin

1.1

Organizacin de la memoria
En primer lugar, se describe en profundidad el problema mostrando las necesidades
claras y unvocas 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 especificacin completa del sistema,
expresando claramente sus funcionalidades y su alcance; qu hace y qu no hace.

40

Tras la especificacin del producto, se muestra un breve estado del arte en la


actualidad. No slo del producto definido en comparacin con otros que tengan
similar definicin, sino tambin de las tecnologas que se pueden usar en el sistema
para cumplir las especificaciones definidas.

45

Una vez vistas las distintas opciones y las posibles soluciones existentes en la
actualidad al problema, se detalla la solucin propuesta. Cmo se llega a ella,
razones de las decisiones tomadas, diagramas de estados, de flujo y de casos de uso
del sistema. Despus y a partir del anlisis realizado se disea un prototipo. Con
este diseo se procede a la realizacin fsica del prototipo para su entrada en
pruebas.

50

En la siguiente parte se detalla el montaje e instalacin del prototipo, con su manual


de usuario, as como las pruebas realizadas con l comprobando que se cumplen los
requisitos del sistema definido.

55

Estas pruebas producen unos resultados que se evalan 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 discusin 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 seran
interesantes de integrar o colaborar con l.

60

Para terminar se muestra la relacin de las referencias, definiciones y acrnimos


usados en el documento, as como diversa informacin relevante ordenada en los
distintos apndices.

65

La memoria tiene una numeracin de lneas en sus mrgenes para favorecer la


referenciacin desde otros documentos, publicaciones o citas.

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

En este captulo 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 marcarn los requisitos del sistema.

70

2.1
75

80

85

90

95

100

Descripcin del problema

Descripcin
La temperatura generada por los componentes electrnicos es, en la mayora de los
casos, un problema a resolver por los fabricantes del sistema en cuestin. Para ello
el producto incluye rejillas de ventilacin, disipadores, ventiladores, equipos de
refrigeracin Su misin 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 mayora 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 segn 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 operacin. 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 verstiles y de sencillo manejo e
instalacin. Al ser sencillos y verstiles, su produccin en serie los abarata
hacindolos todava ms populares.
Lo que no se suele tener en cuenta cuando se sobredimensiona una solucin para un
problema de calentamiento son los costes producidos a largo plazo. Continuamente
se est gastando el mximo de energa para disipar un calor del que no se conoce el
valor, ni se conoce la necesidad de disipacin. Continuamente el elemento que
disipa el calor est trabajando al cien por ciento, acortando as su esperanza de vida.
Continuamente, en la mayora de los casos, el elemento disipador est produciendo
ruidos en el entorno.
Continuamente se est suponiendo que se necesita esa disipacin para un correcto
funcionamiento. Esto es todava ms patente tratndose de disipacin de calor de
componentes electrnicos que no siempre producen el mismo calor, sino que este
vara proporcionalmente a la intensidad de trabajo.

Sistema de regulacin de temperaturas con microcontroladores


Descripcin 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 disipacin en cada momento.

105

Grfico 1: Relacin entre potencia consumida y temperatura

110

En el Grfico 1 se puede observar como la temperatura depende totalmente de la


potencia consumida por el componente electrnico, 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 ms o menos disipacin de calor.

115

El sistema tiene que estar diseado para su funcionamiento en una caja de


ordenador, regulando la temperatura de sus componentes internos siguiendo los
razonamientos antes expuestos.

120

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

2.2

Especificacin

2.2.1 Requisitos de usuario


Identificador

REQU-01 Regulacin automtica

Descripcin

El sistema debe mantener una temperatura marcada en un


entorno acotado, independientemente del cambio de las
condiciones

Importancia

Esencial

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 actuacin

Descripcin

Para el cumplimiento del requisito REQU-01 la temperatura


marcada, punto de actuacin, estar dentro del rango de
temperatura de operacin del entorno condicionado por los
rangos de temperaturas externas

Importancia

Esencial

Estabilidad

Total

Prioridad

Prioridad

El punto de actuacin estar dentro de rango acotado entre el


rango de temperatura de funcionamiento del entorno y el
Verificabilidad rango de temperatura del entorno condicionada por los
agentes externos (medidor de temperaturas y
especificaciones del entorno de operacin)

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-03 Multiplicidad de regulacin

Descripcin

El sistema debe ser capaz de cumplir el REQU-01 en dos,


como mnimo, entornos distintos simultneamente

Importancia

Esencial

Estabilidad

Total

Prioridad

Ante cambios de temperatura ambiente y cambios en el ciclo


de trabajo, el sistema mantiene dos entornos distintos a sus
Verificabilidad
temperaturas marcadas (distintas o iguales) (medidores de
temperaturas simultneos)

Identificador

REQU-04 Actuacin

Descripcin

Para cumplir el requisito REQU-01 el sistema debe poder


actuar sobre uno o ms componentes disipadores de calor

Importancia

Negociable

Estabilidad

Total

Verificabilidad

Para mantener una temperatura el sistema puede actuar sobre


uno o ms ventiladores (medidor de RPM)

Identificador

REQU-05 Actuador

Descripcin

Para cumplir el requisito REQU-01 el sistema debe poder


actuar sobre ventiladores estndar de cajas de ordenador (DC
12 V.)

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema acta sobre la velocidad de ventiladores estndar


de 12 voltios (ventilador estndar pc 12 voltios)

Prioridad

Prioridad

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-06 Modificacin de punto de operacin

Descripcin

El sistema debe poder cambiar las temperaturas marcadas en


tiempo real

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema mantiene un entorno a la temperatura marcada


hasta que sta se cambia, mantenindolo a partir de ese
momento a la nueva temperatura (medidor de temperatura)

Identificador

REQU-07 Salida de datos

Descripcin

El sistema debe poder comunicarse con el usuario en tiempo


real por, al menos, un mtodo de visualizacin

Importancia

Esencial

Estabilidad

Total

Prioridad

Prioridad

El sistema ofrece informacin al usuario por algn sistema


Verificabilidad de comunicacin digital (observar informacin en tiempo
real)

Identificador

REQU-08 Salida de datos (temperatura)

Descripcin

El sistema debe poder mostrar al usuario la temperatura de


cada entorno, en tiempo real, por el mtodo de comunicacin
del requisito REQU-07

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema ofrece informacin al usuario por algn sistema


Verificabilidad de comunicacin digital (visualizacin de informacin y
medidor de temperatura)

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-09 Salida de datos (RPM)

Descripcin

El sistema debe poder mostrar al usuario la actuacin sobre


cada uno de los componentes disipadores de calor, en tiempo
real, por el mtodo de comunicacin del requisito REQU-07

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema ofrece informacin al usuario por algn sistema


Verificabilidad de comunicacin digital (visualizacin de informacin y
medidor de RPM)

Identificador

REQU-10 Entrada de datos

Descripcin

El sistema debe ofrecer al usuario un sistema de entrada de


datos digital en tiempo real

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema recoge informacin al usuario por algn sistema


de comunicacin digital (entrada de informacin, REQU-06)

Identificador

REQU-11 Regulacin manual

Descripcin

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

Estabilidad

Total

Prioridad

Prioridad

El sistema acta sobre todos los ventiladores para situarlos


Verificabilidad en un estado definido por el usuario por el sistema de entrada
de datos (medidor de RPM)

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-12 Regulacin fija

Descripcin

El sistema debe poder estacionar los actuadores, a un nivel


determinado por el usuario para todos ellos simultneamente,
indefinidamente en el tiempo

Importancia

Negociable

Estabilidad

Total

Prioridad

El sistema acta sobre todos los ventiladores para situarlos


Verificabilidad en un estado definido por el usuario por el sistema de entrada
de datos (medidor de RPM)

Identificador

REQU-13 Persistencia de datos

Descripcin

El sistema debe mantener los datos de configuracin entre


distintas sesiones

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema mantiene la ltima configuracin introducida en


el sistema, independientemente de haberse apagado tras la
Verificabilidad
introduccin del dato (visualizacin de informacin en
tiempo real)

Identificador

REQU-14 Recuperacin de datos

Descripcin

El sistema debe poder leer la ltima configuracin en


cualquier momento que el usuario desee

Importancia

Negociable

Estabilidad

Sujeto a cambios

Prioridad

El sistema recupera y aplica la ltima configuracin


introducida en el sistema en cualquier momento que el
Verificabilidad usuario decida, independientemente de haberse realizado
modificaciones desde el ltimo (visualizacin de
informacin en tiempo real)

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-15 Guardado de datos

Descripcin

El sistema debe retener los datos de configuracin en


cualquier momento que el usuario desee

Importancia

Negociable

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema guarda la configuracin actual introducida en el


sistema, para recuperarla tras un posible reiniciado o
instruccin de lectura de configuracin (REQU-14)

Identificador

REQU-16 Continuidad mnima

Descripcin

El sistema nunca debe apagar, por su propia decisin,


completamente los actuadores, deben tener un punto de
operacin mnimo

Importancia

Esencial

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema nunca apaga completamente los actuadores hasta


en el caso que no se precise actuacin, se configuran al
mnimo valor (medidor de RPM)

Identificador

REQU-17 Alarma

Descripcin

El sistema debe avisar al usuario cuando alguno de los


actuadores deje de funcionar

Importancia

Esencial

Estabilidad

Sujeto a cambios

Prioridad

Prioridad

Prioridad

El sistema avisa cuando uno de los actuadores deja de


Verificabilidad funcionar (visualizacin de salida de datos y medidor de
RPM)

10

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQU-18 Ahorro

Descripcin

El sistema completo no debe consumir, de media en el


tiempo, ms corriente de la consumida por los actuadores si
estuvieran configurados sobredimensionados

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema no consume ms de lo que consumiran los


Verificabilidad actuadores independientemente en su configuracin
sobredimensionada (medidor de corriente continua)

Identificador

REQU-19 Presin sonora

Descripcin

El sistema completo no debe producir, de media en el


tiempo, ms presin sonora de la producida por los
actuadores si estuvieran configurados sobredimensionados

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema no produce ms presin sonora de lo que


produciran los actuadores independientemente en su
Verificabilidad
configuracin sobredimensionada (medidor de presin
sonora)

Identificador

REQU-20 Emergencia

Descripcin

El sistema debe poder ser apagado completamente en caso


de emergencia

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema dispone de un interruptor que lo apaga


completamente (encendido/apagado)

Prioridad

11

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

12

Identificador

REQU-21 Dimensiones

Descripcin

El sistema deber poder ser instalado en una caja de


ordenador de formato ATX con una baha de 5 libre

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema se instala en una baha de 5 de una caja


formato ATX (metro)

Identificador

REQU-22 Seguridad

Descripcin

El sistema ante ausencia de configuracin debe asumir una


configuracin sobredimensionada

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema pasa a estado sobredimensionado cuando no se le


haya definido ningn tipo de configuracin (medidor de
RPM)

Identificador

REQU-23 Coste

Descripcin

El sistema producido en serie no deber tener un coste


superior al de los productos de funcionalidades similares
existentes en el mercado

Importancia

Esencial

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema, pasado a produccin en serie no cuesta ms que


otros sistemas de funcionalidades similares existentes
(comparacin precios y funcionalidades)

Prioridad

Prioridad

Prioridad

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

2.2.2 Requisitos de sistema

Identificador

REQS-01 Alimentacin

Descripcin

El sistema estar alimentado por 5 y 12 v.

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema dispone de dos entradas de tensin,


independientes entre s, para 5 y 12 v. (medidor de voltaje)

Identificador

REQS-02 Conector alimentacin

Descripcin

El sistema dispondr de conectores adecuados para


alimentacin desde una caja de pc estndar ATX

Importancia

Negociable

Estabilidad

Sujeto a cambios

Prioridad

Prioridad

El sistema toma la alimentacin de la fuente de alimentacin


ATX segn el requisito de usuario REQU-21 por medio de
Verificabilidad
un conector adecuado a las salidas del formato ATX
(instalacin)

Identificador

REQS-03 Conectores actuadores

Descripcin

El sistema dispondr de conectores adecuados para


ventiladores estndares de 12 v.

Importancia

Esencial

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema dispone de conectores para ventiladores estndar


(instalacin)

Prioridad

13

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

14

Identificador

REQS-04 Conectores medidores

Descripcin

El sistema dispondr de conectores adecuados para poder


realizar las lecturas de temperatura de los distintos entornos

Importancia

Esencial

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema dispone de conectores para sondas de temperatura


(instalacin)

Identificador

REQS-05 Funcionalidad nica

Descripcin

El sistema al activar un tipo de configuracin, debe


desactivar los otros tipos

Importancia

Esencial

Estabilidad

Sujeto a cambios

Verificabilidad

Activar

Identificador

REQS-06 Inmunidad

Descripcin

El sistema no debe verse perturbado en su funcionalidad por


radiaciones electro magnticas generadas por los
componentes estndar de una caja de pc ATX

Importancia

Negociable

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema funciona correctamente a pesar de estar en un


medio con fuertes radiaciones electro magnticas (correcto
funcionamiento tras instalacin)

Prioridad

Prioridad

Prioridad

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQS-07 Aislamiento

Descripcin

El sistema no debe perturbar la funcionalidad de los


componentes estndar de una caja de pc ATX

Importancia

Esencial

Estabilidad

Total

Verificabilidad

El sistema no interfiere en el funcionamiento de los distintos


componentes de la caja (correcto funcionamiento tras
instalacin)

Identificador

REQS-08 Robustez

Descripcin

El sistema, tras su correcta instalacin, no debe realizar


operaciones para las que no est diseado segn sus
especificaciones a pesar de entradas de informacin
incorrectas por parte del usuario

Importancia

Esencial

Estabilidad

Total

Prioridad

Prioridad

El sistema verifica que las entradas al sistema son algunas de


las esperadas para realizar las funcionalidades, en caso
Verificabilidad
contrario no realiza ninguna operacin (no realizar
operaciones ante entradas no definidas)

Identificador

REQS-09 Eficiencia

Descripcin

El sistema no deber realizar operaciones intiles para


cumplir con su funcionalidad durante su funcionamiento
normal

Importancia

Negociable

Estabilidad

Total

Prioridad

El sistema no pierde recursos realizando operaciones que el


usuario no le haya definido, o no las tenga definidas para el
Verificabilidad
cumplimiento de alguna operacin (funcionamiento correcto
segn especificaciones)

15

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQS-10 Ayuda

Descripcin

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

Estabilidad

Sujeto a cambios

Prioridad

El sistema muestra indicaciones de las posibilidades de


Verificabilidad operacin posibles en cada momento al usuario
(visualizacin del sistema de salida)

Identificador

REQS-11 Actualizacin

Descripcin

El sistema debe poder actualizarse en caliente

Importancia

Esencial

Estabilidad

Total

Prioridad

El sistema se puede actualizar en caliente, tanto a nivel


Verificabilidad hardware (aadir nuevos actuadores) como a nivel software
(distintas funcionalidades) (actualizar en caliente el sistema)

16

Identificador

REQS-12 Humedad funcionamiento

Descripcin

El sistema debe funcionar correctamente en un entorno de


humedad del rango 0-98%

Importancia

Negociable

Estabilidad

Sujeto a cambios

Verificabilidad

El sistema funciona correctamente dentro de ese rango de


humedades (funcionamiento entre 0-98% humedad)

Prioridad

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

Identificador

REQS-13 Temperatura funcionamiento

Descripcin

El sistema debe funcionar correctamente en un entorno con


temperaturas del rango 0-90 C

Importancia

Negociable

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

Descripcin

El sistema debe funcionar correctamente tras haber sido


almacenado en un entorno con temperaturas del rango -10100 C

Importancia

Negociable

Estabilidad

Sujeto a cambios

Prioridad

Prioridad

El sistema funciona correctamente tras haber sido


Verificabilidad almacenado dentro de ese rango de temperaturas
(funcionamiento tras almacenamiento entre -10-100 C)

Identificador

REQS-15 Sonido

Descripcin

El sistema debe poseer un medio de emitir sonidos como


sistema de comunicacin adicional

Importancia

Negociable

Estabilidad

Total

Verificabilidad

El sistema tiene la capacidad de emitir sonidos (en caso de


alarma)

Prioridad

17

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

18

Identificador

REQS-16 Conector comunicacin

Descripcin

El sistema debe poseer un conector para poder comunicarse


con otros sistemas

Importancia

Negociable

Estabilidad

Total

Verificabilidad

El sistema incluye un conector de comunicacin para


comunicarse con otros sistemas (actualizacin)

Identificador

REQS-17 Intensidad admitida

Descripcin

El sistema debe poder alimentar ventiladores de 12 v. y 1 A


como mnimo

Importancia

Negociable

Estabilidad

Total

Verificabilidad

El sistema est preparado para alimentar, de forma segura y


continuada, ventiladores de 12 V. y un consumo de 1 A.
(instalacin)

Prioridad

Prioridad

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

120

2.3

mbito
El sistema no tiene como objetivos:
Ofrecer soluciones especficas para distintos sistemas de ventilacin/refrigeracin
para la disipacin de calor de componentes electrnicos (disipadores, RL, Peltier,
tipos de ventiladores, etc.) en funcin de sus caractersticas especiales.

125

Ofrecer soluciones especficas para componentes calorficos especficos, ni en


funcin de sus cualidades ni disipacin del calor.
Definir soluciones globales de ventilacin/refrigeracin para un usuario en
particular, lo que nico que ofrece es la capacidad de actualizacin para que el
usuario lo configure a su medida.

130

Ofrecer un control preciso sobre la velocidad de ventiladores. El control que se


realiza es por pasos discretos, y usado nicamente para realizar una regulacin.
Ofrecer cualquier tipo de control entre diferentes entornos regulados. Cada entorno
es independiente de los dems, y el sistema regula cada uno independientemente.

135

140

Ofrecer cualquier tipo de control sobre la eficiencia de los distintos componentes


regulados. Los componentes de los entornos generadores de calor tendrn sus
propias especificaciones y caractersticas, en funcin de las cuales sern ms o
menos eficientes. El sistema no controla su eficiencia, tan slo la temperatura
medida para ese entorno.
Memorizar los aspectos de visualizacin 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 configuracin interna del sistema, pero no
la vista o entradas por defecto.

19

Sistema de regulacin de temperaturas con microcontroladores


Descripcin del problema

20

Sistema de regulacin de temperaturas con microcontroladores


Estado del arte

3
145

150

155

Estado del arte


Los perifricos de ordenador destinados a un mejor rendimiento de ste, a mejorar
su apariencia o a realizar funciones que no son propias del hardware comn, se
engloban dentro de una materia autodesignada por sus entusiastas como modding.
Dentro de esta materia se pueden encontrar cientos de diseos de baybus, fanbus,
reobus, electrobus, todos ellos destinados a regular la velocidad de ventiladores. De
todos estos diseos hechos por particulares y de modelos comerciales, existen
diversas caractersticas que los diferencian entre s.
Por la gran cantidad de productos existentes con este propsito slo se van a
mencionar los que ms se acercan a las premisas de este proyecto: control y
adaptacin digital. Con estas caractersticas slo encontramos tres productos: El
Digital Doc 5+ [9.2] de Macpower, el Vantec Vortex [9.3] y el CoolerMaster
AeroGate III [9.4] (revisada su ltima versin).

Grafico 2: Digital Doc 5+

160

Grfico 3: Vantec Vortex

Grfico 4: CoolerMaster AeroGate III

21

Sistema de regulacin de temperaturas con microcontroladores


Estado del arte

A continuacin se presenta una tabla comparando las caractersticas ms


importantes.
165

Caractersticas

DD5+ Vortex

AeroGateII
I

HM-Baybus

Entrada Digital

Monitorizacin
Digital

Nmero mximo de
ventiladores

12

Apagado/encendid
o
ventiladores

Regulacin
variable
ventiladores

--

--

--

Regulacin
automtica

--*

--*

--

Monitorizacin T

Carga mxima

1A

1A

1.5 A

1A

Variables externas

--

--

--

Comunicacin

--

--

--

Coste aproximado

90

50 *

50

<120 *

Tabla 1: Comparativa entre sistemas comerciales de regulacin de ventiladores

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

170

Como se observa en la tabla comparativa, la gran diferencia del proyecto con


respecto a los productos comerciales ms ambiciosos es la regulacin totalmente
variable de los ventiladores as como la posibilidad de incluir en el control variables
externas y poderse comunicar con otros dispositivos.

175

22

Sistema de regulacin de temperaturas con microcontroladores


Estado del arte

180

185

190

195

200

Con respecto a las tecnologas usadas en este campo, la regulacin se suele hacer
por potencimetros en analgico y por PWM en digital. Estos mtodos no cambian,
son los ms adecuados y los ms usados para hacer este tipo de regulacin. Lo que
puede cambiar es donde est aplicada esta regulacin.
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 especficamente diseados para esta funcin o bien realizar placas a
medida para dicho control. En este ltimo caso se podran hacer soluciones mixtas.
Los ventiladores inteligentes de 3 y de 5 hilos han alcanzado una gran aceptacin a
lo largo de los ltimos aos. Estos ventiladores proporcionan una tercera seal
(salida de tacmetro) y un sensor de temperatura interna o externa. La medida de la
temperatura de escape, como hace la mayora de los ventiladores inteligentes, puede
perjudicar al funcionamiento del sistema a causa del tiempo transcurrido entre la
generacin 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 crticas en materia de espacio ocupado.
Estas placas pueden contener todo tipo de componentes segn sus funcionalidades,
pero normalmente incluyen circuitos integrados especializados, que tienen todo lo
necesario para convertirse en un mini controlador para motores.

Grfico 5: Esquema de funcionamiento del TC646 de Microchip

205

Por ejemplo, el Grfico 5 nos muestra el esquema de funcionamiento del TC646 de


microchip. La seal de temperatura se genera por medio de un termistor NTC de

23

Sistema de regulacin de temperaturas con microcontroladores


Estado del arte

210

bajo coste. El ciclo de trabajo de salida, y en consecuencia la velocidad del


ventilador, aumenta a medida que se incrementa la tensin 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.

215

El TC646 detiene automticamente el funcionamiento del ventilador cuando la


temperatura medida se encuentra por debajo de un valor mnimo establecido y
programado por el usuario (fijado por R1 y R2), punto en el cual no se requiere ya
la ventilacin forzada de aire. Adems del TC646, Microchip dispone de dos CI
controladores de ventilador ms con diversas combinaciones de funciones:
1. El TC642: idntico al TC646, excepto en el hecho de que no incluye el modo de
paro automtico
2. El TC648: un controlador de la velocidad del ventilador del tipo PWM con modo
de paro automtico y deteccin 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
fabricacin, por regla general, es en tecnologa SMD.

220

24

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Solucin propuesta
En este captulo se describe detalladamente la solucin propuesta. Por tratarse de un
sistema de software embebido, se divide la exposicin del sistema en dos partes;
hardware y software.

225

En la primera se muestra el hardware del sistema, componentes, caractersticas y


decisiones tomadas a partir de los requisitos del sistema.
En la segunda se describe el software embebido en el hardware. El diseo a partir
de los requisitos del usuario, como maneja los recursos y las caractersticas
especiales de los distintos componentes del hardware, as como posibles problemas
en la implementacin.

230

4.1
235

240

245

250

Descripcin
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 aadir, 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
travs de un teclado, para realizar operaciones de funcionamiento; y a travs del
estndar RS232 para su reprogramacin en caliente.
Aparte de las entradas del usuario tambin tiene como entrada datos de otros
dispositivos programables existentes en el sistema, cuya tarea es la de adquisicin
de datos, temperaturas y RPM, de una manera previamente establecida a travs de
programacin embebida (tambin por el estndar RS232) y la del control especfico
para cada elemento actuador de cada entorno, modificando su PWM de
alimentacin.
Las salidas del dispositivo central sern un visualizador de cristal lquido
alfanumrico 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 mdulos. Estos ltimos tienen como salida el voltaje que regula,
en concreto, cada actuador sobre la temperatura de cada entorno calorfico.
Los dispositivos programables disponen de un sistema de comunicacin interno,
para que el dispositivo central pueda leer y recuperar informacin de ellos
(maestro/esclavo).

25

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

255

4.2

Hardware
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
implantacin definitiva los objetivos del sistema.
El principal objetivo de este sistema es regular la disipacin de calor de un entorno
acotado por medio de la regulacin del flujo de aire que ventilar ese entorno. El
primer problema a resolver es como se realiza esa regulacin.

260

4.2.1 Regulacin de velocidad en motores DC


El hacer una regulacin sobre ventiladores estndar 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 disipacin de
ordenadores.

265

Esta regulacin se puede hacer de varias maneras. Con retroalimentacin, el sistema


regulador posee una tabla con los valores de regulacin y los valores de entrada,
con los que al regular vigila que la retroalimentacin 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 retroalimentacin, el
sistema no posee informacin alguna, se limita a ofrecer la salida que le entra.

270

Para este sistema no se precisa una regulacin precisa sobre la velocidad angular
del ventilador. Tan slo se necesita conocer cul es el mnimo y el mximo del
funcionamiento puesto que slo se va a aumentar o reducir. En ese rango, el sistema
har selecciones discretas segn el valor que desee.

275

Un motor se regula variando el voltaje que lo alimenta o limitando la corriente que


consume. La limitacin de corriente es costosa, necesitando componentes difciles
de encontrar mientras que la variacin de voltaje es un proceso simple.

280

Esta variacin de voltaje se puede realizar por potencimetros, pero uno de los
requisitos del sistema es que las entradas del usuario deben ser discretas, es decir,
sin usar ningn mando analgico. Existen potencimetros digitales pero muy
difciles de encontrar y en la mayora de los casos, se fabrican en SMD.
Tambin existe el PWM. El PWM en s mismo no es un voltaje, sino una
modulacin 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 estn en alta y en baja (el ciclo de trabajo), ya se puede calcular un valor
continuo.

285

26

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

290
Grfico 6: Distintos ciclos de trabajo de un PWM

295

El Grfico 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 lgicos TTL que slo
ofrecen pulsos entre 0 y 5 v. (0 y 1 lgicos).
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.

300

305

310

315

La frecuencia del PWM es un factor importante a la hora de alimentar motores. Una


frecuencia pequea 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 ms al arranque, lo
que en este caso sera al inicio de cada pulso; este aumento de consumo daa 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 ms
barato de todos es usar un 555 en su configuracin astable, produciendo una seal
triangular. Esta seal se introducira en un comparador con otro voltaje que le
introduce el usuario. Segn 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

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

320

Grfico 7: PWM a partir de comparadores

325

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 regulacin del voltaje plantea el
mismo problema anteriormente citado y que se estn usando gran cantidad de
dispositivos para generar un solo PWM.
Existen circuitos integrados definidos concretamente para la generacin de PWM,
pero son difciles de encontrar, muy orientados a problemas especficos (poca
flexibilidad), fabricados en SMD y normalmente caros.
La solucin es un circuito que ofrezca capacidades de generacin de PWM de una
forma flexible, que permita escalabilidad, cambio de funcionalidades y cumplir con
los objetivos del sistema a nivel de alimentacin de ventiladores. Estas
caractersticas definen a un microcontrolador.

330

Grfico 8: Diagrama de un sistema microcontrolado

En el Grfico 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 LED's, zumbadores, interruptores de potencia, rels, etc. Hasta algunos de
ellos producen PWM; por lo tanto, la solucin adoptada para este sistema usa un
microcontrolador.

335

340

Habiendo elegido el medio para generar el PWM, hay que amplificarlo (un
microcontrolador ofrece seales ttl) a 12 v. para que sirva de alimentacin a los
ventiladores.

28

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

345

350

Una seal se puede amplificar de diversas maneras, usando operacionales,


transistores, transformadores o circuitos integrados especializados. Pero se debe
tener en cuenta que los ventiladores, segn los modelos, dentro de los estndares 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.
Los operacionales no ofrecen gran cantidad de amperaje. Los transformadores
ocupan demasiado espacio para el requisito del sistema de instalacin.
Los transistores son baratos pero producen una cada de tensin. Por requisito del
sistema, la alimentacin de ste es de 5 y 12 V., y los ventiladores se alimentan a 12
V. Una cada de tensin del 5% produce que el pulso se reduce a 11,4 V.

355

360

365

370

Dentro de las pruebas realizadas con distintos tipos de transistores: bipolares (NPN
o PNP), Darlington, Mosfet N y P; los que menor cada de tensin 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 adems que deben usarse como mnimo
dos.
Se decide usar un circuito integrado especfico para control de motores; el L293B.
Es un chip controlador de motores que puede usarse en mltiples configuraciones,
disponiendo de cuatro puertos independientes para el control de cuatro motores
simultneos. Tambin se puede usar para control de motores paso a paso y
reversibles as como simultanear los canales dos a dos. Ofrece una carga mxima 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 electrnica, lo convierte en una buena opcin para la amplificacin de la
seal de PWM.

29

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 9: Configuraciones del controlador de motores DC, L293B

Tras haber solucionado la alimentacin de los ventiladores, la siguiente cuestin es


elegir un medio que pueda tomar decisiones para producir un PWM de ms o menos
ciclo de trabajo, en funcin de la eleccin del usuario y de la temperatura del
entorno acotado.

375

Como se explic anteriormente, el PWM se genera con un microcontrolador que


disponga de estas salidas. Pero se tiene en cuenta que tambin hay
microcontroladores que poseen conversores analgico digital, con los que se
pueden leer los valores de la temperatura de sensores analgicos, que son los ms
accesibles para usuarios normales.

380

Un microcontrolador se puede programar, pueden tener entradas analgicas, generar


PWM y hasta comunicarse con otros dispositivos, sean microcontroladores o no.
La eleccin del microcontrolador adecuado ofrece solucin a las principales
cuestiones desarrolladas hasta ahora del sistema.

385

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 ms tareas especficas, normalmente multiplexadas por
software.

390

Grfico 10: Diagrama por bloques de un microcontrolador

En el Grfico 9 se puede ver que se parece bastante, conceptualmente, a un


ordenador. Fuente de alimentacin, circuito de reloj (un oscilador o cristal), CPU,
memorias, y finalmente sus puertos de comunicacin de entrada y salida para
comunicarse con el exterior. Sus aspectos generales son:

395

Memoria ROM (Memoria de slo lectura)


Memoria RAM (Memoria de acceso aleatorio)
Lneas de entrada/salida (I/O) Tambin llamados puertos aunque son accesibles a nivel de puerta
Lgica de control Coordina la interaccin entre los dems bloques

400

A parte de estos aspectos, cada modelo de cada fabricante dispone de sus


caractersticas especiales, que lo hacen afn a un propsito o a otro. Los principales

30

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

fabricantes de microcontroladores son Motorola, Philips, Atmel, Intel, Microchip,


SGS Thomson, Zilog y National COP.
405

En la universidad de Guadalajara se ha realizado un estudio comparativo entre los


principales microcontroladores existentes en el ao 1998 [9.5]. No ofrece un valor
real para el da de hoy pero s una visin estimativa de las diferentes marcas.

410

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

415

Empaquetamiento de dos dgitos BCD.


Control de un bucle que decrementa un contador hasta cero.
Transmisin sncrona por desplazamiento en serie de 8 bits.
Temporizador software de 10 ms.
Exploracin de un bit y salto si vale 1.

Programa

BCD

Bit y
salto

Bucle

Trx
sncrona

Temp
sncrona

Valores
finales
t

MCU

a)

b)

a)

b)

a)

b)

a)

b)

a)

b)

COP800 20MHz

16

105

1.29 0,108

10 45,2

9,75

8,12

19

390

10

2.10 1,045

MC68HC05 4,2MHz 10 10,5

2,86

2,38

20

126

11

2,24 0,136

ST62 8MHz

Z86CXX 12MHz

2,33

1,83

2,38

21

68

1,51 0,212

8048/8049 11MHz

5,45

2,73

6,82

14

124

1,58 0,112

PIC16C5X

0,4

0,5

0,5

11

14,8

Tabla 2: Comparativa de microcontroladores

a) indica el tamao del cdigo en palabra y b) el tiempo de ejecucin en s


t = tamao relativo; v = velocidad relativa
420

La tabla muestra que el PIC es hasta un doscientos por ciento ms veloz que otros
modelos y su programacin es mucho ms 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 decisin sin valorar los
objetivos de disponibilidad, escalabilidad, precio y sencillez.

425

Los microcontroladores de Thomson y Nacional COP son muy difciles de


encontrar. Los Atmel son muy veloces, pero de coste muy elevado, adems de haber
poca variedad disponible y ser los encapsulados de gran tamao. Los micros de
Motorola son de coste algo elevado con respecto a Microchip, ante mismas
caractersticas y perifricos, adems de precisar distinto software de programacin
y programador para cada modelo.

430

31

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Microchip ha creado los primeros microcontroladores RISC, tiene una experiencia


muy larga en microcontrol. Ofrece un software de programacin muy eficiente
gratuitamente que sirve para toda la familia de micros.
Cada familia de microcontroladores son compatibles en patillaje y perifricos, y en
la mayora de los casos, el software de programacin sirve para varios modelos
distintos. Su herramienta de programacin 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

Las gamas media y alta de Microchip soportan ICD (in circuit debugger) que
permite hacer un debugger del programa como si estuviera en produccin,
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, adems de ser localizables a precios relativamente bajos en cualquier
tienda de electrnica. Adems, Microchip ofrece muestras gratuitas que enva
gratuitamente a todo el mundo de la inmensa mayora de sus microcontroladores
(tienen un mximo admitido de muestras por persona).

440

445

Analizando las distintas propuestas, realizando unas preguntas en tiendas de


electrnica normales, y estudiando los datasheets de los distintos modelos
disponibles fcilmente, una opcin muy adecuada para el sistema es el
microcontrolador de Microchip 16F876.

450

4.2.3 Microcontrolador 16F876

455

Se dan unas breves nociones del microcontrolador y algunos aspectos de sus


dispositivos. No pretende ser un manual de referencia o una hoja de especificacin.
La informacin completa sobre el microcontrolador est en Microchip [10.].

460

La arquitectura del microcontrolador sigue el modelo Harvard. Dispone de dos


memorias independientes, una que contiene slo instrucciones, y otra que contiene
slo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es
posible realizar operaciones de acceso (lectura o escritura) simultneamente en
ambas memorias, y por consiguiente la velocidad de proceso aumenta.
El Grfico 10 muestra el esquema de la arquitectura:

32

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 11: Arquitectura Harvard


465

La memoria de programa es donde se almacena el cdigo fuente del programa que


el procesador va a ejecutar. Dispone de una capacidad de 8 Kb en memoria tipo
FLASH.
470

La memoria de datos se divide en dos zonas, la RAM (con un tamao de 368 bytes)
donde residen los registros de propsito general y especficos, y una EPROM de
256 bytes para almacenar datos que no se pierden al desconectar la alimentacin.
Se utiliza la segmentacin de aplicacin de instrucciones: simultneamente se
ejecuta una instruccin y se busca el cdigo de la siguiente.

475
Grfico 12: Patillaje del microcontrolador Microchip 16F876

Se resean ahora las funcionalidades principales hardware que hacen de este


microcontrolador uno de los ms adecuados, las configuraciones software se
researn en la siguiente seccin.

33

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

La patilla 1, por defecto est configurada como reset. Precisa de un pequeo


circuito de resistencias para que pueda efectuar resets fsicos en el circuito. Para que
el circuito funcione, esta entrada, cuando est configurada como reset, precisa tener
un valor lgico 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 lgico (tierra). La conexin para el
reset no puede ser directa a tierra, sino que para evitar un salto de corriente mayor
de 80 mA., que producira un bloqueo en el micro, se debe poner entre tierra y
MCLR una resistencia en serie de 50-100 ohmnios.

480

485

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 analgico digital a nivel independiente
unas puertas de otras. RA3 puede ser configurado, como se puede ver en el Grfico
12, como Vref+. En ese momento, se convierte en una seal de entrada que servir
de referencia al mdulo ADC. Tambin se puede usar la alimentacin propia del
micro como referencia pero el poder introducir una seal de referencia
independiente de la alimentacin, permite instalar un estabilizador de tensin que
asegure un valor constante y que los valores de la conversin analgica digital sean
lo ms fiables posibles.

490

495

En el sistema, las entradas ANx son usadas para leer los valores analgicos 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).

500

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

505

En el sistema, estas dos salidas, CCP1 y CCP2, irn 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 lneas en las que el microcontrolador tiene
implementado su mdulo hardware de comunicacin I2C. Por requisitos del
protocolo es necesario para su correcto funcionamiento poner en las dos lneas de
comunicacin, reloj y datos, una resistencia pull-up de 1 K. Es importante que esta
resistencia sea nica en cada lnea, independientemente de la cantidad de
dispositivos que haya conectados.

510

515

En el sistema, los dispositivos se comunicarn entre s por medio de I2C. Adems,


se cumple con el requisito de escalabilidad del sistema, ofreciendo a futuros
desarrollos un interfaz que se ha convertido en el estndar de hecho, a nivel
mundial, de comunicacin entre sistemas embebidos [9.7].

34

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

520

Las patillas 17 y 18, TX y RX, son las del puerto de comunicacin estndar RS232
(puerto serie) del microcontrolador.
En el sistema, estas patas se usarn para la reprogramacin en caliente del
microcontrolador, as como un interfaz secundario de comunicacin con el usuario
(la mayora de las veces usada como sistema de debugger).

525

530

535

540

545

El puerto B, es un puerto de 8 bits, configurable de diversas maneras, pero resaltan


dos caractersticas de l. La patilla RB0 es una entrada para una interrupcin
externa directa gestionable por software. Los cuatro ltimos bits del puerto tambin
se pueden configurar de manera que produzcan una interrupcin de software cuando
cambia el valor de entrada en alguno de ellos. Estas caractersticas 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 configuracin de RB0 o de estas
ltimas lneas, 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 lneas de enable, lneas de control o simplemente un LED.
En el sistema, RB_1, RB_2 y RB_3 controlarn las lneas de control de
direccionamiento de la comunicacin del puerto serie RS232. RB_4, RB_5, RB_6,
y RB_7 sern usadas en su configuracin de interrupcin para detectar pulsaciones
por parte del usuario en la interfaz de entrada del sistema.
Asimismo, en la situacin de adquisicin de datos del sistema, se usarn estas
patillas para leer las RPM a travs del tacmetro de los ventiladores. Esta
configuracin para interrupciones configura las patillas a un estado de alta
impedancia, en las que pueden adoptar cualquier estado (0 o 1) con una mnima
interferencia. Para evitar esto, se colocan en estas lneas unas resistencias pull-up de
10 K, con el fin que su valor por defecto fuera 1. Por lo tanto, la interrupcin se
produce al dar de entrada un 0. Esto debe tenerse en cuenta a la hora de disear el
interfaz de entrada de datos con teclados.

4.2.4 Interfaz de usuario


550

555

Segn 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 comunicacin para la reprogramacin es un interfaz de comunicacin
bidireccional, pero obliga al usuario usar un dispositivo externo que traduzca las
seales RS232 a informacin, y al contrario. Esa es una restriccin 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

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Segn el requisito de usuario de dimensiones, la interfaz de usuario hardware no


puede ocupar ms de la superficie de un frontal de una baha 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 alfanumricos 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.
Tambin hay en el mercado LCD grficos, y de comunicacin serie, mucho ms
estticos y cmodos de programar, pero el precio es mucho mayor y el sistema tiene
restriccin de coste, pero no de esttica o sencillez de desarrollo.

565

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
lneas 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
expansin 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 ms, al bus I2C, y proporciona una salida paralela al LCD.

570

575

Grfico 13: Patillaje del PCF8574

580

El LCD elegido es un DV24200 alfanumrico, controlado por un HD44780, de


24x2 caracteres, retroiluminado en verde. Es un LCD muy barato y robusto que
proporciona ms de las caractersticas necesarias para el sistema. Sus dimensiones
son muy adecuadas para las restricciones y sus caractersticas elctricas se adaptan
a las disponibles en el sistema. Adems tiene la capacidad de poder regular su brillo
y su contraste, lo cual es muy til teniendo en cuenta que en el sistema la
retroiluminacin del LCD consume 30 veces ms que el microcontrolador.

585

36

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 14: Dimensiones del LCD DV24200


590

Para la entrada de informacin, el usuario dispone de un teclado con el que puede


navegar por mens e introducir as la informacin 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
interrupcin a 0 lgico.

595

El sistema de reprogramacin por puerto serie (RS232) precisa de un conversor de


seales para convertir las seales de 12 V. del puerto serie de un PC a seales TTL
que pueda interpretar el microcontrolador. El conversor tpico para hacer esto es el
barato y disponible MAX232. Pero este circuito precisa de 4 condensadores
externos adems de no poder convertir seales de mayor velocidad que 120 Kbps.

600

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 diseo de la placa y permiten velocidades de hasta 200 Kbps.

Grfico 15: Patillaje de un MAX233A


605

37

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Por el requisito de escalabilidad y de reprogramacin en caliente, hay que poder


llevar la seal de reprogramacin 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
lneas de TX y RX del MAX233A a los diferentes microcontroladores, en funcin
de las lneas 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 ningn momento y poderse recuperar de errores. Las lneas de control
que genera el microcontrolador, inicialmente (sin programacin) estn en alta
impedancia. Se aprovecha esta caracterstica para poder programar micros vacos,
tan slo con el bootloader (explicado en la seccin de software). A las lneas de
control se le colocan en serie unas resistencias pull-up, de manera que los
de/multiplexores tengan en sus lneas de control, por defecto, un 111 (7). En las
salidas 7 estarn las lneas 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 conmutacin lo suficientemente rpida para los
propsitos del sistema.

625
Grfico 16: Patillaje de un MAX233A

4.2.5 Adquisicin de datos

630

Para la adquisicin de datos de temperatura se han propuesto sondas analgicas,


que son baratas por regla general, y de alta disponibilidad en tiendas. Se eligen las
LM35. Son sondas relativamente baratas, de fcil manejo e instalacin. Pueden
medir hasta 160 C, ofreciendo en la salida un voltaje de 0,1 V./C, con una
precisin de +/- 1 C.

635

En el sistema no se definen las distancias mnimas y mximas a las que pueden


estar las sondas. El cable, en funcin de sus caractersticas 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

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 17: Circuito protector de LM35


640

645

En la medicin de las RPM de los ventiladores, se contarn los pulsos generados


por el tacmetro del ventilador a travs de las interrupciones del puerto B. El
tacmetro realiza el cuenteo de revoluciones conmutando con tierra dos veces por
cada revolucin. Los pulsos del tacmetro tienen mucho ruido por su cercana a la
bobina del propio ventilador. Para poder leer los pulsos lo ms limpiamente posible
y evitar errores, se le aplica una resistencia pull-up; as tambin se crea la seal de
pulsos de 5 V. que el microcontrolador interpreta como un 1 lgico. Adems se
coloca un condensador de 1 F entre la lnea y tierra para corregir el ruido que
suelen tener los pulsos al comienzo.

39

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.2.6 Conjunto
Tras haber resuelto y definido las cuestiones necesarias de componentes y
configuracin para la consecucin 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

El sistema tiene una placa principal donde estn los componentes que unen todas las
funcionalidades del sistema, y sobre la que irn montados distintos o iguales
mdulos que ofrezcan la versatilidad y escalabilidad requerida.

660

En primer lugar se disea el circuito elctrico. Para el diseo se usa la herramienta


Orcad Capture. Sus libreras no tienen todos los componentes que se usan en el
sistema, por lo que hay que hacerlos para que a la hora de disear la placa, pida la
plantilla para ese componente y se le pueda dar una genrica 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 ms de uno, ponerles numeracin ordenada segn su localizacin en la
placa.

665

Estas reglas facilitan el montaje a partir de listas de componentes numeradas y


evitan los errores, sobre todo a la hora de compra.

670

En las siguientes pginas se ven los esquemas elctricos de la placa principal y de la


placa modular.

40

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 18: Esquema elctrico de la placa principal

41

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

42

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 19: Esquema elctrico de la placa modular

43

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

44

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

675

680

A partir de los diseos elctricos se procede al diseo de las placas fsicas. Este
diseo se realiza con el programa Orcad Layout. Al crear un nuevo diseo pide las
plantillas de cada uno de los componentes que encuentra en el diseo elctrico de
los cuales no tiene una plantilla en sus libreras con correspondencia exacta.
An cuando l coloque plantillas a componentes que reconozca y por alguna razn
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, slo 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.

685

690

695

700

705

710

La placa principal tiene unas dimensiones para que, sin desperdiciar espacio, ocupe
lo mximo aprovechable del ancho del espacio, para hacer el sistema lo ms 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 posicin forma un
ngulo de 90 con la placa principal, con lo cual no puede medir de alto ms que
una baha 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 pequeo
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 separacin. El diseo del
sistema con estos componentes es algo complejo en un espacio tan limitado, a pesar
de ello, slo 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 separacin entre ellas hasta 30 tambin,
ayudando a que si el proceso manual quema demasiado las pistas no se pierdan. Se
desactivan todas las dems pistas y se procede a la colocacin de componentes en el
espacio disponible.
La colocacin de los componentes es algo crtico 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
colocacin intuitiva de componentes para luego hacer el auto ruta del programa
para slo dos capas.
El proceso automtico de Orcad para pistas no es muy eficiente. De hecho, en 40
minutos de comprobaciones heursticas le faltaban 2 nodos por unir. Pero el auto
ruta sirve para limpiar la pantalla de conexiones y que d una visin en conjunto de
toda la placa con sus conexiones. A partir de ella se pueden tomar decisiones de
colocacin de componentes y de ruta de pistas para conseguir mayor
aprovechamiento de espacio.

45

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Otro aspecto cuando se disean placas con finalidad de fabricacin casera, y stas
son de doble capa, es la conexin entre capas. Orcad realiza los puentes donde cree
conveniente, asumiendo en todo momento que los agujeros de los componentes
estn metalizados y conducen entre capas.

715

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 mdulos, que estos, montados, no deben interferir con ningn otro
componente, ni correr riesgo de contacto con ningn puente de soldadura para
cuando estn montados los componentes en la placa.

720

Para evitar interferencias entre distintas pistas, y evitar en la medida de lo posible la


emisin de radiaciones, se colocan en todos los espacios libres de las placas zonas
de tierra, aislando pistas y componentes entre s.

725

En las siguientes pginas se pueden ver los dos diseos de las placas principal y
modular.

46

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 20: Taladros y componentes de la placa principal

47

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

48

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 21: Fotolito placa principal, capa superior

49

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

50

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 22: Fotolito placa principal capa inferior

51

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

52

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 23: Taladros y componentes de la placa modular

53

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

54

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 24: Fotolito placa modular capa superior

55

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

56

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 25: Fotolito placa principal capa inferior

57

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

58

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

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

730

Grfico 26: Placa modular

Grfico 27: Placa modular montada y testeada

Grfico 28: Placa principal montada y testeada

59

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

735
Grfico 29: Placa de pruebas con placa modular integrada

Estos prototipos se testean elctricamente y se comprueba su comportamiento


terico. 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
conexin, 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 lnea
MCLR. La respuesta a este problema est en los fusibles de configuracin. En la
seccin de software se explicar el bootloader y los problemas que puede causar
segn los fusibles que se activen en su programacin.

740

745

60

Sistema de regulacin de temperaturas con microcontroladores


Solucin 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 programacin.
750

Para ello se encarga a una industria de circuitos impresos la fabricacin de las


placas del sistema, para su posterior soldado de componentes, montaje en la baha y
pruebas.
Se muestran fotografas de todas las partes del prototipo final para dar una
explicacin grfica complementaria a la terica expuesta anteriormente.

755

Grfico 30: Empaquetado industrial de las pcb necesarias para el sistema

61

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 31: Componentes de la interfaz de usuario

760

Grfico 32: Interfaz de usuario montada en el frontal

Grfico 33: Parte trasera del frontal

62

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

765
Grfico 34: Sistema completo montado

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

770

Grfico 35: Mdulo de sonido y regulador de voltaje

En el Grfico 35, adems del mdulo de sonido y el regulador de voltaje, se pueden


ver las resistencias pull-up del bus I2C, del reset y de las lneas 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

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

775
Grfico 36: Conectores para la interfaz (entrada, salida)

Se puede observar en el Grfico 36, adems de lo descrito, la memoria EPROM y el


driver I2C-paralelo.

Grfico 37: MAX233 y los dos demultiplexores

780

64

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 38: Conectores externos generales del sistema

785

De izquierda a derecha, las entradas de sondas de temperatura interior y exterior del


sistema; molex de alimentacin, interruptor del sistema y conector serie DB9 para
el RS232.

Grfico 39: Placa modular completa

790

En el Grfico 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 tacmetros, conector unin a la placa principal, controlador de motores
L293B, diodos para la alimentacin de los ventiladores, resistencias anti-capacidad
de las sondas de temperatura, condensadores para filtrar el ruido en el tacmetro y
conectores, dos a dos, de sonda y ventilador.

65

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

795
Grfico 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 ms finas posibles.

Grfico 41: Prototipo hardware final

800

66

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.3

Software
Tras la implementacin 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.

805

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 caractersticas
especiales de la programacin del 16F876, que sirven como prembulo a la
implementacin del software.

4.3.1 Casos de uso

810
Grfico 42: Diagrama de casos de uso

67

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-01 Encender/Apagar

Objetivo

Encender o apagar el sistema

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente


1)

El usuario cambia de posicin el interruptor de


encendido

2)

El sistema cambia de estado, si estaba encendido se


apaga y viceversa

Flujo principal

Flujos
alternativos

Poscondicione
s

El sistema cambia de estado a encendido o apagado en


funcin de su estado anterior. Si la configuracin activa no
se haba 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 alimentacin de corriente con el sistema encendido


1)
Flujo principal

Flujos
alternativos

Poscondicione
s

68

El usuario partiendo de la pantalla de bienvenida, pulsa


el botn izquierdo

El sistema cambia el contenido del LCD. Mostrando, en


2) orden, y cada 2 segundos el estado de cada uno de los
mdulos
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 algn botn

La pantalla muestra indefinidamente, hasta la pulsacin del


botn derecho, el estado de los mdulos del sistema

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-03 Ver mdulo comunicado

Objetivo

Visualizar qu modulo tiene la comunicacin serie activa en


ese momento

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho, abajo, izquierda.

2)

El sistema muestra en pantalla el mdulo que tiene la


comunicacin activa

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 algn botn

Flujo principal

Flujos
alternativos

Poscondicione
s

Ninguna

Identificador

CU-04 Ver mdulo activado para resetear

Objetivo

Visualizar qu modulo tiene preparado para resetear en ese


momento

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho, abajo, derecho.

2)

El sistema muestra en pantalla el mdulo que tiene


preparado para resetear

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 algn botn

Flujo principal

Flujos
alternativos

Poscondicione
s

Ninguna

69

Sistema de regulacin de temperaturas con microcontroladores


Solucin 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 alimentacin de corriente con el sistema encendido


1)
Flujo principal

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho, derecho, abajo, izquierdo.

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

Flujos
alternativos

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 algn botn

Poscondicione
s

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 alimentacin de corriente con el sistema encendido


1)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho, derecho, abajo, derecho

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

2)

Muestra la pantalla de alarma emitiendo el sonido de


alarma hasta que se pulse algn botn

Flujo principal

Flujos
alternativos

Poscondicione
s

70

Ninguna

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

CU-07 Ver valor de PWM de un canal


Visualizar el valor de PWM que tiene un canal en concreto
Objetivo
en ese momento, si la configuracin manual est activada
Actor/es
Usuario
Tener alimentacin de corriente con el sistema encendido
Precondiciones
Estar activada la configuracin manual
El usuario partiendo de la pantalla de bienvenida, pulsa
1)
botn derecho, derecho, derecho, abajo, derecho
El sistema muestra en pantalla el valor de PWM del
Flujo principal 2)
canal seleccionado y sus RPM actuales
El usuario pulsa botn derecho para desplazarse al
3)
siguiente canal
El sistema detecta una alarma en alguno de los
1)
ventiladores
Muestra la pantalla de alarma emitiendo el sonido de
Flujos
2)
alternativos
alarma hasta que se pulse algn botn
El usuario pulsa botn izquierdo, saliendo de la
1)
visualizacin de canales
Identificador

Poscondicione
s

Ninguna

CU-08 Ver valor de fijo de PWM del sistema


Visualizar el valor de PWM que tienen todos los canales del
Objetivo
sistema en ese momento, si la configuracin fija est
activada
Actor/es
Usuario
Tener alimentacin de corriente con el sistema encendido
Precondiciones
Estar activada la configuracin fija
El usuario partiendo de la pantalla de bienvenida, pulsa
1)
botn derecho, derecho, derecho, derecho, abajo, derecho
Flujo principal
El sistema muestra en pantalla el valor de PWM fijo para
2)
todos los canales del sistema
El sistema detecta una alarma en alguno de los
1)
ventiladores
Identificador

Flujos
alternativos

Poscondicione
s

2)

Muestra la pantalla de alarma emitiendo el sonido de


alarma hasta que se pulse algn botn

Ninguna

71

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

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


Visualizar el valor de la temperatura fijada para un entorno
Objetivo
en concreto en ese momento, si la configuracin auto est
activada
Actor/es
Usuario
Tener alimentacin de corriente con el sistema encendido
Precondiciones
Estar activada la configuracin auto
El usuario partiendo de la pantalla de bienvenida, pulsa
1)
botn derecho 5 veces, derecho, abajo, derecho
El sistema muestra el valor de la temperatura fijada para
Flujo principal 2)
el entorno seleccionado y su temperatura actual
El usuario pulsa botn derecho para desplazarse al
3)
siguiente entorno
El sistema detecta una alarma en alguno de los
1)
ventiladores
Muestra la pantalla de alarma emitiendo el sonido de
Flujos
2)
alternativos
alarma hasta que se pulse algn botn
El usuario pulsa botn izquierdo, saliendo de la
1)
visualizacin de entornos
Identificador

Poscondicione
s

Identificador
Objetivo
Actor/es

Ninguna

CU-10 Activar/Desactivar configuracin manual


Activar o desactivar la configuracin manual, segn el
estado anterior
Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1)
Flujo principal

2)
3)

Flujos
alternativos
Poscondicione
s

72

1)
2)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho, derecho, derecho, abajo, izquierdo
El sistema muestra el estado actual de la configuracin
El usuario cambia el estado de la configuracin pulsando
botn arriba
El sistema detecta una alarma en alguno de los
ventiladores
Muestra la pantalla de alarma emitiendo el sonido de
alarma hasta que se pulse algn botn

Al desactivar la configuracin el sistema pasa a un estado


fijo de PWM de valor 10 en todos sus canales

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador
Objetivo
Actor/es

CU-11 Activar/Desactivar configuracin fija


Activar o desactivar la configuracin fija, segn el estado
anterior
Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1)
Flujo principal

2)
3)

Flujos
alternativos

1)
2)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho 4 veces, abajo, izquierdo
El sistema muestra el estado actual de la configuracin
El usuario cambia el estado de la configuracin pulsando
botn arriba
El sistema detecta una alarma en alguno de los
ventiladores
Muestra la pantalla de alarma emitiendo el sonido de
alarma hasta que se pulse algn botn

Poscondicione
s

Al desactivar la configuracin el sistema pasa a un estado


fijo de PWM de valor 10 en todos sus canales

Identificador

CU-12 Activar/Desactivar configuracin auto


Activar o desactivar la configuracin auto, segn el estado
anterior
Usuario

Objetivo
Actor/es

Precondiciones Tener alimentacin de corriente con el sistema encendido


1)
Flujo principal

2)
3)

Flujos
alternativos
Poscondicione
s

1)
2)

El usuario partiendo de la pantalla de bienvenida, pulsa


botn derecho 5 veces, abajo, izquierdo
El sistema muestra el estado actual de la configuracin
El usuario cambia el estado de la configuracin pulsando
botn arriba
El sistema detecta una alarma en alguno de los
ventiladores
Muestra la pantalla de alarma emitiendo el sonido de
alarma hasta que se pulse algn botn

Al desactivar la configuracin el sistema pasa a un estado


fijo de PWM de valor 10 en todos sus canales

73

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-13 Cambiar valor de brillo del LCD

Objetivo

Cambiar el valor del brillo de LCD

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1) Se lanza el caso de uso Ver brillo
Flujo principal

Flujos
alternativos

2)

El usuario con los botones arriba y abajo, sube o baja el


nivel de brillo del LCD

3)

El usuario pulsa botn derecho guardando el nivel de


brillo

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 algn botn

Poscondicione
s

La pantalla de LCD brilla ms o menos segn el valor

Identificador

CU-14 Cambiar valor de contraste del LCD

Objetivo

Cambiar el valor del contraste de LCD

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1) Se lanza el caso de uso Ver contraste
Flujo principal

Flujos
alternativos

Poscondicione
s

74

2)

El usuario con los botones arriba y abajo, sube o baja el


nivel de contraste del LCD

3)

El usuario pulsa botn derecho guardando el nivel de


contraste

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 algn botn

La pantalla de LCD tiene ms o menos contraste segn el


valor

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-15 Cambiar modulo para resetear

Objetivo

Cambiar el mdulo preparado para resetearse

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1) Se lanza el caso de uso Ver reset mdulo
Flujo principal

2)

El usuario con los botones arriba y abajo, cambia de


mdulo, preparando su reinicializacin

3) El sistema prepara la reinicializacin de ese mdulo


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 algn botn

Flujos
alternativos

Poscondicione
s

Ninguna

Identificador

CU-16 Resetear mdulo

Objetivo

Resetear el mdulo preparado para su reinicializacin

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1) Se lanza el caso de uso Ver reset mdulo
Flujo principal
2)

El usuario pulsa el botn derecho reseteando el mdulo


seleccionado

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 algn botn

Flujos
alternativos

Poscondicione
s

El mdulo seleccionado se resetea

75

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-17 Cambiar mdulo comunicado

Objetivo

Cambiar el mdulo comunicado por el puerto serie

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


1) Se lanza el caso de uso Ver mdulo comunicado
Flujo principal
2)

El usuario con los botones arriba y abajo, cambia de


mdulo, cambiando la comunicacin

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 algn botn

Flujos
alternativos

Poscondicione
s

El mdulo seleccionado toma la comunicacin serie

Identificador

CU-18 Cambiar valor PWM canal

Objetivo

Cambiar el valor PWM de un canal determinado

Actor/es

Usuario

Precondiciones

Tener alimentacin de corriente con el sistema encendido


Configuracin manual activada
1) Se lanza el caso de uso Ver valor canal

Flujo principal

2)

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


PWM del canal visualizado

3) El usuario con el botn derecho cambia de 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 algn botn

Flujos
alternativos

Poscondicione
s

76

El mdulo seleccionado cambia de valor PWM, cambiando


as la velocidad del ventilador que controla

Sistema de regulacin de temperaturas con microcontroladores


Solucin 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 alimentacin de corriente con el sistema encendido


Configuracin fija activada
1) Se lanza el caso de uso Ver valor fijo

Flujo principal

Flujos
alternativos

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

2)

Muestra la pantalla de alarma emitiendo el sonido de


alarma hasta que se pulse algn botn

Poscondicione
s

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 alimentacin de corriente con el sistema encendido


Configuracin auto activada
1) Se lanza el caso de uso Ver temperatura entorno

Flujo principal

2)

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


de la temperatura deseada para ese entorno en concreto

3) El usuario con el botn derecho cambia de entorno


Flujos
alternativos

Poscondicione
s

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 algn botn

El sistema guardar esa temperatura para ese entorno,


aplicando todo el software de control a ese valor.

77

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Identificador

CU-21 Leer configuracin

Objetivo

Leer la configuracin y aplicarla a todo el sistema

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


Flujo principal

Flujos
alternativos

1)

El usuario pulsa 6 veces botn derecho desde la pantalla


de bienvenida, botn abajo y botn 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 algn botn

1)

No hay ninguna configuracin guardada, el sistema


aplica un valor 10 (mximo) a todos los canales

Poscondicione
s

El sistema lee la configuracin de la memoria y la aplica a


todo el sistema

Identificador

CU-22 Guardar configuracin

Objetivo

Leer la configuracin y aplicarla a todo el sistema

Actor/es

Usuario

Precondiciones Tener alimentacin de corriente con el sistema encendido


Flujo principal

Flujos
alternativos

Poscondicione
s

78

1)

El usuario pulsa 6 veces botn derecho desde la pantalla


de bienvenida, botn arriba y botn 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 algn botn

El sistema guarda la configuracin activa en la memoria

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.3.2 Flujo de datos

Grfico 43: Diagrama de flujo de datos

79

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.3.3 Programacin del 16F876


Para el desarrollo de la seccin lgica del sistema sobre el microcontrolador
PIC16F876 se usa el compilador CCS [9.9], que compila cdigo quasi-c (excepto
cierto tipo de punteros, operaciones especiales sobre el sistema y algn tipo especial
de datos) en instrucciones ensamblador para el microcontrolador.

870

Este micro permite reprogramarse ms de mil veces, pero el proceso de


programacin, si no se usa hardware especfico y costoso, implica quitar el circuito
de la placa de produccin, con todos los peligros que ello implica.
Bootloader
875

Para hacer ms sencillo el proceso de programacin y debugger, se hace uso de una


caracterstica 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 pequeo programa que se ejecute siempre antes que ninguna
rutina al resetear o encender el micro.

880

Este programa enviar una seal por el puerto serie RS232 del microcontrolador,
esperando respuesta durante un tiempo. Si en este tiempo no le contesta nadie sigue
con la ejecucin normal del programa existente en la memoria del programa. Pero si
la respuesta es el carcter estipulado anteriormente (a la hora de programar este
pequeo programa), comienza a leer lneas de cdigo del puerto serie y a grabarlas
en la memoria de programa del microcontrolador, realizando as una programacin
en caliente.

885

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
comunicacin (hay algunos en los que el que inicia la comunicacin es el software
del PC). Para este desarrollo se usa el de Shane Tolmie [9.10], uno de los ms
populares en la comunidad Microchip, por su seguridad, fiabilidad y sencillez de
uso, a pesar de otros que son ms pequeos 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

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Grfico 44: Downloader a bootloader de Petr Kolomaznik [9.11]

900

En cuanto el programa acaba de descargarse, el bootloader coloca la direccin de


ejecucin de programa a la primera lnea de ejecucin del cdigo programado,
realizando un reseteo transparente.
ADC

905

910

915

El programa que ejecutan los mdulos 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 tacmetro
del ventilador.
Para recuperar la temperatura debe usar la capacidad del microcontrolador de
convertir valores analgicos en digital. La sonda usada en el sistema ofrece un
voltaje de 0,1 V. por C. La precisin del perifrico conversor ADC es como
mximo de 10 bits, lo que significa que el valor de entrada lo compara con la seal
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
centgrados, del conversor analgico digital ser: read_adc() * (5/1024) * 100.
El valor del ADC es multiplicado por el nmero de divisiones que ofrecen los 5
voltios de la seal de referencia, luego se multiplica por 100 para conseguir un
valor en grados centgrados, y no en centsimas, tal como lo genera la sonda.
Se pueden ver ejemplos de lectura analgica en el cdigo comentado, en el
Apndice A.

81

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Interrupciones
Para la lectura de las revoluciones por minuto, tal como se explic en la seccin de
hardware, se leen los pulsos del tacmetro del ventilador. Estos pulsos se pueden
convertir en cuentas usando la caracterstica de interrupcin 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 interrupcin ejecutando el cdigo que contenga.

920

Si este cdigo es sumar uno a una variable global o esttica, se estn 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.

925

La unidad de tiempo la puede ofrecer la interrupcin 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 cdigo contenido en la interrupcin timer_0.

930

Si el cdigo del timer_0 es guardar el nmero almacenado por la interrupcin del


puerto B y reiniciar esa variable a 0, se tiene el nmero de cuentas que tiene ese
pulso en la unidad de tiempo en que est configurado el timer_0.
Para ms informacin sobre divisores o las interrupciones se recomienda el
datasheet de Microchip [9.8].

935

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

940

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 podra daar irremediablemente el circuito.

945

82

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

I2 C
950

955

960

Para la comunicacin entre componentes, entre otros posibles, el PIC16F876


implementa el protocolo I2C. Este tipo de interfaz serie asegura una gran fiabilidad
en la comunicacin que llega a tolerar una velocidad mxima de 400 Kbps. Es
capaz de interconectar hasta 128 dispositivos situados a gran distancia, por lo que el
controlador se puede utilizar tambin en sistemas de gran tamao.
El master es el que inicia y termina la transferencia general y provee de la seal de
reloj. El esclavo (slave) es el dispositivo direccionado por el master, mediante 7
bits, lo que limita el nmero de componentes a 128.
En el protocolo I2C cada dispositivo tiene asignada una direccin de 7 o de 10 bits
que enva el master cuando comienza la transferencia con uno de ellos. Tras la
direccin se aade el bit de recepcin/transmisin 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 Grfico 45 se puede ver el esquema del protocolo.

965

El compilador CCS ofrece rutinas muy cmodas para la implantacin del protocolo,
aunque se debe de tener cuidado con los tiempos de espera necesarios para la
correcta transmisin de datos y con otras interrupciones que pueden interferir en la
transmisin.

Grfico 45: Protocolo I2C


970

83

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.3.4 Estructura del programa

Grfico 46: Estructura del software del sistema


975

El software del sistema se compone del software del sistema central y del de los
mdulos de adquisicin de datos/actuadores.
El sistema central comienza con el cdigo del bootloader, si no hay peticin de
reprogramacin, el cdigo sigue al main() del cdigo programado. Se comienza
inicializando el sistema, y los registros necesarios para las funciones de PWM que
sern las que, en el mdulo central, controlan el brillo y el contraste del LCD.

980

Se inicializan las variables globales, las interrupciones de botones y del timer, se lee
la configuracin anteriormente guardada en la EEPROM del micro, configurando el
micro en ese momento con ella, si la hubiera, y se comienza la mquina de estados
en su estado inicial (pantalla de bienvenida) para controlar los movimientos del
usuario en los mens y los diferentes estados por los que pasa.

985

Se haya ledo de la configuracin, o la haya configurado el usuario (por los pasos


definidos en los casos de uso) se ejecutan las instrucciones de la configuracin en
uso.

84

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

990

995

1000

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 configuracin auto, tambin. La alarma sin embargo es una
consecuencia indirecta de Timer_0.
Las configuraciones manual y fija, son sencillas, slo realizan cambios (de
necesitarlo) en el momento de su definicin. Tan slo se pueden ver intervenidas (al
igual que la automtica) por el sistema de alarma. La interrupcin 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 mdulo que ha producido el error. Una vez que interviene el
usuario se vuelve de nuevo al estado en que estaba el sistema anteriormente.
La configuracin automtica es la ms complicada puesto que en ella interviene la
interrupcin Timer_0 y subsecuentemente, un proceso peridico de lectura y
actualizacin de valores sin intervencin del usuario, segn el algoritmo de control.

1005

1010

La configuracin automtica cuando est activa verifica con periodicidad de un


tiempo definido en programacin (x veces la interrupcin Timer_0) la temperatura
de los elementos controlados y modifica la actuacin sobre ellos en funcin del
resultado del algoritmo de control a partir de esa temperatura leda, la temperatura
deseada previamente introducida por el usuario (o leda de la configuracin por
defecto) y del error cometido anteriormente. El algoritmo de control se ve en el
siguiente apartado.
Al mismo nivel que las configuraciones estn las operaciones bsicas ya no
referentes a la funcionalidad, sino a la configuracin del sistema, como son las
caractersticas de comunicacin y reset del sistema, y del visualizador, brillo y
contraste, y las capacidades de guardar y leer configuraciones.

1015

1020

La parte de software introducido en los bloques modulares se encarga de la


adquisicin de datos y de ofrecerle disponibilidad al proceso principal para leerlos.
Esos datos son de doble sentido, el mdulo se encarga asimismo de actualizar la
actuacin sobre el sistema fsico cuando esos datos, en su base de datos virtual,
cambian (normalmente cambiados por toma de decisiones del usuario o del propio
sistema).

85

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Posicin en el array

Significado del valor

PWM canal 1

PWM canal 2

RPM canal 1

RPM canal 2

Temperatura canal 1

Temperatura canal 2

Alarma

Reset

Tabla 3: Estructura de almacenamiento de datos

La Tabla 3 muestra la colocacin de los datos en la memoria fsica. Obsrvese la


colocacin dos a dos que facilita el acceso y modificacin de los datos desde bucles
y algoritmos recursivos, con el consecuente ahorro de memoria en la
implementacin del mtodo

1025

86

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

4.3.5 Algoritmo de control

1030

Para que la configuracin auto pueda realizar su tarea de manera desatendida, debe
existir alguien que la controle, actualizando los valores de actuacin sobre los
reguladores segn las necesidades de cada momento para poder cumplir, o intentar
cumplir con los objetivos marcados.

Grfico 47: Esquema de control tpico sobre procesos

1035

Para cumplir con los objetivos del sistema en la configuracin auto, hay que
sustituir la supervisin humana del Grfico 47, por un proceso al que el usuario le
marca unas directrices y l toma las decisiones adecuadas para su consecucin.

Grfico 48: Esquema de control con software embebido

1040

1045

En el Grfico 48 se observa el sistema de control a aplicar en un sistema embebido


para el control de un sistema fsico.
Los tipos de algoritmos de control ms frecuentes son:
Lgica difusa
Sistemas expertos
Redes neuronales
Sistemas adaptativos
Control tradicional, PID

87

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Sobre todos ellos se ha elegido el control tradicional, PID, siguiendo la primera


norma del control automtico: no aplicar nunca un sistema de control ms
complejo que el que precise la aplicacin.

1050

El control PID es el tipo de control ms sencillo de todos, es de fcil


implementacin, 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 caractersticas 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.

1055

El control PID basa su funcionamiento en la aplicacin de constantes sobre


operaciones bsicas para el control del sistema; la proporcionalidad del error (para
corregirlo), la derivacin del error (para suavizar el efecto de la proporcionalidad) y
la integracin (que evita que el sistema se estabilice en un error).

1060

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 relacin
con las constantes Kp, Ki y Kd. Si se introduce un valor de muestreo muy alto el
sistema puede variar demasiado en ese perodo, lo cual producira oscilaciones en el
sistema, a pesar de que Kp fuese pequea. Si se introduce un valor de muestreo muy
pequeo, el algoritmo de control se puede sobresaturar, no resultando de utilidad la
informacin retroalimentada.

1065

En este sistema se controlan temperaturas en entornos acotados. La temperatura es


una medida continua que suele variar con relativa lentitud lo cul hace pensar en un
tiempo de muestreo muy alto, pero no todos los componentes varan su temperatura
igual de rpido. Por lo que la mejor opcin es realizar diversos ensayos para obtener
una modelizacin, 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 sera lo ms lgico, se podran producir casos en que este tiempo de
muestreo variara segn el tipo de componente a controlar.

1070

1075

La implementacin del algoritmo para este sistema difiere de las implementaciones


tradicionales. La teora de control clsica define que si se desea que la variable
controlada crezca, debe crecer la actuacin del controlador. Este sistema es al
contrario. Cuando se desea que la variable controlada decrezca (temperatura) se
debe aumentar la actuacin (ventilador).

1080

Se puede visualizar el algoritmo en C del control PID en el Apndice Cdigo


fuente. Las variables Kp, Ki y Kd han sido elegidas por experimentacin (fase de
pruebas).

1085

88

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

89

Sistema de regulacin de temperaturas con microcontroladores


Solucin 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
cdigo del bootloader es gratuito, aunque tambin se pueden usar versiones de
pago. La versin bsica para este sistema cuesta 125 .

1090

Los componentes pueden variar mucho de precio de una tienda a otra, o


mismamente, si se consiguen gratuitamente a travs 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 electrnica.

1095

Placa principal:

Referencia
C1, C5
C2, C3, C4, C6, C7, C8, C11, C12
C9
C10
J1, J2, J3, J4, J8, J10
J9
J7
J6
LS1
P1
Q1, Q2
R1, R3, R5, R6
R2, R4
R7, R8
U1
U2
U3
U4
U5, U6
U7
Y1
Z1
Total

1100

90

Parte
Cantidad
22pF
2
100nF
8
330nF
1
10nF
1
10PIN Hembra
6
MOLEX4
1
CBTNS
1
CLCD
1
BUZZER
1
DB9
1
BD140
2
10K
4
1K
2
2K2
2
PIC16F876
1
L78/L05TO92
1
PCF8574
1
24LC256
1
HEF4051BP
2
MAX233
1
4MHz
1
DV24200
1

Precio Precio Total


0,02
0,05
0,09
0,72
0,06
0,06
0,09
0,09
0,10
0,60
0,30
0,30
0,40
0,40
0,40
0,40
1,50
1,50
0,20
0,20
0,15
0,30
0,01
0,05
0,01
0,02
0,01
0,02
5,00
5,00
0,50
0,50
3,00
3,00
1,50
1,50
1,00
2,00
5,70
5,70
0,60
0,60
18,00
18,00
41,02

Sistema de regulacin de temperaturas con microcontroladores


Solucin propuesta

Placa modular:

Referencia
C1, C2
C3, C4
D1, D2
J1, J3
J2, J4
J5
R1, R2, R3, R4, R5, R8, R9,
R10, R11, R12
R6, R13
R7, R14
R15
U1
U2
Y1

Parte
1uF
22pF
D1N4007
Motor
Sonda
CM0

Cantidad
2
2
2
2
2
1

Precio
0,02
0,02
0,02
0,50
1,40
0,10

Precio Total
0,05
0,05
0,04
1,00
2,80
0,10

10hm

10

0,01

0,12

1K
2K2
10K
PIC16F876
L293B
4MHz

2
2
1
1
1
1

0,01
0,01
0,01
5,00
3,13
0,60

0,02
0,02
0,01
5,00
3,13
0,60

Total

1105

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.
En total y contando con que el software slo se paga la primera vez:
41,02 + 12,94 + 15 = 68,96

1110

1115

Este precio incluye componentes para una sola placa modular, que controlara,
segn requisitos, dos ventiladores. Habra que aadir otros 12,94 por cada mdulo
a mayores que se quisiera instalar, hasta un mximo en total de 6 mdulos.
Haciendo una estimacin basndose en el ahorro obtenido en la fabricacin
industrial de las placas, el sistema fabricado a gran escala costara entre un 30-40%
menos.

91

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

Pruebas

5.1

Definicin 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 aaden componentes calorficos
en abundancia, para poder probar todas las funcionalidades del sistema, as como
hacer distintas configuraciones segn los requisitos.

1120

La caja incluye una fuente de alimentacin 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 mnimo continuo), 1 disco duro IDE 120 Gb. 7200
RPM, unidad DVD y grabadora DVD.

1125

Con los ventiladores por defecto: dos en la fuente de alimentacin, uno en cada
procesador y otro en la tarjeta grfica, la caja alcanza 62 C en las sondas internas
de la placa base.

1130

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 ms el de la fuente de alimentacin, equilibran el
flujo de aire que recorre la caja.

1135

Grfico 49: Caja ATX Casetek 1019

92

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

1140

Los ventiladores usados son unos UC-8FAB, con sensor de tacmetro y conector
molex de 3 pines. Su tabla de caractersticas es:

RPM
Voltaje
Intensidad
Potencia
Flujo de aire
Ruido

1800
12 V.
0,10 A.
1,2 W.
26,87 CFM
26,5 dB

2300
12 V.
0,14 A.
1,68 W.
33,23 CFM
29,8 dB

2800
12 V.
0,17 A.
2,04 W.
36,76 CFM
30,1 dB

3400
12 V.
0,23 A.
2.76 W.
39,80 CFM
38,0 dB

Tabla 4: Caractersticas del Enermax UC-8FAB

1145

Este modelo de ventilador tiene un potencimetro integrado, por lo que se necesita


modificar el cableado para que se ajuste al sistema.

Grfico 50: Modificacin de cableado de ventilador

1150

Se han instalado 4 sondas en los lugares de mayor generacin de calor: fuente de


alimentacin, en los dos procesadores y en el disco duro superior, que por estar
configurados en RAID, es seguro que siempre est tan o ms caliente que cualquier
otro inferior.

93

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

Grfico 51: Sonda en el disipador de los procesadores

Grfico 52: Sonda en el chasis del disco duro superior

1155

94

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

5.2

Pruebas fsicas
En las pruebas fsicas se ha comprobado el cumplimiento de todas las
especificaciones del sistema a nivel fsico.

1160

El sistema est montado en una caja ATX, en una baha 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 comunicacin serie.
Dispone de un conector molex para su alimentacin de la fuente de alimentacin y
un interruptor que lo enciende o apaga cuando hay alimentacin.

1165
Grfico 53: Sistema instalado completamente

El conjunto de los 10 ventiladores, en su configuracin sobredimensionada (100 %),


sin el sistema conectado, consumen en su totalidad 3,1 A.
1170

El sistema otorgando a todos los ventiladores el 100 %, consume 3,5 A. con la


retroiluminacin del LCD al mximo, y 3,3 A. con la retroiluminacin mnima. En
funcionamiento automtico, se ha podido medir un valor mnimo de 1,2 A.

95

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

Las pruebas de sonoridad se realizaron con un sonmetro marca Cesva modelo SC2C. En el grfico 52 se observan los resultados de las mediciones.
El grfico izquierdo representa la sonoridad de los ventiladores en su configuracin
por defecto, sin el sistema conectado. El grfico de la derecha representa el valor
medio sonoro obtenido para 10 minutos de configuracin automtica con el sistema
en funcionamiento.

1175

Grfico 54: Valores tridimensionales de sonoridad del sistema

Las mediciones del Grfico 52 se han realizado en un espacio con una presin
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

5.3

Pruebas lgicas
El funcionamiento del interfaz del usuario es correcto, no realizando ninguna
operacin en caso de no recibir una entrada esperada para ese estado.

1185

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 configuracin automtica 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 grficas de
las pginas siguientes.

1190

96

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

1195

97

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

98

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

99

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

100

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

1200

Esta ltima grfica se ha realizado, con ventilacin constante, para comprobar que
el sistema controlado no es estrictamente lineal. Tiene muchas perturbaciones.

1205

La primera grfica se ha realizado para ver el comportamiento mximo de los


componentes con mxima ventilacin constante. Es importante ver como las
temperaturas de los procesadores comienzan a fluctuar al alza en cuanto la
ventilacin de la fuente y del disco deja de ser mxima.
La segunda y tercera grfica se ha realizado con con valores de Kp=1, Ki=1, Kd=1.
La cuarta grfica se ha realizado con con valores de Kp=0, Ki=1, Kd=0.

1210

Las pruebas son satisfactorias, el sistema regula adecuadamente, manteniendo los


componentes en las temperaturas adecuadas y ahorrando lo posible en ventilacin
cuando no es necesario.

101

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

Discusin y conclusiones

6.1

Discusin de resultados
El primer resultado que debe discutirse es la oscilacin de las medidas de las
temperaturas de 1 C. Esta oscilacin puede deberse al error admitido por el
fabricante de la sonda, de +/- 1 C y tambin puede deberse al conversor analgico
digital del microcontrolador.

1215

El conversor analgico ya ha dado problemas anteriormente. Puede sufrir


alteraciones aparentemente aleatorias, las cuales pueden deberse a la seal de
entrada mismamente (ruidos electromagnticos en los cables de las sondas, a pesar
de haber cumplido las normas del fabricante) o bien la tensin de referencia que
est recibiendo el mdulo ADC generada por un 7805, no es tan buena como
debiera.

1220

En cualquier caso, no es preocupante. Este sistema trabaja en rangos de temperatura


muy amplios, lo cual le hace resistente a pequeos errores de precisin que, por otro
lado, tambin seran cortos en el tiempo, apenas unos segundos.

1225

Con respecto al controlador PID, es importante conocer la naturaleza del sistema a


controlar. Las grficas muestran que indudablemente, los componentes,
individualmente, se mantienen alrededor de la temperatura deseada. Pero se ve
como hay una interrelacin directa entre ellos.

1230

Los procesadores no disponen de aire renovado, sino que slo 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 grficas 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 rpido de nuevo.

1235

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
ceirse a la temperatura deseada es cuando no tenemos en cuenta la
proporcionalidad ni la derivacin, produciendo solamente una accin integral.

1240

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

1245

102

Sistema de regulacin de temperaturas con microcontroladores


Pruebas

6.2

Conclusiones
El sistema funciona bien segn especificaciones y requisitos, pero es mejorable
viendo algunos resultados.

1250

1255

1260

1265

1270

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.
A pesar de que los requisitos especifican que regula entornos independientes, se
debe hacer una interrelacin 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 dara ms fiabilidad al sistema. Pero esto producira una
reduccin del tiempo de muestreo, que en los mejores resultados es de 10 segundos.
No se puede bajar mucho ms, puesto que la frecuencia de adquisicin de datos
para cada canal es de 4 segundos. Por otro lado, un filtrado a nivel de algoritmo
producira mayor cantidad de cdigo 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 discretizacin de la velocidad dada en tan solo 8 pasos (de 20% a
100%).
Estos 8 pasos estn limitados por restriccin del microcontrolador, que a mayor
frecuencia de PWM, menor es la discretizacin de su ciclo de trabajo. Se ha
decidido trabajar a una frecuencia relativamente alta, 100 KHz, porque los
ventiladores sufren menos desgaste (ver explicacin PWM), alargando su vida til.
Una posible solucin sera bajar la frecuencia, a pesar del desgaste de los
ventiladores, o subir la frecuencia, cambiando el microcontrolador por otro me
mayor velocidad.

1275

En conclusin, el sistema, para los requisitos y funcionalidades impuestas, y en


funcin de las decisiones tomadas, funciona correctamente.

103

Sistema de regulacin de temperaturas con microcontroladores


Evolutivos

Evolutivos
En orden de importancia.
Realizar otra/s iteracin/es al anlisis y diseo 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

Aadir la posibilidad de cambiar las constantes Kp, Ki y Kd del PID para ser ms
verstil.
Poder variar el tiempo de muestreo para cada componente controlado en particular.
Desarrollar y aadir un mdulo que enve y pueda recibir mensajes desde un mvil
a otro grabado previamente, con instrucciones y datos (SMS)

1285

Desarrollo de las libreras necesarias en CCS para controlar otros tipos de pantallas
por I2C con el PCF8574A.
Integracin en la placa principal de un reloj de tiempo real. Poder encender/apagar
el ordenador a travs de hardware a unas horas determinadas.

1290

Aadir la funcionalidad de sonido al teclado.


Aadir la funcionalidad de sonido encendido/apagado.
Sustituir la interfaz de entrada, botonera, por un mando de infrarrojos.

104

Sistema de regulacin de temperaturas con microcontroladores


Evolutivos

105

Sistema de regulacin de temperaturas con microcontroladores


Definiciones

1295

Definiciones
Esta seccin ofrece unas listas de definiciones de trminos, acrnimos y
abreviaturas usadas en este documento. Dichas listas estn ordenadas
alfabticamente

8.1

Trminos
Bootloader
Cargador de arranque para dispositivos con software embebido. Es un
pequeo cdigo 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 lneas de cdigo y las graba en su memoria de programa,
tras lo cual arranca el programa grabado desde su inicio.

1300

1305

Crosstalk
Ruido producido al cambio de estado en una lnea, que a su vez es
inducido en las lneas prximas a ella. Este efecto se produce con mayor
probabilidad cuando se trabaja a alta frecuencia
Darlington
Configuracin en la unin de dos transistores para aumentar el paso de
corriente. Tipo de transistores que usa dos en cascada, amplificando el
primero al segundo

1310

Disipar
Esparcir y desvanecer las partes de un todo

1315

Modding
Personalizacin de ordenadores personales, bien en decoracin, aumento de
rendimiento o aadiendo nuevas funcionalidades; normalmente usando
medios caseros

106

Sistema de regulacin de temperaturas con microcontroladores


Definiciones

1320

MOS
Dependiendo de la familia en concreto, se tienen unos valores distintos de
tensin, estos son:
Mn
CMOS 15V (serie 4000) 3V
CMOS 5V (serie 74C) 3V
CMOS 5V (serie 74HC) 3V

Mx
18V
15V
6V

Tabla 5: Voltajes CMOS


1325

Pull-up
Resistencia que en un circuito fuerza un estado lgico alto o "1", cuando el
propio dispositivo que se conecta no pueda generarlo.
Refrigerar
Hacer ms fro un entorno u otra cosa por medios artificiales

1330

1335

RS-232
Norma de comunicaciones estndar entre distintos equipos. La transmisin
se realiza sobre una lnea no balanceada, tiene problemas de ruido y
crosstalk, la velocidad de transmisin es baja, y la longitud de la lnea esta
en torno a los 30 mts. Como ventajas tenemos su bajo coste, y que es muy
simple de implementar.
TTL
Niveles de tensin que van dentro de una ventana de 5 voltios.

107

Sistema de regulacin de temperaturas con microcontroladores


Definiciones

8.2

Acrnimos
BCD

1340

Sistema de numeracin binario de cuatro dgitos, que va del 0 al 9 Binary


Coded Decimal
0000
0001
0010
0011
0100

0
1
2
3
4

0101
0110
0111
1000
1001

5
6
7
8
9

Tabla 6: Sistema de numeracin BCD

CA
Corriente alterna

1345

CC
Corriente continua
CERN
European Laboratory for Particle Physics
CFM

1350

Medida de flujo de aire Cubic Feet per Minute


CHIP
Circuito integrado Consolidated Highly Integrated Processor
EEPROM
1355

Memoria de slo lectura programable y borrable electrnicamente Electronic Erasable


Programmable Read Only Memory

ESA
European Space Agency
I 2C
Especificacin de transmisin de datos para sistemas embebidos diseado
por Philips en los aos 80 Inter Integrated Circuit

1360

LCD
Visualizador de cristal lquido Liquid Crystal Display
LED
Diodo emisor de luz Light-emitting diode

1365

108

Sistema de regulacin 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

RL
Refrigeracin lquida
SMD
1375

Mtodo de montaje de componentes electrnicos miniaturizados que


consiste en montarlo sobre la superficie de la placa, sin zcalo, tan slo
unido a ella por estao Surface mounted device

109

Sistema de regulacin de temperaturas con microcontroladores


Definiciones

8.3

Abreviaturas
Baybus
Controlador de ventiladores en base a interruptores.
Electrobus
Controlador de ventiladores en base a un integrado electrnico o transistor

1380

Fanbus
Bus de conexiones de ventiladores
Reobus
Controlador de ventiladores en base a restatos de potencia

1385

110

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

111

Sistema de regulacin de temperaturas con microcontroladores


Referencias

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

[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
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_pl
ace=product&p_serial=ALD-V03&other_title=0

[5]

Pulse Width Modulation


http://www.cpemma.co.uk/pwm.html

[6]

Universidad de Guadalajara, Mxico


Centro Universitario de Ciencias Exactas e Ingeniera
Implementacin de un sistema de desarrollo utilizando los microcontroladores
PIC Microchip Technology, 1998
http://proton.ucting.udg.mx/temas/microprocesadores/microchip/manual1.zip

[7]

Philips Electronics
Especificicacin del bus I2C
http://www.semiconductors.philips.com/buses/i2c/

[8]

Microchip, Inc
Microcontrolador PIC16F876
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nod
eId=1335&dDocName=en010239

[9]

CCS Inc.
Compilador en C para microcontroladores de Microchip
http://www.ccsinfo.com/picc.shtml

[10]

Bootloader
http://www.microchipc.com/PIC16bootload/

1390

1395

1400

1405

1410

1415

112

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

1420

[11]

PIC Downloader
http://www.ehl.cz/pic/pic_e.htm

113

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

Apndice A

Cdigo fuente
Microcontrolador de la placa principal

1425

/***********************************************
Master module HM-Baybus system
Manuel Daz Garca

1430

Computer Systems
European University of Madrid
September 2004
More information than comments in:

1435

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


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

1440

#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:

1445

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)

1450

/*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)*/

1455

#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

1460

//This directive gives priority to rb interrupt over others

114

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

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


//Type definition to the buttons
button current_button=NONE;

1465

//Used to know how button push the user


int commodule = 0;
//Module that has the communication by RS232
int resetmodule = 0;
//Module that will be resetted

1470

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;

1475

//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

1480

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

1485

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

1490

//Its used combined with current_state


void leftbutton();
//Method that will be called when the user push right button
//Its used combined with current_state
void upbutton();

1495

//Method that will be called when the user push right button
//Its used combined with current_state
void downbutton();
//Method that will be called when the user push right button
//Its used combined with current_state

1500

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

1505

void printmodule(int, short);


//It prints in LCD the name of the (module, channel)
#separate void autoconf(short);

115

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

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

1510

//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
//spaces in banks. Then the compiler is forced to begin a bank with it.

1515

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

1520

void lcdcontrastupdate(){
if (lcdbright==20)
set_pwm2_duty(-1);
else
set_pwm2_duty(lcdcontrast);

1525

}
//Update the bright of LCD with the value saved in lcdbright
//When the value is 40 (maximum) it turns off the bright
void lcdbrightupdate(){

1530

if (lcdbright==40)
set_pwm1_duty(-1);
else
set_pwm1_duty(lcdbright);
delay_ms(50);

1535

}
//This method puts the system in an alarma state, until the user push any button
void alarmnow(int cvmodulel, int cvalarml){
short loop = 0;

1540

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){

1545

if (loop==0){
set_pwm1_duty(0);

//LCD bright max

loop=1;
}else{
set_pwm1_duty(-1); //LCD bright off

1550

loop=0;
}

beep(150);

1555

delay_ms(250);

116

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

beep(50);
delay_ms(250);
beep(50);
delay_ms(500);

1560

//Three sounds

if (!input(PIN_B4)||!input(PIN_B5)||!input(PIN_B6)||!input(PIN_B7)){
writei2c(cvmodulel,6,0); //It changes the value of alarm in the
//module with errors
delay_ms(20);
cvalarml=0;

1565

lcdbrightupdate();

//Change the bright of LCD to user value

lcdcontrastupdate();

//Change the contrast of LCD to user value

}
}
enable_interrupts(int_rb);

1570

//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){

1575

int i=0;
delay_ms(50);
for (i=2;i<10;i++){
confmanvalues[i]=value;
}

1580

setpwmmanual();
}
//This method its 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

1585

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

1590

int cvrpm =0;


int cvpwm =0;
int cvtemp =0;
int cvalarm=0;

117

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

if (cvchannel==0)

1595

cvchannel=1;
else{
if (cvmodule==0x60){
cvmodule=0x20; //The first module is in this address
} else {

1600

cvmodule=cvmodule+0x10;
}
cvchannel=0;
}
if (current_state==90){ //90 is the state that the user wants see the

1605

//system status
cvpwm=readi2c(cvmodule, cvchannel);
delay_ms(20);
cvrpm=readi2c(cvmodule, cvchannel+2);
delay_ms(20);

1610

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

1615

if (cvtemp>0){
printf(lcd_putc," Temp=%i",cvtemp);
}
}
cvalarm = readi2c(cvmodule,6);

1620

delay_ms(20);
if (cvalarm>0 && cvalarm<4){

//This module has an error -> ALARM!!!

alarmnow(cvmodule,cvalarm);
}
}

1625
//System interrupt with the internal clock timer_0
//Its needed configurate before the timer
#int_timer0
void timer_0_isr (void) {

1630

static byte timer_0_count = 0;


static byte timer_auto = 0;
if (timer_0_count < 31) {
timer_0_count++;
} else {

1635

secuentialview();

1640

if (confauto==1){

118

//Test the modules

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

if(timer_auto<5){
timer_auto++;
} else {
timer_auto=0;

1645

autoconf(4); //Update the auto values with the PID algorithm


//each 10*2=20 seconds
}
}
timer_0_count = 0; //reset counter

1650

}
set_timer0 (8);
}
//Interrupt detects changes on PortB

1655

#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);

1660

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;

1665

}
//Method to reset the module saved in resetmodule
//See the functions_hm.h library
void resetnow(){

1670

disable_interrupts(int_timer0);
printf(lcd_putc,"\fEspere");
if (resetmodule==0){
commodule=0;
commoduleupdate();

1675

delay_ms(10);
resetcpu();
} else {
writei2c(0x10*resetmodule,7,1);

//Send the reset command to module

1680

if (commodule==resetmodule) delay_ms(10000); //Reset to reprogram it


else delay_ms(2000); //Only reset
enable_interrupts(int_timer0);
}

1685
//Changes the value of all channels in the system with the values saved
// in confmanvalues

119

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void setpwmmanual(){
int i;

1690

for (i=0;i<10;i++){
writei2c(0x20+0x10*(int)(i/2),i%2,confmanvalues[i]);
delay_ms(20);
}
}

1695
//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(){

1700

switch(current_state){
case 0:{
beep(50);
printf(lcd_putc,"\f Bienvenido a HM-Baybus");
break;

1705

}
}
}
void lcdupdate10(){

1710

switch(current_state){
case 10:{
printf(lcd_putc,"\f%c Comunicacion - %c",127,126);
break;
}

1715

case 11:{
printf(lcd_putc,"\f%c Comunicacion | Reset %c",127,126);
break;
}
case 12:{

1720

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

1725

break;
}
}
}

1730
void lcdupdate20(){
switch(current_state){
case 20:{

120

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

1735

printf(lcd_putc,"\f%c Pantalla - %c",127,126);


break;
}
case 21:{
printf(lcd_putc,"\f%c Brillo | Contraste %c",127,126);

1740

break;
}
case 22:{
printf(lcd_putc,"\fBrillo %c\nActual=%i+/-",126,10-lcdbright/4);
break;

1745

}
case 23:{
printf(lcd_putc,"\f%c Contraste\nActual=%i+/-",127,10-lcdcontrast/2);
break;
}

1750

}
}
void lcdupdate30(){
switch(current_state){
case 30:{

1755

printf(lcd_putc,"\f%c Conf. manual - %c",127,126);


break;
}
case 31:{
if (confman==1){

1760

printf(lcd_putc,"\f%c Desactivar manual\nConfigurar %c",127,126);


}
else
printf(lcd_putc,"\f%c Activar manual",127);
break;

1765

}
case 32:{
break;
}
case 33:{

1770

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;

1775

}
}
}
void lcdupdate40(){
switch(current_state){

1780

case 40:{
printf(lcd_putc,"\f%c Conf. fija - %c",127,126);

121

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

break;
}
case 41:{

1785

if (conffixed==1){
printf(lcd_putc,"\f%c Desactivar fija\nConfigurar %c",127,126);
}
else
printf(lcd_putc,"\f%c Activar fija",127);

1790

break;
}
case 42:{
printf(lcd_putc,"\f%c Valor PWM fijo\nActual=%i+/-",127,confmanvalues[0]);
break;

1795

}
case 43:{
printf(lcd_putc,"\fConf. fija %c\n",126);
if (conffixed==1) printf(lcd_putc,"A");
else printf(lcd_putc,"Desa");

1800

printf(lcd_putc,"ctivada +");
break;
}
}
}

1805

void lcdupdate50(){
switch(current_state){
case 50:{
printf(lcd_putc,"\f%c Conf. auto - %c",127,126);
break;

1810

}
case 51:{
if (confauto==1){
printf(lcd_putc,"\f%c Desactivar auto\nConfigurar %c",127,126);
}

1815

else
printf(lcd_putc,"\f%c Activar auto",127);
break;
}
case 52:{

1820

break;
}

case 53:{

1825

printf(lcd_putc,"\fConf. auto %c\n",126);


if (confauto==1) printf(lcd_putc,"A");
else printf(lcd_putc,"Desa");
printf(lcd_putc,"ctivada +");

122

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

break;

1830

}
}
}
void lcdupdate80(){

1835

switch(current_state){
case 80:{
printf(lcd_putc,"\f%c Grabar+ Leer- Config",127);
break;
}

1840

case 81:{
printf(lcd_putc,"\fLeer Config +\nSi %c",126);
break;
}
case 82:{

1845

printf(lcd_putc,"\fGrabar Config - Si %c",126);


break;
}
}
}

1850
//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;

1855

temp=read_eeprom(200);
delay_ms(10);
lcdcontrast=temp;
lcdcontrastupdate();
temp=read_eeprom(201);

1860

delay_ms(10);
lcdbright=temp;
lcdbrightupdate();
temp=read_eeprom(202);
delay_ms(10);

123

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

1865

if (temp>0){
if (temp==1){
conffixed=1;
confman=0;
confauto=0;

1870

temp=read_eeprom(203);
delay_ms(10);
setpwmall(temp);
} else {
if (temp==2){

1875

confman=1;
conffixed=0;
confauto=0;
for (temp=0;temp<10;temp++){
confmanvalues[temp]=read_eeprom(203+temp); //recover the values

1880

delay_ms(10);
}
setpwmmanual();
} else {
if (temp==3){

1885

confman=0;
conffixed=0;
confauto=1;
for (temp=0;temp<4;temp++){
temperatures[temp]=read_eeprom(203+temp); //recover the temps

1890

delay_ms(10);
}
} else {
setpwmall(10);
}

1895

}
}
} else {
confman=0;
conffixed=0;

1900

confauto=0;
setpwmall(10);
}
}

124

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//This method saves the current configuration of the system

1905

//If none configuration is in use, it only save the state of contrast and bright
//of the LCD
void writeconf(){
int i=0;
write_eeprom(200,lcdcontrast);

1910

delay_ms(10);
write_eeprom(201,lcdbright);
delay_ms(10);
if (conffixed ==1){
write_eeprom(202,1);

1915

delay_ms(10);
write_eeprom(203,confmanvalues[0]);
delay_ms(10);
} else {
if (confman ==1){

1920

write_eeprom(202,2);
delay_ms(10);
for (i=0;i<10;i++){
write_eeprom(203+i,confmanvalues[i]);
delay_ms(10);

1925

}
} else{
if (confauto ==1){
write_eeprom(202,3);
delay_ms(10);

1930

for (i=0;i<4;i++){
write_eeprom(203+i,temperatures[i]);
delay_ms(10);
}
} else {

1935

write_eeprom(202,-1);
delay_ms(10);
}
}
}

1940

125

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//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

1945

//spaces in banks. Then the compiler is forced to begin a bank with it.
#separate
void manualconf(short operation){
static int cmmodule=0x20;
static short cmchannel=1;

1950

static int pwmvaluem=0;


static int rpmvaluem=0;
disable_interrupts(int_timer0);
delay_ms(20);
if (operation==0){

1955

if (cmchannel==1){
cmchannel=0;
if (cmmodule==0x60) cmmodule=0x20;
else cmmodule=cmmodule+0x10;
} else cmchannel=1;

1960

pwmvaluem=readi2c(cmmodule,cmchannel);
delay_ms(20);
} else {
if (operation==1 && pwmvaluem<10){
pwmvaluem++;

1965

} else {
if (operation==2 && pwmvaluem>0){
pwmvaluem--;
}
}

1970

writei2c(cmmodule,cmchannel,pwmvaluem);
delay_ms(20);
}
confmanvalues[((int)(cmmodule/16)-2)*2+cmchannel]=pwmvaluem;
rpmvaluem=readi2c(cmmodule,cmchannel+2);

1975

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

1980

126

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//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

1985

//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.
#separate
void autoconf(short operation){
static int pos = 0; //Static to save the position between calls

1990

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

1995

//that will be controlled


char const cadenas[21]={"CPU1 CPU2 FA
signed int kp=0,ki=1,kd=0;

Disco"};

//Constants to the PID algorithm

signed int error=0;


int temp1= 0;

2000

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

2005

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

2010

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]++;

2015

}
if (operation == 2){ //Decrements the value of the desired temperature
if (temperatures[pos]>20) temperatures[pos]--;
}
if (operation == 3){ //Increments the pos

2020

if (pos==3) pos=0;
else pos++;
}

127

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

if (operation == 4){ //PID Control


for (temp1=0;temp1<4;temp1++){

2025

error=readi2c(modulos[temp1],(temp1%2)+4); //Current temp of component


delay_ms(20);
error=(signed int)temperatures[temp1]-(signed int)error;
temp2 =(signed int)Kp*((signed int)error-(signed int)errors[temp1]);
//PROPORTIONAL

2030

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]));

2035

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

2040

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

2045

writei2c(modulos[temp1],1,temp3);
delay_ms(20);
writei2c(modulos[temp1]+0x20,0,temp3);
delay_ms(20);
writei2c(modulos[temp1]+0x20,1,temp3);

2050

delay_ms(20);
} else {
if (temp1==3){ //Component 3
writei2c(modulos[temp1],0,temp3);
delay_ms(20);

2055

writei2c(modulos[temp1],1,temp3);
delay_ms(20);
writei2c(modulos[temp1]-0x20,0,temp3);
delay_ms(20);
writei2c(modulos[temp1]-0x20,1,temp3);

2060

delay_ms(20);
} else {
writei2c(modulos[temp1],temp1%2,temp3); //Component 1 and 2
delay_ms(20);
}

2065

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

128

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

2070

}
}
}
//The methods of buttons define the machine states and call to the methods

2075

//that refresh the LCD


//Some of them, also do simple operations on global values
void upbutton(){
switch (current_state){
case 11:{

2080

current_state=10;
lcdupdate10();
break;
}
case 12:{

2085

if (resetmodule<6){
resetmodule++;
lcdupdate10();
}
break;

2090

}
case 13:{
if (commodule<6){
commodule++;
commoduleupdate();

2095

lcdupdate10();
}
break;
}
case 21:{

2100

current_state=20;
lcdupdate20();
break;
}
case 22:{

2105

if (lcdbright>3){
lcdbright=lcdbright-4;
lcdbrightupdate();
lcdupdate20();
}

2110

break;
}

129

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

case 23:{
if (lcdcontrast>1){
lcdcontrast--;

2115

lcdcontrast--;
lcdcontrastupdate();
lcdupdate20();
}
break;

2120

}
case 31:{
current_state=30;
lcdupdate30();
break;

2125

}
case 32:{
manualconf(1);
break;
}

2130

case 33:{
if (confman==1){ //If the configuration is enabled, the user
confman=0;

//can disable it

setpwmall(10);
} else {

2135

//Enable

confman=1;
conffixed=0;
confauto=0;
}
lcdupdate30();

2140

break;
}
case 41:{
current_state=40;
lcdupdate40();

2145

break;
}
case 42:{
if (confmanvalues[0]<10){
confmanvalues[0]++;

2150

if (confmanvalues[0]==1) confmanvalues[0]++; //Min value = 2


setpwmall(confmanvalues[0]);
lcdupdate40();
}
break;

2155

130

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

case 43:{
if(conffixed==0){
confman=0;
conffixed=1;

2160

confauto=0;
}else{
setpwmall(10);
conffixed=0;
}

2165

lcdupdate40();
break;
}
case 51:{
current_state=50;

2170

lcdupdate50();
break;
}
case 52:{
autoconf(1);

2175

autoconf(0);
break;
}
case 53:{
if (confauto==1){ //Disable the conf and put all values to max

2180

confauto=0;
setpwmall(10);
} else {
confman=0;
conffixed=0;

2185

confauto=1;
}
lcdupdate50();
break;
}

2190

case 80:{
current_state=82;
lcdupdate80();
break;
}

2195

case 81:{
current_state=80;
lcdupdate80();
break;
}

2200

}
}
void downbutton(){

131

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

switch (current_state){
case 10:{

2205

current_state=11;
lcdupdate10();
break;
}
case 20:{

2210

current_state=21;
lcdupdate20();
break;
}
case 12:{

2215

if (resetmodule>0){
resetmodule--;
lcdupdate10();
}
break;

2220

}
case 13:{
if (commodule>0){
commodule--;
commoduleupdate();

2225

lcdupdate10();
}
break;
}
case 22:{

2230

if (lcdbright<37){
lcdbright=lcdbright+4;
lcdbrightupdate();
lcdupdate20();
}

2235

break;
}
case 23:{
if (lcdcontrast<19){
lcdcontrast++;

2240

lcdcontrast++;
lcdcontrastupdate();
lcdupdate20();
}
break;

2245

132

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

case 30:{
current_state=31;
lcdupdate30();
break;

2250

}
case 32:{
manualconf(2);
break;
}

2255

case 40:{
current_state=41;
lcdupdate40();
break;
}

2260

case 42:{
if (confmanvalues[0]>0){
confmanvalues[0]--;
if (confmanvalues[0]==1) confmanvalues[0]--;
setpwmall(confmanvalues[0]);

2265

lcdupdate40();
}
break;
}
case 50:{

2270

current_state=51;
lcdupdate50();
break;
}
case 52:{

2275

autoconf(2);
autoconf(0);
break;
}
case 80:{

2280

current_state=81;
lcdupdate80();
break;
}
case 82:{

2285

current_state=80;
lcdupdate80();
break;
}
}

2290

}
void leftbutton(){

133

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

switch (current_state){
case 0:{

2295

current_state=90;
break;
}
case 10:{
current_state=0;

2300

lcdupdate0();
break;
}
case 11:{
current_state=13;

2305

lcdupdate10();
break;
}
case 12:{
current_state=11;

2310

lcdupdate10();
break;
}
case 20:{
current_state=10;

2315

lcdupdate10();
break;
}
case 21:{
current_state=22;

2320

lcdupdate20();
break;
}
case 23:{
current_state=21;

2325

lcdupdate20();
break;
}
case 30:{
current_state=20;

2330

lcdupdate20();
break;
}
case 31:{
current_state=33;

2335

lcdupdate30();
break;
}
case 32:{
current_state=31;

134

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

2340

lcdupdate30();
break;
}
case 40:{
current_state=30;

2345

lcdupdate30();
break;
}
case 41:{
current_state=43;

2350

lcdupdate40();
break;
}
case 42:{
current_state=41;

2355

lcdupdate40();
break;
}
case 50:{
current_state=40;

2360

lcdupdate40();
break;
}
case 51:{
current_state=53;

2365

lcdupdate50();
break;
}
case 52:{
current_state=51;

2370

lcdupdate50();
break;
}
case 80:{
current_state=50;

2375

lcdupdate50();
break;
}
}
}

135

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

2380

void rightbutton(){
switch (current_state){
case 0:{
current_state=10;
lcdupdate10();

2385

break;
}
case 10:{
current_state=20;
lcdupdate20();

2390

break;
}
case 11:{
current_state=12;
lcdupdate10();

2395

break;
}
case 12:{
resetnow();
current_state=12;

2400

lcdupdate10();
break;
}
case 13:{
current_state=11;

2405

lcdupdate10();
break;
}
case 20:{
current_state=30;

2410

lcdupdate30();
break;
}
case 21:{
current_state=23;

2415

lcdupdate20();
break;
}
case 22:{
current_state=21;

2420

lcdupdate20();
break;
}

136

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

case 30:{
current_state=40;

2425

lcdupdate40();
break;
}
case 31:{
if (confman==1){

2430

current_state=32;
manualconf(0);
}
break;
}

2435

case 32:{
manualconf(0);
break;
}
case 33:{

2440

current_state=31;
lcdupdate30();
break;
}
case 40:{

2445

current_state=50;
lcdupdate50();
break;
}
case 50:{

2450

current_state=80;
lcdupdate80();
break;
}
case 41:{

2455

if (conffixed==1){
current_state=42;
lcdupdate40();
}
break;

2460

}
case 43:{
current_state=41;
lcdupdate40();
break;

2465

137

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

case 51:{
if (confauto==1){
current_state=52;
autoconf(0);

2470

}
break;
}
case 52:{
autoconf(3);

2475

autoconf(0);
break;
}
case 53:{
current_state=51;

2480

lcdupdate50();
break;
}
case 81:{
readconf();

2485

current_state=80;
lcdupdate80();
break;
}
case 82:{

2490

writeconf();
current_state=80;
lcdupdate80();
break;
}

2495

case 90:{
current_state=0;
lcdupdate0();
break;
}

2500

}
}

138

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

#separate
void init_circuit(){
//View init

2505

2510

setup_timer_2(T2_DIV_BY_1,40,1);

//LCD contrast, from 1 to 40

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;
lcdupdate0();

//Init system state = 0


//Launch the view

//Communications

2515

2520

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

2525

Mhz/256))=0,064 sec.
set_timer0 (8);

//0,064 sec - 8 cycles * 32 = 2

seconds

2530

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

2535

beep(150);
delay_ms(150);
beep(50);
delay_ms(75);
beep(50);

2540

//System started
}

139

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void main() {

2545

loader16F876();

//Bootloader memory reserved

init_circuit();

//Init the circuit

while (true){

//Infinite loop

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

2550

void printmodule(int pmodule, short pchannel){


switch (pmodule){
case 0x20:{
if (pchannel==0){
printf(lcd_putc,"FA");

2555

}else{
printf(lcd_putc,"Superior");
}
break;
}

2560

case 0x30:{
printf(lcd_putc,"Trasero%i",pchannel+1);
break;
}
case 0x40:{

2565

printf(lcd_putc,"Lateral%i",pchannel+1);
break;
}
case 0x50:{
printf(lcd_putc,"Frontal%i",pchannel+1);

2570

break;
}
case 0x60:{
printf(lcd_putc,"CPU%i",pchannel+1);
break;

2575

}
}
}

140

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

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


//communicate the selected module in commodule

2580

//B0, B1, B2 and B3 configurated as outputs in init_circuit()


void commoduleupdate(){
switch (commodule){
case 0:{
output_high(PIN_B3);

2585

output_high(PIN_B2);
output_high(PIN_B1);
break;

case 1:{
output_low(PIN_B3);

2590

output_low(PIN_B2);
output_low(PIN_B1);
break;

case 2:{
output_low(PIN_B3);

2595

output_low(PIN_B2);
output_high(PIN_B1);
break;

case 3:{
output_low(PIN_B3);

2600

output_high(PIN_B2);
output_low(PIN_B1);
break;

case 4:{
output_low(PIN_B3);

2605

output_high(PIN_B2);
output_high(PIN_B1);
break;

case 5:{
output_high(PIN_B3);

2610

output_low(PIN_B2);
output_low(PIN_B1);
break;

case 6:{
output_high(PIN_B3);

2615

output_low(PIN_B2);
output_high(PIN_B1);
break;

}
}

141

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

2620

142

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

Microcontrolador de la placa modular


/***********************************************
Slave module HM-Baybus system

2625

Manuel Daz Garca


Computer Systems
European University of Madrid
September 2004

2630

More information than comments in:


http://www.microchip.com (for 16F876 info)
http://www.ccsinfo.com (for CCS compiler info)
***********************************************/

2635
#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)

2640

/*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)

2645

/*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

2650

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"

2655

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

2660

//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 dont refresh the data all time in the infinite loop

2665

// of main. The clock interrupt changes the value each 2 seconds


unsigned int16 tach1=0, tach2=0;

143

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//They have the pulses of the tacometer of fans. The clock, when calculate
// the RPM each 2 seconds, assign them 0 again

2670
//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 (){

2675

static i2c_state fstate=NOTHING;


static byte address=0x00;
static byte incoming=0;
if (i2c_poll() == FALSE) {
if (fState == ADDRESS_READ) {

2680

i2c_write (slaveinfos[address]);
fState = NOTHING;
}
}
else {

2685

incoming = i2c_read();
if (fState == NOTHING){
fState = CONTROL_READ;
}else if (fState == CONTROL_READ) {
address = incoming;

2690

fState = ADDRESS_READ;
}else if (fState == ADDRESS_READ) {
slaveinfos[address] = incoming;
fState = NOTHING;
}

2695

}
}
//Method of interrupt by activity in the high pins of port B
//It adds a signal to the pulses of tachometer

2700

#int_rb
void detect_rb_change() {
short enc1;
short enc2;
static short last_enc1=1;

2705

static short last_enc2=1;


enc1 = input(PIN_B5);
enc2 = input(PIN_B6);
if (last_enc1 && !enc1) {tach1++;}
if (last_enc2 && !enc2) {tach2++;}

2710

last_enc1=enc1;
last_enc2=enc2;
}
//Init the module

144

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void initmodule(){

2715

int i;
for (i=0;i<0x08;i++)
slaveinfos[i] = 0;
setup_timer_2(T2_DIV_BY_1,9,1);

//Init values array


//4Mhz, 100 Khz PWM module

//See the datasheet to calculate others duty cycles

2720

2725

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

2730
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);

2735

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

2740
#int_timer0
void timer_0_isr (void) {
static byte timer_0_count = 0;
if (timer_0_count < 31) {

2745

timer_0_count++;
} else {
update = 1;
timer_0_count = 0;

2750

slaveinfos[2]=tach1;

//For calculate RPM1

slaveinfos[3]=tach2;

//For calculate RPM2

tach1=0;
tach2=0;
}
set_timer0 (8);

2755

145

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void updateinfos(){
int temp;
static byte duty1=10,duty2=10,channel=0;

2760

if (duty1!=slaveinfos[0]){

//Static variables

//Verify if the duty1 has been changed

duty1=slaveinfos[0];

//Save the new value

set_pwm1_duty(duty1);

//Init PWM1 (10=100%..0=0%)

}
if (duty2!=slaveinfos[1]){

2765

//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

2770

temp = getadc(0);
printf("Canal 6 I1=%i PWM1=%i\r",temp,slaveinfos[0]);
if (slaveinfos[0]>1 && slaveinfos[2]==0){

//ALARM!!! Its stopped

if (slaveinfos[6]==0){
slaveinfos[6]=1;

2775

} else {
if (slaveinfos[6]==2){
slaveinfos[6]=3;
}
}

2780

}
channel=1;
} else {
slaveinfos[5]=(int8) ((getadc(4)*500)/1024); //Read Temperature channel 4
temp = getadc(2);

2785

printf("Canal 6 I2=%i PWM2=%i\r",temp,slaveinfos[1]);


if (slaveinfos[1]>1 && slaveinfos[3]==0){

//ALARM!!! Its stopped

if (slaveinfos[6]==0){
slaveinfos[6]=2;
} else {

2790

if (slaveinfos[6]==1){
slaveinfos[6]=3;
}
}
}

2795

channel=0;
}
if (slaveinfos[7]==1){ //Signal for reset the CPU (see the functions_hm.h)
delay_ms(500);
resetcpu();

2800

}
}

146

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void main (){


loader16F876();

2805

//Bootloader instruction to reserve memory

initmodule();
delay_ms(2000);
while (TRUE) {
if (update) {
updateinfos();

2810

update = 0;
}
}
}

2815

Librera de funciones
/***********************************************
Functions library HM-Baybus system

2820

Manuel Daz Garca


Computer Systems
European University of Madrid
September 2004

2825

More information than comments in:


http://www.microchip.com (for 16F876 info)
http://www.ccsinfo.com (for CCS compiler info)
***********************************************/

2830
//Definitions of registers 16f876//Initial values
#byte PCL=0x02
#byte FSR=0x04//0x00
#byte INTCON=0x0B//0x00

2835

#byte STATUS=0x03//0x00
#byte TMR0=0x01//0x00
#byte TMR1H=0x0F//0x00
#byte TMR1L=0x0E//0x00
#byte T1CON=0x10//0x00

2840

#byte TMR2=0x11//0x00
#byte PR2=0x92//0xff
#byte T2CON=0x12//0x00
#byte SSPADD=0x93//0x00
#byte SSPSTAT=0x94//0x00

2845

#byte SSPCON=0x14//0x00
#byte SSPCON2=0x91//0x00
#byte SPBRG=0x99//0x00
#byte RCREG=0x1A//0x00

147

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

#byte TXREG=0x19//0x00

2850

#byte TXSTA=0x98//0x02
#byte RCSTA=0x18//0x00
#byte PIR2=0x0D//0x00
#byte PIR1=0x0C//0x00
#byte PIE1=0x8C//0x00

2855

#byte TRISC=0x87//0xff
#byte TRISB=0x86//0xff
#byte TRISA=0x85//0x3f
#byte PORTC=0x07//0x00
#byte PORTB=0x06//0x00

2860

#byte PORTA=0x05//0x00
#bit

i2cen

= 0x14.5 //0x00

/* Method to reset the micro. In a software reset the micro


doesnt recover initial state, then some registers (I2C, RS232)

2865

must be restored to initial values before the reset instruction


See 16F876 datasheet for more information about this registers*/
void resetcpu(){
disable_interrupts(GLOBAL);

2870

2875

delay_ms(50);

// >200ms for downloader sync

FSR

= 0x00;

//

PIR1

= 0x00;

PIR2

= 0x00;

TMR2

= 0x00;

T2CON

= 0x00;

PIE1

= 0x00;

PR2

= 0xff;

clean up special purpose registers

STATUS = 0x00;
TMR0

= 0x00;

INTCON = 0x00;

2880

2885

T1CON

= 0x00;

TMR1L

= 0x00;

TMR1H

= 0x00;

SPBRG

= 0x00;

TXSTA

= 0x02;

RCSTA

= 0x00;

TXREG

= 0x00;

RCREG

= 0x00;

reset_cpu();
}

148

// then jump to reset vector

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

2890
//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;

2895

int32 added=0;
delay_us(300);
set_adc_channel(channel);
for (i=0;i<30;i++){
delay_us(300);

2900

added = added + read_adc();


delay_us(100);
}
return ((int16) (added/30));
}

2905
//Generate sound on a buzzer on pin A4 (open collector)
//Its needed a transistor to give current for micro security
void beep(int time){
output_bit(PIN_a4,0);

2910

delay_ms(time);
output_bit(PIN_a4,1);
}
//It reads a value from a slave I2C device connected to the I2C bus

2915

//Disable all interrupts before use it or when another


//

process can interrupt reading

byte readi2c(byte address, byte pos){


byte out;
i2c_start();

2920

i2c_write(address); //slave can read.


i2c_write(pos);
i2c_start();
i2c_write(address+1); //slave can write.
out = i2c_read(0);

2925

i2c_stop();
return out;
}

149

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//It writes a value in a slave I2C device connected to the I2C bus

2930

//Disable all interrupts before use it or when another


//

process can interrupt writing

writei2c(byte address, byte pos,byte data){


byte out;
i2c_start();

2935

i2c_write(address); //slave can read.


i2c_write(pos);
i2c_write(data);
i2c_stop();
return out;

2940

150

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

Librera de rutinas del LCD


//-----------------------------------------------------------------------------

2945

// Title:

lcd4_i2c.c

// Description:

Driver for common LCD 4 row modules using I2C protocol.

// Date:

May-2002

// Ver.Rev.:

1.1

// Author:

XP8100 (blixenonline@terra.es) #Based on the routines LCD.C from

CCS#

2950

// Modified:

To HM-Baybus Project by Manuel Daz

//----------------------------------------------------------------------------//
// lcd_init() Must be called before any other function.
//

2955

// lcd_putc(c) Will display c on the next position of the LCD.


// The following have special meaning:

2960

//

\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.

2965

//----------------------------------------------------------------------------//
// Commment

2970

: 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:
//

2975

2980

2985

//

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'

151

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

//-----------------------------------------------------------------------------

2990

#define lcd_type 2

// 0=5x7, 1=5x10, 2=2 lines

#define lcd_line_two 0x40

// LCD RAM address for the second line

#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

// I2C addr for i/o expander PCF8574P

0x70

2995
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.

3000
void lcd_send_nibble( byte n, byte type ) {
switch (type) {
case 'C' :
i2c_write(n << 4);

3005

delay_cycles(1);
i2c_write(n << 4 | 0x01);
delay_us(2);
i2c_write(n << 4 & 0xFE);
break;

3010

case 'D' :
i2c_write(n << 4 | 0x02);
delay_cycles(1);
i2c_write(n << 4 | 0x03);
delay_us(2);

3015

i2c_write(n << 4 & 0x02);


break;
}
}

3020

void lcd_send_byte( byte n, byte type ) {


delay_ms(1);
lcd_send_nibble(n >> 4, type);
lcd_send_nibble(n & 0xf, type);
}

3025

152

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

void lcd_init() {
byte i;
i2c_start();

3030

i2c_write(IOE_ADDR);
lcd_send_nibble(0, 'C');
delay_ms(15);
for (i=1;i<=3;++i)

lcd_send_nibble(3, 'C');

3035

delay_ms(5);
}
lcd_send_nibble(2, 'C');
delay_ms(5);
for (i=0;i<=3;++i)

3040

lcd_send_byte(LCD_INIT_STRING[i], 'C');
}
i2c_stop();
}

3045

void lcd_gotoxy( byte x, byte y) {


i2c_start();
i2c_write(IOE_ADDR);
switch(y){
case 1: address= 00; break;

3050

case 2: address= lcd_line_two; break;


//

case 3: address= lcd_line_three; break;


default: address= 00; break;

//

default: address= lcd_line_four; break;


}

3055

address+=x-1;
lcd_send_byte(0x80|address, 'C');
i2c_stop();
}

3060

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;

3065

default : address= 00; break;


}*/
address= lcd_line_two;
lcd_send_byte(0x80|address, 'C');
}

153

Sistema de regulacin de temperaturas con microcontroladores


Cdigo fuente

3070

void lcd_putc( char c) {


i2c_start();
i2c_write(IOE_ADDR);
switch (c) {
case '\f' : lcd_send_byte(1, 'C');

3075

delay_ms(2);
break;
case '\n' : lcd_gotonl(); break;
case '\b' : lcd_send_byte(0x10, 'C'); break;
default : lcd_send_byte(c, 'D'); break;

3080

}
i2c_stop();

154

You might also like