Sistema de regulación de temperaturas con microcontroladores Proyecto fin de carrera Ingeniería Informática 2003-2004
Manuel Díaz García
Dirigido por:
D. Lino García Morales D. Antonio Cala Hurtado
Universidad Europea de Madrid
A mis padres y a mis hermanos, sois los verdaderos artífices de este proyecto
Este documento ha sido preparado usando las plantillas del CERN CERN PSS-05. PSS-05. Las plantillas del CERN PSS-05 han sido preparadas por el Grupo de Tecnología de Información y Programación (división ECP), CERN (Laboratorio Europeo de Física de Partículas) y conforme al estándar de Ingeniería del Software PSS-05 (ISBN 0-13-106568-8) definido por ESA ESA (Agencia Espacial Europea) BSSC (Junta para la Estandarización y Control de Software). This document has been prepared using the CERN PSS-05 Templates. The CERN PSS-05 Templates have been prepared by the Information and Programming Technology Group, ECP Division, CERN (The European Laboratory for Particle Physics) and conform to the PSS-05 Software Engineering Standards (ISBN 0-13-106568-8) defined by ESA (European Space Agency) BSSC (Board for Software Standardization and Control).[9.1]
Sistema de regulación de temperaturas con microcontroladores
Resumen Este sistema regulará temperaturas usando microcontroladores en un entorno acotado. El objetivo fundamental de la regulación es obtener un equilibrio entre la temperatura, nivel de presión sonora y el consumo de los equipos de ventilación actuales. El sistema de regulación se realizará de manera tal que la integración en el entorno acotado no interfiera en su correcto y seguro funcionamiento. f uncionamiento. Los ventiladores estándares (DC 12 v.) y la familia de microcontroladores PIC son candidatos óptimos para la regulación de temperatura por sus cualidades y nivel de integración que ofrecen. En la fase inicial se investigarán; diferentes sistemas de adquisición de temperaturas, modelos de control fácilmente integrables en esta arquitectura y métodos de actuación sobre ventiladores. El objetivo final es el desarrollo y puesta a punto de un sistema en tiempo real que cumpla los requisitos impuestos. Usando ventiladores se debe tener en cuenta que la ventilación no refrigera, sólo disipa calor. Por ello se deben controlar las variables que faciliten dicha disipación; temperatura del espacio acotado o componente generador de calor, la velocidad del elemento de ventilación que influencia en ese espacio acotado, que es directamente proporcional al flujo de aire que disipará el calor, y el punto de operación definido por el usuario en función función de sus necesidades necesidades particulares. Este sistema está destinado tanto a profesionales del sector o grandes empresas industriales que deseen una regulación de temperaturas en espacios acotados y definidos, como al gran público que es entusiasta del mantenimiento de los PCs (cuyo uno de los principales problemas hoy en día es el calor). Este gran público, por regla general, no posee mucha formación en el ámbito informático y/o electrónico, y la mayoría sin mucho poder adquisitivo, por lo que la línea de investigación dará mucho peso a los factores de coste, facilidad de realización, disponibilidad de materiales necesarios y versatilidad del sistema, dado que tiene que responder a muchas necesidades distintas (tipos de ventiladores, número y diferencias de componentes, flujos de aire de los distintos habitáculos, ...), aunque con con unas finalidades finalidades comunes. comunes.
i
Sistema de regulación de temperaturas con microcontroladores
ii
Sistema de regulación de temperaturas con microcontroladores
Summary Temperatures will be regulated thanks to the system concerning by using microcontrollers in an annotated surrounding. The fundamental regulation finality is obtaining equilibrium among the temperature, sonorous pressure level and the consumption of the present day ventilation equipment. Regulation system will be done in a way so annotated surrounding integration does not interfere with its correct and safe functioning. Standard fans and PIC microcontroller family are optimum candidates for temperature regulation because of the qualities and integration level they offer. In the beginning period it will be studied different systems of temperature acquisitions, control models easy to be integrated in this architecture and performance methods on ventilators. The final mission is a system development in real time that fulfils the requirements imposed. While using ventilators, it has to bear in mind that ventilation does not refrigerate, it only dissipates heat. This is why variables that make easy dissipation have to be controlled. Those variables are: temperature of annotated space or components that generates heat, ventilation element velocity that influences in the annotated surrounding (directly proportional to the air flow that will dissipate the heat) and the operation point defined by the user in relation with his particular necessities. This system is destined both sector sector professionals or large industrial industrial enterprises who desire temperature regulations in an annotated surrounding and great public who is enthusiastic about the maintenance maintenance of their PC´s (as one of the principal problems 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 regulación de temperaturas con microcontroladores
iv
Sistema de regulación de temperaturas con microcontroladores
Agradecimientos
Quiero agradecer su ayuda a todas t odas aquellas personas que más o menos me han facilitado el camino para que este proyecto llegara a buen fin.
A mis directores de proyecto, que siempre me pedían más, a ellos les debo que me exija un poco más cada día, no sólo con este proyecto. Gracias. A profesores de la Universidad Europea de Madrid, que de manera totalmente desinteresada y perdiendo parte de su tiempo me han enseñado infinidad de cosas, ayudándome y guiándome: Diego Gachet, Fernando Berenguer y Diego Galar. A mis compañeros, que estoicamente soportaban disertaciones sobre PWM, por haberme acompañado acompañado en el camino, por compartir buenos y malos momentos. A toda la gente de www.hardcore-modding.com www.hardcore-modding.com,, no sólo resultasteis de inspiración, sino también de compañía y ayuda en muchos momentos difíciles en que no se lograba ver la luz. Especialmente a Teo, Ygg, Canelo y Autist. A muchas otras personas que con pequeños detalles y ayudas puntuales me han evitado muchos dolores de cabeza en la realización de este proyecto, especialmente a Pupe, Pilar, Kurt, Miguel, Conrado, Chema, Isabel y Alberto.
A todos vosotros, y a todos los que me haya podido dejar por descuido en el tintero, muchísimas gracias, este proyecto es para vosotros.
v
Sistema de regulación de temperaturas con microcontroladores
vi
Sistema de regulación de temperaturas con microcontroladores
Lista de Contenidos Resumen................. Resumen............................ ....................... ........................ ....................... ....................... ........................ ....................... ....................... .............. i Summary......... Summary.................... ....................... ....................... ....................... ....................... ....................... ....................... ....................... .................... ........ iii Agradecim Agradecimientos.................. ientos............................. ....................... ....................... ....................... ....................... ....................... ...................... .......... v Lista de Contenidos......... Contenidos..................... ....................... ...................... ....................... ....................... ...................... ...................... ............. .. vii Lista de Ilustracion Ilustraciones es ........... ...................... ...................... ....................... ....................... ...................... ....................... ..................... ......... ix Lista de Tablas Tablas ............ ....................... ...................... ....................... ....................... ...................... ...................... ....................... .................... ........ xi 1 Introducción........... Introducción....................... ....................... ...................... ....................... ....................... ...................... ...................... ................. ...... 1 1.1
2
Organización de la memoria.........................................................................................2
Descripci Descripción ón del problema.................. problema............................. ....................... ....................... ...................... ...................... ........... 3 2.1
Descripción ...................................................................... .................................................................................................................. ............................................33
2.2
Especificación ...................................................................... .............................................................................................................. ........................................55 2.2.1 Requisitos de usuario.......................................................................................5 2.2.2 Requisitos de sistema.....................................................................................13
2.3 Ámbito............................................................................................................................19
3 4
5
Estado Estado del arte........................... arte....................................... ....................... ....................... ....................... ....................... ................. ..... 21 Solución Solución propuesta propuesta........... ...................... ....................... ....................... ....................... ....................... ....................... .............. .. 25 4.1
Descripción ...................................................................... ................................................................................................................ ..........................................25 25
4.2
Hardware....................................................................................................................26 4.2.1 Regulación de velocidad en motores DC.......................................................26 4.2.2 Microcontroladores........................................................................................30 4.2.3 Microcontrolador 16F876..............................................................................32 4.2.4 Interfaz de usuario ............................................................... ......................................................................................... .......................... 35 4.2.5 Adquisición de datos......................................................................................38 4.2.6 Conjunto ................................................................... ........................................................................................................ .....................................40 40 4.2.7 Prototipo hardware final ............................................................. ................................................................................ ...................61 61
4.3
Software ............................................................................. ..................................................................................................................... ........................................67 67 4.3.1 Casos de uso...................................................................................................67 4.3.2 Flujo de datos.................................................................................................79 4.3.3 Programación del 16F876..............................................................................80 4.3.4 Estructura del programa.................................................................................84 4.3.5 Algoritmo de control......................................................................................87
4.4
Presupuesto ......................................................................... ................................................................................................................ .......................................90 90
Pruebas Pruebas ........... ...................... ....................... ....................... ....................... ....................... ....................... ....................... ..................... .......... 92 5.1 Definición del sistema de pruebas..................................................................................92 5.2
Pruebas físicas............................................................................................................95
5.3
Pruebas lógicas...........................................................................................................96
vii
Sistema de regulación de temperaturas con microcontroladores
6
7 8
Discusión Discusión y conclusion conclusiones es ........... ...................... ....................... ....................... ....................... ....................... ............. ..102 102 6.1
Discusión de resultados ............................................................... ............................................................................................102 .............................102
6.2
Conclusiones ............................................................................. ............................................................................................................103 ...............................103
Evolutivos.............. Evolutivos.......................... ....................... ...................... ....................... ....................... ...................... ...................... .............. ...104 104 Definiciones.............................................................................................106 8.1
Términos...................................................................................................................106
8.2
Acrónimos .................................................................... ................................................................................................................108 ............................................108
8.3
Abreviaturas ............................................................... .............................................................................................................110 ..............................................110
9 Referencias..............................................................................................112 Apéndice Apéndice A........................... A...................................... ....................... ....................... ....................... ....................... ....................... ................... .......114 114 Código fuente........................................................................ fuente......................................................................................................................114 ..............................................114
viii
Sistema de regulación de temperaturas con microcontroladores
Lista de Ilustraciones Gráfico 1: Relación Relación entre potencia potencia consumida y temperatura temperatura .......................... ................. 4 Grafico 2: Digital Doc 5+..................................................................................................21 Gráfico 3: Vantec Vortex..................................................................................................21 Gráfico 4: CoolerMaster AeroGate III ........................... ............................ ....................... 21 Gráfico 5: Esquema de funcionamiento funcionamiento del TC646 de Microchip...... Microchip................................. ........................... ... 23 Gráfico 6: Distintos ciclos de trabajo de un PWM............................................................27 Gráfico 7: PWM a partir partir de comparadores comparadores ......................... ............................. ................ 28 Gráfico 8: Diagrama de un sistema microcontrolado.......................................................28 Gráfico 9: Configuraciones Configuraciones del controlador controlador de motores motores DC, L293B.......................... L293B .......................... ...... 30 Gráfico 10: Diagrama Diagrama por por bloques de un microcontrolador microcontrolador ........................... .................. 30 Gráfico 11: Arquitectura Harvard ......................... ............................ ............................ .... 33 Gráfico 12: Patillaje del microcontrolador microcontrolador Microchip Microchip 16F876..................................... ...... 33 Gráfico 13: Patillaje del PCF8574....................................................................................36 Gráfico 14: Dimensiones del LCD DV24200....................................................................37 Gráfico 15: Patillaje de un MAX233A...............................................................................37 Gráfico 16: Patillaje de un MAX233A...............................................................................38 Gráfico 17: Circuito Circuito protector de LM35 LM35 ............................ ............................. ................... 39 Gráfico 18: Esquema Esquema eléctrico eléctrico de la placa principal principal ......................... .......................... ..... 41 Gráfico 19: 19: Esquema Esquema eléctrico eléctrico de la placa placa modular modular ......................... ........................... .... 43 Gráfico 20: Taladros Taladros y componentes componentes de de la placa principal .......................... .................... 47 Gráfico 21: Fotolito placa principal, capa superior...........................................................49 Gráfico 22: Fotolito placa principal capa inferior..............................................................51 Gráfico 23: Taladros y componentes componentes de la placa modular................ modular................ ........................... .... 53 Gráfico 24: 24: Fotolito placa modular capa superior superior ......................... ........................... ........ 55 Gráfico 25: Fotolito placa principal capa inferior............ .......................... ....................... 57 Gráfico 26: Placa modular ........................... ............................ ............................ ............ 59 Gráfico 27: Placa modular montada y testeada...............................................................59
ix
Sistema de regulación de temperaturas con microcontroladores
Gráfico 28: Placa principal montada y testeada...............................................................59 Gráfico 29: Placa de pruebas con placa placa modular integrada integrada ....................... .....................60 Gráfico 30: Empaquetado industrial de las pcb necesarias para el sistema....................61 Gráfico 31: Componentes de la interfaz de usuario.........................................................62 Gráfico 32: Interfaz Interfaz de usuario usuario montada en el frontal ......................... ........................... ..62 Gráfico 33: Parte Parte trasera trasera del frontal ........................... ............................ .......................... 62 Gráfico 34: Sistema Sistema completo completo montado ......................... ............................ ......................63 Gráfico 35: Módulo de sonido y regulador de voltaje.......................................................63 Gráfico 36: Conectores para la interfaz (entrada, (entrada, salida) salida) ........................ ........................ 64 Gráfico 37: MAX233 y los dos demultiplexores.......................................... demultiplexores.......................................... ......................64 Gráfico 38: Conectores externos generales generales del del sistema .......................... ....................... 65 Gráfico 39: Placa Placa modular modular completa .......................... ............................ .......................... 65 Gráfico 40: Soldaduras de la placa modular modular ......................... ........................... ................66 Gráfico 41: Prototipo hardware final.................................................................................66 Gráfico 42: Diagrama de casos de uso............................................................................67 Gráfico 43: Diagrama de flujo de datos............................................................................79 Gráfico 44: Downloader Downloader a bootloader de Petr Kolomaznik Kolomaznik ............................ ..................81 Gráfico 45: Protocolo I2C..................................................................................................83 Gráfico 46: Estructura del software del sistema...............................................................84 Gráfico 47: Esquema de control típico sobre procesos ........................... ........................ 87 Gráfico 48: Esquema de control con software embebido ........................ ........................ 87 Gráfico 49: 49: Caja Caja ATX Casetek 1019 ........................ ............................ ........................... .92 Gráfico 50: Modificación de cableado cableado de ventilador ........................ ............................ ....93 Gráfico 51: Sonda Sonda en el disipador de de los procesadores procesadores ....................... .......................... .94 Gráfico 52: Sonda en el chasis del disco duro superior...................................................94 Gráfico 53: Sistema instalado completamente.................................................................95 Gráfico 54: Valores Valores tridimensionales tridimensionales de sonoridad del sistema .......................... ............96
x
Sistema de regulación de temperaturas con microcontroladores
Lista de Tablas Tabla 1: Comparativa entre entre sistemas comerciales comerciales de regulación de ventiladores ventiladores .......... 22 Tabla 2: Comparativa Comparativa de de microcontroladores microcontroladores ............................ ............................ .......... 31 Tabla 3: Estructura Estructura de almacenamiento almacenamiento de datos .......................... ........................... ...... 86 Tabla 4: Características Características del Enermax UC-8FAB ........................... ............................ ...... 93 Tabla 5: Voltajes CMOS ............................ ............................ ............................ ............ 107 Tabla 6: Sistema de numeración BCD...........................................................................108
xi
Sistema de regulación de temperaturas con microcontroladores
xii
Sistema de regulación de temperaturas con microcontroladores Introducción
1
5
10
15
20
25
30
35
Introducción La idea de este sistema nació a partir de la necesidad de poder mantener un servidor en condiciones físicas óptimas de funcionamiento de manera desatendida, ofreciendo un compromiso entre el consumo de los medios de disipación del calor, así como sus sus alteraciones al medio medio que los rodea, rodea, y el respeto a la integridad del hardware que mantiene a temperaturas seguras de funcionamiento. Este concepto planteaba varias cuestiones. cuestiones. El sistema debería saber que tipo de componente o naturaleza del espacio acotado regula en cada momento, conociendo todas sus variables necesarias para dicha regulación. Algunas de ellas las debería tomar en tiempo real, como la cantidad de aire que suministra por medio del control de la velocidad del ventilador o la temperatura del componente o espacio generador de calor; pero otras las tenía que tener almacenadas previamente, como la temperatura de funcionamiento óptima de ese espacio regulado. De momento, el sistema ya debe contar con algún tipo de memoria interna, tener distintos tipos de sensores o elementos de medición para la temperatura y para el flujo de aire, y además el usuario debe conocer qué temperatura debe marcar para cada espacio acotado regulado en concreto. Normalmente los sistemas generadores de calor no tienen una temperatura específica para funcionar, sino que sus fabricantes definen un rango de temperaturas donde aseguran que el componente tiene un comportamiento estable y no corre riesgo físico de deterioro. Ese rango debe conocerlo el usuario y memorizar en el sistema regulador que punto de control desea para ese espacio acotado en concreto en función de sus necesidades. La introducción de datos por parte del usuario genera nuevas necesidades. Se precisa de una (al menos) interfaz de usuario para poder introducirle los datos y para poder ver los datos que tiene introducidos. Además el sistema debería tener algún sistema para poder comunicarse con el usuario sin una intervención inmediata (por ejemplo para avisar de algún tipo de alarma). Cada nueva necesidad genera nuevas opciones, toma de decisiones, valoraciones de integración de nuevos componentes en el sistema, pruebas de estos y efectos colaterales sobre los elementos ya existentes. Esta memoria describirá todo el proceso de desarrollo del sistema. Desde su nacimiento como idea, las pruebas de un prototipo integrado en una producción real, distintas posibilidades a las decisiones tomadas, hasta la discusión de los resultados obtenidos mostrando posibles evolutivos al sistema desarrollado.
1
Sistema de regulación de temperaturas con microcontroladores Introducción
1.1
Organización de la memoria En primer lugar, se describe en profundidad el problema mostrando las necesidades claras y unívocas que tiene el sistema. Con ellas se definen los requisitos de usuario, a partir de los cuales, teniendo en cuenta las restricciones que marcan los objetivos principales del sistema, se definen los requisitos del sistema. Una vez definidos los requisitos se realiza una especificación completa del sistema, expresando claramente sus funcionalidades y su alcance; qué hace y qué no hace.
40
Tras la especificación del producto, se muestra un breve estado del arte en la actualidad. No sólo del producto definido en comparación con otros que tengan similar definición, sino también de las tecnologías que se pueden usar en el sistema para cumplir las especificaciones especificaciones definidas.
45
Una vez vistas las distintas opciones y las posibles soluciones existentes en la actualidad al problema, se detalla la solución propuesta. Cómo se llega a ella, razones de las decisiones tomadas, diagramas de estados, de flujo y de casos de uso del sistema. Después y a partir del análisis realizado se diseña un prototipo. Con este diseño se procede a la realización física del prototipo para su entrada en pruebas.
50
En la siguiente parte se detalla el montaje e instalación del prototipo, con su manual de usuario, así como las pruebas realizadas con él comprobando que se cumplen los requisitos del sistema definido.
55
Estas pruebas producen unos resultados que se evalúan comprobando que el sistema cumple los requisitos definidos llegando el objetivo marcado. Los resultados se discuten, explicando efectos no esperados así como razonando los sí esperados o sus posibles desviaciones. A partir de la discusión de las pruebas se realizan conclusiones sobre el sistema, abriendo nuevos caminos a posibles ampliaciones futuras, mostrando qué aspectos, funcionalidades o soluciones que exceden del ámbito de este sistema serían interesantes de integrar o colaborar con él.
60
Para terminar se muestra la relación de las referencias, definiciones y acrónimos usados en el documento, así como diversa información relevante ordenada en los distintos apéndices.
65
La memoria tiene una numeración de líneas en sus márgenes para favorecer la referenciación desde otros documentos, publicaciones o citas.
2
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
2
En este capítulo se describirá en detalle el problema en concreto. El usuario marca una serie de funcionalidades que desea que tenga el producto, definiendo sus requisitos y restricciones, los cuales marcarán los requisitos del sistema.
70
2.1 75
80
85
90
95
100
Descripción del problema
Descripción La temperatura generada por los componentes electrónicos es, en la mayoría de los casos, un problema a resolver por los fabricantes del sistema en cuestión. Para ello el producto incluye rejillas de ventilación, disipadores, ventiladores, equipos de refrigeración… Su misión es ofrecer un producto que se mantenga en las condiciones de trabajo óptimas. Un usuario cuando compra piezas para realizar un producto a su medida, debe realizar ese mismo trabajo, para asegurar que todas van a trabajar en condiciones óptimas, usando las especificaciones que ofrece el fabricante. En la mayoría de los casos, un usuario normal, no dispone de medios para asegurar un entorno libre de ruidos que aseguren unas constantes en dichas condiciones, por ello se deben regular según las necesidades en tiempo real. Para no tener que regular en tiempo real habitualmente se sobredimensionan los medios para mantener los componentes dentro de su rango de funcionamiento contando con un margen normal de operación. Por ejemplo, no se usa el mismo margen para un producto destinado a estar al aire libre que para estar en el interior de un edificio. El sobredimensionar los medios evita la necesidad de realizar cambios en tiempo real, genera productos versátiles y de sencillo manejo e instalación. Al ser sencillos y versátiles, su producción en serie los abarata haciéndolos todavía más populares. Lo que no se suele tener en cuenta cuando se sobredimensiona sobredimensiona una solución para un problema de calentamiento son los costes producidos a largo plazo. Continuamente se está gastando el máximo de energía para disipar un calor del que no se conoce el valor, ni se conoce la necesidad de disipación. Continuamente el elemento que disipa el calor está trabajando al cien por ciento, acortando así su esperanza de vida. Continuamente, en la mayoría de los casos, el elemento disipador está produciendo ruidos en el entorno. Continuamente se está suponiendo que se necesita esa disipación para un correcto funcionamiento. Esto es todavía más más patente tratándose tratándose de disipación disipación de calor de de componentes electrónicos que no siempre producen el mismo calor, sino que este varía proporcionalmente a la intensidad de trabajo.
3
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
En el caso de los ordenadores, que muchos usuarios configuran a su gusto, ninguno de los principales componentes generadores de calor, trabajan al cien por ciento continuamente, por lo tanto no generan siempre el mismo calor, ni tienen las mismas necesidades de disipación en cada momento.
105
110
Gráfico 1: Relación entre potencia consumida y temperatura
En el Gráfico 1 se puede observar como la temperatura depende totalmente de la potencia consumida por el componente electrónico, y la potencia consumida depende de la cantidad de uso. El sistema tiene que regular la temperatura asegurando que el componente trabaja dentro de su margen de seguridad. Dicho margen lo proporciona el usuario y el sistema controlará continuamente que la temperatura del componente esté dentro de ese margen generando más o menos disipación de calor.
115
El sistema tiene que estar diseñado para su funcionamiento en una caja de ordenador, regulando la temperatura de sus componentes internos siguiendo los razonamientos antes expuestos.
120
4
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
2.2
Especificación
2.2.1 Requisitos de usuario Identificador
REQU-01 Regulación automática
Descripción
El sistema debe mantener una temperatura t emperatura 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 actuación
Descripción
Para el cumplimiento del requisito REQU-01 la temperatura marcada, punto de actuación, estará dentro del rango de temperatura de operación del entorno condicionado por los rangos de temperaturas externas
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El punto de actuación estará dentro de rango acotado entre el rango de temperatura de funcionamiento del entorno y el rango de temperatura del entorno condicionada por los agentes externos (medidor de temperaturas y especificaciones del entorno de operación)
Prioridad
Prioridad
0
0
5
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
6
Identificador
REQU-03 Multiplicidad de regulación
Descripción
El sistema debe ser capaz de cumplir el REQU-01 en dos, como mínimo, entornos distintos simultáneamente
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Ante cambios de temperatura ambiente y cambios en el ciclo de trabajo, el sistema mantiene dos entornos distintos a sus temperaturas marcadas (distintas o iguales) (medidores de temperaturas simultáneos)
Identificador
REQU-04 Actuación
Descripción
Para cumplir el requisito REQU-01 el sistema debe poder actuar sobre uno o más componentes disipadores de calor
Importancia
Negociable
Estabilidad
Total
Verificabilidad
Para mantener una temperatura el sistema puede actuar sobre uno o más ventiladores (medidor de RPM RPM))
Identificador
REQU-05 Actuador
Descripción
Para cumplir el requisito REQU-01 el sistema debe poder actuar sobre ventiladores estándar de cajas de ordenador (DC 12 V.)
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema actúa sobre la velocidad de ventiladores estándar de 12 voltios (ventilador estándar pc 12 voltios)
Prioridad
Prioridad
Prioridad
1
2
0
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
Identificador
REQU-06 Modificación de punto de
Descripción
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, manteniéndolo a partir de ese momento a la nueva temperatura (medidor de temperatura)
Identificador
REQU-07 Salida de datos
Descripción
El sistema debe poder comunicarse con el usuario en tiempo real por, al menos, un método de visualización
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema ofrece información al usuario por algún sistema de comunicación digital (observar información en tiempo real)
Identificador
REQU-08 Salida de datos (temperatura)
Descripción
El sistema debe poder mostrar al usuario la temperatura t emperatura de cada entorno, en tiempo real, por el método de comunicación del requisito REQU-07
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema ofrece información al usuario por algún sistema de comunicación digital (visualización de información y medidor de temperatura)
Prioridad
Prioridad
Prioridad
operación
0
1
2
7
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
8
Identificador
REQU-09 Salida de datos (RPM)
Descripción
El sistema debe poder mostrar al usuario la actuación sobre cada uno de los componentes disipadores de calor, en tiempo real, por el método de comunicación del requisito REQU-07
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema ofrece información al usuario por algún sistema de comunicación digital (visualización de información y medidor de RPM)
Identificador
REQU-10 Entrada de datos
Descripción
El sistema debe ofrecer al usuario un sistema de entrada de datos digital en tiempo real
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema recoge información al usuario por algún sistema de comunicación digital (entrada de información, REQU-06)
Identificador
REQU-11 Regulación manual
Descripción
El sistema debe poder estacionar los actuadores, a un nivel determinado por el usuario para cada uno de ellos independientemente, independientemente, indefinidamente en el tiempo
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema actúa sobre todos los ventiladores para situarlos en un estado definido por el usuario por el sistema de entrada de datos (medidor de RPM)
Prioridad
Prioridad
Prioridad
4
0
3
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
Identificador
REQU-12 Regulación fija
Descripción
El sistema debe poder estacionar los actuadores, a un nivel determinado por el usuario para todos ellos simultáneamente, indefinidamente en el tiempo
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema actúa sobre todos los ventiladores para situarlos en un estado definido por el usuario por el sistema de entrada de datos (medidor de RPM)
Identificador
REQU-13 Persistencia de datos
Descripción
El sistema debe mantener los datos de configuración entre distintas sesiones
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema mantiene la última configuración introducida en el sistema, independientemente de haberse apagado tras la introducción del dato (visualización de información en tiempo real)
Identificador
REQU-14 Recuperación de datos
Descripción
El sistema debe poder leer la última configuración en cualquier momento que el usuario desee
Prioridad
Prioridad
4
5
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema recupera y aplica la última configuración introducida en el sistema en cualquier momento que el usuario decida, independientemente de haberse realizado r ealizado modificaciones desde el último (visualización de información en tiempo real)
Prioridad
6
9
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
10
Identificador
REQU-15 Guardado de datos
Descripción
El sistema debe retener los datos de configuración en cualquier momento que el usuario desee
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema guarda la configuración actual introducida en el sistema, para recuperarla tras un posible reiniciado o instrucción de lectura de configuración (REQU-14)
Identificador
REQU-16 Continuidad mínima
Descripción
El sistema nunca debe apagar, por su propia decisión, completamente los actuadores, deben tener un punto de operación mínimo
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema nunca apaga completamente los actuadores hasta en el caso que no se precise actuación, se configuran al mínimo valor (medidor de RPM)
Identificador
REQU-17 Alarma
Descripción
El sistema debe avisar al usuario cuando alguno de los actuadores deje de funcionar
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema avisa cuando uno de los actuadores deja de funcionar (visualización de salida de datos y medidor de RPM)
Prioridad
Prioridad
Prioridad
6
5
6
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
Identificador
REQU-18 Ahorro
Descripción
El sistema completo no debe consumir, de media en el tiempo, más corriente de la consumida por los actuadores si estuvieran configurados sobredimensionados sobredimensionados
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema no consume más de lo que consumirían los actuadores independientemente independientemente en su configuración sobredimensionada sobredimensionada (medidor de corriente continua)
Identificador
REQU-19 Presión sonora
Descripción
El sistema completo no debe producir, de media en el tiempo, más presión sonora de la producida por los actuadores si estuvieran configurados sobredimensionados
Importancia
Esencial
Estabilidad
Total
Verificabilidad
Prioridad
Prioridad
0
0
El sistema no produce más presión sonora de lo que producirían los actuadores actuadores independientemente independientemente en su configuración sobredimensionada (medidor de presión sonora)
Identificador
REQU-20 Emergencia
Descripción
El sistema debe poder ser apagado completamente en caso de emergencia
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema dispone de un interruptor que lo apaga completamente (encendido/apagado) (encendido/apagado)
Prioridad
5
11
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
12
Identificador
REQU-21 Dimensiones
Descripción
El sistema deberá poder ser instalado en una caja de ordenador de formato ATX con una bahía de 5 ¼” libre
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema se instala en una bahía de 5 ¼” de una caja formato ATX (metro)
Identificador
REQU-22 Seguridad
Descripción
El sistema ante ausencia de configuración debe asumir una configuración sobredimensionada
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema pasa a estado sobredimensionado sobredimensionado cuando no se le haya definido ningún tipo de configuración (medidor de RPM)
Identificador
REQU-23 Coste
Descripción
El sistema producido en serie no deberá tener un coste superior al de los l os productos de funcionalidades similares existentes en el mercado
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema, pasado a producción en serie no cuesta más que otros sistemas de funcionalidades similares existentes (comparación precios y funcionalidades)
Prioridad
Prioridad
Prioridad
0
0
6
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
2.2.2 Requisitos de sistema
Identificador
REQS-01 Alimentación
Descripción
El sistema estará alimentado por 5 y 12 v.
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema dispone de dos entradas de tensión, independientes entre sí, para 5 y 12 v. (medidor de voltaje)
Identificador
REQS-02 Conector alimentación
Descripción
El sistema dispondrá de conectores adecuados para alimentación desde una caja de pc estándar ATX
Prioridad
0
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema toma la alimentación de la fuente de alimentación ATX según el requisito de usuario REQU-21 por medio de un conector adecuado a las salidas del formato ATX (instalación)
Identificador
REQS-03 Conectores actuadores
Descripción
El sistema dispondrá de conectores adecuados para ventiladores estándares de 12 v.
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema dispone de conectores para ventiladores estándar (instalación)
Prioridad
Prioridad
5
5
13
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
14
Identificador
REQS-04 Conectores medidores
Descripción
El sistema dispondrá de conectores adecuados para poder realizar las lecturas de temperatura de los distintos entornos
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema dispone de conectores para sondas de temperatura (instalación)
Identificador
REQS-05 Funcionalidad única
Descripción
El sistema al activar un tipo de configuración, debe desactivar los otros tipos
Importancia
Esencial
Estabilidad
Sujeto a cambios
Verificabilidad
Activar
Identificador
REQS-06 Inmunidad
Descripción
El sistema no debe verse perturbado en su funcionalidad por radiaciones electro magnéticas generadas por los componentes estándar estándar 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 magnéticas (correcto funcionamiento tras instalación)
Prioridad
Prioridad
Prioridad
5
1
5
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
Identificador
REQS-07 Aislamiento
Descripción
El sistema no debe perturbar la funcionalidad de los componentes estándar estándar 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 instalación)
Identificador
REQS-08 Robustez
Descripción
El sistema, tras su correcta instalación, no debe realizar operaciones para las que no está diseñado según sus especificaciones a pesar de entradas de información incorrectas por parte del usuario
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema verifica que las entradas al sistema son algunas de las esperadas para realizar las funcionalidades, en caso contrario no realiza ninguna operación (no realizar operaciones ante entradas no definidas)
Identificador
REQS-09 Eficiencia
Descripción
El sistema no deberá realizar operaciones inútiles para cumplir con su funcionalidad durante su funcionamiento normal
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema no pierde recursos realizando operaciones que el usuario no le haya definido, o no las tenga definidas para el cumplimiento de alguna operación (funcionamiento correcto según especificaciones)
Prioridad
Prioridad
Prioridad
1
4
6
15
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
16
Identificador
REQS-10 Ayuda
Descripción
El sistema deberá ofrecer al usuario en el sistema de salida de datos ayudas a las operaciones que puede realizar en cada momento
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema muestra indicaciones de las posibilidades de operación posibles en cada momento al usuario (visualización del sistema de salida)
Identificador
REQS-11 Actualización
Descripción
El sistema debe poder actualizarse en caliente
Importancia
Esencial
Estabilidad
Total
Verificabilidad
El sistema se puede actualizar en caliente, tanto a nivel hardware (añadir nuevos actuadores) como a nivel software (distintas funcionalidades) (actualizar en caliente el sistema)
Identificador
REQS-12 Humedad funcionamiento
Descripción
El sistema debe funcionar correctamente en un entorno de humedad del rango 0-98%
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema funciona correctamente dentro de ese rango de humedades (funcionamiento entre 0-98% humedad)
Prioridad
Prioridad
Prioridad
6
0
6
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
Identificador
REQS-13 Temperatura funcionamiento
Descripción
El sistema debe funcionar correctamente en un entorno con temperaturas del rango 0-90º C
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema funciona correctamente dentro de ese rango de temperaturas (funcionamiento entre 0-90º C)
Identificador
REQS-14 Temperatura almacenamiento
Descripción
El sistema debe funcionar correctamente tras haber sido almacenado en un entorno con temperaturas del rango -10100º C
Importancia
Negociable
Estabilidad
Sujeto a cambios
Verificabilidad
El sistema funciona correctamente tras haber sido almacenado dentro de ese rango de temperaturas (funcionamiento tras almacenamiento entre -10-100º C)
Identificador
REQS-15 Sonido
Descripción
El sistema debe poseer un medio de emitir sonidos como sistema de comunicación adicional
Prioridad
Prioridad
6
6
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema tiene la capacidad de emitir sonidos (en caso de alarma)
Prioridad
3
17
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
18
Identificador
REQS-16 Conector comunicación
Descripción
El sistema debe poseer un conector para poder comunicarse con otros sistemas
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema incluye un conector de comunicación para comunicarse con otros sistemas (actualización)
Identificador
REQS-17 Intensidad admitida
Descripción
El sistema debe poder alimentar ventiladores de 12 v. y 1 A como mínimo
Importancia
Negociable
Estabilidad
Total
Verificabilidad
El sistema está preparado para alimentar, de forma segura y continuada, ventiladores de 12 V. y un consumo de 1 A. (instalación)
Prioridad
Prioridad
0
0
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
120
2.3
Ámbito El sistema no tiene como objetivos: Ofrecer soluciones específicas para distintos sistemas de ventilación/refrigeración para la disipación de calor de componentes electrónicos (disipadores, RL RL,, Peltier, tipos de ventiladores, etc.…) en función de sus características especiales.
125
Ofrecer soluciones específicas para componentes caloríficos específicos, ni en función de sus cualidades ni disipación del calor. Definir soluciones globales de ventilación/refrigeración para un usuario en particular, lo que único que ofrece es la capacidad de actualización para que el usuario lo configure a su medida.
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 regulación. Ofrecer cualquier tipo de control entre diferentes entornos regulados. Cada entorno es independiente de los demás, y el sistema regula cada uno independientemente. independientemente.
135
140
Ofrecer cualquier tipo de control sobre la eficiencia de los distintos componentes regulados. Los componentes de los entornos generadores de calor tendrán sus propias especificaciones y características, en función de las cuales serán más o menos eficientes. El sistema no controla su eficiencia, tan sólo la temperatura medida para ese entorno. Memorizar los aspectos de visualización o de entrada de datos del usuario. El sistema se inicia siempre en la misma vista, esperando siempre unas entradas iniciales. El usuario puede grabar toda la configuración interna del sistema, pero no la vista o entradas por defecto.
19
Sistema de regulación de temperaturas con microcontroladores Descripción del problema
20
Sistema de regulación de temperaturas con microcontroladores Estado del arte
3 145
150
155
Estado del arte Los periféricos de ordenador destinados a un mejor rendimiento de éste, a mejorar su apariencia o a realizar funciones que no son propias del hardware común, se engloban dentro de una materia autodesignada por sus entusiastas como modding . Dentro de esta materia se pueden encontrar cientos de diseños de baybus, fanbus, reobus, electrobus, todos ellos destinados a regular la velocidad de ventiladores. De todos estos diseños hechos por particulares y de modelos comerciales, existen diversas características que los diferencian entre sí. Por la gran cantidad de productos existentes con este propósito sólo se van a mencionar los que más se acercan a las premisas de este proyecto: control y adaptación digital. Con estas características sólo encontramos tres productos: El Digital Doc 5+ [9.2 9.2]] de Macpower, el Vantec Vortex [9.3 9.3]] y el CoolerMaster 9.4]] (revisada su última versión). AeroGate III [9.4
Grafico 2: Digital Doc 5+
160
Gráfico 3: Vantec Vortex
Gráfico 4: CoolerMaster AeroGate III
21
Sistema de regulación de temperaturas con microcontroladores Estado del arte
A continuación se presenta una tabla comparando las características más importantes. 165 Características
DD5+
Vortex
AeroGateII I
HM-Baybus
Entrada Digital
X
X
X
X
Monitorización Digital
X
X
X
X
Número máximo de ventiladores
8
1
4
12
Apagado/encendid o ventiladores
X
X
X
X
Regulación variable ventiladores
--
--
--
X
Regulación automática
--*
--*
--
X
Monitorización Tª
X
X
X
X
Carga máxima
1A
1A
1.5 A
1A
Variables externas
--
--
--
X
Comunicación
--
--
--
X
Coste aproximado
90 €
50 €*
50 €
<120 €*
Tabla 1: Comparativa entre sistemas comerciales de regulación de ventiladores
* Notas: El Digital Doc (DD5) enciende y apaga los ventiladores según un margen definido por el usuario entre 5-10-15 y 20% sobre la temperatura de acción. El Vortex permite encender el ventilador, apagarlo y ponerlo a mitad de potencia. Su precio puede parecer elevado pero es una unidad de ventilación para discos duros con un ventilador silencioso tipo vortex. El precio del HM-Baybus es aproximado al alza (hay componentes similares que pueden costar más o menos, según la disponibilidad de estos) y sólo en material para un modelo que controle 12 ventiladores.
170
Como se observa en la tabla comparativa, la gran diferencia del proyecto con respecto a los productos comerciales más ambiciosos es la regulación totalmente variable de los ventiladores así como la posibilidad de incluir en el control variables externas y poderse comunicar con otros dispositivos.
175
22
Sistema de regulación de temperaturas con microcontroladores Estado del arte
180
185
190
195
200
Con respecto a las tecnologías usadas en este campo, la regulación se suele hacer por potenciómetros en analógico y por PWM en digital. Estos métodos no cambian, son los más adecuados y los más usados para hacer este tipo de regulación. Lo que puede cambiar cambiar es donde esté aplicada aplicada esta regulación. regulación. Puede aplicarse directamente en el agente actuador. En este caso el ventilador es “inteligente” puesto que lleva un circuito de control propio. O puede aplicarse externamente a él. Dentro de las soluciones externas se puede usar circuitos integrados específicamente diseñados para esta función o bien realizar placas a medida para dicho control. En este último caso se podrían hacer soluciones mixtas. Los ventiladores inteligentes de 3 y de 5 hilos han alcanzado una gran aceptación a lo largo de los últimos años. Estos ventiladores proporcionan una tercera señal (salida de tacómetro) y un sensor de temperatura interna o externa. La medida de la temperatura de escape, como hace la mayoría de los ventiladores inteligentes, i nteligentes, puede perjudicar al funcionamiento del sistema a causa del tiempo transcurrido entre la generación de calor extra localizada y el incremento de la temperatura del aire de escape. Las placas controladoras se presentan como soluciones completas tanto CA CA como como CC. Estas soluciones aportan un control avanzado, si bien resultan de coste elevado y no son óptimas para aplicaciones críticas en materia de espacio ocupado. Estas placas pueden contener todo tipo de componentes según sus funcionalidades, pero normalmente incluyen circuitos integrados especializados, que tienen todo lo necesario para convertirse en un mini controlador para motores.
Gráfico 5: Esquema de funcionamiento funcionamiento del TC646 de Microchip
205
Por ejemplo, el Gráfico 5 nos muestra el esquema de funcionamiento del TC646 de microchip. La señal de temperatura se genera por medio de un termistor NTC de
23
Sistema de regulación 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 tensión en Vin. La salida de error en el ventilador se activa cuando no se detectan pulsos consecutivos en la patilla SENSE (R4 y C2), indicando así que el ventilador está atascado, abierto o desconectado.
215
El TC646 detiene automáticamente el funcionamiento del ventilador cuando la temperatura medida se encuentra por debajo de un valor mínimo establecido y programado por el usuario (fijado por R1 y R2), punto en el cual no se requiere ya la ventilación forzada de aire. Además del TC646, Microchip dispone de dos CI controladores de ventilador más con diversas combinaciones de funciones: 1. El TC642: idéntico al TC646, excepto en el hecho de que no incluye el modo de paro automático 2. El TC648: un controlador de la velocidad del ventilador del tipo PWM con modo de paro automático y detección de fallo por sobretemperatura. Este tipo de circuitos son muy interesantes para este tipo de tareas, pero tienen un inconveniente (para sistemas de montaje por usuarios normales) de mucho peso; su fabricación, por regla general, es en tecnología SMD SMD..
220
24
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4
Solución propuesta En este capítulo se describe detalladamente la solución propuesta. Por tratarse de un sistema de software embebido, se divide la exposición del sistema en dos partes; hardware y software.
225
En la primera se muestra el hardware del sistema, componentes, características y decisiones tomadas a partir de los requisitos del sistema. En la segunda se describe el software embebido en el hardware. El diseño a partir de los requisitos del usuario, como maneja los recursos y las características especiales de los distintos componentes del hardware, así como posibles problemas en la implementación.
230
4.1 235
240
245
250
Descripción Se propone un sistema de software embebido, por el cual se controla el hardware de determinada manera para cumplir con los requisitos del sistema y añadir, si procede, funcionalidades funcionalidades útiles para el cumplimiento cumplimiento de objetivos. El hardware consta de un dispositivo programable central que controlará el funcionamiento general de todo el sistema a partir de las entradas del usuario a través de un teclado, para realizar operaciones de funcionamiento; y a través del estándar RS232 para su reprogramación en caliente. Aparte de las entradas del usuario también tiene como entrada datos de otros dispositivos programables existentes en el sistema, cuya tarea es la de adquisición de datos, temperaturas y RPM, de una manera previamente establecida a través de programación embebida (también por el estándar RS232) y la del control específico para cada elemento actuador de cada entorno, modificando su PWM de alimentación. Las salidas del dispositivo central serán un visualizador de cristal líquido alfanumérico y un generador de sonido. El puerto RS232 puede ser usado como salida por cualquiera de los dispositivos programables existentes en el sistema, tanto central como módulos. Estos últimos tienen como salida el voltaje que regula, en concreto, cada actuador sobre la temperatura de cada entorno calorífico. Los dispositivos programables disponen de un sistema de comunicación interno, para que el dispositivo central pueda leer y recuperar información de ellos (maestro/esclavo).
25
Sistema de regulación de temperaturas con microcontroladores Solución 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 implantación definitiva los objetivos del sistema. El principal objetivo de este sistema es regular la disipación de calor de un entorno acotado por medio de la regulación del flujo de aire que ventilará ese entorno. El primer problema a resolver resolver es como se realiza realiza esa regulación.
260
4.2.1 Regulación de velocidad en motores DC El hacer una regulación sobre ventiladores estándar DC 12 V. implica regular la velocidad de un motor de corriente continua de escobillas, que son los frecuentemente usados en cajas ATX y en componentes de disipación de ordenadores.
265
Esta regulación se puede hacer de varias maneras. Con retroalimentación, el sistema regulador posee una tabla con los valores de regulación y los valores de entrada, con los que al regular vigila que la retroalimentación sea la esperada, en caso contrario, corrige. Estas tablas normalmente las ofrece el fabricante. Es un buen sistema pero conlleva un coste elevado de componentes. Sin retroalimentación, el sistema no posee información alguna, se limita a ofrecer la salida que le entra.
270
Para este sistema no se precisa una regulación precisa sobre la velocidad angular del ventilador. Tan sólo se necesita conocer cuál es el mínimo y el máximo del funcionamiento puesto que sólo se va a aumentar o reducir. En ese rango, el sistema hará selecciones discretas según el valor que desee.
275
Un motor se regula variando el voltaje que lo alimenta o limitando la corriente que consume. La limitación de corriente es costosa, necesitando componentes difíciles de encontrar mientras que la variación de voltaje es un proceso simple.
280
Esta variación de voltaje se puede realizar por potenciómetros, pero uno de los requisitos del sistema es que las entradas del usuario deben ser discretas, es decir, sin usar ningún mando analógico. Existen potenciómetros digitales pero muy difíciles de encontrar y en la mayoría de los casos, se fabrican en SMD. También existe el PWM. El PWM en sí mismo no es un voltaje, sino una modulación de pulsos, uno o cero, a una frecuencia fija y con un ciclo de trabajo variable. No es una medida continua, pero si se halla la media entre el tiempo que los pulsos están en alta y en baja (el ciclo de trabajo), ya se puede calcular un valor continuo.
285
26
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
290 Gráfico 6: Distintos ciclos de trabajo de un PWM
295
El Gráfico 6 muestra distintos ciclos de trabajo, para un PWM. En este caso, se observa que el pulso es de 12 v. lo cual significa que es un pulso ya amplificado. Los generadores de PWM son generalmente dispositivos lógicos TTL que sólo ofrecen pulsos entre 0 y 5 v. (0 y 1 lógicos). Con un PWM amplificado se puede alimentar directamente un motor DC, porque aunque no es un voltaje lineal, si la frecuencia del PWM es lo suficientemente alta, el bobinado del motor hace de inductancia, creando un valor continuo a partir de pulsos.
300
305
310
315
La frecuencia del PWM es un factor importante a la hora de alimentar motores. Una frecuencia pequeña puede resultar que el bobinado del motor no produzca la suficiente inductancia, con lo cual el motor vaya a saltos. Una frecuencia dentro del rango audible por el ser humano (20 Hz - 20 KHz) en algunos ventiladores puede producir un ruido molesto. La bobina de un motor dc consume más al arranque, lo que en este caso sería al inicio de cada pulso; este aumento de consumo daña el motor si la frecuencia no es lo suficientemente alta lo que puede acortar la vida del ventilador. En principio se considera adecuada, para este sistema, cualquier frecuencia entre 20 y 100 KHz. Aunque depende en gran medida del sistema generador, no todos los sistemas generadores de PWM pueden ofrecer frecuencias tan altas y poder modificar el ciclo de trabajo de 0 al 100%. Para generar un PWM se pueden usar diversos componentes y circuitos. El más barato de todos es usar un 555 en su configuración astable, produciendo una señal triangular. Esta señal se introduciría en un comparador con otro voltaje que le introduce el usuario. Según la altura de ese voltaje así será el ciclo de trabajo del PWM. El 555 a pesar de ser tan barato no soporta frecuencias muy altas, y si se requieren ciclos de trabajo de 0 a 100 se necesitan componentes adicionales.
27
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
320
Gráfico 7: PWM a partir de comparadores comparadores
325
Las pruebas con el 555 a partir de circuitos propios y circuitos de terceras partes [9.5 9.5]] no son satisfactorias, sin contar con que la regulación del voltaje plantea el mismo problema anteriormente citado y que se están usando gran cantidad de dispositivos para generar un solo PWM. Existen circuitos integrados definidos concretamente para la generación de PWM, pero son difíciles de encontrar, muy orientados a problemas específicos (poca flexibilidad), fabricados en SMD y normalmente caros. La solución es un circuito que ofrezca capacidades de generación de PWM de una forma flexible, que permita escalabilidad, cambio de funcionalidades y cumplir con los objetivos del sistema a nivel de alimentación de ventiladores. Estas características definen a un microcontrolador.
330
Gráfico 8: Diagrama de un sistema microcontrolado
En el Gráfico 8 se observa que el sistema a desarrollar tiene cada una de sus partes definidas en el diagrama de un sistema microcontrolado, contando con que los dispositivos de entrada pueden ser un teclado, un interruptor, un sensor, etc. y los de salida LED LED's, 's, zumbadores, interruptores de potencia, relés, etc. Hasta algunos de ellos producen PWM; por lo tanto, la solución adoptada para este sistema usa un microcontrolador.
335
340
Habiendo elegido el medio para generar el PWM, hay que amplificarlo (un microcontrolador ofrece señales ttl) a 12 v. para que sirva de alimentación a los ventiladores.
28
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
345
350
Una señal se puede amplificar de diversas maneras, usando operacionales, transistores, transformadores o circuitos integrados especializados. Pero se debe tener en cuenta que los ventiladores, según los modelos, dentro de los estándares de pc los hay desde un consumo de 0,05 A. hasta 1,2 A. Por requisitos del sistema, se debe soportar una carga de hasta 1 A. por ventilador. Los operacionales no ofrecen gran cantidad de amperaje. Los transformadores ocupan demasiado espacio para el requisito del sistema de instalación. Los transistores son baratos pero producen una caída de tensión. Por requisito del sistema, la alimentación de éste es de 5 y 12 V., y los ventiladores se alimentan a 12 V. Una caída de tensión del 5% produce que el pulso se reduce a 11,4 V.
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 caída de tensión ofrecen son los Mosfet. Los Mosfet probados ofrecen una intensidad que supera exageradamente las exigencias del sistema, a pesar de ser de la gama baja. Su precio tampoco los hace demasiado asequibles, considerando además que deben usarse como mínimo dos. Se decide usar un circuito integrado específico para control de motores; el L293B. Es un chip chip controlador controlador de motores que puede usarse en múltiples configuraciones, disponiendo de cuatro puertos independientes para el control de cuatro motores simultáneos. También se puede usar para control de motores paso a paso y reversibles así como simultanear los canales dos a dos. Ofrece una carga máxima de 4 amperios, 1 A. por canal. Para este sistema y sobredimensionando el hardware para evitar riesgos de calentamiento, se configura para alimentar dos ventiladores, utilizando los cuatro puertos dos a dos. Que su coste relativamente caro se divida entre dos al usarlo para dos elementos distintos y su alta disponibilidad en cualquier tienda de electrónica, lo convierte en una buena opción para la amplificación de la señal de PWM.
29
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 9: Configuraciones del controlador de motores DC, L293B
Tras haber solucionado la alimentación de los ventiladores, la siguiente cuestión es elegir un medio que pueda tomar decisiones para producir un PWM de más o menos ciclo de trabajo, en función de la elección del usuario y de la temperatura del entorno acotado.
375
Como se explicó anteriormente, el PWM se genera con un microcontrolador que disponga de estas salidas. Pero se tiene en cuenta que también hay microcontroladores que poseen conversores analógico digital, con los que se pueden leer los valores de la temperatura de sensores analógicos, que son los más accesibles para usuarios normales.
380
Un microcontrolador se puede programar, pueden tener entradas analógicas, generar PWM y hasta comunicarse comunicarse con otros dispositivos, sean sean microcontroladores o no. La elección del microcontrolador adecuado ofrece solución 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 más tareas específicas, normalmente multiplexadas por software.
390
Gráfico 10: Diagrama por bloques de un microcontrolador
En el Gráfico 9 se puede ver que se parece bastante, conceptualmente, a un ordenador. Fuente de alimentación, circuito de reloj (un oscilador o cristal), CPU, memorias, y finalmente sus puertos de comunicación de entrada y salida para comunicarse con el exterior. Sus aspectos generales son:
395
Memoria ROM (Memoria de sólo lectura) Memoria RAM (Memoria de acceso aleatorio) Líneas de entrada/salida (I/O) También llamados puertos aunque son accesibles a nivel de puerta Lógica de control Coordina la interacción entre los demás bloques
400
A parte de estos aspectos, cada modelo de cada fabricante dispone de sus características especiales, que lo hacen afín a un propósito o a otro. Los principales
30
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
fabricantes de microcontroladores son Motorola, Philips, Atmel, Intel, Microchip, SGS Thomson, Zilog y National COP . 405
En la universidad de Guadalajara se ha realizado un estudio comparativo entre los 9.5]]. No ofrece un valor principales microcontroladores existentes en el año 1998 [9.5 real para el día de hoy pero sí una visión estimativa de las diferentes marcas.
410
Los programas seleccionadas para la prueba son muy sencillos pero muy representativos de las acciones típicas que llevan a cabo las aplicaciones que utilizan microcontroladores, Son los siguientes:
415
Empaquetamiento Empaquetamiento de dos dígitos BCD BCD.. Control de un bucle que decrementa un contador hasta cero. Transmisión síncrona por desplazamiento en serie de 8 bits. Temporizador software de 10 ms. Exploración de un bit y salto si vale 1.
Programa
BCD
Bit y salto
Bucle
Trx síncrona
Temp síncrona
Valores finales t
MCU
a)
b)
a)
b)
a)
b)
a)
b)
a)
b)
COP800 20MHz
4
5
2
6
2
4
16 16
105
8
-
1.29 0,108
10 45,2
2
9,75
3
8,12
19
390
10
-
2.10 1,045
MC68HC05 4,2MHz 10 10,5
3
2,86
3
2,38
20
126
11
-
2,24 0,136
ST62 8MHz
v
Z86CXX 12MHz
4
2,33
3
1,83
3
2,38
21
68
9
-
1, 1 ,51 0,212
8048/8049 11MHz
4
5,45
2
2,73
5
6,82
14
124
9
-
1,58 0,112
PIC16C5X
2
0,4
2
0,5
2
0,5
11
14,8
8
-
1
1
Tabla 2: Comparativa de microcontroladores
a) indica el tamaño del código en palabra y b) el tiempo de ejecución en µs t = tamaño relativo; v = velocidad relativa 420
La tabla muestra que el PIC es hasta un doscientos por ciento más veloz que otros modelos y su programación es mucho más eficiente. A pesar de los buenos resultados y como todos los fabricantes disponen de modelos que cumplen con creces los requisitos del sistema, no se puede tomar una decisión sin valorar los objetivos de disponibilidad, escalabilidad, precio y sencillez.
425
Los microcontroladores de Thomson y Nacional COP son muy difíciles de encontrar. Los Atmel son muy veloces, pero de coste muy elevado, además de haber poca variedad disponible y ser los encapsulados de gran tamaño. Los micros de Motorola son de coste algo elevado con respecto a Microchip, ante mismas características y periféricos, además de precisar distinto software de programación y programador para cada modelo.
430
31
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Microchip ha creado los primeros microcontroladores RISC, tiene una experiencia muy larga en microcontrol. Ofrece un software de programación muy eficiente gratuitamente que sirve para toda la familia de micros. Cada familia de microcontroladores son compatibles en patillaje y periféricos, y en la mayoría de los casos, el software de programación sirve para varios modelos distintos. Su herramienta de programación gratuita admite plugins de terceras partes con los que se pueden programar en distintos lenguajes sin necesidad de conocer los registros internos del microcontrolador.
435
Las gamas media y alta de Microchip soportan ICD (in circuit debugger) que permite hacer un debugger del programa como si estuviera en producción, visualizando los registros internos del circuito en tiempo real. Hay una amplia comunidad mundial que los usa, con muchos ejemplos, foros de ayuda, esquemas de programadores, hardware y programas desarrollados para microcontroladores Microchip, además de ser localizables a precios relativamente bajos en cualquier tienda de electrónica. Además, Microchip ofrece muestras gratuitas que envía gratuitamente a todo el mundo de la inmensa mayoría de sus microcontroladores (tienen un máximo admitido de muestras por persona).
440
445
Analizando las distintas propuestas, realizando unas preguntas en tiendas de electrónica normales, y estudiando los datasheets de los distintos modelos disponibles fácilmente, una opción muy adecuada para el sistema es el microcontrolador de Microchip 16F876.
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 especificación. La información 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 sólo instrucciones, y otra que contiene sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias, y por consiguiente la velocidad de proceso aumenta. El Gráfico 10 muestra el esquema de la arquitectura:
32
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 11: Arquitectura Harvard
465
La memoria de programa es donde se almacena el código fuente del programa que el procesador va a ejecutar. Dispone de una capacidad de 8 Kb en memoria tipo FLASH. 470
La memoria de datos se divide en dos zonas, zonas, la RAM (con un tamaño tamaño de 368 bytes) donde residen los registros de propósito general y específicos, y una EPROM de 256 bytes para almacenar datos que no se pierden al desconectar la alimentación. Se utiliza la segmentación de aplicación de instrucciones: simultáneamente se ejecuta una instrucción y se busca el código de la siguiente.
475 Gráfico 12: Patillaje del microcontrolador Microchip 16F876
Se reseñan ahora las funcionalidades principales hardware que hacen de este microcontrolador uno de los más adecuados, las configuraciones software se reseñarán en la siguiente sección.
33
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
La patilla 1, por defecto está configurada como reset. Precisa de un pequeño circuito de resistencias para que pueda efectuar resets físicos en el circuito. Para que el circuito funcione, esta entrada, cuando está configurada como reset, precisa tener un valor lógico de 1. Para ello se coloca una resistencia pull-up de 10 K. Cuando se quiere resetear, basta con dar a la entrada un 0 lógico (tierra). La conexión para el reset no puede ser directa a tierra, sino que para evitar un salto de corriente mayor de 80 mA., que produciría un bloqueo en el micro, se debe poner entre tierra y MCLR una resistencia resistencia en serie 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 analógico digital a nivel independiente unas puertas de otras. RA3 puede ser configurado, como se puede ver en el Gráfico 12, como Vref+. En ese momento, se convierte en una señal de entrada que servirá de referencia al módulo ADC. También se puede usar la alimentación propia del micro como referencia pero el poder introducir una señal de referencia independiente de la alimentación, permite instalar un estabilizador de tensión que asegure un valor constante y que los valores de la conversión analógica digital sean lo más fiables posibles.
490
495
En el sistema, las entradas ANx son usadas para leer los valores analógicos que generan los medidores de temperatura. RA4 puede ser configurada como puerta de colector abierto, la cual sirve como activadora de un transistor PNP que alimente al buzzer sonoro requerido por el sistema (0 activado, 1 desactivado).
500
El PIC tiene dos módulos comparadores CCP1 y CCP2 que pueden ser configurados como moduladores de anchura de pulsos (generador PWM) de manera independiente. Su única restricción es que la frecuencia de funcionamiento de ambos módulos debe de ser la misma. Esta restricción no afecta al sistema que sólo requiere que sean independientes los ciclos de trabajo.
505
En el sistema, estas dos salidas, CCP1 y CCP2, irán al circuito amplificador L293B para que las amplifique a 12 V. y alimentar así así a los ventiladores. Las patillas 14 y 15, SCL y SDA, son las líneas en las que el microcontrolador tiene implementado su módulo hardware de comunicación I2C. Por requisitos del protocolo es necesario para su correcto funcionamiento poner en las dos líneas de comunicación, reloj y datos, una resistencia pull-up de 1 K. Es importante que esta resistencia sea única en cada línea, independientemente de la cantidad de dispositivos que haya conectados.
510
515
En el sistema, los dispositivos se comunicarán entre sí por medio de I 2C. Además, se cumple con el requisito de escalabilidad del sistema, ofreciendo a futuros desarrollos un interfaz que se ha convertido en el estándar de hecho, a nivel mundial, de comunicación entre sistemas embebidos [9.7 9.7]].
34
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
520
Las patillas 17 y 18, TX y RX, son las del puerto de comunicación estándar RS232 (puerto serie) del microcontrolador. En el sistema, estas patas se usarán para la reprogramación en caliente del microcontrolador, así como un interfaz secundario de comunicación con el usuario (la mayoría de las veces usada como sistema de debugger).
525
530
535
540
545
El puerto B, es un puerto de 8 bits, configurable de diversas maneras, pero resaltan dos características de él. La patilla RB0 es una entrada para una interrupción externa directa gestionable por software. Los cuatro últimos bits del puerto también se pueden configurar de manera que produzcan una interrupción de software cuando cambia el valor de entrada en alguno de ellos. Estas características se usan para detectar cambios de valor en sistemas discretos, así como para leer pulsos. Estos cambios se pueden configurar para que interrumpan cuando el valor cambia de alta a baja, o al contrario. Independientemente de la configuración de RB0 o de estas últimas líneas, RB_1, RB_2 y RB_3 se pueden pueden configurar como salidas digitales. Esto es especialmente útil cuando se quieren controlar dispositivos externos digitales, como líneas de enable, líneas de control o simplemente un LED. En el sistema, RB_1, RB_2 y RB_3 controlarán las líneas de control de direccionamiento de la comunicación del puerto serie RS232. RB_4, RB_5, RB_6, y RB_7 serán usadas en su configuración de interrupción para detectar pulsaciones por parte del usuario en la interfaz de entrada del sistema. sistema. Asimismo, en la situación de adquisición de datos del sistema, se usarán estas patillas para leer las RPM a través del tacómetro de los ventiladores. Esta configuración para interrupciones configura las patillas a un estado de alta impedancia, en las que pueden adoptar cualquier estado (0 o 1) con una mínima interferencia. Para evitar esto, se colocan en estas líneas unas resistencias pull-up de 10 K, con el fin que su valor por defecto fuera 1. Por lo tanto, la interrupción se produce al dar de entrada un 0. Esto debe tenerse en cuenta a la hora de diseñar el interfaz de entrada de datos con teclados.
4.2.4 Interfaz de usuario 550
555
Según el requisito de usuario de comunicaciones, el sistema debe comunicarse bidireccionalmente con el usuario. Eso implica un dispositivo de entrada y otro de salida. La comunicación para la reprogramación es un interfaz de comunicación bidireccional, pero obliga al usuario usar un dispositivo externo que traduzca las señales RS232 a información, y al contrario. Esa es una restricción que no ha sido contemplada en las especificaciones, por lo que hay que considerar que el sistema debe ser, en sus funcionalidades directas con el usuario, un sistema independiente.
35
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Según el requisito de usuario de dimensiones, la interfaz de usuario hardware no puede ocupar más de la superficie de un frontal de una bahía de 5 ¼” de una caja ATX, que es la superficie que queda visible al usuario.
560
En este espacio debe caber un visualizador de datos y un teclado para la entrada de datos. Como visualizador de datos, se puede usar un LCD LCD de de bajo coste. Estos son del tipo alfanuméricos controlados por el chip chip HD44780 HD44780 de Hitachi o compatibles. Estos chips tienen la particularidad de poder trabajar en modo paralelo de 4 u 8 bits. También hay en el mercado LCD gráficos, y de comunicación serie, mucho más estéticos y cómodos de programar, pero el precio es mucho mayor y el sistema tiene restricción de coste, pero no de estética o sencillez de desarrollo.
565
Existen microcontroladores que ya implementan control de LCD por hardware. Este no es el caso del que se ha elegido para el sistema, por lo que hay que controlarlo por software. El control por software directo precisa, en el mejor de los casos, ocupar 7 patillas del microcontrolador (Enable, Read/Write, Function Select y 4 líneas de control) Esto es un gasto de patillas muy elevado contando con que el micro elegido tiene 22, de las cuales ya se ocupan de momento 15. En caso de necesitar implementar nuevas salidas/entradas hay que cambiar de modelo de microcontrolador. Para evitar eso, se incorpora al sistema un circuito integrado de expansión de 8 bits para el bus I 2C. Este circuito es relativamente caro, pero no consume nada de recursos al microcontrolador, puesto que se une, como otro dispositivo más, al bus I 2C, y proporciona una salida paralela al LCD.
570
575
580
Gráfico 13: Patillaje del PCF8574
El LCD elegido es un DV24200 alfanumérico, controlado por un HD44780, de 24x2 caracteres, retroiluminado en verde. Es un LCD muy barato y robusto que proporciona más de las características necesarias para el sistema. Sus dimensiones son muy adecuadas para las restricciones y sus características eléctricas se adaptan a las disponibles en el sistema. Además tiene la capacidad de poder regular su brillo y su contraste, lo cual es muy útil teniendo en cuenta que en el sistema la retroiluminación del LCD consume 30 veces más que el microcontrolador.
585
36
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 14: Dimensiones del LCD DV24200
590
Para la entrada de información, el usuario dispone de un teclado con el que puede navegar por menús e introducir así la información al sistema. Este teclado puede estar formado por botones sencillos de bajo coste y alta resistencia que se conectan al puerto B de interrupciones del microcontrolador y a tierra, para hacer la interrupción a 0 lógico.
595
El sistema de reprogramación por puerto serie (RS232) precisa de un conversor de señales para convertir las señales de 12 V. del puerto serie de un PC a señales TTL que pueda interpretar el microcontrolador. El conversor típico para hacer esto es el barato y disponible MAX232. Pero este circuito precisa de 4 condensadores externos además de no poder convertir señales de mayor velocidad que 120 Kbps.
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 diseño de la placa y permiten velocidades de hasta 200 Kbps.
Gráfico 15: Patillaje de un MAX233A
605
37
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Por el requisito de escalabilidad y de reprogramación en caliente, hay que poder llevar la señal de reprogramación a cualquier microcontrolador del sistema. Para ello se usan dos de/multiplexores, de 8 a 1/1 a 8, que se encargan de conmutar las líneas de TX y RX del MAX233A a los diferentes microcontroladores, en función de las líneas de control que definirá el microcontrolador central. Se debe de tener en cuenta que el sistema debe ser robusto y fiable, por lo que no debe quedar bloqueado en ningún momento momento y poderse recuperar de errores. Las líneas de control que genera el microcontrolador, inicialmente (sin programación) están en alta impedancia. Se aprovecha esta característica para poder programar micros vacíos, tan sólo con el bootloader (explicado en la sección de software). A las líneas de control se le colocan en serie unas resistencias pull-up, de manera que los de/multiplexores tengan en sus líneas de control, por defecto, un 111 (7). En las salidas 7 estarán las líneas de puerto serie del microcontrolador principal. A partir de programar el principal, se puede programar este para que direccione a otras direcciones.
610
615
620
El multiplexor/demultiplexor con mayor disponibilidad en las tiendas normales es el HEF4051B, de bajo coste y de conmutación lo suficientemente rápida para los propósitos del sistema.
625 Gráfico 16: Patillaje de un MAX233A
4.2.5 Adquisición de datos
630
Para la adquisición de datos de temperatura se han propuesto sondas analógicas, que son baratas por regla general, y de alta disponibilidad en tiendas. Se eligen las LM35. Son sondas relativamente baratas, de fácil manejo e instalación. Pueden medir hasta 160º C, ofreciendo en la salida un voltaje de 0,1 V./ºC, con una precisión de +/- 1º C.
635
En el sistema no se definen las distancias mínimas y máximas a las que pueden estar las sondas. El cable, en función de sus características y longitud, puede generar una carga capacitiva que afecte al resultado de la lectura. Para ello se emplea un cable apantallado a tierra y se aplica el circuito con la resistencia de 2K2 recomendada por el fabricante.
38
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 17: Circuito protector de LM35
640
645
En la medición de las RPM RPM de de los ventiladores, se contarán los pulsos generados por el tacómetro del ventilador a través de las interrupciones del puerto B. El tacómetro realiza el cuenteo de revoluciones conmutando con tierra dos veces por cada revolución. Los pulsos del tacómetro tienen mucho ruido por su cercanía a la bobina del propio ventilador. Para poder leer los pulsos lo más limpiamente posible y evitar errores, se le aplica una resistencia pull-up; así también se crea la señal de pulsos de 5 V. que el microcontrolador interpreta como un 1 lógico. Además se coloca un condensador de 1 F entre la línea y tierra para corregir el ruido que suelen tener los pulsos al comienzo.
39
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.2.6 Conjunto Tras haber resuelto y definido las cuestiones necesarias de componentes y configuración para la consecución de los objetivos desde el punto de vista hardware, se une todo en una placa de circuito impreso, donde se realicen las conexiones necesarias y se puedan montar los conectores requeridos.
650
655
El sistema tiene una placa principal donde están los componentes que unen todas las funcionalidades del sistema, y sobre la que irán montados distintos o iguales módulos que ofrezcan la versatilidad y escalabilidad requerida.
660
En primer lugar se diseña el circuito eléctrico. Para el diseño se usa la herramienta Orcad Capture. Sus librerías no tienen todos los componentes que se usan en el sistema, por lo que hay que hacerlos para que a la hora de diseñar la placa, pida la plantilla para ese componente y se le pueda dar una genérica o parecida a otro componente que tenga el mismo patillaje. Resultan muy útiles los componentes de conectores que, sin funcionalidad alguna, permiten darles nuevos nombres y adaptarse a casi cualquier micro que se desee incluir. Para el futuro desarrollo de la placa, y si va a ser serigrafiada con las plantillas de los componentes, así como con sus nombres, es preferible ponerles desde el principio nombres intuitivos (normalmente el nombre del componente) y, en caso de haber más de uno, ponerles numeración ordenada según su localización en la placa.
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 páginas se ven los esquemas eléctricos de la placa principal y de la placa modular.
40
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 18: Esquema eléctrico de la placa principal
41
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
42
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 19: Esquema eléctrico de la placa modular
43
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
44
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
675
680
A partir de los diseños eléctricos se procede al diseño de las placas físicas. Este diseño se realiza con el programa Orcad Layout. Al crear un nuevo diseño pide las plantillas de cada uno de los componentes que encuentra en el diseño eléctrico de los cuales no tiene una plantilla en sus librerías li brerías con correspondencia exacta. Aún cuando él coloque plantillas a componentes que reconozca y por alguna razón no quieran ponerse esas, se pueden cambiar en cualquier momento. Cuando termina de rastrear las plantillas, coloca los componentes en la zona de trabajo, sin pistas, sólo con conexiones. A partir de ahí comienza la tarea manual. El primer paso es fijar las dimensiones para introducir en ellas todos los componentes con sus respectivas pistas.
685
690
695
700
705
710
La placa principal tiene unas dimensiones para que, sin desperdiciar espacio, ocupe lo máximo aprovechable del ancho del espacio, para hacer el sistema lo más corto posible. Sus dimensiones dimensiones son de de 13.97 x 144.145 144.145 cm. (Ancho x Largo). La placa modular, así mismo, tiene restricciones de espacio. Su posición forma un ángulo de 90º con la placa principal, con lo cual no puede medir de alto más que una bahía de 5 ¼” menos la distancia que ocupen las chapas de la caja que vaya a contener el sistema, y la distancia de base de la placa principal y un pequeño margen para las soldaduras. Sus dimensiones son 100.965 x 14.56 cm. (Largo x Alto). El siguiente paso es definir la anchura de las pistas y su separación. El diseño del sistema con estos componentes es algo complejo en un espacio tan limitado, a pesar de ello, sólo se pueden utilizar placas de doble cara. Un usuario normal no tiene acceso a industrias que puedan hacer placas multicapa y se debe ofrecer la oportunidad de que se puedan realizar de manera casera; por eso mismo la anchura de las pistas se aumenta hasta 30 y la separación entre ellas hasta 30 también, ayudando a que si el proceso manual quema demasiado las pistas no se pierdan. Se desactivan todas las demás pistas y se procede a la colocación de componentes en el espacio disponible. La colocación de los componentes es algo crítico si se quiere optimizar el espacio. Un solo giro de un componente puede cambiar totalmente toda la estructura de pistas de la placa. Para este sistema se ha procedido en primer lugar a una colocación “intuitiva” de componentes para luego hacer el auto ruta del programa para sólo dos capas. capas. El proceso automático de Orcad para pistas no es muy eficiente. De hecho, en 40 minutos de comprobaciones heurísticas le faltaban 2 nodos por unir. Pero el auto ruta sirve para limpiar la pantalla de conexiones y que dé una visión en conjunto de toda la placa con sus conexiones. A partir de ella se pueden tomar decisiones de colocación de componentes y de ruta de pistas para conseguir mayor aprovechamiento aprovechamiento de espacio.
45
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Otro aspecto cuando se diseñan placas con finalidad de fabricación casera, y éstas son de doble capa, es la conexión entre capas. Orcad realiza los puentes donde cree conveniente, asumiendo en todo momento que los agujeros de los componentes están metalizados y conducen entre capas.
715
En una placa casera eso no es posible, por lo tanto hay que evitar ante todo que los agujeros de componentes coincidan con agujeros entre capas. Igualmente se ha de tener en cuenta a la hora de colocar los conectores para los distintos módulos, que estos, montados, no deben interferir con ningún otro componente, ni correr riesgo de contacto con ningún puente de soldadura para cuando estén montados los componentes en la placa.
720
Para evitar interferencias entre distintas pistas, y evitar en la medida de lo posible la la emisión 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 páginas se pueden ver los dos diseños de las placas principal y modular.
46
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 20: Taladros y componentes de la placa principal
47
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
48
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 21: Fotolito placa principal, capa superior
49
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
50
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 22: Fotolito placa principal capa inferior
51
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
52
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 23: Taladros y componentes de la placa modular
53
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
54
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 24: Fotolito placa modular capa superior
55
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
56
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 25: Fotolito Fotolito placa principal principal capa inferior
57
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
58
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Con los fotolitos se realizan pruebas de creación de las placas de manera manual (insolación + revelado + quemado), consiguiendo unos prototipos, montando luego los componentes y realizando los tests de continuidad.
730
Gráfico 26: Placa modular
Gráfico 27: Placa modular montada y testeada
Gráfico 28: Placa principal montada y testeada
59
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
735 Gráfico 29: Placa de pruebas con placa modular integrada
Estos prototipos se testean eléctricamente y se comprueba su comportamiento teórico. Todos los resultados son los esperados excepto dos problemas. En la placa modular, al no ser los taladros metalizados, el bloque central de tierra se queda sin conexión, por lo que hay que hacer una soldadura externa. En el caso que los taladros sean metalizados este problema se solucionará. Otro problema es el reset por hardware. El microcontrolador principal no hace caso al reset en la línea MCLR. La respuesta a este problema está en los fusibles de configuración. En la sección de software se explicará el bootloader y los problemas que puede causar según los fusibles que se activen en su programación.
740
745
60
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.2.7 Prototipo hardware final Realizadas las pruebas necesarias en los prototipos iniciales, se realiza un prototipo final, preparado para el montaje y para su programación. 750
Para ello se encarga a una industria de circuitos impresos la fabricación de las placas del sistema, para su posterior soldado de componentes, montaje montaje en la bahía y pruebas. Se muestran fotografías de todas las partes del prototipo final para dar una explicación gráfica complementaria a la teórica expuesta anteriormente.
755
Gráfico 30: Empaquetado industrial de las pcb pcb necesarias necesarias para el sistema
61
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
760
Gráfico 31: Componentes de la interfaz de usuario
Gráfico 32: Interfaz de usuario montada en el frontal
Gráfico 33: Parte trasera del frontal
62
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
765 Gráfico 34: Sistema completo montado
Se puede ver en el Gráfico 34 todas las partes hardware principales del sistema: placa principal, placas modulares e interfaz de de usuario.
770
Gráfico 35: Módulo de sonido y regulador de voltaje
En el Gráfico 35, además del módulo módul o de sonido de sonido y el regulador de voltaje, se pueden 2 ver las resistencias pull-up pull-up del del bus I C, del reset y de las líneas de control de los de/multiplexores. El cristal de 4 MHz y sus dos condensadores de 22 pF estabilizadores para el 16F876-4 MHz.
63
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
775 Gráfico 36: Conectores para la interfaz (entrada, salida)
Se puede observar en el Gráfico 36, además de lo descrito, la memoria EPROM y el driver I2C-paralelo.
780
Gráfico 37: MAX233 y los dos demultiplexores demultiplexores
64
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 38: Conectores externos generales del sistema
785
De izquierda a derecha, las entradas de sondas de temperatura interior y exterior del sistema; molex de alimentación, interruptor del sistema y conector serie DB9 para el RS232.
Gráfico 39: Placa modular completa
790
En el Gráfico 39, de izquierda a derecha, resistencia pull-up de reset, microcontrolador, resistencias para leer (eventualmente) la corriente consumida por los ventiladores (5 cada uno), cristal, condensadores de cristal, resistencias pull-up de los tacómetros, conector unión a la placa principal, controlador de motores L293B, diodos para la alimentación de los ventiladores, resistencias anti-capacidad de las sondas de temperatura, condensadores para filtrar el ruido en el tacómetro y conectores, dos a dos, de sonda y ventilador.
65
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
795 Gráfico 40: Soldaduras de la placa modular
Debido a la proximidad de las placas modulares en el sistema, por restricciones de espacio, es importante hacer las soldaduras lo más finas posibles.
800
Gráfico 41: Prototipo hardware final
66
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.3
Software Tras la implementación del sistema hardware adecuado a las necesidades del sistema se debe crear el software que lo controle y que realmente se ocupe de cumplir las funcionalidades con el hardware disponible.
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 características especiales de la programación del 16F876, que sirven como preámbulo a la implementación del software.
4.3.1 Casos de uso
810 Gráfico 42: Diagrama de casos de uso
67
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-01 Encender/Apagar
Objetivo
Encender o apagar el sistema
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente 1)
Flujo principal 2)
El usuario cambia de posición el interruptor de encendido El sistema cambia de estado, si estaba encendido se apaga y viceversa
Flujos alternativos
Poscondicione s
El sistema cambia de estado a encendido o apagado en función de su estado anterior. Si la configuración activa no se había guardado se pierde completamente. Si el sistema estaba apagado se enciende mostrando la pantalla de bienvenida.
Identificador
CU-02 Ver estado del sistema
Objetivo
Ver el estado del sistema, temperaturas de los canales que dispongan de ella, velocidades y valor PWM de los ventiladores
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
Flujo principal 2)
Flujos alternativos
1) 2)
Poscondicione s
68
El usuario partiendo de la pantalla de bienvenida, pulsa el botón izquierdo El sistema cambia el contenido del LCD. Mostrando, en orden, y cada 2 segundos el estado de cada uno de los módulos El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
La pantalla muestra indefinidamente, hasta la pulsación del botón derecho, el estado estado de los módulos módulos del sistema
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-03 Ver módulo comunicado
Objetivo
Visualizar qué modulo tiene la comunicación serie activa en ese momento
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
Flujo principal 2)
Flujos alternativos
1) 2)
El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, abajo, abajo, izquierda. El sistema muestra en pantalla el módulo que tiene la comunicación activa El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Poscondicione s
Ninguna
Identificador
CU-04 Ver módulo activado para resetear
Objetivo
Visualizar qué modulo tiene preparado para resetear en ese momento
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
Flujo principal 2)
Flujos alternativos
1) 2)
Poscondicione s
El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, abajo, abajo, derecho. El sistema muestra en pantalla el módulo que tiene preparado para resetear resetear El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Ninguna
69
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-05 Ver valor de brillo
Objetivo
Visualizar el valor que tiene el brillo de la pantalla LCD en ese momento
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, derecho, abajo, izquierdo. izquierdo.
2)
El sistema muestra en pantalla el valor actual del brillo
Flujo principal
Flujos alternativos
1) 2)
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 alimentación de corriente con el sistema encendido 1)
Flujo principal 2)
Flujos alternativos
1) 2)
Poscondicione s
70
El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
El usuario partiendo de la pantalla de bienvenida, pulsa botón derecho, derecho, derecho, abajo, derecho derecho El sistema muestra en pantalla el valor actual del contraste para el canal seleccionado El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Ninguna
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador Objetivo Actor/es Precondiciones
Flujo principal
Flujos alternativos
CU-07 Ver valor de PWM de un canal
Visualizar el valor de PWM que tiene un canal en concreto en ese momento, si la configuración manual está activada Usuario Tener alimentación de corriente con el sistema encendido Estar activada la configuración manual El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho, derecho, derecho, derecho, abajo, abajo, derecho El sistema muestra en pantalla el valor de PWM del 2) canal seleccionado y sus RPM actuales El usuario pulsa botón 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 2) alarma hasta que se pulse algún botón El usuario pulsa botón izquierdo, saliendo de la 1) visualización de canales
Poscondicione s
Ninguna
Identificador
CU-08 Ver valor de fijo de
Objetivo Actor/es Precondiciones
Flujo principal
Flujos alternativos
Poscondicione s
PWM del sistema Visualizar el valor de PWM que tienen todos los canales del sistema en ese momento, si la configuración fija está activada Usuario Tener alimentación de corriente con el sistema encendido Estar activada la configuración fija El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho, derecho, derecho, derecho, derecho, derecho, abajo, derecho derecho 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 2)
Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Ninguna
71
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador Objetivo Actor/es Precondiciones
Flujo principal
Flujos alternativos
entorno Visualizar el valor de la temperatura fijada para un entorno en concreto en ese momento, si la configuración auto está activada Usuario Tener alimentación de corriente con el sistema encendido Estar activada la configuración auto El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho 5 veces, veces, derecho, abajo, derecho El sistema muestra el valor de la temperatura fijada para 2) el entorno seleccionado y su temperatura actual El usuario pulsa botón 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 2) alarma hasta que se pulse algún botón El usuario pulsa botón izquierdo, saliendo de la 1) visualización de entornos
Poscondicione s
Ninguna
Identificador
CU-10 Activar/Desactivar configuración manual
Objetivo Actor/es Precondiciones
Flujo principal
Flujos alternativos Poscondicione s
72
CU-09 Ver valor de la temperatura fijada para un
Activar o desactivar la configuración manual, según el estado anterior Usuario Tener alimentación de corriente con el sistema encendido El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho, derecho, derecho, derecho, abajo, abajo, izquierdo 2) El sistema muestra el estado actual de la configuración El usuario cambia el estado de la configuración pulsando 3) botón arriba El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador Objetivo Actor/es
CU-11 Activar/Desactivar configuración fija
Activar o desactivar la configuración fija, según el estado anterior Usuario
Poscondicione s
Tener alimentación de corriente con el sistema encendido El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho 4 veces, veces, abajo, izquierdo izquierdo 2) El sistema muestra el estado actual de la configuración El usuario cambia el estado de la configuración pulsando 3) botón arriba El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales
Identificador
CU-12 Activar/Desactivar configuración auto
Precondiciones
Flujo principal
Flujos alternativos
Objetivo Actor/es Precondiciones
Flujo principal
Flujos alternativos Poscondicione s
Activar o desactivar la configuración auto, según el estado anterior Usuario Tener alimentación de corriente con el sistema encendido El usuario partiendo de la pantalla de bienvenida, pulsa 1) botón derecho 5 veces, veces, abajo, izquierdo izquierdo 2) El sistema muestra el estado actual de la configuración El usuario cambia el estado de la configuración pulsando 3) botón arriba El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón Al desactivar la configuración el sistema pasa a un estado fijo de PWM de valor 10 en todos sus canales
73
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-13 Cambiar valor de brillo del LCD
Objetivo
Cambiar el valor del brillo de LCD
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1) Se lanza el caso de uso Ver brillo brill o El usuario con los botones arriba y abajo, sube o baja el 2) nivel de brillo del LCD El usuario pulsa botón derecho guardando el nivel de 3) brillo El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón
Flujo principal
Flujos alternativos
Poscondicione s
La pantalla de LCD brilla más o menos según el valor
Identificador
CU-14 Cambiar valor de contraste del LCD
Objetivo
Cambiar el valor del contraste de LCD
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido Se lanza el caso de uso Ver contraste El usuario con los botones arriba y abajo, sube o baja el 2) nivel de contraste del LCD El usuario pulsa botón derecho guardando el nivel de 3) contraste El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón La pantalla de LCD tiene más o menos contraste según el valor 1)
Flujo principal
Flujos alternativos
Poscondicione s
74
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-15 Cambiar modulo para resetear
Objetivo
Cambiar el módulo preparado para resetearse
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido
Flujo principal
1)
Se lanza el caso de uso Ver reset módulo
2)
El usuario con los botones arriba y abajo, cambia de módulo, preparando su reinicialización
3)
El sistema prepara la reinicialización de ese módulo
1)
El sistema detecta una alarma en alguno de los ventiladores
2)
Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Flujos alternativos
Poscondicione s
Ninguna
Identificador
CU-16 Resetear módulo
Objetivo
Resetear el módulo preparado para su reinicialización
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
Se lanza el caso de uso Ver reset módulo
2)
El usuario pulsa el botón derecho reseteando el módulo 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 algún botón
Flujo principal
Flujos alternativos
Poscondicione s
El módulo seleccionado se resetea
75
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-17 Cambiar módulo comunicado
Objetivo
Cambiar el módulo comunicado por el puerto serie
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido 1)
Se lanza el caso de uso Ver módulo comunicado
2)
El usuario con los botones arriba y abajo, cambia de módulo, cambiando la comunicación
1)
El sistema detecta una alarma en alguno de los ventiladores
2)
Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
Flujo principal
Flujos alternativos
Poscondicione s
El módulo seleccionado toma la comunicación serie
Identificador
CU-18 Cambiar valor PWM canal
Objetivo
Cambiar el valor PWM de un canal determinado
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido Configuración manual activada
Flujo principal
1)
Se lanza el caso de uso Ver valor canal
2)
El usuario con los botones arriba y abajo, cambia el valor PWM del canal visualizado
3)
El usuario con el botón 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 algún botón
Flujos alternativos
Poscondicione s
76
El módulo seleccionado cambia de valor PWM, cambiando así la velocidad del ventilador que controla
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-19 Cambiar valor PWM fijo
Objetivo
Cambiar el valor PWM fijo para todos los l os canales del sistema
Actor/es
Usuario
Precondiciones
Flujo principal
Flujos alternativos
Poscondicione s
Tener alimentación de corriente con el sistema encendido Configuración fija activada 1) Se lanza el caso de uso Ver valor fijo f ijo El usuario con los botones arriba y abajo, cambia el valor 2) PWM del sistema El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón 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
Flujo principal
Flujos alternativos
Poscondicione s
Tener alimentación de corriente con el sistema encendido Configuración auto activada 1) Se lanza el caso de uso Ver temperatura entorno El usuario con los botones arriba y abajo, cambia el valor 2) de la temperatura deseada para ese entorno en concreto 3) El usuario con el botón derecho cambia de entorno El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón El sistema guardará esa temperatura para ese entorno, aplicando todo el software de control a ese valor.
77
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Identificador
CU-21 Leer configuración
Objetivo
Leer la configuración y aplicarla a todo el sistema
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido
Flujo principal
1)
Poscondicione s
El usuario pulsa 6 veces botón derecho desde la pantalla de bienvenida, botón abajo y botón derecho El sistema detecta una alarma en alguno de los 1) ventiladores Muestra la pantalla de alarma emitiendo el sonido de 2) alarma hasta que se pulse algún botón No hay ninguna configuración configuración guardada, guardada, el sistema 1) aplica un valor 10 (máximo) a todos los canales El sistema lee la configuración de la memoria y la aplica a todo el sistema
Identificador
CU-22 Guardar configuración
Objetivo
Leer la configuración y aplicarla a todo el sistema
Actor/es
Usuario
Precondiciones
Tener alimentación de corriente con el sistema encendido
Flujo principal
1)
Flujos alternativos
1)
Flujos alternativos 2)
Poscondicione s
78
El usuario pulsa 6 veces botón derecho desde la pantalla de bienvenida, botón arriba y botón derecho El sistema detecta una alarma en alguno de los ventiladores Muestra la pantalla de alarma emitiendo el sonido de alarma hasta que se pulse algún botón
El sistema guarda la configuración activa en la memoria
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.3.2 Flujo de datos
Gráfico 43: Diagrama de flujo de datos
79
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.3.3 Programación del 16F876 Para el desarrollo de la sección lógica del sistema sobre el microcontrolador PIC16F876 se usa el compilador CCS [9.9 9.9]], que compila código quasi-c (excepto cierto tipo de punteros, operaciones especiales sobre el sistema y algún tipo especial de datos) en instrucciones ensamblador para el microcontrolador.
870
Este micro permite reprogramarse más de mil veces, pero el proceso de programación, si no se usa hardware específico y costoso, implica quitar el circuito de la placa de producción, con todos los peligros que ello implica. Bootloader
875
Para hacer más sencillo el proceso de programación y debugger, se hace uso de una característica especial de algunos microcontroladores, entre los que se cuenta el elegido para este sistema: puede escribir en su propia memoria de programa. Se puede insertar un pequeño programa que se ejecute siempre antes que ninguna rutina al resetear o encender el micro.
880
Este programa enviará una señal por el puerto serie RS232 del microcontrolador, esperando respuesta durante un tiempo. Si en este tiempo no le contesta nadie sigue con la ejecución normal del programa existente en la memoria del programa. Pero si la respuesta es el carácter estipulado anteriormente (a la hora de programar este pequeño programa), comienza a leer líneas de código del puerto serie y a grabarlas en la memoria de programa del microcontrolador, realizando así una programación en caliente.
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 comunicación (hay algunos en los que el que inicia la comunicación es el software 9.10]], uno de los más del PC). Para este desarrollo se usa el de Shane Tolmie [9.10 populares en la comunidad Microchip, por su seguridad, fiabilidad y sencillez de uso, a pesar de otros que son más pequeños y ocupan menos memoria.
890
Para descargar el programa desde el ordenador hay que usar un programa compatible con el bootloader grabado en el micro, para que puedan entenderse entre 9.11]]. ellos. El usado para realizar esta tarea es el de Petr Kolomaznik [9.11
895
80
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Gráfico 44: Downloader a bootloader de Petr Kolomaznik [ 9.11 9.11]]
900
En cuanto el programa acaba de descargarse, el bootloader coloca la dirección de ejecución de programa a la primera línea de ejecución del código programado, realizando un reseteo transparente. ADC
905
910
915
El programa que ejecutan los módulos se encarga de adquirir los datos necesarios para la funcionalidad del sistema: temperatura y velocidad del ventilador. Estos datos los adquiere de sistemas externos: una sonda de temperatura y el tacómetro del ventilador. Para recuperar la temperatura debe usar la capacidad del microcontrolador de convertir valores analógicos en digital. La sonda usada en el sistema ofrece un voltaje de 0,1 V. por ºC. La precisión del periférico conversor ADC es como máximo de 10 bits, lo que significa que el valor de entrada lo compara con la señal de referencia (5 V.) y esa diferencia la muestra en 10 bits. Con 10 bits (2 10) se pueden representar 1024 valores distintos, por lo tanto, el valor en grados centígrados, del conversor analógico digital será: read_adc() * (5/1024) * 100. El valor del ADC es multiplicado por el número de divisiones que ofrecen los 5 voltios de la señal de referencia, luego se multiplica por 100 para conseguir un valor en grados centígrados, y no en centésimas, tal como lo genera la sonda. Se pueden ver ejemplos de lectura analógica en el código comentado, en el Apéndice A.
81
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Interrupciones
Para la lectura de las revoluciones por minuto, tal como se explicó en la sección de hardware, se leen los pulsos del tacómetro del ventilador. Estos pulsos se pueden convertir en cuentas usando la característica de interrupción del puerto B del 16F876. Cada vez que se produce un paso de alta a baja en alguna de las puertas del puerto, se dispara la interrupción interrupción ejecutando el código código que contenga. contenga.
920
Si este código es sumar uno a una variable global o estática, se están contando los pulsos de esa entrada. Para saber cuantas hay por minuto se necesita una unidad de tiempo por la que se pueda dividir la l a cantidad de pulsos medidos.
925
La unidad de tiempo la puede ofrecer la interrupción timer_0. El timer_0 interno del sistema se puede configurar para que desborde a ciertas cuentas, normalmente divisores del reloj del micro usado. Sabiendo la velocidad del micro y el divisor, se puede calcular cuantas veces veces por segundo se desborda; desborda; cada vez que se desborde, desborde, se ejecutará el código contenido en la interrupción timer_0.
930
Si el código del timer_0 es guardar el número almacenado por la interrupción del puerto B y reiniciar esa variable a 0, se tiene el número de cuentas que tiene ese pulso en la unidad de de tiempo en que está configurado el timer_0. timer_0. Para más información sobre divisores o las interrupciones se recomienda el 9.8]]. datasheet de Microchip [9.8
935
PWM
El microcontrolador PIC16F876 dispone de dos módulos generadores de PWM, independientes entre sí, excepto por la frecuencia a la que trabajan, que debe ser siempre la misma.
940
El compilador CCS ofrece un medio muy sencillo para usarlos con efectividad. Tan solo hay que configurar los puertos como salida de PWM, fijar la frecuencia del Timer_2, que será la que marque la frecuencia de los PWM y luego fijar independientemente el ciclo de trabajo de cada uno de ellos. No se precisa definir de nuevo la frecuencia para cambiar el ciclo de trabajo. Hay que tener especial cuidado al usar el PWM como una salida directa a un dispositivo que consuma mucha corriente. Esto podría dañar irremediablemente el circuito.
945
82
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
2
IC
950
955
960
Para la comunicación entr e ntr e componentes, entre otros posibles, el PIC16F876 implementa el protocolo I2C. Este tipo de interfaz serie asegura una gran fiabilidad en la comunicación que llega a tolerar una velocidad máxima de 400 Kbps. Es capaz de interconectar hasta 128 dispositivos situados a gran distancia, por lo que el controlador se puede utilizar también en sistemas de gran tamaño. El master es el que inicia y termina la transferencia general y provee de la señal de reloj. El esclavo (“slave”) es el dispositivo direccionado por el master, mediante 7 bits, lo que limita el número número de componentes componentes a 128. En el protocolo I 2C cada dispositivo tiene asignada una dirección de 7 o de 10 bits que envía el master cuando comienza la transferencia con uno de ellos. Tras la dirección se añade el bit de recepción/transmisión o lectura/escritura (R/W). Los datos se transmiten con longitud byte y al finalizar cada uno se inserta un bit de reconocimiento ACK. Debe existir un modulo de arbitraje que gestione que solo hay un maestro en cada instante sobre el bus compartido. En el Gráfico 45 se puede ver el esquema del protocolo.
965
El compilador CCS ofrece rutinas muy cómodas para la implantación i mplantación del protocolo, aunque se debe de tener cuidado con los tiempos de espera necesarios para la correcta transmisión de datos y con otras interrupciones que pueden interferir en la transmisión.
2
Gráfico 45: Protocolo I C
970
83
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.3.4 Estructura del programa
Gráfico 46: Estructura del software del sistema
975
El software del sistema se compone del software del sistema central y del de los módulos de adquisición de datos/actuadores. El sistema central comienza con el código del bootloader, si no hay petición de reprogramación, el código sigue al main() del código programado. Se comienza inicializando el sistema, y los registros necesarios para las funciones de PWM que serán las que, en el módulo central, controlan el brillo bri llo y el contraste del LCD.
980
Se inicializan las variables globales, las interrupciones de botones y del timer, se lee la configuración anteriormente guardada en la EEPROM EEPROM del del micro, configurando el micro en ese momento con ella, si la hubiera, y se comienza la máquina de estados en su estado inicial (pantalla de bienvenida) para controlar los movimientos del usuario en los menús y los diferentes estados por los que pasa.
985
Se haya leído de la configuración, o la haya configurado el usuario (por los pasos definidos en los casos de uso) se ejecutan las instrucciones de la configuración en uso.
84
Sistema de regulación de temperaturas con microcontroladores Solución 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 configuración auto, también. La alarma sin embargo es una consecuencia indirecta de Timer_0. Las configuraciones manual y fija, son sencillas, sólo realizan cambios (de necesitarlo) en el momento de su definición. Tan sólo se pueden ver intervenidas (al igual que la automática) por el sistema de alarma. La interrupción Timer_0, cada dos segundos verifica que todos los sistemas tengan sus variables de error a 0. En caso de no tenerlas, se interrumpen todos los procesos, y se lanza una alarma al usuario indicando el módulo que ha producido el error. Una vez que interviene el usuario se vuelve de nuevo al estado en que estaba el sistema anteriormente. La configuración automática es la más complicada puesto que en ella interviene la interrupción Timer_0 y subsecuentemente, un proceso periódico de lectura y actualización de valores sin intervención del usuario, según el algoritmo de control.
1005
1010
La configuración automática cuando está activa verifica con periodicidad de un tiempo definido en programación (x veces la interrupción Timer_0) la temperatura de los elementos controlados y modifica la actuación sobre ellos en función del resultado del algoritmo de control a partir de esa temperatura leída, la temperatura deseada previamente introducida por el usuario (o leída de la configuración por defecto) y del error cometido anteriormente. El algoritmo de control se ve en el siguiente apartado. Al mismo nivel que las configuraciones están las operaciones básicas ya no referentes a la funcionalidad, sino a la configuración del sistema, como son las características de comunicación y reset del sistema, y del visualizador, brillo y contraste, y las capacidades de guardar y leer configuraciones.
1015
1020
La parte de software introducido en los bloques modulares se encarga de la adquisición de datos y de ofrecerle disponibilidad al proceso principal para leerlos. Esos datos son de doble sentido, el módulo se encarga asimismo de actualizar la actuación sobre el sistema físico cuando esos datos, en su base de datos virtual, cambian (normalmente cambiados por toma de decisiones del usuario o del propio sistema).
85
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Posición en el array
Significado del valor
0
PWM canal 1
1
PWM canal 2
2
RPM canal 1
3
RPM canal 2
4
Temperatura canal 1
5
Temperatura canal 2
6
Alarma
7
Reset
Tabla 3: Estructura de almacenamiento almacenamiento de datos
La Tabla 3 muestra la colocación de los datos en la memoria física. Obsérvese la colocación dos a dos que facilita f acilita el acceso y modificación de los l os datos desde bucles y algoritmos recursivos, con el consecuente ahorro de memoria en la implementación del método
1025
86
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.3.5 Algoritmo de control
1030
Para que la configuración auto pueda realizar su tarea de manera desatendida, debe existir alguien que la controle, actualizando los valores de actuación sobre los reguladores según las necesidades de cada momento para poder cumplir, o intentar cumplir con los objetivos marcados.
Gráfico 47: Esquema de control típico sobre procesos
1035
Para cumplir con los objetivos del sistema en la configuración auto, hay que sustituir la supervisión humana del Gráfico 47, por un proceso al que el usuario le marca unas directrices y él toma las decisiones adecuadas para su consecución.
Gráfico 48: Esquema de control con software embebido
1040
1045
En el Gráfico 48 se observa el sistema de control a aplicar en un sistema embebido para el control de un sistema físico. Los tipos de algoritmos de control más frecuentes son: Lógica difusa Sistemas expertos Redes neuronales Sistemas adaptativos Control tradicional, PID
87
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Sobre todos ellos se ha elegido el control tradicional, PID, siguiendo la primera norma del control automático: no aplicar nunca un sistema de control más complejo que el que precise la aplicación .
1050
El control PID es el tipo de control más sencillo de todos, es de fácil implementación, se puede trazar y comprobar sus resultados con muy pocas variaciones, precisa de muy poco espacio en memoria y usa muy poco tiempo de proceso. Estas características características lo hacen susceptible 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 aplicación de constantes sobre operaciones básicas para el control del sistema; la proporcionalidad del error (para corregirlo), la derivación del error (para suavizar el efecto de la proporcionalidad) y la integración (que evita que el sistema se estabilice en un error).
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 relación con las constantes Kp, Ki y Kd . Si se introduce un valor de muestreo muy alto el sistema puede variar demasiado en ese período, lo cual produciría oscilaciones en el sistema, a pesar de que Kp fuese pequeña. Si se introduce un valor de muestreo muy pequeño, el algoritmo de control se puede sobresaturar, no resultando de utilidad la información retroalimentada.
1065
En este sistema se controlan temperaturas en entornos acotados. La temperatura es una medida continua que suele variar con relativa lentitud lo cuál hace pensar en un tiempo de muestreo muy alto, pero no todos los componentes varían su temperatura igual de rápido. Por lo que la mejor opción es realizar diversos ensayos para obtener una modelización, aunque sea muy sencilla, del sistema, que permita obtener los mejores valores de las constantes y sobre todo el tiempo de muestreo adecuado. Incluso, que sería lo más lógico, se podrían producir casos en que este tiempo de muestreo variara según el tipo de componente a controlar.
1070
1075
La implementación del algoritmo para este sistema difiere de las implementaciones tradicionales. La teoría de control clásica define que si se desea que la variable controlada crezca, debe crecer la actuación del controlador. Este sistema es al contrario. Cuando se desea que la variable controlada decrezca (temperatura) se debe aumentar la actuación (ventilador).
1080
Se puede visualizar el algoritmo en C del control PID en el Apéndice Código fuente. Las variables Kp, Ki y Kd han sido elegidas por experimentación (fase de pruebas).
1085
88
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
89
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
4.4
Presupuesto El coste total de este sistema se desglosa en dos grandes apartados: hardware y software. El software necesario para compilar los archivos fuente es el compilador CCS. El código del bootloader es gratuito, aunque también se pueden usar versiones de pago. La versión básica básica para este sistema sistema cuesta 125 €. €.
1090
Los componentes pueden variar mucho de precio de una tienda a otra, o mismamente, si se consiguen gratuitamente a través de muestras de fabricantes. Aquí se ofrece la lista de componentes necesaria para el montaje de las placas junto con su precio aproximado tomado como media entre varias tiendas de electrónica.
1095
Placa principal:
Refere Referenci ncia a
C1, C5 C2, C3, C4, C4, C6, C6, C7, C7, C8, C8, C11, C11, C12 C12 C9 C10 J1, J2, J3, J4, J8, J8, J10 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 Parte
Cantid Cantidad ad
22pF 100n 100nF F 330nF 10nF 10P 10PIN Hem Hembra bra MOLEX4 CBTNS CLCD BUZZER DB9 BD140 10K 1K 2K2 PIC16F876 L78/L05TO92 PCF8574 24LC256 HEF4051BP MAX233 4MHz DV24200
2 8 1 1 6 1 1 1 1 1 2 4 2 2 1 1 1 1 2 1 1 1
Precio Precio
0,02 0,09 0,09 0,06 0,09 0,10 0,10 0,30 0,40 0,40 1,50 0,20 0,15 0,01 0,01 0,01 5,00 0,50 3,00 1,50 1,00 5,70 0,60 18,00
Precio Precio Total Total
0,05 0,72 0,72 0,06 0,09 0,60 0,60 0,30 0,40 0,40 1,50 0,20 0,30 0,05 0,02 0,02 5,00 0,50 3,00 1,50 2,00 5,70 0,60 18,00 41,02
Sistema de regulación de temperaturas con microcontroladores Solución propuesta
Placa modular:
Referencia
Parte
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
Cantidad
Precio
Precio Total
1uF 22pF D1N4007 Motor Sonda CM0
2 2 2 2 2 1
0,02 0,02 0,02 0,50 1,40 0,10
0,05 0,05 0,04 1,00 2,80 0,10
10hm
10
0,01
0,12
1K 2 K2 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. placas. En total y contando con que el software sólo se paga la primera vez: 41,02 € + 12,94 € + 15 € = 68,96 €
1110
1115
Este precio incluye componentes para una sola placa modular, que controlaría, según requisitos, dos ventiladores. Habría que añadir otros 12,94 € por cada módulo a mayores que se quisiera instalar, hasta un máximo en total de 6 módulos. Haciendo una estimación basándose en el ahorro obtenido en la fabricación industrial de las placas, el sistema fabricado a gran escala costaría entre un 30-40% menos.
91
Sistema de regulación de temperaturas con microcontroladores Pruebas
5
Pruebas
5.1
Definición del sistema de pruebas Para probar el sistema se monta en una caja que cumple los requisitos del sistema, una Casetek 1019A, ATX semitorre. A ésta se le añaden componentes caloríficos en abundancia, para poder probar todas las funcionalidades del sistema, así como hacer distintas configuraciones según los requisitos.
1120
La caja incluye una fuente de alimentación de 460 W, 2 procesadores Opteron 242 1,8 GHz, 4 bancos de 512 Mb DDR ECC, una Hercules ATI All in Wonder con 128 Mb., 4 discos duros SATA 120 Gb. 7200 RPM configurados en RAID 0+1 (así se asegura un funcionamiento mínimo continuo), 1 disco duro IDE 120 Gb. 7200 RPM, unidad DVD y grabadora DVD.
1125
Con los ventiladores por defecto: dos en la fuente de alimentación, uno en cada procesador y otro en la l a tarjeta t arjeta gráfica, gráfi ca, 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 más el de la fuente de alimentación, equilibran el flujo de aire que recorre la caja.
1135
Gráfico 49: Caja ATX Casetek 1019
92
Sistema de regulación de temperaturas con microcontroladores Pruebas
1140
Los ventiladores usados son unos UC-8FAB, con sensor de tacómetro y conector molex de 3 pines. Su tabla de características 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: Características del Enermax UC-8FAB
1145
Este modelo de ventilador tiene un potenciómetro integrado, por lo que se necesita modificar el cableado para que se ajuste al sistema.
Gráfico 50: Modificación de cableado de ventilador
1150
Se han instalado 4 sondas en los lugares de mayor generación de calor: fuente de alimentación, en los dos procesadores y en el disco duro superior, que por estar configurados en RAID, es seguro que siempre está tan o más caliente que cualquier otro inferior.
93
Sistema de regulación de temperaturas con microcontroladores Pruebas
Gráfico 51: Sonda en el disipador de los procesadores
1155
Gráfico 52: Sonda en el chasis del disco duro superior
94
Sistema de regulación de temperaturas con microcontroladores Pruebas
5.2
Pruebas físicas En las pruebas físicas se ha comprobado el cumplimiento de todas las especificaciones del sistema a nivel físico. fí sico.
1160
El sistema está montado en una caja ATX, en una bahía de 5 ¼”. Dispone de interfaz de usuario, entrada y salida. Dispone de conectores para sondas de temperatura y ventiladores, así como un conector para la comunicación serie. Dispone de un conector molex para su alimentación de la fuente de alimentación y un interruptor que lo l o enciende o apaga cuando hay alimentación.
1165 Gráfico 53: Sistema instalado completamente
El conjunto de los 10 ventiladores, en su configuración sobredimensionada (100 %), sin el sistema conectado, consumen en su totalidad totali dad 3,1 A. 1170
El sistema otorgando a todos los ventiladores el 100 %, consume 3,5 A. con la retroiluminación del LCD LCD al al máximo, y 3,3 A. con la retroiluminación mínima. En funcionamiento automático, automático, se ha podido medir un valor mínimo de 1,2 A.
95
Sistema de regulación de temperaturas con microcontroladores Pruebas
Las pruebas de sonoridad se realizaron con un sonómetro marca Cesva modelo SC2C. En el gráfico 52 se observan los resultados de las mediciones. El gráfico izquierdo representa la sonoridad de los ventiladores en su configuración por defecto, sin el sistema conectado. El gráfico de la derecha representa el valor medio sonoro obtenido para 10 minutos de configuración automática con el sistema en funcionamiento.
1175
Gráfico 54: Valores tridimensionales de sonoridad del sistema
Las mediciones del Gráfico 52 se han realizado en un espacio con una presión sonora entre 40,5 dB y 41,2 dB sin el sistema conectado. Las valores son las medidas realizadas a 30 cm. de la superficie de la caja.
1180
5.3
Pruebas lógicas El funcionamiento del interfaz del usuario es correcto, no realizando ninguna operación en caso de no recibir una entrada esperada para ese estado.
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 configuración automática ha sido probada para varios valores distintos de las constantes del algoritmo PID y diferentes valores de temperatura deseada para los distintos componentes regulados. Los resultados de las pruebas son las gráficas de las páginas siguientes.
1190
96
Sistema de regulación de temperaturas con microcontroladores Pruebas
1195
97
Sistema de regulación de temperaturas con microcontroladores Pruebas
98
Sistema de regulación de temperaturas con microcontroladores Pruebas
99
Sistema de regulación de temperaturas con microcontroladores Pruebas
100
Sistema de regulación de temperaturas con microcontroladores Pruebas
1200
Esta última gráfica se ha realizado, con ventilación constante, para comprobar que el sistema controlado no es estrictamente lineal. Tiene muchas perturbaciones.
1205
La primera gráfica se ha realizado para ver el comportamiento máximo de los componentes con máxima ventilación constante. Es importante ver como las temperaturas de los procesadores comienzan a fluctuar al alza en cuanto la ventilación de la fuente y del disco deja de ser máxima. La segunda y tercera gráfica se ha realizado con con valores de Kp=1, Ki=1, Kd=1. La cuarta gráfica se ha realizado con con valores de Kp=0, Ki=1, Kd=0.
1210
Las pruebas son satisfactorias, el sistema regula adecuadamente, manteniendo los componentes en las temperaturas adecuadas y ahorrando lo posible en ventilación cuando no es necesario.
101
Sistema de regulación de temperaturas con microcontroladores Pruebas
6
Discusión y conclusiones
6.1
Discusión de resultados El primer resultado que debe discutirse es la oscilación de las medidas de las temperaturas de 1º C. Esta oscilación puede deberse al error admitido por el fabricante de la sonda, de +/- 1º C y también puede deberse al conversor analógico digital del microcontrolador.
1215
El conversor analógico ya ha dado problemas anteriormente. Puede sufrir alteraciones aparentemente aleatorias, las cuales pueden deberse a la señal de entrada mismamente (ruidos electromagnéticos en los cables de las sondas, a pesar de haber cumplido las normas del fabricante) o bien la tensión de referencia que está recibiendo el módulo ADC generada por un 7805, no es tan buena como debiera.
1220
En cualquier caso, no es preocupante. Este sistema trabaja en rangos de temperatura muy amplios, lo cual le hace resistente a pequeños errores de precisión que, por otro lado, también serían cortos en el tiempo, apenas unos segundos.
1225
Con respecto al controlador PID, es importante conocer la naturaleza del sistema a controlar. Las gráficas muestran que indudablemente, los componentes, individualmente, se mantienen alrededor de la temperatura deseada. Pero se ve como hay una interrelación directa entre ellos.
1230
Los procesadores no disponen de aire renovado, sino que sólo ventilan el disipador. Por lo tanto, es muy importante que los ventiladores ordenados por el disco duro, provean al interior de la caja de aire renovado. Se aprecian serias diferencias entre las gráficas que tienen un tiempo de muestreo de 20 segundos a las de 10 segundos. 20 segundos es demasiado, da tiempo al componente a calentarse de nuevo, produciendo resultados muy bruscos, para luego enfriarse muy rápido de nuevo.
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 ceñirse a la temperatura deseada es cuando no tenemos en cuenta la proporcionalidad ni la derivación, derivación, produciendo solamente solamente una acción integral.
1240
Esto tiene sentido, porque las variaciones en temperatura no pueden ser nunca muy grandes, y por otro lado es beneficioso que varíe poco a poco, ayudando a filtrar los posibles errores del ADC.
1245
102
Sistema de regulación de temperaturas con microcontroladores Pruebas
6.2
Conclusiones El sistema funciona bien según especificaciones y requisitos, pero es mejorable viendo algunos resultados. En primer lugar, su naturaleza de no lineal, hace que los cambios sean a veces algo abruptos, independientemente del control usado. Eso es algo que no se puede cambiar.
1250
A pesar de que los requisitos especifican que regula entornos independientes, se debe hacer una interrelación entre los entornos que se influencien mutuamente. Estas influencias actualmente se toman como perturbaciones a cada entorno independiente.
1255
A parte del filtrado software que se realiza en el conversor A/D, otro filtrado a nivel de algoritmo de control daría más fiabilidad al sistema. Pero esto produciría una reducción del tiempo de muestreo, que en los mejores resultados es de 10 segundos. No se puede bajar mucho más, puesto que la frecuencia de adquisición de datos para cada canal es de 4 segundos. Por otro lado, un filtrado a nivel de algoritmo produciría mayor cantidad de código en el sistema central, el cual ya está al 86% de su capacidad, minimizando todas las funciones.
1260
Otro aspecto a tener en cuenta es la naturaleza de los actuadores. Una de las razones por la que los valores nunca se estabilizan y tienen picos, a parte de su naturaleza no lineal, es la discretización de la velocidad dada en tan solo 8 pasos (de 20% a 100%).
1265
Estos 8 pasos están limitados por restricción del microcontrolador, que a mayor frecuencia de PWM, menor es la discretización de su ciclo de trabajo. Se ha decidido trabajar a una frecuencia relativamente alta, 100 KHz, porque los ventiladores sufren menos desgaste (ver explicación PWM), alargando su vida útil.
1270
Una posible solución sería bajar la frecuencia, a pesar del desgaste de los ventiladores, o subir la frecuencia, cambiando el microcontrolador por otro me mayor velocidad. En conclusión, el sistema, para los requisitos y funcionalidades impuestas, y en función de las decisiones tomadas, funciona correctamente.
1275
103
Sistema de regulación de temperaturas con microcontroladores Evolutivos
7
Evolutivos En orden de importancia. Realizar otra/s iteración/es al análisis y diseño hardware, intentando reducir costes y espacio. Aprovechar la EEPROM EEPROM de la placa para introducir ahí los mensajes del LCD ahorrando espacio para incluir nuevas funcionalidades.
1280
Añadir la posibilidad de cambiar las constantes Kp, Ki y Kd del PID para ser más versátil. Poder variar el tiempo de muestreo para cada componente controlado en particular. Desarrollar y añadir un módulo que envíe y pueda recibir mensajes desde un móvil a otro grabado previamente, con instrucciones y datos (SMS)
1285
Desarrollo de las librerías necesarias en CCS para controlar otros tipos de pantallas por I2C con el PCF8574A. PCF8574A. Integración en la placa principal de un reloj de tiempo real. Poder encender/apagar el ordenador a través de hardware a unas horas determinadas.
1290
Añadir la funcionalidad de sonido al teclado. Añadir la funcionalidad de sonido encendido/apagado. encendido/apagado. Sustituir la interfaz de entrada, botonera, por un mando de infrarrojos.
104
Sistema de regulación de temperaturas con microcontroladores Evolutivos
105
Sistema de regulación de temperaturas con microcontroladores Definiciones
1295
8
Definiciones Esta sección ofrece unas listas de definiciones de términos, acrónimos y abreviaturas usadas en este documento. Dichas listas están ordenadas alfabéticamente
8.1
Términos Bootloader Cargador de arranque para dispositivos con software embebido. Es un pequeño código código que es el primero en en ejecutarse siempre, siempre, que espera durante durante cierto tiempo o pregunta al exterior si se le quiere reprogramar. En caso afirmativo recoge líneas de código y las graba en su memoria de programa, tras lo cual arranca el programa grabado desde su inicio.
1300
1305
Crosstalk Ruido producido al cambio de estado en una línea, que a su vez es inducido en las líneas próximas a ella. Este efecto se produce con mayor probabilidad cuando se trabaja a alta frecuencia frecuencia Darlington Configuración en la unión de dos transistores para aumentar el paso de corriente. Tipo de transistores que usa dos en cascada, amplificando el primero al segundo
1310
Disipar Esparcir y desvanecer las partes de un todo
1315
Modding Personalización de ordenadores personales, bien en decoración, aumento de rendimiento o añadiendo nuevas funcionalidades; normalmente usando medios caseros
106
Sistema de regulación de temperaturas con microcontroladores Definiciones
1320
MOS Dependiendo de la familia en concreto, se tienen unos valores distintos de tensión, estos son: Mín CMOS 15 15V (s (serie rie 40 4000) 3V CMOS CMOS 5V (ser (serie ie 74C) 74C) 3V CMOS 5V 5V (s (serie 74 74HC) 3V
Máx 18V 15V 15V 6V
Tabla 5: Voltajes CMOS
1325
Pull-up Resistencia que en un circuito fuerza un estado lógico alto o "1", cuando el propio dispositivo que se conecta no pueda pueda generarlo. Refrigerar Hacer más frío un entorno u otra cosa por medios artificiales
1330
1335
RS-232 Norma de comunicaciones comunicaciones estándar estándar entre distintos equipos. La transmisión se realiza sobre una línea no balanceada, tiene problemas de ruido y crosstalk, la velocidad de transmisión es baja, y la longitud de la línea esta en torno a los 30 mts. Como ventajas tenemos su bajo coste, y que es muy simple de implementar. TTL Niveles de tensión que van dentro de una ventana de 5 voltios.
107
Sistema de regulación de temperaturas con microcontroladores Definiciones
8.2
Acrónimos BCD
1340
Sistema de numeración binario de cuatro dígitos, 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 numeración 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 sólo lectura programable y borrable electrónicamente Electronic Erasable Programmable Programmable Read Only Memory
ESA European Space Agency
I 2C Especificación de transmisión de datos para sistemas embebidos diseñado por Philips en los años años 80 Inter Integrated Circuit
1360
LCD Visualizador de cristal líquido Liquid Crystal Display
LED Diodo emisor de luz Light-emitting diode
1365
108
Sistema de regulación de temperaturas con microcontroladores Definiciones
PCB Placa de circuito impreso Printed Circuit Board
RPM Revoluciones por minuto de un eje. Medida de velocidad angular Revolutions Per Minute
1370
RL Refrigeración líquida
SMD 1375
Método de montaje de componentes electrónicos miniaturizados que consiste en montarlo sobre la superficie de la placa, sin zócalo, tan sólo unido a ella por estaño Surface mounted device
109
Sistema de regulación 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 electrónico o transistor
1380
Fanbus Bus de conexiones de ventiladores Reobus Controlador de ventiladores en base a reóstatos de potencia
1385
110
Sistema de regulación de temperaturas con microcontroladores Código fuente
111
Sistema de regulación de temperaturas con microcontroladores Referencias
9
Referencias [1]
ESA Software Engineering Standards, ESA PSS-05-02, Issue March 1995 ESA Board of Software Standardization and Control (BSSC) ISBN 0-13-106568-8
[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=eng http://www.coolermaster.com /index.php?LT=english&Language_s= lish&Language_s=2&url_pl 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, México Centro Universitario de Ciencias Exactas e Ingeniería Implementación de un sistema de desarrollo utilizando uti lizando los microcontroladores PIC Microchip Technology, 1998 http://proton.ucting.udg.mx/temas/microprocesadores/m http://proton.ucting.udg.mx/tema s/microprocesadores/microchip/manual1.zip icrochip/manual1.zip
[7]
Philips Electronics Especificicación 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
1390
1395
1400
1405
1410
1415
[10] Bootloader
http://www.microchipc.com/PIC16bootload/
112
Sistema de regulación de temperaturas con microcontroladores Código fuente
1420
[11] PIC Downloader
http://www.ehl.cz/pic/pic_e.htm
113
Sistema de regulación de temperaturas con microcontroladores Código fuente
Apéndice A Código fuente 1425
Microcontrolador de la placa principal /********************************* /*********************************************** ************** Master module HM-Baybus system Manuel Díaz García
1430
Computer Systems European University of Madrid September 2004 More information than comments in:
1435
http://www.microchip.com http://www.microchip.com (for 16F876 info) http://www.ccsinfo.com 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, rs232(baud=19200,xmit=PIN_C6,rcv=P xmit=PIN_C6,rcv=PIN_C7) IN_C7) /*Define the RS232 operation mode:
1445
BAUD=Set baud rate, XMIT=Set transmit pin, RCV=Set receive pin*/ #use i2c(Master,scl=PI i2c(Master,scl=PIN_C3,sda=PIN_C4) N_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 loader16F876(void) ) {} /*Directive to reserve memory in compilation from 0x1F00 to 0x1FFF to the bootloader code (more information in http://www.microchipc.com)*/ 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 regulación de temperaturas con microcontroladores Código fuente
typedef enum {U,D,L,R,NONE} button; //Type definition to the buttons button current_button=NONE; 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] 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}; 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
//It´s used combined with current_state void leftbutton(); //Method that will be called when the user push right button //It´s used combined with current_state void upbutton();
1495
//Method that will be called when the user push right button //It´s used combined with current_state void downbutton(); //Method that will be called when the user push right button //It´s used combined with current_state
1500
void commoduleupdate(); 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 regulación de temperaturas con microcontroladores Código 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 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() 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_interrupts(int_rb); //Disable for not do when push a button set_pwm2_duty(2); printf(lcd_putc,"\fALARMA printf(lcd_putc,"\fALARMA Error en "); printmodule(cvmodulel,cvalarml-1); while(cvalarml>0){
1545
if (loop==0){ set_pwm1_duty(0); set_pwm1_duty(0);
//LCD bright max
loop=1; }else{ set_pwm1_duty(-1); set_pwm1_duty(-1); //LCD bright off
1550
loop=0; }
beep(150);
1555
delay_ms(250);
116
Sistema de regulación de temperaturas con microcontroladores Código fuente
beep(50); delay_ms(250); beep(50); delay_ms(500);
1560
//Three sounds
if (!input(PIN_B4)|| (!input(PIN_B4)||!input(PIN_B5)||! !input(PIN_B5)||!input(PIN_B6)||!in input(PIN_B6)||!input(PIN_B7)){ put(PIN_B7)){ writei2c(cvmodulel,6,0); writei2c(cvmodule l,6,0); //It changes the value of alarm in the //module with errors delay_ms(20); cvalarml=0;
1565
lcdbrightupdate(); lcdbrightupdate() ;
//Change the bright of LCD to user value
lcdcontrastupdate(); lcdcontrastupdate ();
//Change the contrast of LCD to user value
} } enable_interrupts(int_rb); 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 it´s reading the values of the modules each 2 seconds (timer_0) //Also changes the view of the LCD to show the values of each channel when
1585
// the user wants see the system status //When it finishes the channels it begins again from first void secuentialview(){ 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 regulación de temperaturas con microcontroladores Código fuente
if (cvchannel==0)
1595
cvchannel=1; else{ if (cvmodule==0x60){ (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, cvpwm=readi2c(cvmodule, cvchannel); delay_ms(20); cvrpm=readi2c(cvmodule, 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 printf(lcd_putc,"\nPWM=%i RPM=%lU", cvpwm, (int16)cvrpm*15);
1615
if (cvtemp>0){ printf(lcd_putc," printf(lcd_putc," Temp=%i",cvtemp); Temp=%i",cvtemp); } } cvalarm = readi2c(cvmodule, readi2c(cvmodule,6); 6);
1620
delay_ms(20); if (cvalarm>0 (cvalarm>0 && cvalarm<4){ cvalarm<4){
//This module has an error error -> ALARM!!! ALARM!!!
alarmnow(cvmodule,cvalarm); } }
1625 //System interrupt with the internal clock timer_0 //It´s 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 regulación de temperaturas con microcontroladores Código 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,las last_b4=1,last_b5=1,last_b6=1,last_b7=1; t_b7=1; b4=input(PIN_B4);b5=input(PIN_B5);b b4=input(PIN_B4);b 5=input(PIN_B5);b6=input(PIN_B6);b 6=input(PIN_B6);b7=input(PIN_B7); 7=input(PIN_B7);
1660
if (last_b7 && !b7) {delay_ms(50);curr {delay_ms(50);current_button=R;righ ent_button=R;rightbutton();}else tbutton();}else if (last_b6 && !b6) {delay_ms(50);curr {delay_ms(50);current_button=U;upbu ent_button=U;upbutton();}else tton();}else if (last_b4 && !b4) {delay_ms(50);curr {delay_ms(50);current_button=D;down ent_button=D;downbutton();}else button();}else if (last_b5 && !b5) {delay_ms(50);curr {delay_ms(50);current_button=L;left ent_button=L;leftbutton();} button();} 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); writei2c(0x10*res etmodule,7,1);
//Send the reset command command to module
}
1680
if (commodule==resetmodule) delay_ms(10000); 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 regulación de temperaturas con microcontroladores Código fuente
void setpwmmanual(){ int i;
1690
for (i=0;i<10;i++){ writei2c(0x20+0x10*(int)(i/2),i%2 writei2c(0x20+0x10*(int)(i/2),i%2,confmanvalues[i] ,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 printf(lcd_putc,"\f Bienvenido a HM-Baybus"); break;
1705
} } } void lcdupdate10(){
1710
switch(current_state){ case 10:{ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Comunicacion - %c",127,126); break; }
1715
case 11:{ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Comunicacion | Reset %c",127,126); break; } case 12:{
1720
printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Resetear???\nModu Resetear???\nModulo lo %i+/- Si%c",127,resetmo Si%c",127,resetmodule,126); dule,126); break; } case 13:{ printf(lcd_putc,"\f printf(lcd_putc,"\f RS232 %c\nModulo=%i+/-",126,commodule); %c\nModulo=%i+/-",126,commodule);
1725
break; } } }
1730 void lcdupdate20(){ switch(current_state){ case 20:{
120
Sistema de regulación de temperaturas con microcontroladores Código fuente
1735
printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Pantalla - %c",127,126); break; } case 21:{ printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Brillo | Contraste %c",127,126);
1740
break; } case 22:{ printf(lcd_putc,"\fBrillo printf(lcd_putc," \fBrillo %c\nActual=%i+/-" %c\nActual=%i+/-",126,10-lcdbright ,126,10-lcdbright/4); /4); break;
1745
} case 23:{ printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Contraste\nActual=%i+/-",127,10Contraste\nActual=%i+/-",127,10-lcdcontrast/2); lcdcontrast/2); break; }
1750
} } void lcdupdate30(){ switch(current_state){ case 30:{
1755
printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Conf. manual - %c",127,126); break; } case 31:{ if (confman==1){
1760
printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Desactivar manual\nConfigurar %c",127,126); } else printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Activar manual",127); break;
1765
} case 32:{ break; } case 33:{
1770
printf(lcd_putc,"\f printf(lcd_putc," \f Conf. manual %c\n",126); //It test the value of if (confman==1) printf(lcd_putc,"A"); printf(lcd_putc,"A");
//variable, then the user
else printf(lcd_putc,"Desa"); printf(lcd_putc,"Desa");
//can enable or
printf(lcd_putc,"ctivada printf(lcd_putc," ctivada +");
//disable
break;
1775
} } } void lcdupdate40(){ switch(current_state){
1780
case 40:{ printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Conf. fija - %c",127,126);
121
Sistema de regulación de temperaturas con microcontroladores Código fuente
break; } case 41:{
1785
if (conffixed==1){ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Desactivar fija\nConfigurar %c",127,126); } else printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Activar fija",127);
1790
break; } case 42:{ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Valor PWM fijo\nActual=%i+/-",127,confmanva fijo\nActual=%i+/-",127,confmanvalues[0]); lues[0]); break;
1795
} case 43:{ printf(lcd_putc,"\fConf. printf(lcd_putc,"\fConf. fija %c\n",126); if (conffixed==1) printf(lcd_putc,"A"); else printf(lcd_putc," printf(lcd_putc,"Desa"); Desa");
1800
printf(lcd_putc,"ctivada printf(lcd_putc,"ctivada +"); break; } } }
1805
void lcdupdate50(){ switch(current_state){ case 50:{ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Conf. auto - %c",127,126); break;
1810
} case 51:{ if (confauto==1){ printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Desactivar auto\nConfigurar %c",127,126); }
1815
else printf(lcd_putc,"\f%c printf(lcd_putc,"\f%c Activar auto",127); break; } case 52:{
1820
break; }
case 53:{
1825
printf(lcd_putc,"\fConf. printf(lcd_putc,"\fConf. auto %c\n",126); if (confauto==1) printf(lcd_putc,"A"); else printf(lcd_putc," printf(lcd_putc,"Desa"); Desa"); printf(lcd_putc,"ctivada printf(lcd_putc,"ctivada +");
122
Sistema de regulación de temperaturas con microcontroladores Código fuente
break;
1830
} } } void lcdupdate80(){
1835
switch(current_state){ case 80:{ printf(lcd_putc,"\f%c printf(lcd_putc," \f%c Grabar+ Leer- Config",127); break; }
1840
case 81:{ printf(lcd_putc,"\fLeer printf(lcd_putc," \fLeer Config +\nSi %c",126); break; } case 82:{
1845
printf(lcd_putc,"\fGrabar 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 regulación de temperaturas con microcontroladores Código 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;te (temp=0;temp<10;temp++){ mp++){ confmanvalues[temp]=read_eeprom(2 confmanvalues[temp]=read_eeprom(203+temp); 03+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;te (temp=0;temp<4;temp++){ mp++){ temperatures[temp]=read_eeprom(20 temperatures[temp]=read_eeprom(203+temp); 3+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 regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código 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 cmmodule=cmmodule+0x10; +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) confmanvalues[((int)(cmmodule/16)-2)*2+cmchannel]=p -2)*2+cmchannel]=pwmvaluem; wmvaluem; rpmvaluem=readi2c(cmmodule,cmchannel+2);
1975
delay_ms(20); printf(lcd_putc,"\f%c%c ",127,127); printmodule(cmmodule,cmchannel); printf(lcd_putc," printf(lcd_putc,"
%c\nPWM=%i+/- RPM=%lU",126,pwmva RPM=%lU",126,pwmvaluem,(int16)rpmva luem,(int16)rpmvaluem*15); luem*15);
enable_interrupts(int_timer0);
1980
}
126
Sistema de regulación de temperaturas con microcontroladores Código 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}; modulos[4]={0x60,0x60,0x20,0x50}; //Addresses that have the components
1995
//that will be controlled char const cadenas[21]={"CPU1 cadenas[21]={"CPU1 CPU2 FA signed int kp=0,ki=1,kd=0;
Disco"};
//Constants to the PID algorithm algorithm
signed int error=0; int temp1= 0;
2000
signed int temp2=0; signed int temp3=0; if (operation == 0){
//In this operations only only refresh the the LCD view
disable_interrupts(int_timer0); printf(lcd_putc,"\f%c%c printf(lcd_putc," \f%c%c Fijar temp. ",127,127);
2005
for (temp1=0;temp1<5;temp1++) (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+/printf(lcd_putc," Fijada=%i+/- Actual=%i",temperatures[pos],temp Actual=%i",temperatures[pos],temp1); 1); enable_interrupts(int_timer0); } if (operation == 1){ //Increments the value of the desired temperature if (temperatures[pos (temperatures[pos]<70) ]<70) temperatures[pos] temperatures[pos]++; ++;
2015
} if (operation == 2){ //Decrements the value of the desired temperature if (temperatures[pos (temperatures[pos]>20) ]>20) temperatures[pos] temperatures[pos]--; --; } if (operation == 3){ //Increments the pos
2020
if (pos==3) pos=0; else pos++; }
127
Sistema de regulación de temperaturas con microcontroladores Código fuente
if (operation == 4){ //PID Control for (temp1=0;temp1<4;temp1++){ (temp1=0;temp1<4;temp1++){
2025
error=readi2c(modulos[temp1],(tem error=readi2c(modulos[temp1],(temp1%2)+4); p1%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)error-(signed int)errors[temp1]); 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] int)errors[temp1]))((signed int)errors[temp1]-(signed int)errors[temp1]-(signed int)errors2[temp1])); int)errors2[temp1]));
2035
/// DERIVATE
errors2[temp1]=errors[temp1]; errors[temp1]=error; temp3=readi2c(modulos[temp1],temp temp3=readi2c(modulos[temp1],temp1%2); 1%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,t writei2c(modulos[temp1],temp1%2,temp3); emp3); //Component 1 and 2 delay_ms(20); }
2065
} //Only for
error=readi2c(modulos[temp1],(tem error=readi2c(modulos[temp1],(temp1%2)+4); p1%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), (int8)((getadc(1)*500)/1024), temp1,error,temperatures[temp1], temp1,error,temperatures[temp1],temp2,temp3); temp2,temp3);
128
Sistema de regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código 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]<10){ confmanvalues[0]++;
2150
if (confmanvalues[0]==1) confmanvalues[0]++; confmanvalues[0]++; //Min value = 2 setpwmall(confmanvalues[0]); lcdupdate40(); } break;
2155
}
130
Sistema de regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código fuente
switch (current_state){ (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<19){ lcdcontrast++;
2240
lcdcontrast++; lcdcontrastupdate(); lcdupdate20(); } break;
2245
}
132
Sistema de regulación de temperaturas con microcontroladores Código 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] (confmanvalues[0]>0){ >0){ confmanvalues[0]--; if (confmanvalues[0] (confmanvalues[0]==1) ==1) confmanvalues[0]-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 regulación de temperaturas con microcontroladores Código fuente
switch (current_state){ (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 regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código fuente
2380
void rightbutton(){ switch (current_state){ (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 regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código fuente
#separate void init_circuit(){ //View init
2505
2510
setup_timer_2(T2_DIV_BY_1,40,1); setup_timer_2(T2_D IV_BY_1,40,1);
//LCD contrast, from 1 to 40
setup_ccp1(CCP_PWM); setup_ccp1(CCP_PWM );
//PWM1 RC2
setup_ccp2(CCP_PWM); setup_ccp2(CCP_PWM );
//PWM2 RC1
lcdbrightupdate();
//Update the LCD bright
lcdcontrastupdate(); 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_port_a(A_ANA LOG_RA3_REF);
//Setup the ADC configuration RA3 reference
setup_adc(ADC_CLOCK_DIV_32); setup_adc(ADC_CLOC K_DIV_32);
//Time to ADC converter
setup_timer_0(RTCC_INTERNAL 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; current_button=NON E;
//First button state = NONE
set_tris_b(0xF0);
//Configure the port B 11110000=b4-b7 inputs
ext_int_edge(L_TO_H); ext_int_edge(L_TO_ H);
//Low to high interrupt type
enable_interrupts(INT_RB); enable_interrupts( INT_RB);
//Change on port b interrupt activated
enable_interrupts(INT_TIMER0); enable_interrupts( INT_TIMER0);
//Timer0 overflow interrupt activated
enable_interrupts(GLOBAL); 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 regulación de temperaturas con microcontroladores Código 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 regulación de temperaturas con microcontroladores Código 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(){ 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 regulación de temperaturas con microcontroladores Código fuente
2620
142
Sistema de regulación de temperaturas con microcontroladores Código fuente
Microcontrolador de la placa modular /******************************* /*********************************************** **************** Slave module HM-Baybus system
2625
Manuel Díaz García Computer Systems European University of Madrid September 2004
2630
More information than comments in: http://www.microchip.com http://www.microchip.com (for 16F876 info) http://www.ccsinfo.com 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) DELAY(CLOCK=4000000) //Define de micro speed 4 Mhz #use I2C(SLAVE,SCL=PIN_C3,SDA=PIN_C4,a I2C(SLAVE,SCL=PIN_C3,SDA=PIN_C4,address=0x60,FORCE ddress=0x60,FORCE_HW) _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=P RS232(BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7) IN_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) loader16F876(void) {} /*Directive to reserve memory in compilation from 0x1F00 to 0x1FFF to the bootloader code (more information in http://www.microc http://www.microchipc.com)*/ hipc.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_REA {NOTHING,CONTROL_READ,ADDRESS_READ,READ_COMMAND_RE D,READ_COMMAND_READ} AD} 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 don´t 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 regulación de temperaturas con microcontroladores Código 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[addre (slaveinfos[address]); ss]); 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] 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 regulación de temperaturas con microcontroladores Código fuente
void initmodule(){
2715
int i; for (i=0;i<0x08;i++) slaveinfos[i] = 0; setup_timer_2(T2_DIV_BY_1,9,1); setup_timer_2(T2_D IV_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); output_high(PIN_C1 );
//Init Pin C1 as output
output_high(PIN_C2); output_high(PIN_C2 );
//Init Pin C2 as output
setup_ccp1(CCP_PWM); setup_ccp1(CCP_PWM );
//Mode PWM CPP1
setup_ccp2(CCP_PWM); 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); setup_adc_ports(A_ ANALOG_RA3_REF);
//It configures the ADC mode
setup_adc(ADC_CLOCK_DIV_32); setup_adc(ADC_CLOC K_DIV_32);
//Set the time for each reading of ADC
2730 setup_timer_0(RTCC_INTERNAL 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_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; slaveinfos[2]=tach1;
//For calculate RPM1
slaveinfos[3]=tach2; slaveinfos[3]=tach2;
//For calculate RPM2
tach1=0; tach2=0; } set_timer0 (8);
2755
}
145
Sistema de regulación de temperaturas con microcontroladores Código fuente
void updateinfos(){ int temp; static byte duty1=10,duty2=10,channel=0; duty1=10,duty2=10,channel=0;
2760
if (duty1!=slaveinfos[0]){ (duty1!=slaveinfos[0]){
//Static variables
//Verify if the duty1 has been changed
duty1=slaveinfos[0]; duty1=slaveinfos[0];
//Save the new value
set_pwm1_duty(duty1); set_pwm1_duty(duty1);
//Init PWM1 (10=100%..0=0%)
} if (duty2!=slaveinfos[1]){ (duty2!=slaveinfos[1]){
2765
//Verify if the duty1 has been changed
duty2=slaveinfos[1]; duty2=slaveinfos[1];
//Save the new value
set_pwm2_duty(duty2); set_pwm2_duty(duty2);
//Init PWM2 (10=100%..0=0%)
} if (channel==0){
//Verify the channel that has to update
slaveinfos[4]=(int8) 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){ slaveinfos[2]==0){
//ALARM!!! It´s stopped
if (slaveinfos[6]==0){ (slaveinfos[6]==0){ slaveinfos[6]=1;
2775
} else { if (slaveinfos[6]==2){ (slaveinfos[6]==2){ slaveinfos[6]=3; } }
2780
} channel=1; } else { slaveinfos[5]=(int8) 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){ slaveinfos[3]==0){
//ALARM!!! It´s stopped
if (slaveinfos[6]==0){ (slaveinfos[6]==0){ slaveinfos[6]=2; } else {
2790
if (slaveinfos[6]==1){ (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 regulación de temperaturas con microcontroladores Código fuente
void main (){ loader16F876();
2805
//Bootloader instruction to reserve reserve memory memory
initmodule(); delay_ms(2000); while (TRUE) { if (update) { updateinfos();
2810
update = 0; } } }
2815 Librería de funciones /******************************* /*********************************************** **************** Functions library HM-Baybus system
2820
Manuel Díaz García Computer Systems European University of Madrid September 2004
2825
More information than comments in: http://www.microchip.com http://www.microchip.com (for 16F876 info) http://www.ccsinfo.com 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//0x0 SSPSTAT=0x94//0x00 0
2845
#byte SSPCON=0x14//0x00 #byte SSPCON2=0x91//0x0 SSPCON2=0x91//0x00 0 #byte SPBRG=0x99//0x00 #byte RCREG=0x1A//0x00
147
Sistema de regulación de temperaturas con microcontroladores Código 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 doesn´t 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 regulación de temperaturas con microcontroladores Código 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) //It´s 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); i2c_write(address) ; //slave can read. i2c_write(pos); i2c_start(); i2c_write(address+1); i2c_write(address+ 1); //slave can write. out = i2c_read(0);
2925
i2c_stop(); return out; }
149
Sistema de regulación de temperaturas con microcontroladores Código 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); i2c_write(address); //slave can read. i2c_write(pos); i2c_write(data); i2c_stop(); return out;
2940
}
150
Sistema de regulación de temperaturas con microcontroladores Código fuente
Librería 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 (
[email protected]) (
[email protected]) #Based on the routines LCD.C from
CCS#
2950
// Modified:
To HM-Baybus Project by Manuel Díaz
//-----------------------------//------------------------------------------------------------------------------------------------------------------------// // 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 Control of a compatible LCD HITACHI from a bus I2C with 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 regulación de temperaturas con microcontroladores Código 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 lcd_send_nibble(n >> 4, type); lcd_send_nibble(n lcd_send_nibble(n & 0xf, type); }
3025
152
Sistema de regulación de temperaturas con microcontroladores Código 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, 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], 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, 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, lcd_send_byte(0x80 |address, 'C'); }
153
Sistema de regulación de temperaturas con microcontroladores Código 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