Professional Documents
Culture Documents
de temperaturas con
microcontroladores
Proyecto fin de carrera
Ingeniera Informtica
2003-2004
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]
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.
ii
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
iv
Agradecimientos
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.
vi
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 .................................................................................................................. 3
2.2
Especificacin .............................................................................................................. 5
2.2.1 Requisitos de usuario ....................................................................................... 5
2.2.2 Requisitos de sistema..................................................................................... 13
2.3 mbito............................................................................................................................ 19
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
5.3
Pruebas lgicas........................................................................................................... 96
vii
6.2
Conclusiones ............................................................................................................103
Evolutivos................................................................................................ 104
Definiciones............................................................................................. 106
8.1
Trminos...................................................................................................................106
8.2
Acrnimos ................................................................................................................108
8.3
Abreviaturas .............................................................................................................110
Referencias.............................................................................................. 112
viii
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
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
xii
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.
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
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
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
65
70
2.1
75
80
85
90
95
100
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.
105
110
115
120
2.2
Especificacin
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
REQU-04 Actuacin
Descripcin
Importancia
Negociable
Estabilidad
Total
Verificabilidad
Identificador
REQU-05 Actuador
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Prioridad
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Total
Prioridad
Prioridad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Total
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Prioridad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Identificador
REQU-17 Alarma
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Prioridad
Prioridad
Prioridad
10
Identificador
REQU-18 Ahorro
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Identificador
REQU-20 Emergencia
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Prioridad
11
12
Identificador
REQU-21 Dimensiones
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
REQU-22 Seguridad
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
REQU-23 Coste
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Prioridad
Prioridad
Prioridad
Identificador
REQS-01 Alimentacin
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Prioridad
Prioridad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Prioridad
13
14
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Identificador
Descripcin
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Activar
Identificador
REQS-06 Inmunidad
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
Prioridad
Prioridad
Prioridad
Identificador
REQS-07 Aislamiento
Descripcin
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Identificador
REQS-08 Robustez
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
Prioridad
Identificador
REQS-09 Eficiencia
Descripcin
Importancia
Negociable
Estabilidad
Total
Prioridad
15
Identificador
REQS-10 Ayuda
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Prioridad
Identificador
REQS-11 Actualizacin
Descripcin
Importancia
Esencial
Estabilidad
Total
Prioridad
16
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
Prioridad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Sujeto a cambios
Prioridad
Prioridad
Identificador
REQS-15 Sonido
Descripcin
Importancia
Negociable
Estabilidad
Total
Verificabilidad
Prioridad
17
18
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Total
Verificabilidad
Identificador
Descripcin
Importancia
Negociable
Estabilidad
Total
Verificabilidad
Prioridad
Prioridad
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
130
135
140
19
20
3
145
150
155
160
21
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 *
* 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
175
22
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.
205
23
210
215
220
24
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
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
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
265
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
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
290
Grfico 6: Distintos ciclos de trabajo de un PWM
295
300
305
310
315
27
320
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
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
345
350
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
375
380
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
395
400
30
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
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
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
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
430
31
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
450
455
460
32
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
33
480
485
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
34
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
555
35
560
565
570
575
580
585
36
595
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.
37
610
615
620
625
Grfico 16: Patillaje de un MAX233A
630
635
38
645
39
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
665
670
40
41
42
43
44
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
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
725
En las siguientes pginas se pueden ver los dos diseos de las placas principal y
modular.
46
47
48
49
50
51
52
53
54
55
56
57
58
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
59
735
Grfico 29: Placa de pruebas con placa modular integrada
740
745
60
755
61
760
62
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
63
775
Grfico 36: Conectores para la interfaz (entrada, salida)
780
64
785
790
65
795
Grfico 40: Soldaduras de la placa modular
800
66
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.
810
Grfico 42: Diagrama de casos de uso
67
Identificador
CU-01 Encender/Apagar
Objetivo
Actor/es
Usuario
2)
Flujo principal
Flujos
alternativos
Poscondicione
s
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
Poscondicione
s
68
2)
Identificador
Objetivo
Actor/es
Usuario
2)
1)
2)
Flujo principal
Flujos
alternativos
Poscondicione
s
Ninguna
Identificador
Objetivo
Actor/es
Usuario
2)
1)
2)
Flujo principal
Flujos
alternativos
Poscondicione
s
Ninguna
69
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
1)
2)
Poscondicione
s
Ninguna
Identificador
Objetivo
Actor/es
Usuario
2)
1)
2)
Flujo principal
Flujos
alternativos
Poscondicione
s
70
Ninguna
Poscondicione
s
Ninguna
Flujos
alternativos
Poscondicione
s
2)
Ninguna
71
Poscondicione
s
Identificador
Objetivo
Actor/es
Ninguna
2)
3)
Flujos
alternativos
Poscondicione
s
72
1)
2)
Identificador
Objetivo
Actor/es
2)
3)
Flujos
alternativos
1)
2)
Poscondicione
s
Identificador
Objetivo
Actor/es
2)
3)
Flujos
alternativos
Poscondicione
s
1)
2)
73
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
2)
3)
1)
2)
Poscondicione
s
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
Poscondicione
s
74
2)
3)
1)
2)
Identificador
Objetivo
Actor/es
Usuario
2)
2)
Flujos
alternativos
Poscondicione
s
Ninguna
Identificador
Objetivo
Actor/es
Usuario
1)
2)
Flujos
alternativos
Poscondicione
s
75
Identificador
Objetivo
Actor/es
Usuario
1)
2)
Flujos
alternativos
Poscondicione
s
Identificador
Objetivo
Actor/es
Usuario
Precondiciones
Flujo principal
2)
2)
Flujos
alternativos
Poscondicione
s
76
Identificador
Objetivo
Actor/es
Usuario
Precondiciones
Flujo principal
Flujos
alternativos
2)
1)
2)
Poscondicione
s
Identificador
Objetivo
Actor/es
Usuario
Precondiciones
Flujo principal
2)
Poscondicione
s
1)
2)
77
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
1)
1)
2)
1)
Poscondicione
s
Identificador
Objetivo
Actor/es
Usuario
Flujos
alternativos
Poscondicione
s
78
1)
1)
2)
79
870
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
890
895
80
900
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
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
930
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
I2 C
950
955
960
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.
83
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
84
990
995
1000
1005
1010
1015
1020
85
Posicin en el array
PWM canal 1
PWM canal 2
RPM canal 1
RPM canal 2
Temperatura canal 1
Temperatura canal 2
Alarma
Reset
1025
86
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.
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.
1040
1045
87
1050
1055
1060
1065
1070
1075
1080
1085
88
89
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
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
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
Pruebas
5.1
1120
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
1135
92
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
1145
1150
93
1155
94
5.2
Pruebas fsicas
En las pruebas fsicas se ha comprobado el cumplimiento de todas las
especificaciones del sistema a nivel fsico.
1160
1165
Grfico 53: Sistema instalado completamente
95
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
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
1190
96
1195
97
98
99
100
1200
Esta ltima grfica se ha realizado, con ventilacin constante, para comprobar que
el sistema controlado no es estrictamente lineal. Tiene muchas perturbaciones.
1205
1210
101
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
1220
1225
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
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
103
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
104
105
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
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
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
8.2
Acrnimos
BCD
1340
0
1
2
3
4
0101
0110
0111
1000
1001
5
6
7
8
9
CA
Corriente alterna
1345
CC
Corriente continua
CERN
European Laboratory for Particle Physics
CFM
1350
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
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
109
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
111
Referencias
[1]
[2]
[3]
[4]
[5]
[6]
[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
1420
[11]
PIC Downloader
http://www.ehl.cz/pic/pic_e.htm
113
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
1440
1445
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
114
1465
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
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
1490
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
115
//This method does the control when the configuration auto is enabled
1510
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
1545
if (loop==0){
set_pwm1_duty(0);
loop=1;
}else{
set_pwm1_duty(-1); //LCD bright off
1550
loop=0;
}
beep(150);
1555
delay_ms(250);
116
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();
lcdcontrastupdate();
}
}
enable_interrupts(int_rb);
1570
}
//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
1590
117
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){
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
1635
secuentialview();
1640
if (confauto==1){
118
if(timer_auto<5){
timer_auto++;
} else {
timer_auto=0;
1645
1650
}
set_timer0 (8);
}
//Interrupt detects changes on PortB
1655
#int_rb
void detect_rb_change() {
short b4,b5,b6,b7;
//last 4 lines
1660
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);
1680
1685
//Changes the value of all channels in the system with the values saved
// in confmanvalues
119
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
1725
break;
}
}
}
1730
void lcdupdate20(){
switch(current_state){
case 20:{
120
1735
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
1760
1765
}
case 32:{
break;
}
case 33:{
1770
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
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
122
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
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
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
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
//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
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
//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
Disco"};
2000
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
2025
2030
temp2 =
///
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 (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);
//
(int8)((getadc(1)*500)/1024), temp1,error,temperatures[temp1],temp2,temp3);
128
2070
}
}
}
//The methods of buttons define the machine states and call to the methods
2075
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
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
2155
130
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
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
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
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
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
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
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
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
#separate
void init_circuit(){
//View init
2505
2510
setup_timer_2(T2_DIV_BY_1,40,1);
setup_ccp1(CCP_PWM);
//PWM1 RC2
setup_ccp2(CCP_PWM);
//PWM2 RC1
lcdbrightupdate();
lcdcontrastupdate();
lcd_init();
//Controller init
current_state=0;
lcdupdate0();
//Communications
2515
2520
commodule = 0;
commoduleupdate();
resetmodule = 0;
readconf();
set_tris_A(0x2F);
setup_port_a(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_DIV_32);
2525
Mhz/256))=0,064 sec.
set_timer0 (8);
seconds
2530
current_button=NONE;
set_tris_b(0xF0);
ext_int_edge(L_TO_H);
enable_interrupts(INT_RB);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
//Sound test
2535
beep(150);
delay_ms(150);
beep(50);
delay_ms(75);
beep(50);
2540
//System started
}
139
void main() {
2545
loader16F876();
init_circuit();
while (true){
//Infinite loop
}
}
//It prints in LCD the name of the (module, channel)
2550
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
2580
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
2620
142
2625
2630
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
2645
2650
2655
2660
2665
143
//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
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
2710
last_enc1=enc1;
last_enc2=enc2;
}
//Init the module
144
void initmodule(){
2715
int i;
for (i=0;i<0x08;i++)
slaveinfos[i] = 0;
setup_timer_2(T2_DIV_BY_1,9,1);
2720
2725
output_high(PIN_C1);
output_high(PIN_C2);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
slaveinfos[0]=10;
slaveinfos[1]=10;
set_tris_A(0x2F);
setup_adc_ports(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_DIV_32);
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);
enable_interrupts(INT_RB);
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
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;
slaveinfos[3]=tach2;
tach1=0;
tach2=0;
}
set_timer0 (8);
2755
145
void updateinfos(){
int temp;
static byte duty1=10,duty2=10,channel=0;
2760
if (duty1!=slaveinfos[0]){
//Static variables
duty1=slaveinfos[0];
set_pwm1_duty(duty1);
}
if (duty2!=slaveinfos[1]){
2765
duty2=slaveinfos[1];
set_pwm2_duty(duty2);
}
if (channel==0){
2770
temp = getadc(0);
printf("Canal 6 I1=%i PWM1=%i\r",temp,slaveinfos[0]);
if (slaveinfos[0]>1 && slaveinfos[2]==0){
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
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
2805
initmodule();
delay_ms(2000);
while (TRUE) {
if (update) {
updateinfos();
2810
update = 0;
}
}
}
2815
Librera de funciones
/***********************************************
Functions library HM-Baybus system
2820
2825
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
#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
2865
2870
2875
delay_ms(50);
FSR
= 0x00;
//
PIR1
= 0x00;
PIR2
= 0x00;
TMR2
= 0x00;
T2CON
= 0x00;
PIE1
= 0x00;
PR2
= 0xff;
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
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
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
2920
2925
i2c_stop();
return out;
}
149
//It writes a value in a slave I2C device connected to the I2C bus
2930
2935
2940
150
2945
// Title:
lcd4_i2c.c
// Description:
// Date:
May-2002
// Ver.Rev.:
1.1
// Author:
CCS#
2950
// Modified:
//----------------------------------------------------------------------------//
// lcd_init() Must be called before any other function.
//
2955
2960
//
\f Clear display
//
//
//
//
//
//----------------------------------------------------------------------------// LCD pins D0-D3 are not used.
2965
//----------------------------------------------------------------------------//
// Commment
2970
//
//
//
//
//
// 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
//-----------------------------------------------------------------------------
2990
#define lcd_type 2
#define IOE_ADDR
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
3020
3025
152
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
3050
//
3055
address+=x-1;
lcd_send_byte(0x80|address, 'C');
i2c_stop();
}
3060
switch(address){
case 00 : address= lcd_line_two; break;
//
//
3065
153
3070
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