Ramirez Bautista Julian Andres
Ramirez Bautista Julian Andres
Ramirez Bautista Julian Andres
Unidad Querétaro
TESIS
QUE PARA OBTENER EL GRADO DE:
PRESENTA:
DIRECTOR DE TESIS:
1
2
Agr
3
Agradecimientos
A Dios creador de la vida por permitirme avanzar siempre hacia adelante, hacia
nuevos rumbos. Que en todo momento estuvo conmigo ayudándome a aprender de mis
errores.
A mi esposa Silvia por ese optimismo que siempre me impulso a seguir adelante y por los
días y horas que alegró mi vida en los momentos de cansancio y exasperación.
A mis amigos compañeros que siempre tuvieron una palabra de apoyo y ánimo en
los momentos difíciles durante mi estadía
4
Resumen
Actualmente, debido a los altos estándares de personal capacitado que necesita la
industria, se tiene la necesidad de cambiar del método clásico donde el profesor impartía
el conocimiento de manera teórica, al conocimiento innovador, donde el estudiante pone
en práctica lo aprendido en clase en sistemas didácticos que simulan en cierta manera el
comportamiento de procesos industriales, de este modo el estudiante adquiere la destreza
para solucionar problemas desde diversos puntos de vista, cuando el proceso lo requiera.
Además, mediante estas prácticas se puede acortar la brecha que hay entre el conocimiento
teórico y el mundo real.
Existen empresas que fabrican módulos didácticos y software de entrenamiento
proporcionando entornos amigables, guías de aprendizaje establecidas y estructuras
robustas. Pero tiene la desventaja de depender de tiempo completo de tecnologías
extranjeras, de las metodologías impuestas por el fabricante, además de los altos costos que
representa para algunas instituciones, ya sea con la adquisición del equipo o con la
capacitación constante del profesor o instructor.
El proyecto consiste en realizar un software flexible y estandarizado para
entrenamiento en control de procesos, en el cual, el estudiante pueda seleccionar alguno
entre distintos tipos de controladores y modificar a gusto los parámetros necesarios para su
operación, así como el tipo de señal de entrada que se enviará al proceso. El software debe
tener la flexibilidad suficiente para añadir nuevos procesos, así como permitir visualizar su
comportamiento en la pantalla, para observar de manera instantánea el funcionamiento de
las variables más importantes del proceso implementado y tener una idea más clara de
cómo controlarlas. Como casos de aplicación se utiliza control de velocidad, nivel y
presión. La interfaz gráfica se realiza para propiciar una interacción más amigable entre el
alumno y el sistema mediante el uso de un lenguaje visual.
5
Abstract
Currently, due to the high standards of trained staff that needed by the industry,
there is the need to change the traditional method where the teacher taught the knowledge
theoretically, to the innovative knowledge, where students put into practice what they
learned class on teaching systems that simulate the behavior of industrial processes, thereby
the student acquires the skills to solve problems from different points of view, when the
process requires it. In addition, through these practices you can bridge the gap between
theoretical knowledge and the real world.
There are companies that produce educational modules and training software
providing guidelines established friendly learning environments, and robust structures. But
has the disadvantage of relying on full-time foreign technologies, methodologies imposed
by the manufacturer, in addition to the high costs of some institutions, either with the
acquisition of equipment or the constant training of the teacher or instructor.
The project is to produce a flexible and standardized software to training process
control, in which the student can select any among different control types and modify the
parameters required for its operation, as well as the type of input signal to be sent to the
process. The software should have the flexibility to add new processes, as well as, visualize
their behavior on the screen to instantly observe the operation of the most important
variables of the process implemented and have a clearer idea of how to control them. speed
control, level and pressure is used as cases of application . The graphical interface is done
to foster a friendlier interaction between the student and the system through using a visual
language.
6
ÍNDICE GENERAL
7
2.2.1. Desarrollos de PLCs didácticos basados en micro-controladores con
desarrollos propios de software ................................................................................. 31
2.2.2. Desarrollos de PLCs didácticos basados en micro-controladores con software
comerciales ................................................................................................................ 31
2.2.3. Desarrollos de interfaces gráficas para control de procesos ............................ 35
Capítulo 3. Normatividad Aplicable a Interfaces Gráficas Humano-Máquina ............. 38
3.1. Interfaces Humano Computadora........................................................................... 38
3.1.1. Monitoreo de Sistemas de Control .................................................................. 38
3.2. Estándares y Normativas......................................................................................... 39
3.2.1. UNE-ES 9241 .................................................................................................. 40
3.2.2. Guía ergonómica de diseño de interfaz de supervisión “GEDIS” ................... 44
3.2.3. NUREG-0700 .................................................................................................. 51
3.2.4. Isa-S5.5 1985 ................................................................................................... 56
Capítulo 4. Software de GHMI ...................................................................................... 58
4.1. Entorno de Desarrollo ............................................................................................ 58
4.2. Consideraciones de Diseño .................................................................................... 58
4.3. Diagrama de Estados de la Interfaz Gráfica ........................................................... 58
4.4. Interfaz Gráfica Desarrollada ................................................................................. 60
4.1.1. Interfaz gráfica principal ................................................................................. 60
4.1.2. Modo simulación ............................................................................................ 66
4.1.3. Modo real ......................................................................................................... 68
4.1.4. Conexión con módulo externo ......................................................................... 69
4.1.5. Interfaz gráfica control PID ............................................................................. 69
4.1.6. Interfaz gráfica control difuso ......................................................................... 70
Figura 26. Representación gráfica de control difuso..................................................... 72
Capítulo 5. Aplicaciones ................................................................................................ 73
5.1. Diagrama a Bloques para Módulos Periféricos ..................................................... 73
5.2. Algoritmo para Módulos Periféricos ..................................................................... 73
5.3. Control de Velocidad ............................................................................................. 75
5.3.1. Circuito y Esquemático de Módulo para Control de Motor 12 VDC .............. 75
5.3.2. Caracterización de la Planta ............................................................................ 78
8
5.4. Control de Nivel de Líquido .................................................................................. 83
5.4.1. Esquemático de módulo de control de nivel .................................................... 83
5.5. Control de Presión .................................................................................................. 85
5.5.1. Esquemático de módulo de control de presión ................................................ 85
Capítulo 6. Experimentación y Resultados .................................................................... 87
6.1. Control PID para Velocidad de un Motor DC........................................................ 87
6.1.1. Diseño del controlador..................................................................................... 87
6.1.2. Puesta en marcha del controlador en la interfaz .............................................. 90
6.2. Control Difuso para Velocidad .............................................................................. 91
6.2.1. Diseño del controlador difuso.......................................................................... 92
6.2.2. Puesta en marcha del control difuso en la interfaz .......................................... 94
6.3. Diseño y Puesta en Marcha de Control Difuso para Nivel .................................... 95
6.4. Diseño y Puesta en Marcha de Control Difuso para Presión ................................. 97
6.5. Discusión ................................................................................................................ 98
Capítulo 7. Conclusiones y Propuestas para Trabajos Futuros .................................... 100
7.1. Conclusiones ........................................................................................................ 100
7.2. Trabajo Futuro ...................................................................................................... 101
7.3. Productos .............................................................................................................. 101
Referencias...................................................................................................................... 102
9
Índice de Figuras
10
Figura 35. Planta utilizada para control de velocidad. ...................................................... 78
Figura 36. Diagrama de la simulación en Simulink .......................................................... 82
Figura 37. Gráfica de modelo matemático contra datos reales obtenida en Simulink ...... 82
Figura 38. Datos en el panel de configuración de parámetros para ecuaciones de primer
orden en DEVCO .............................................................................................................. 82
Figura 39. Respuesta al escalón obtenida con DEVCO .................................................... 83
Figura 40. Sensor ultrasónico de distancia SRF04 ........................................................... 83
Figura 41. Circuito para conexión de sensor SRF04 ........................................................ 84
Figura 42. Moto-bomba empleada en la planta de control de nivel.................................. 84
Figura 43. Circuito completo para control de nivel .......................................................... 84
Figura 44. Sensor de presión MPX5700 [65]. .................................................................. 85
Figura 45. Conexión sensor de presión MPX5700 ........................................................... 85
Figura 46. Electro-válvula PVQ31 [66]. ........................................................................... 86
Figura 47. Circuito para manejo de electro-válvula.......................................................... 86
Figura 48. Circuito para control de presión ...................................................................... 86
Figura 49. Esquema general PID. ..................................................................................... 87
Figura 50. Reglas de sintonización para PID .................................................................... 88
Figura 51. Fórmulas de primer método de las reglas de Ziegler-Nichols ......................... 88
Figura 52. Respuesta de la planta real al escalón.............................................................. 88
Figura 53. Simulación de la planta en Simulink de Matlab. ............................................. 89
Figura 54. Gráfica simulada de respuesta al escalón del controlador. .............................. 89
Figura 55. Gráfica simulada de respuesta al escalón del controlador con constantes
afinadas. ............................................................................................................................ 90
Figura 56. Configuración de ganancias PID en DEVCO ................................................. 90
Figura 57. Respuesta al escalón del sistema real .............................................................. 91
Figura 58. Respuesta real a cambio de escalón................................................................. 91
Figura 59. Diagrama a bloques de control difuso ............................................................. 92
Figura 60. Conjuntos difusos empleados para control de velocidad. ............................... 93
Figura 61. Base de reglas. ................................................................................................. 93
Figura 62. Diagrama de control Difuso donde se muestra el operador de agregación. .... 94
Figura 63. Respuesta real a un escalón ............................................................................. 94
Figura 64. Respuesta real a un perfil. ............................................................................... 95
Figura 65. Base de reglas control de nivel ........................................................................ 96
Figura 66. Conjuntos Difusos para control de nivel ......................................................... 96
Figura 67. Respuesta real al escalón del sistema de control de nivel ............................... 96
Figura 68. Base de reglas control de presión .................................................................... 97
Figura 69. Conjuntos Difusos para control de presión ..................................................... 97
Figura 70. Respuesta real al escalón de control de presión .............................................. 98
11
Índice de Tablas
12
Capítulo 1. Introducción
Los sistemas didácticos de control de procesos son plantas piloto diseñadas para
entrenar a estudiantes y profesionales en el campo del control y automatización. Éstos
sistemas se pueden trabajar como una planta real pero en una pequeña escala, adaptadas a
fines didácticos. Están compuestos por tres partes fundamentales: software, hardware y
planta didáctica; como se observa en la Figura 1.
13
Planta de pruebas (Mecánica): Son plantas industriales en pequeña escala, que
emulan procesos pero enfocados en la enseñananza.
De modo general los tres bloques comunican al usuario con la máquina, traduciendo de
un entorno gráfico y fácil de manejar a un entorno de manejo de potencia y conversiones
de datos físicos a digitales, necesarios en el cómputo de los controles y manejo de variables.
A continuación, se presentan una descripción más a fondo.
14
Otro módulo central de procesamiento usado en sistemas de control son los
controladores automáticos programables, PAC por sus siglas en inglés, término acuñado
en el 2011 por la firma ARC. Este sistema en muchos casos es comprendido como un PLC
avanzado y en otros casos como una unión entre un PLC y una computadora. Proporcionan
una mayor flexibilidad de programación, mayor capacidad de memoria, mejor
interoperabilidad y más características pues son sistemas orientados hacia arquitecturas
complejas de automatización, integrando aplicaciones de software basadas en
computadoras, así como funciones de interfaz humano-máquina, HMI por sus siglas en
inglés y control avanzado de procesos [4].
Por otra parte, existen módulos centrales de procesamiento para sistemas didácticos
basados en micro-controladores, con la finalidad de reducir costos y para obtener una
autonomía completa del dispositivo. Estos sistemas se basan en la forma básica de un
autómata donde se tiene: una etapa de entrada, una etapa de salida, una etapa de
procesamiento de datos, una etapa de comunicación para la programación y un software
para programar el algoritmo de control [5].
15
1.1.3. Planta de pruebas
1.3. Antecedentes
Los procesos industriales han evolucionado a lo largo del tiempo, siendo una pieza
estratégica del desarrollo económico e industrial, es por esto que la ingeniería enfrenta
cambios radicales por estar involucrada directamente [9].
16
Actualmente, cientos de personas reciben formación de ingeniería de procesos
obteniendo una amplia gama de cualificaciones en las disciplinas técnicas más disímiles,
implementando contenidos como: conocimiento de la estructura, montaje de componentes
y piezas de producción, al igual que la puesta en marcha y mantenimiento de plantas.
Siendo éste un factor que permite ubicar los sistemas de entrenamiento en mecatrónica en
el punto de mira de la formación profesional [10] y teniendo en cuenta que el interés de los
estudiantes en los cursos de ingeniería eléctrica y electrónica ha aumentado [11].
Atendiendo a este llamado, la enseñanza ha cambiado con el transcurso del tiempo,
pasando desde el método en que el docente impartía el conocimiento al alumno de manera
teórica, al conocimiento innovador donde el estudiante realimenta conceptos realizando
prácticas experimentales sobre sistemas reales, superando de este modo aspectos difíciles
de abordar de forma conceptual.
Los programas de simulación empleados desde hace un par de décadas, se han
convertido en un apoyo fundamental, que acerca a los alumnos a la comprensión de los
principios que rigen el aprendizaje, y los llevan a enfrentar situaciones casi reales. Por otra
parte, están los sistemas didácticos de control de procesos, que fortalecen la educación
tecnológica y científica, apoyando la labor de los educadores y la comprensión de los
estudiantes, quienes a través de la interacción con las variables físicas que proporcionan
estos entornos desarrollan habilidades y destrezas para la resolución de problemas en el
campo de la ingeniería [12] [13][14].
Para dar solución a esta necesidad existen dos ramas: comercial y científica. Ambas
bajo la misma filosofía de brindar al estudiante un entorno amigable y fácil de interactuar
con las variables físicas. Estos sistemas van desde las plataformas más sencillas y
artesanales dedicadas a un solo proceso, hasta las más robustas y tecnológicas que permiten
controlar más de un proceso.
17
c) Empresas que utilizan controladores comerciales, pero mejoran el software
haciendo sus propios desarrollos.
En el capítulo dos se abordarán en detalle el estado del arte de este tema, pues son
muchas las empresas y los trabajos científicos que han afrontado esta problemática que
aumenta con el pasar de los días y con las exigencias y necesidades de la industria.
18
y control sobre las variables de proceso; evidenciando la gran importancia de las interfaces
humano-máquina con las cuales se pueda interactuar con el sistema y hacer menos
compleja esta tarea.
Una interfaz humano-máquina cambia el lenguaje complejo que usan los sistemas
por entornos gráficos ofreciendo al usuario una manera ágil de usar los recursos que le
interesan, optimizando su función de análisis de información sin preocuparse del manejo
interno de la misma. Estas interfaces juegan un papel fundamental tanto en la industria
como en la academia, donde proporciona un apoyo didáctico, visual y proveen múltiples
herramientas para que se puedan visualizar las respuestas a distintos cambios, integrar
resultados y tomar decisiones frente a la configuración del lazo de control ya sea PID,
difuso o neuro-difuso [7].
Actualmente a nivel de investigación, se ha realizado gran cantidad de interfaces de
usuario utilizando software como Matlab, Labview, simulink, lo que representa un alto
costo para las instituciones y sujetándose a lo que el fabricante produce.
A nivel industrial, hay productos de interfaces de usuario para PLCs o para sistemas
didácticos de control de procesos, pero al igual que una licencia para Matlab, Labview o
Simulink representan un costo que muchas instituciones no pueden asumir.
1.5. Justificación
19
1.6. Objetivos
1.7. Hipótesis
20
El capítulo 3 trata los aspectos de los estándares y normas pertinentes para el
desarrollo de interfaces gráficas de usuario ergonómicas y flexibles con las cuales los
usuarios puedan alcanzar sus metas de manera eficiente.
21
Capítulo 2. Sistemas Didácticos para Control de Procesos
En éste capítulo se presentan los antecedentes del tema que se está abordando,
dando a conocer en detalle los sistemas didácticos de control que hay actualmente, ya sea
en el mercado o en las instituciones de educación para facilitar el entendimiento en el área
de control y automatización.
Los sistemas didácticos de control de procesos son una herramienta fundamental
para preparar personal en el área de control y automatización [15], es por esta razón que
muchas empresas han optado enfoques de diseño y construcción de sistemas que faciliten
la enseñanza y la preparación en entornos simulados, han obtenido como resultado sistemas
robustos con objetivos bien definidos que con el paso del tiempo y atendiendo las
necesidades de la industria han mejorado, pero poseen la desventaja de tener un costo
elevado. A raíz de esto algunas instituciones de educación han preferido construir los
propios para reducir costos y convertirlos en una tecnología más accesible [16][17][18].
Para la elaboración del proyecto se clasificaron las empresas en cinco tipos teniendo en
cuenta la forma como entregan su producto final:
22
actualmente, así como los sistemas de control en hardware y en software con los cuales
ofrecen sus servicios para la capacitación de personal en entornos controlados.
El software se realiza teniendo en cuenta los protocolos y estándares industriales
para la programación de los autómatas, pero sin dejar de un lado los requerimientos
didácticos para que sean tomados como entrenadores. De este modo desarrollan tutores
virtuales gráficos y guías físicas que sirven de apoyo a los profesores o personal encargado
para las capacitaciones.
Estas empresas están distribuidas en diferentes partes del mundo. En sus trabajos
omiten la complejidad de desarrollo del sistema de control y utilizan sistemas comerciales
de marcas como Siemens, Omrom, Schneider electric, Allen Bradley, Mitsubishi, etc. Son
fabricantes de plantas para prácticas en procesos de control. El software que utilizan es el
mismo que les provee el fabricante del autómata muy similar al que se usa a nivel industrial.
En la Tabla 2, se muestra en detalle las empresas relacionadas con la clasificación las cuales
hacen presencia en las diferentes ramas de la ingeniería.
23
Tabla 1. Empresas fabricantes del sistema completo
24
Tabla 2. Empresas fabricantes de plantas de procesos didácticas
25
INNCOMEX México *Entrenador de PLC Mitsubishi No especifica
[27] *Laboratorio de PLC's Allen Bradley
Siemens
Omrom
SMC [28] México *Introducción a la Mitsubishi No especifica
automatización Allen Bradley
*Tecnología neumática Siemens
*Tecnología eléctrica Omrom
*Electricidad
*Estado sólido
*Controladores
programables
*Tecnología de sensores
TECNOEDU Argentina *Neumática Schneider electric Propios del Programación
[29] *Hidráulica Mitsubishi fabricante de PLC Simulación
*Mecánica Visualización
*PLC
*Robótica
WUEKRO [30] Alemania *Ingeniería de Siemens Propio del Programación
Automatizacion fabricante de PLC Simulación
*Electrónica de potencia Visualización
*Ingeniería eléctrica
26
2.1.3. Empresas que utilizan controladores comerciales con desarrollos propios de
software
Estas empresas utilizan software comercial base como Labview que provee un
entorno gráfico para diseñar aplicaciones. Pero también hay otras que diseñan su propio
software para brindar al estudiante interfaces más dinámicas. Como se muestra en la Tabla
4, las plantas son contraladas desde la computadora utilizando circuitos de adquisición de
datos para comunicarse con las variables físicas.
Estas empresas nacen atendiendo a las necesidades como falta de recursos dado que
los laboratorios físicos son más costosos en cuanto a su dotación, mantenimiento y
capacitación del personal especializado, necesidades especiales y por que con esta
estrategia amplían la capacidad para que cada alumno disponga de una unidad para
practicar. Los laboratorios virtuales en cierta medida son una herramienta para que los
estudiantes desarrollen destrezas de operatividad, pero falta la interacción con variables
físicas las cuales proveen los sistemas didácticos de control de procesos. En la Tabla 5 se
mencionan algunas empresas que trabajan bajo el enfoque presentado. No se profundizó
en la búsqueda debido a que se sale del radio de trabajo del proyecto.
27
Tabla 3. Empresas que hacen su propio software pero utilizan autómatas comerciales
28
Tabla 4. Empresas cuyo sistema de control se basa en computadoras
29
Tabla 5. Empresa que diseñan laboratorios virtuales
30
2.2. Clasificación de los Sistemas Didácticos de Control de Procesos Obtenidos a
Nivel Científico por Instituciones
Estos desarrollos los han tomado las instituciones analizando que las tecnologías
para automatización cada vez son más costosas y no son accesibles para las micro y
pequeñas empresas. Además los controladores se tienen que importar dado que a nivel
industrial son de vital importancia para optimizar la producción. Para facilitar la
elaboración del sistema, desarrollan el software del dispositivo en plataformas de
programación que proveen una interfaz prediseñada gráfica. En la tabla 7, se presentan en
detalle estos desarrollos.
31
Tabla 6. Desarrollo hardware y software de un controlador de procesos industriales
UNIVERSIDAD Brasil Controlador Lógico PIC 18F4550 Lenguaje C Equivalente digital a la lógica
DE BELO programable utilizando del ladder
HORIZONTE [39] PIC 18F4550
UNIVERSIDAD Colombia Implementación de un PIC 16F877 Visual Studio Programación por bloque como
MINUTO DE PLC didáctico para 2010 lo hacen los PLC
DIOS [40] prácticas de laboratorio
32
*Adquisición de seis canales.
INSTITUTO México Multipurpose interface COP8CDR9LVA8 C++ Builder 5.0 *Comunicación USB
POLITÉCNICO card for data *Prueba en control de
NACIONAL [18] acquisition and control temperatura
with low technological *Diseño de tarjeta de
hardware costs adquisición de datos
*Algoritmos fáciles de
modificar
INSTITUTO México Diseño y Construccion COP8CDR9LVA8 C++ Builder 5.0 *Ambiente gráfico de fácil uso.
POLITÉCNICO de un Sistema Basico *Área de graficado amplia
NACIONAL [16] de Interaccion y Accion *Comunicación USB
con Procesos Reales *Prueba en control de
Reconfigurable y de temperatura
Bajo costo HMI-CIC *Diseño de tarjeta de
adquisición de datos
*Fácil de modificar
33
Tabla 7. PLCs didáctico con software comerciales
34
2.2.3. Desarrollos de interfaces gráficas para control de procesos
35
Tabla 8. Interfaces gráficas para control de procesos
36
POLYTECHNIC OF Italia SCADA/HMI Systems in Computadora LabVIEW y RSLogix Monitoreo y control (
BARI [49] Advanced Educational y PLC gráficos mímicos, de
Courses Rockwell tendencia y numéricos)
INSTITUTO Colombia Design and implementation Computadora Visual Studio 2010 Control y
TECNOLÓGICO of an automation didactic y PLC Simatic procesamiento.
METROPOLITANO module focused to machine
[50] vision and programmable
logic control
37
Capítulo 3. Normatividad Aplicable a Interfaces Gráficas Humano-
Máquina
En los inicios los diseñadores y desarrolladores, se preocupaban poco por hacer que el
hardware y el software se hicieran utilizables o amigables al usuario pero esto vino cambiando de
la mano con la evolución tanto de la informática como de los procesos de control, lo que dio origen
al concepto de usabilidad. La organización internacional de estandarización ISO, más
específicamente en la norma ISO 9241-11: Guidance on Usability (1998), define la usabilidad
como el conjunto de criterios como eficiencia, seguridad y utilidad, con los cuales un usuario puede
alcanzar los objetivos de una manera eficiente [50].
38
Las pantallas de visualización de datos (PVD) pueden ser alfanuméricas o gráficas, que
despliegan información independientemente de la representación visual. Debido a las tareas de
alto nivel de visualización en pantallas para consultar datos y diálogos presentan a menudo
problemas relacionados con fatiga visual y mental en los usuarios, ya que la vista es el sentido más
explotado al estar frente a una PVD. Además de la fatiga mental, donde el factor determinante lo
constituye el inadecuado diseño de los programas informáticos utilizados por el usuario para la
realización de su tarea.
Muchos de los problemas de los que adolecen este tipo de sistemas se deben al gran volumen
de información a mostrar, lo cual nos lleva al campo de la Visualización de Información [55].
Algunos de los desafíos planteados son:
Existen estándares que regulan de forma específica el diseño de interfaces gráficas, con el
fin de atacar los problemas que se mencionan en el apartado anterior, dentro de sus prioridades se
encuentra lo referente a diseños de ventanas, controles, visualizadores, sistemas de alarma y
formas de evaluación que tiene como criterio: consistencia, visibilidad, perceptibilidad,
39
informatividad, interactividad y tiempos de respuesta. Cada uno de estos temas se presenta a
continuación en los estándares UNE-ES 9241, NUREG-0700, ISA S5.5 y la guía de evaluación
GEDIS.
En el trabajo que tiene por título “Guía metodológica para el diseño de interfaces
de usuario para control y supervisión de procesos industriales” [51], se destacan los ocho
aspectos más importantes de la norma UNE-ES 9241, del Instituto Nacional de Seguridad
e Higiene en el trabajo de España la cual basa su contenido en el estándar ISO 9241, los
cuales se citan a continuación:
II. Controlabilidad
40
III. Conformidad con las expectativas del usuario
V. Facilidad de aprendizaje
Tiene que ver con la similitud entre el sistema virtual y el sistema real,
mientras la interfaz asemeje el sistema virtual de la manera más adecuada y correcta
con el sistema real, más fácil será para el usuario aprender a utilizarlo.
(a) (b)
Figura 6. Semejanza entre procesos. (a) real. (b) virtual [51]
41
VI. Presentación de la información
VII. Usabilidad
(a) (b)
Figura 7. Aspecto coherente de la información. (a) Incorrecto. (b) Correcto [51]
42
(a) (b)
Figura 8. Diálogos con indicaciones claras. (a) Incorrecto. (b) Correcto [51]
Ser concisa
(a) (b)
Figura 9. Instrucciones de información breves. (a) Información
innecesaria. (b) Información necesaria [51]
Aportar detectabilidad
Las imágenes en los diálogos hacen que estos sean más atrayentes
ya que ayudan a entender el tipo de problema que se presenta, como se
observa en la Figura 9, las franjas amarillas y negras de la barra dan claridad
visual al usuario con respecto al problema.
43
oscuro, maximizan la visibilidad de las representaciones en color
como se observa en la Figura 10.
(a) (b)
Figura 10. Polaridad de las imágenes. (a) Figura acromática sobre fondo
de color. (b) Figura a color sobre fondo acromático [51]
Esta guía se detalla muy bien en el trabajo titulado “Aplicación de la guía GEDIS
a los sistemas SCADA del NAP (Network Access Point) de Canarias” [54]. A continuación
se citan aspectos relevantes de este trabajo referente a la evaluación de HMI’s.
44
navegación, uso del color, información textual, estatus de los equipos y eventos de proceso,
información y valores de proceso, gráficos de tendencias y tablas, comandos e ingreso de
datos y alarmas. Y la segunda parte muestra cómo obtener las medidas cuantitativas de la
evaluación de los indicadores, para que el diseñador o el usuario puedan analizar las
posibles mejoras, pero para los alcances del proyecto solo se trabajará con la primera parte
concerniente a los indicadoresz [54].
I. Distribución de pantalla
II. Navegación
Con el fin que la navegación sea fácil para el usuario se puede utilizar
cualquier de los siguientes métodos o también la combinación entre ellos:
Menús y submenús
Barra de botones
Barras de iconos gráficos
45
Link con hipertexto
Link con gráficos de proceso
Teclas de función
Cajas combo o listas desplegables
46
Debe maximizarse el contraste entre colores cuando sea necesario
mezclarlos
Existen combinaciones de color que no deben usarse tales como:
Rojo-azul, rojo-verde, azul-amarillo, amarillo-blanco, verde-azul.
Para minimizar aún más el riesgo de confusiones en operarios que
no puedan distinguir muy bien entre colores, estos deben ir
acompañados de texto, tamaño del elemento, forma, etc.
El color blanco es preferible usarlo para información periférica.
El objeto que lleva el color debe ser de buen tamaño para que el color
sea visible y se pueda distinguir.
Evitar el uso de intermitencias de color.
En el caso que sean necesarias las intermitencias, se debe
proporcionar al operador una forma fácil y rápida de detenerla una
vez se detecte el evento.
Usar colores como gris, arena, azul. Ya que son colores neutros.
Evitar los colores blanco o negro, ya que dan mucho resplandor.
Los colores que se usen de fondo deben contrastar con los demás
elementos de la pantalla.
No utilizar colores fuertes en las zonas grandes de la pantalla.
47
Figura 11. Ejemplos de uso del color en función de grupos de información [54]
48
IV. Información textual
49
Alarmas de proceso que NO causan paros en producción.
Alarmas de dispositivo.
Estadísticos de área y/o estadísticos de equipos individuales: estos pueden
ubicarse en lugares de menor visibilidad, como lo sería en la parte inferior
de la pantalla.
Titular la tabla.
Separar las celdas con rejilla de preferencia tenue.
Las filas y las columnas deben estar ordenas ya sea por importancia,
frecuencia de uso, función, tiempo, tipo o alfabéticamente.
Distinguir la tabla con un color diferente al fondo de la pantalla.
50
Selección de una sola opción entre varias.
Selección de varias opciones al mismo tiempo.
Selección simple ( aceptar o no una acción).
Los comandos deben ser claros para que el operador los pueda distinguir
rápidamente y no deben estar cerca los comandos de uso frecuente con los que
activan una acción crítica.
IX. Alarmas
3.2.3. NUREG-0700
51
I. Visualización de la información
Caracteres alfanuméricos:
Debe utilizarse una fuente clara y legible evitando, los tipos de letra cursiva, sombreada o
en tres dimensiones, debe ser posible distinguir claramente entre los siguientes caracteres:
X y K, T y S, I y L, I y 1, O y Q, O y 0, S y 5, y U y V. La separación horizontal entre
caracteres o símbolos debe estar entre 10 y 65 por ciento de la altura del carácter o símbolo.
Etiquetas:
Las etiquetas deben ser de forma única y coherente, de relieve, con mayúscula, o de lo
contrario enfatizarlas para diferenciarlas de otras estructuras de la pantalla y los datos.
Deben estar separadas entre sí por al menos dos espacios y su ubicación debe ser siempre
horizontal para facilitar la lectura del operario.
Iconos y símbolos:
Cuando los datos escalados contienen valores muy lejanos, se deben duplicar los ejes, de
manera que el eje X aparezca en la parte superior e inferior, y el eje Y, tanto en el lado
derecho de la gráfica como al izquierdo. Esto con el fin de brindar comodidad al operario
cuando los datos se encuentran lejos de los ejes convencionales.
El uso de escalas tridimensionales se debe restringir a menos que sea necesario, pero se
recomienda en este caso utilizar técnicas a través del uso de la codificación auxiliar (por
ejemplo, color o forma de codificación, o anotación complementaria), que puede resultar
más eficaz que tratar de representar una tercera dimensión añadiendo un eje Z ya que puede
confundir a muchos usuarios.
52
II. Color:
Tabla 9. Asociaciones y características relacionadas de colores que se utilizan normalmente en el diseño del panel
[57]
53
BLANCO Asesoría Pobre Verde
Vapor Negro
Rojo
Azul oscuro
Magenta
NEGRO Segundo plano Pobre Blanco
Azul claro
Amarillo
1 Los significados asociados con los colores rojo y verde son diferentes, dependen de la experiencia. El personal con experiencia
previa en planta de combustibles fósiles suelen asociar a un estado abierto con rojo y un estado cerrado con verde, pero se revierten
estas asociaciones típicamente por el personal con experiencia previa de la Armada.
Una recomendación adicional, es evitar el uso de símbolos rojos sobre fondo verde,
así mismo se debe evitar el uso simultáneo de rojo puro y azul puro sobre fondos oscuros,
ya que puede presentar una incomodidad tridimensional.
Se deben evitar las longitudes de onda por encima de 650 nanómetros en las
pantallas, como es el caso del rojo puro.
Se entiende como la forma en que el usuario interactua con el sistema, para ello se
requieren tanto de menús como de botones para interrumpir al sistema.
Menús:
54
IV. Interrupciones de transacción del usuario:
Para realizar interrupciones en un proceso no es deseable tener una sola tecla que
tiene efectos diferentes dependiendo de si se empuja una o dos veces, esto puede provocar
confusión en los usuarios. A continuación se presentan dos tablas que resumen las
funciones de control para el procesamiento de comandos y las funciones de control para
ingresar información.
55
REVIEW Permiten al usuario revisar una Permite al usuario volver al primer
secuencia de entradas y hacer visualizador, en una secuencia de
los cambios necesarios. entradas de datos relacionados, en
varios marcos de visualización.
A continuación en la Tabla 12, se presentan los colores propuestos por la norma Isa-S5.5
Tabla 12. Usos del color propuestos por estándar ISA S5.5 [59].
56
VERDE Seguro A) Operación normal
B) Comenzar
C) Abierto
D) Encendido
57
Capítulo 4. Software de GHMI
En éste capítulo se presentan las fases de desarrollo del software de la interfaz gráfica de
usuario, así como la descripción detallada del mismo teniendo como guía de diseño las pautas
marcadas en el capítulo 3.
Las consideraciones de diseño se basan en los aspectos que se deben considerar en el desarrollo
de una interfaz los cuales fueron extraídos de los estándares expuestos en el capítulo 3, donde en
resumen una interfaz debe tener:
El software de la interfaz funciona en base a los estados que se muestran en la Figura 12.
58
Figura 12. Diagrama de estados del software de la interfaz.
59
De modo general, una vez configurados los parámetros de funcionamiento, que se
entienden como: configuración de la comunicación USB, selección del método de control,
configuración del mismo y selección de valor de referencia; el sistema opera de acuerdo al
diagrama de estados para obtener el objetivo final que es controlar las variables físicas de un
proceso.
60
8
1
2
4 6
5 7
61
Donde:
1. Barra de menús: como se observa más claramente en la Figura 14, está compuesta por las
funciones básicas de archivo, editar y ver; pero estas funciones aún no están disponibles en
esta versión.
Por otra parte la elección de la opción planta despliega el modelo matemático de planta que
se desee usar, DEVCO puede simular plantas de primer y segundo orden de modo:
𝐾
𝑓(𝑠) = (1)
𝑇𝑠+1
𝑎1 𝑠 +𝑎2
𝑓(𝑠) = (2)
𝑠 2 +𝑏1 𝑠+𝑏2
62
configurado en la barra de herramientas; e histórico muestra 10 datos y limpia los datos
anteriores para mantener a la vista solo valores actuales.
2. Primera sección de barra de herramientas: esta sección contiene los botones estándar de
copiar, cortar y pegar que le dan controlabilidad a la interfaz, así como el selector de modo
real ó simulado como se observa en la Figura 15. Para acceder a esta función se da un clic
en el primer desplegable para habilitar una de las dos opciones. Cuando se selecciona modo
real en esta sección solo es posible configurar el valor de referencia para el control en el
cuadro de texto habilitado en la Figura 15.
3. Segunda sección de barra de herramientas: esta sección como se observa en la Figura 17,
está compuesta por los botones de control de conexión con el dispositivo externo; control
de paro de emergencia; cuadros de texto para configuración de número de muestras y de
tiempo de ejecución para el modo real; configuración de tiempo de simulación para la
respuesta a un estímulo de una función de transferencia; botones básicos de control en
modo real, botón para guardar datos del proceso y acceso directo para la conexión USB
con el módulo periférico.
63
En forma más detallada, los botones de control de conexión permiten luego de
configurar la comunicación en el panel, acceder al dispositivo externo e iniciar el
intercambio de datos para ejecutar las acciones de control correspondientes o cerrar el
puerto virtual para terminar la comunicación y evitar dejar puertos abiertos en la
computadora que no se están utilizando.
El botón grabar genera un archivo de texto (.txt) con el valor de referencia, el valor de
control, el error y la hora en que se realizó la práctica, con la finalidad de tener datos útiles
en el momento de realizar un análisis o el desarrollo de los controles.
64
4. Panel de configuración de parámetros: el panel está dividido en tres secciones como se
observa en la Figura 18, la primera sección (izquierda de la Figura 18) es la pestaña
propiedades, que muestra las aplicaciones disponibles en la versión actual (velocidad, nivel
y presión); la segunda sección (centro en la Figura 18) es la pestaña de control difuso que
contiene lo necesario para su configuración (mayor información referirse al ítem 4.1.6.); y
la tercera sección (derecha en la Figura 18) es la pestaña de control PID que contiene lo
referente a configuración del orden de la planta así como las cajas de texto para configurar
la variables del control (mayor información referirse al ítem 4.1.5.).
5. Panel de estatus del proceso y errores: la pestaña de estatus muestra a modo de lista el
estado de la salida, el error, la señal de referencia para tener en modo de texto la tendencia
del proceso; en la pestaña de lista de errores se muestran todas las acciones erróneas que
se han realizado en el manejo de la interfaz.
6. Valores numéricos del proceso: las cajas de texto del panel muestran en valor decimal los
valores actuales de: salida, lectura del sensor, acción de control, valor de referencia y error
en el modo real para tener un mayor control del estado del proceso.
65
7. Panel de gráfico mímico: permiten la facilidad de aprendizaje por su similitud con la planta
real, el panel contiene indicadores gráficos del comportamiento de la salida y del nivel de
error.
8. Panel de gráficos de tendencia: siendo la información más usada por el usuario, el panel
permite interactuar con los valores que desea ver, como quitar y poner datos con los
selectores; así como acercamiento a zonas de interés y manejo de cursores para obtener
datos precisos capturados en la gráfica. Se puede apreciar gráficamente en la Figura 19, el
panel permite visualizar la señal de entrada, la acción de control y el valor de referencias.
Obteniendo respuestas como se observa en la Figura 20, con la cual se puede interactuar
tomando valores con el cursor o haciendo uso del acercamiento para enfocar en zonas de
interés. La configuración de este módulo se expresa en 2 de la Figura 13, donde para su
funcionamiento se debe elegir el modo en la primera sección de la barra de herramientas, el
tipo de señal de estimulo junto con su amplitud, y posteriormente en la segunda sección de la
barra de herramientas la duración en tiempo de la simulación misma. La configuración de las
66
variables de la planta se ubica en el panel de configuración de parámetros en la pestaña de
control PID.
Si se desea ampliar la gráfica basta con hacer doble clic dentro de la gráfica, exportándola a
una ventana nueva de mayor tamaño, como se observa en la Figura 21. Se puede realizar toma
de datos y/o analizar el comportamiento de la planta simulada interactuando con los cursores
y el acercamiento.
67
4.1.3. Modo real
El modo real propuesto (Figura 22), permite obtener datos del módulo externo por
medio del protocolo de comunicación USB, para el funcionamiento se elige el modo en la
barra de herramientas, se ubica el puerto virtual en la comunicación USB que se expone en
el ítem 4.1.4, y se elige un método de control PID o difuso.
68
4.1.4. Conexión con módulo externo
Figura 23. Ventana que muestra la configuración para conexión con el módulo externo
Y en segunda instancia el modo de control ya sea P, PI, PD, PID. La edición de las
ganancias y del valor de muestreo se realiza a través de cajas de texto ubicadas en el panel
como se observa en la Figura 24, permitiendo realizar acciones de deshacer y rehacer
brindando controlabilidad a la interfaz.
69
Figura 24. Panel para configuración de control PID
70
Figura 25. Panel para configuración de control difuso
71
Figura 26. Representación gráfica de control difuso.
72
Capítulo 5. Aplicaciones
En éste capítulo se presentan las aplicaciones de control de velocidad, nivel y presión con
que fue puesta a prueba DEVCO. El caso de estudio principal es el control de velocidad, por lo
que se muestra el diseño y la construcción del módulo periférico con las diferentes etapas:
acondicionamiento de señal, manejo de potencia y comunicación con una computadora mediante
el protocolo de comunicación USB, además de la abstracción de su modelo matemático
aproximado.
73
Figura 28. Diagrama de estados del algoritmo para micro-controlador
La trama de datos que se envía a la interfaz está compuesto como se observa en la Tabla
13. Donde se transmite un inicio de trama (0x21) para tener un mejor control de los datos que
recibe la interfaz, evitando así que datos erróneos sean procesados por los algoritmos de control.
Por otra parte si el micro-controlador envía un dato de más de 8-bit, este es dividido en dos datos
de 8-bits, ocupando el lugar de dato 2 que se muestra en la Tabla 13, para que la interfaz lo pueda
recibir y procesar.
74
En resumen, con las formas de transmisión y recepción de datos se tiene un control sobre
los mismos, el software de la computadora solo recibe la trama que inicia con el dato correcto y
compacta los dos datos que le siguen, esto para prever cuando el micro-controlador envía un dato
de 10-bits poderlo procesar y no perder información del proceso. De la misma forma el micro-
controlador, solo acepta la información con la trama de inicio correcta para posteriormente
procesar el dato siguiente y convertirlo en una señal PWM útil para el actuador del proceso.
Se emplea un motor de 12 VDC mostrado en la Figura 29, el cual tiene un máximo de 200
RPM y como sensor de retroalimentación un encoder de efecto Hall de 4288 pulsos por revolución.
El motor cuenta con 5 cables los cuales tienen los colores Rojo, Negro, Verde, Azul,
Amarillo y Blanco; que corresponde a:
75
Blanco salida B del encoder
Para la lectura del encoder de 4288 pulsos por revolución ubicado en el motor, se utiliza el
módulo de captura la entrada del micro-controlador, el cual cuenta los pulsos del encoder y cada
vez que hay un desboramiento del timer, calcula la cantidad de revoluciones.
Para el acondicionamiento de la señal proveniente de encoder de efecto Hall, se usa un
filtro RC como el de la Figura 30, el cual es recomendado por el fabricante del motor, para
disminuir el ruido y aumentar la corriente de la señal enviada al micro-controlador.
C1
0.1uF
76
12VDC
Motor
D1
1N4007
Micro-controlador U1
R3 B 6
1 A C 5
1k
2 4 R2 Q1
K E TIP122
4N35 220
El resultado final es el circuito de la Figura 33, capaz de adquirir las señales de un encoder
de efecto hall y manejo de motor DC de hasta 24 VDC, desacoplando las señales de control de las
de potencia.
77
El módulo periférico resultante, puede ser empleado para leer cualquier encoder y para
manejar motores DC de hasta 24 voltios, la comunicación con una computadora la realiza mediante
el protocolo USB y es flexible en cuanto a la configuración del protocolo de comunicación serial.
El módulo se detalla en la Figura 34.
La planta empleada para realizar control de velocidad se observa en la Figura 35, está
compuesta por un motor DC de 12 voltios y un encoder de 4288 pulsos por revolución.
78
Para obtener la forma matemática, se utilizó el módulo periférico para control de
velocidad, la interfaz diseñada y el método numérico de mínimos cuadrados:
Como se había mencionado en el capítulo anterior, el módulo periférico envía los datos del
encoder por medio del USB, de esta manera se configuró la interfaz gráfica para que adquiriera 31
muestras con intervalos entre ellas de 0.1 segundos con un escalón de 100 RPM’s, los resultados
se muestran a continuación en la Tabla 15.
79
5.3.3. Modelo matemático aproximado
Utilizando los datos obtenidos con ayuda de la interfaz, se aplica el método matemático de
mínimos cuadrados, el cual dado un conjunto de pares ordenados intenta encontrar la función
continua que más se aproxime al conjunto de datos ingresados.
Para iniciar con el método se elige el orden de la función de transferencia que se desea, que
para la presente prueba fue una ecuación de primer orden como se observa en (3).
𝑦(𝑠) 𝐾
= (3)
𝑢(𝑠) 𝑇𝑠+1
La forma clásica del método se indica en (4), donde v es el vector columna de los datos de
salida en una posición adelantada, ∅ es la matriz que relaciona los datos de salida en una posición
atrás y los datos de entrada, y 𝐵̂ son los dos coeficientes 𝑎̂ y 𝑏̂ que se aproximan a la planta real.
Para resolver (2) se utilizó el software de Matlab, dicha ecuación puesta en código de
programación queda expresada como se muestra:
Como resultado se tiene que los coeficientes continuos 𝐵̂ son: 𝑎̂ = -0.5827, 𝑏̂ = 0.5872
con un coeficiente de aproximación j = 704.7486. Una vez obtenidos los coeficientes, el paso
que sigue es pasarlos de su forma continua a discreta, para esto se convierte (3) a ecuaciones en
diferencia y se encuentran las relaciones, de la siguiente manera:
𝑦(𝑠) 𝐾
=
𝑢(𝑠) 𝑇𝑠 + 1
80
𝑇𝑆𝑦(𝑠) + 𝑦(𝑠) = 𝐾𝑢(𝑠)
𝑑𝑦(𝑡)
𝑇 + 𝑦(𝑡) = 𝐾𝑢(𝑡)
𝑑𝑡
Luego se convierte a ecuaciones en diferencia y se adelanta:
𝑦(𝑘 + 1) − 𝑦(𝑘)
𝑇[ ] + 𝑦(𝐾) = 𝐾𝑢(𝑘)
∆
𝑇 𝑇
𝑦(𝑘 + 1) − 𝑦(𝑘) + 𝑦(𝑘) = 𝐾𝑢(𝑘)
∆ ∆
Luego se atrasa:
𝑇 ∆−𝑇
𝑦(𝑘) + 𝑦(𝑘 − 1) = 𝐾𝑢(𝑘 − 1)
∆ ∆
∆−𝑇
= 𝑎̂
1
𝑇
𝐾∆
= 𝑏̂
1
𝑇
Donde k se denomina ganancia del proceso, T es la constante de tiempo del sistema y ∆
es el muestreo. Se Despeja T y K, y sabiendo que ∆= tiempo de muestreo/ número de muestras,
se tiene la ecuación del motor (5).
𝑦(𝑠) 1.407
= (5)
𝑢(𝑠) 0.239 𝑆+1
Para comprobar que el modelo de planta obtenido es real, con ayuda de Simulink de Matlab
se hace la simulación como se observa en la Figura 36.
81
Figura 36. Diagrama de la simulación en Simulink
Figura 37. Gráfica de modelo matemático contra datos reales obtenida en Simulink
Figura 38. Datos en el panel de configuración de parámetros para ecuaciones de primer orden en DEVCO
82
El resultado obtenido es similar al graficado con Matlab, en la Figura 39 se observa el
mismo comportamiento ante la señal escalón de excitación, y es posible interactuar con ella para
sacar datos de interés para el cálculo del controlador.
Se emplea un sensor ultrasónico SRF04 para medir el nivel del líquido. El sensor envía un
pulso que al encontrarse con un cambio de densidad en el ambiente, en este caso agua, regresa al
sensor que con ayuda de un micro-controlador calcula la distancia. El sensor se observa en la
Figura 40.
83
El sensor no necesita etapa de acondicionamiento, se conecta directamente al micro-
controlador como se observa en la Figura 41.
U1
2 14
PD0/RXD/PCINT16 PB0/ICP1/CLKO/PCINT0
3 15
PD1/TXD/PCINT17 PB1/OC1A/PCINT1
4 16
PD2/INT0/PCINT18 PB2/SS/OC1B/PCINT2
5 17
PD3/INT1/OC2B/PCINT19 PB3/MOSI/OC2A/PCINT3
6 18
PD4/T0/XCK/PCINT20 PB4/MISO/PCINT4
11 19
PD5/T1/OC0B/PCINT21 PB5/SCK/PCINT5
12 9
PD6/AIN0/OC0A/PCINT22 PB6/TOSC1/XTAL1/PCINT6
13 10
PD7/AIN1/PCINT23 PB7/TOSC2/XTAL2/PCINT7
21 23
AREF PC0/ADC0/PCINT8
20 24
AVCC PC1/ADC1/PCINT9
25
PC2/ADC2/PCINT10
26
PC3/ADC3/PCINT11
27
5 Vdc PC4/ADC4/SDA/PCINT12
PC5/ADC5/SCL/PCINT13
28
1
Trig PC6/RESET/PCINT14
ATMEGA328P
Echo
GND
El actuador es una moto-bomba similar a la Figura 42. Es de usos automotriz pero funciona
muy bien para el objetivo del control.
84
5.5. Control de Presión
Para acondicionar la señal del sensor se utilizó un LM358 como seguidor de voltaje, con la
finalidad de acoplar impedancias, así como los capacitores recomendados por el fabricante del
sensor para la alimentación y la salida de la señal analógica. El circuito se observa en la Figura 45.
8vdc
C1
470pF
U4:A
Input
8
3
1 Output
GND 2
VCC
4
LM358N
C2 C3
1uF 0.01uF
85
Figura 46. Electro-válvula PVQ31 [66].
Q1(C)
Q1
TIP41
U2 Q3
TIP41
B 6
Microcontrolador 1 A C 5
+88.8
AC mA
2 4
K E R1 R5
4N35 1M
100
R4
ELECTRO-VÁLVULA
1k
26
R11
56k
86
Capítulo 6. Experimentación y Resultados
Donde la acción P, es una respuesta proporcional con una ganancia a la diferencia entre el
valor de referencia y el valor de la retroalimentación. La acción I elimina el error en régimen
estacionario, pero se obtiene un mayor tiempo de establecimiento, una respuesta más lenta. La
acción D disminuye el exceso de sobre-oscilaciones [67].
Para calcular las constantes del control PID se utilizó el primer método de las reglas de
sintonización de Ziegler-Nichols, el cual y como se observa en la Figura 50, se aplica una señal
escalón a la planta para obtener su comportamiento de manera experimental y luego se dibuja un
recta tangente en el punto de inflexión, con esto se obtiene el tiempo de retardo L y la constante
87
de tiempo T. Es importante tener en cuenta que para que el método sea pertinente la curva de la
planta debe tener forma de “S”.
El método sugiere establecer los valores de Kp, Ti y Td de acuerdo con las fórmulas de la
Figura 51.
Al excitar con un escalón de amplitud 100 la planta del caso de estudio, se tiene como
resultado la Figura 53, la cual tiene la forma de la curva requerida por el método. Con ayuda de
Matlab se extraen los valores L=0.05842 y T=0.4077, para reemplazar en las ecuación para PID
de la Figura 52.
RPM
Tiempo (Sg)
88
Aplicando las formulas se obtiene los resultados (6), (7) y (8).
Cálculo constante P:
0.4077
𝐾𝑝 = 1.2 ∗ (0.05842) = 8.374 (6)
Cálculo constante I:
𝑇𝑖 = 2 ∗ 0.05842 = 0.116 (7)
Cálculo constante D:
𝑇𝑑 = 0.5 ∗ 0.05842 = 0.029 (8)
Con apoyo de Simulink de Matlab, se simula el comportamiento del controlador y la planta ante un
escalón, obteniendo como resultado una señal estable pero que no llega al punto de referencia, vista en la
Figura 54. La simulación se establece como se observa en la Figura 53, para obtener el esquema general
del control PID.
89
Para lograr el resultado deseado, tanto en rapidez como en alcanzar el punto de referencia,
se aumenta la constante proporcional, para incrementar la ganancia en el sistema y a su vez la
velocidad de respuesta, también se disminuye Td para reducir las oscilaciones bruscas, como
resultado se obtiene la señal de Figura 55, la cual es satisfactoria para probar con el sistema físico.
Los valores finales son: Tp=20, Ti=0.116, Td=0.025.
Figura 55. Gráfica simulada de respuesta al escalón del controlador con constantes afinadas.
Como resultado se tiene que al excitar el sistema con un escalón de 160 RPM’s este alcanza
el valor de referencia y su estabilidad en 0.7 segundos (Señal verde en la Figura 57), sin sobre
pasos y con oscilaciones de +- 2 RPM’s producto de la fluctuación del encoder que es quien cierra
el lazo de control. Para efectos de entendimiento se grafica la respuesta del controlador, (señal azul
en la Figura 57).
90
Figura 57. Respuesta al escalón del sistema real
Se excitó el sistema con un perfil para observar el comportamiento del controlador ante el
cambio de escalón, y como se muestra en la Figura 58, el controlador alcanza el primer
valor de referencia de 160 RPM’s en 0.7 segundos, posteriormente el cambio de escalón a
180 RPM’s lo alcanza en 1.4 segundos y este comportamiento se repite cuando el cambio
vuelve a ser a 160 RPM’s. El sistema varía en +- 2RPM’s sin sobrepasos en los cambios
de escalón igual que en el experimento anterior con un escalón de 160 RPM’s.
Los sistemas difusos se refieren a situaciones en las que no se puede expresar como
verdadero o falso, sino como parcialmente cierto. Una de las ventajas que posee es que se trabaja
en base a la experiencia humana del proceso lo que hace que sea más fácil desarrollar tareas. Los
conjuntos difusos se expresan con términos lingüísticos los cuales representan rangos de valores
en un universo definido. Un sistema difuso está compuesto por cuatro componentes fundamentales
como se describe en la Figura 59, donde los valores de entrada y salida se les denominan valores
crisp.
91
Figura 59. Diagrama a bloques de control difuso
La función del fuzzificador es convertir los valores crisp a valores difusos, el cual compara
el valor actual en cada conjunto difuso dándole un valor de membresía. La base de reglas son
sentencias condicionales (9).
El control difuso diseñado para el control de velocidad del motor, se basa en 3 conjunto de
entrada y 3 de salida como se observa en la Figura 60. Los 3 conjuntos de entrada representan el
error:
Por otro lado, los 3 conjuntos de salida, tienen un universo de valores que van de -3 a 3,
para obtener valores de incremento pequeños cuando se aplique el método de defuzzificación, los
3 conjuntos se definen como: incremento rápido mostrado en azul, incremento lento mostrado en
naranja y decremento rápido mostrado en verde. Los pares ordenados que representan los
conjuntos son:
92
Conjuntos entrada= [-200, -200, -120, -2; -200, 0, 200; 1, 10, 200, 200]
93
Figura 62. Diagrama de control Difuso donde se muestra el operador de agregación.
∑𝑘
𝑖=1 𝑥𝑖∗𝜇(𝑥𝑖)
𝑌𝐶𝑂𝐺 = (11)
∑𝑘
𝑖=1 𝜇(𝑥𝑖)
Este método calcula el área del conjunto agregado y luego encuentra su punto medio o
centro de gravedad, también se le conoce como media difusa (Fuzzy Mean FM).
Para la puesta en marcha en DEVCO, se configuraron los valores de los conjuntos difusos,
y se simuló la respuesta a una entrada como se observa en la Figura 62, teniendo en cuenta que la
entrada al sistema es la diferencia entre el valor de referencia y la entrada actual leída. Como
resultado se tienen incrementos cercanos a cero cuando el valor leído se acerca al valor de
referencia. Utilizando la planta y con un valor de referencia de 160 RPM’s se tiene como resultado
la Figura 63.
94
Se obtuvo una respuesta al escalón en 2.4 segundos, que no presentan sobrepasos y su
estabilización se obtiene con pequeñas oscilaciones de +/- 2 RPM’s. Estas variaciones se deben a
la lectura del encoder que a pesar que tiene un filtro en software varía en +/- 5 RPM’s.
Se realizaron pruebas a perfiles para observar el comportamiento del control con diferente
escalón y como se observa en la Figura 64, el cambio de escalón de 160 RPM a 200 RPM lo realiza
en 3 segundos aproximadamente y con el cambio descendente de 200 RPM a 160 RPM lo realiza
en 4 segundos.
Conjuntos de salida= [-256, -256, -60, -1; -6, 0, 6; 5, 70, 256, 256;]
La base de reglas empleada, se observa en la Figura 65, en la cual se usa una relación
directa como en el control de velocidad, obteniendo así incrementos en la variable de salida
grandes cuando el error es muy grande e incrementos pequeños cuando la variable se acerca a la
referencia.
95
Figura 65. Base de reglas control de nivel
Como resultado se tiene la Figura 67, en la que se presenta la respuesta del sistema ante un
escalón de 8 centímetros de nivel. El sistema alcanza el valor de referencia en 6 segundos, sin
sobrepasos. Las variaciones que se observan se deben a que el sensor solo mide en centímetros, de
modo que las lecturas las aproxima al valor entero más cercano.
96
6.4. Diseño y Puesta en Marcha de Control Difuso para Presión
Al igual que los dos controles anteriores, el controlador se hizo en base al error con 3
conjuntos difusos como se observa en los pares ordenados:
La relación que se usa es directa al igual que en los dos controles anteriores, cambiando
únicamente el significado de los conjuntos. La base de reglas empleada, se observa en la Figura
68, donde se tiene que variar la apertura de la válvula para permitir o no el paso de aire a la cámara.
Los conjuntos difusos empleados se muestran en la Figura 69, donde se visualizan los
rangos de valores, así como los incrementos que se obtienen cuando el error tiende a cero.
El operador de agregación y el método de defuzificación son el mismo que para los dos
caso de aplicación anteriores. Se obtiene como respuesta al escalón la Figura 70, donde el sistema
97
alcanza su valor de referencia de 10 PSI en 8 segundos, manteniendo un pequeño ruido dada por
la sensibilidad del sensor.
6.5. Discusión
El proyecto tiene como propósito desarrollar una GHMI para control de procesos útil en
diferentes tipos de control, como se muestra en apartados anteriores en control PID y control
Difuso. De acuerdo con los resultados obtenidos, DEVCO tiene las herramientas necesarias para
desarrollar este tipo de controles. Con las aplicaciones se comprobó la eficiencia del software así
como la facilidad para interactuar con los procesos y realizar cambios mediante variables.
Por otro lado, con la utilización de los dos tipos de controladores se puede decir que son
similares en su comportamiento, cumpliendo con el objetivo de estabilizar el proceso en un punto
de referencia dado por el usuario. Los tiempos de respuesta van a depender de los parámetros con
que se diseñe así como el sobre-paso y las oscilaciones.
98
realizar defuzificación utilizando funciones Singleton o con otro método de defuzificación que no
sea por promedio ya que este promedio es el que provoca dicho comportamiento.
Las otras dos aplicaciones permiten confirmar que la interfaz es flexible en cuanto al
proceso a manipular. No se deben realizar cambios significativos para incluir más aplicaciones, la
interfaz espera los datos provenientes del USB ya sea de 8 o 12 bits, independientemente del tipo
de sensor y como resultado envía una señal PWM útil para gran cantidad de actuadores.
99
Capítulo 7. Conclusiones y Propuestas para Trabajos Futuros
En éste capítulo se presentan las conclusiones del trabajo, así como los trabajos futuros
sobre la interfaz que se deberían realizar tanto para ponerla a punto como para programar en ella
otros controles u optimizar los que tiene hasta el momento.
7.1. Conclusiones
La interacción con variables físicas que promueve DEVCO permite poner en práctica los
conceptos de control que se adquieren en las aulas de clase y ver cómo se comportan
nuestros sistemas en ambientes físicos controlados.
La interfaz es funcional, cuenta con las herramientas necesarias para interactuar con el
proceso y con los datos provenientes del mismo, además, se adapta a diferentes procesos
evidenciándolo con los casos de aplicación, donde se trabajó con señales de encoder, sensor
ultrasónico y sensor analógico de presión, sin importar la cantidad de bits.
100
7.2. Trabajo Futuro
Mejorar los gráficos mímicos e incluir más procesos. Actualmente cuenta con lo necesario
para un control de velocidad, pero es importante que incluya la flexibilidad de gráficos para
procesos comunes como: control de temperatura, nivel, posición, entre otros.
Hacer más didáctico el sistema incluyendo bloques de texto con ayuda interactiva en el
manejo de la interfaz y/o un tutor virtual que guie el uso y provea información del proceso
que se pretende realizar.
7.3. Productos
Artículo en proceso para la revista IEEE Latin America Transactions, con nombre “Guide
Development Graphic Human Machine Interface (GHMI)”.
101
Referencias
[1] L. F. Palma Pozo and S. E. Sangopanta Ardila, “Diseño de un PLC con Microcontrolador
PIC 16F873.,” Universidad de Pinar del Río, 2011.
[2] E. Martínez Paredes, “Propuesta de desarrollo de una interfaz de control tipo PLC
mediante micro-controladores AVR,” Cent. Estud. Super. Nav., no. 04–2004–
030110032500–102, pp. 97 – 112, 2006.
[3] Siemen_ssupply, “Siemens Simatic S5 S7 TI Simadyn Teleperm Texas Instruments PLC
DCS,” 2013. [Online]. Available: http://www.siemenssupply.com/. [Accessed: 09-Dec-
2014].
[4] J. Payne, “PLC vs PAC,” Control Engineering, 2013. [Online]. Available:
http://www.controleng.com/single-article/plc-vs-
pac/44448cf771be09bff7115c621633bd94.html?print=1.
[5] J. A. Cartagena Méndez and C. O. Pocasangre Jiménez, “‘ Diseño y construcción de un (
PLC ) Control Lógico Programable basado en la tecnología del microcontrolador ,’”
Universidad de el Salvador, 2004.
[6] T. Thayer., “Speaking in Tongues: Understanding the IEC 61131-3 Programming
Languages,” Control Engineering, 2009. [Online]. Available:
http://www.controleng.com/industry-news/more-news/single-article/speaking-in-tongues-
understanding-the-iec-61131-3-programming-languages/4123b0e66c.html.
[7] J. L. Bossa, “Interfaz gráfica para un banco didáctico dedicado a la electrónica de
potencia,” 2008, p. 6.
[8] Rexroth Bosch Group, “Training systems for automation,” no. 09.2012, p. 88, 2012.
[9] E. R. Larraguivel, “Retos y amenazas a la formación de ingenieros frente a las
tranformaciones de la producción industrial . El caso del área metropolitana de la ciudad
de México,” vol. 11, pp. 197–216, 2000.
[10] Lucas-Nulle, “Training Systems for Automation Technology,” vol. 4, no. P5142, p. 136,
2013.
[11] P. Gamboa, J. Faria, J. Palma, and L. Ferreira, “Modern Technologies for Experimental
Education in Industrial Electronics and Electric Drives,” in IEEE, 2005, pp. 1–8.
[12] U. Maracaibo and E. Zulia, “Modelo didáctico para el aprendizaje significativo en los
sistemas automáticos de control,” REDHECS, vol. 7, no. 5, pp. 24–44, 2009.
[13] F. A. B. Batista, C. A. Petry, E. L. F. Santos, and B. R. Almeida, “DIDACTIC SYSTEM
FOR DIGITAL CONTROL OF POWER ELECTRONICS APPLICATIONS,” IEEE, no.
102
978–1–4244–3370–4, pp. 1093–1098, 2009.
[14] M. S. Bernasconi and A. E. Puglesi, “EL LABORATORIO DE CONTROL
AUTOMÁTICO COMO INGENIEROS,” in World Enginneerin Education Forum, 2013,
p. 10.
[15] P. G. López, J. Salvador, F. López, R. Junior, S. Gómez, J. De Jesús, and M. Juárez,
“Equipos didácticos industriales en el modelo educativo de los Cecati,” Redalyc, vol. vol:
9, no. 48, México, pp. 73–81, 2009.
[16] A. Hernández Zavala, O. Camacho Nieto, O. Espinosa Sosa, L. Galindo Soria, and A.
Gutiérrez Aldana, Diseño y construcción de un sistema básico de interacción y acción con
procesos reales reconfigurable y de bajo costo HMI-CIC. Zacatenco, México, 2007.
[17] A. Hernández Zavala, O. Camacho Nieto, C. Yañez Márquez, and O. Espinosa Sosa,
“Low cost multi-channel data acquisition system with graphical HMI,” Res. Comput. Sci.,
vol. 24, pp. 85–93, 2006.
[18] A. Hernández Zavala, O. Camacho Nieto, O. Espinosa Sosa, and C. Yañez Márquez,
“Multipurpose Interface Card for Data Acquisition and Control with Low Technological
Hardware Cost,” in ROC&C’2006-CP-21, 2006, pp. 1–5.
[19] Rexroth Bosch Group, “Rexroth IndraLogic L20 System Description,” vol. 01, no.
R911312329, p. 124, 2005.
[20] Armfiel inc., “Multifunction Process Control Teaching System - PCT40,” no. 4, pp. 1–8,
2009.
[21] Edibon, “Equipamiento didáctico técnico 100%.” Edibon, España, p. 28, 2007.
[22] Schneider Electric, “Equipamiento Pedagógico,” p. 18.
[23] Asti Industrial Process Automation, “Didactic equipment systems Engineering.” Romania,
p. 16.
[24] De-Lorenzo, “Contolador logico programable – 36 in/28 outr,” Italia.
[25] H. Ingenium, “Módulo Mecatrónico Compacto - Neumático Clasificar y Transportar ‘
Clasificador Neumático de Piezas Cúbicas mMS .’”
[26] Feedback Instruments Limited, “Industrial Process Control Trainers with Discovery
software,” vol. 1, no. I 38S- I, p. 16.
[27] Inncomex, “PLC-300 entrenador de PLC MITSUBISHI,” p. 1, 2014.
[28] smctraining, “AUTOMATE-200,” pp. 144–155, 2013.
[29] Tecnología Educativa s.a, “Equipamento Educativo y Audiovisual.” [Online]. Available:
103
http://www.tecnoedu.com/Didacticcos.php.
[30] Wuekro, “Training & Didactic Systems Control,” Catalog, vol. 2014, no. WA2E/03, p.
12.
[31] Electtronica Venerta S.P.A, “SOFTWARE DI SUPERVISIONE PLC LIVELLO
AVANZATO,” p. 1.
[32] Festo didactic GmbH, “Virtual Mechatronics,” teciam, p. 14.
[33] “Control automático de procesos industriales. Simulación por ordenador PC.” [Online].
Available: http://www.alfredoroca.com/. [Accessed: 09-Dec-2014].
[34] Edudevices, “Modulo I + C, Módulo para instrumentación y control .,” Catalog, p. 2.
[35] Gunt-Hamburg, “Kit de Demostración : Regulación de Nivel RT 614,” vol. 49, no. 40, pp.
40–42, 2013.
[36] I. T. S. A. de C.V., “Unidad de Control de Procesos,” 2007. [Online]. Available:
http://www.teleternik.com/laboratorios_didácticos_y_simuladores/unidad_de_control_de_
procesos. [Accessed: 09-Dec-2014].
[37] IMEPI S.A de C.V, “Aurora HMI SCADA,” 2014. [Online]. Available:
http://www.imepi.com.mx/productos/aurora-hmi-scada.html. [Accessed: 09-Dec-2014].
[38] Siemens, “Software Industrial SIMIT SCE : El laboratorio virtual SIMATIC,” pp. 43–44,
2009.
[39] W. A. Eleutério, W. A. A. Hovadich, and E. Q. Braga, “CONTROLADOR LÓGICO
PROGRAMABLE UTILIZANDO PIC 18F4550,” E-xacta, vol. 4, no. 3, pp. 159–179,
2011.
[40] W. Avila Zambrano and J. E. Rodríguez Garzón, “Implementación de un PLC didáctico
para prácticas de laboratorio,” Uniminuto de Dios, 2012.
[41] J. C. Bedón Salazar and I. R. León Guerrero, “Diseño y construcción de un PLC modular
a base de microcontroladores,” Universidad Politécnica del ejercito, Latacunga, Ecuador,
2009.
[42] C. I. Camargo B, L. K. Durán B, and N. F. Rosas J, “Plataforma hardware / software
abierta para aplicaciones en procesos de automatización industrial,” Ingenium, no. 26, pp.
76–85, 2013.
[43] P. Beirão and D. Valério, “Creation of a Virtual Graphic Interface Applied to a Process
Control System,” Procedia - Soc. Behav. Sci., vol. 46, pp. 565–569, 2012.
[44] D. Grimaldi and S. Rapuano, “Hardware and software to design virtual laboratory for
education in instrumentation and measurement,” Measurement, vol. 42, no. 4, pp. 485–
104
493, May 2009.
[45] F. De La Cruz F., M. Díaz-Granados, S. Zerpa, and D. Giménez, “Web-LABAI:
Laboratorio Remoto de Automatización Industrial,” Rev. Iberoam. Automática e
Informática Ind. RIAI, vol. 7, no. 1, pp. 101–106, Jan. 2010.
[46] E. D. De la Torre Hurtado, “Diseño y Simulación de la Lógica de Control y de la Interfaz
HMI de un Prototipo de Sistema de Transportación para Ensamblaje en una planta
Automotriz”,” ESCUELA POLITÉCNICA DEL EJÉRCITO, 2008.
[47] F. J. Beltrán Carranza and M. A. López Thomas, “Aplicación de un HMI en un sistema de
contrl de flujo de agua,” Instituto Politécnico Nacional, 2010.
[48] J. J. Grueso Delgado, “Implementación de una interfaz HMI para la operación del módulo
control de procesos del laboratorio de robótica,” Universidad de la Salle, 2008.
[49] F. Adamo, F. Attivissimo, G. Cavone, and N. Giaquinto, “SCADA / HMI Systems in
Advanced Educational Courses,” IEEE, vol. 56, no. Transaction on Instrumentation and
Measurement, pp. 17–19, 2007.
[50] M. Bustamante, G. Moreno, A. Pelaez, and C. Madrigal, “Design and Implementation of
an Automation Didactic Module focused to Machine Vision and Programmable Logic
Control,” IEEE, no. 978–1–4799–7932–5, pp. 1–5, 2014.
[51] S. P. Valencia Aguilar, “Guia Metodológica para diseño de interfaces de usuario para
control y supervisión de procesos industriales,” Universidad Nacional de Colombia, 2012.
[52] P. Montuschi, A. Sanna, F. Lamberti, and G. Paravati, “‘Human-Computer Interaction:
Present and Future Trends,’” Comput. Now, vol. 7, no 9., p. 2, 2014.
[53] E. Ru, J. Lu, I. Mitma, A. Ram, and C. Pinz, “Desarrollo de una interfaz hombre máquina
orientada al control de procesos,” vol. 11, no. 1, pp. 70–72, 2008.
[54] S. F. Yachou, “Aplicación de la guía GEDIS a los Sistemas SCADA del NAP ( Network
Access Point ) de Canarias,” Universidad de La Laguna, 2014.
[55] M. Larrea, S. Martig, and S. Castro, “IHC en Ingeniería : Interfaces Industriales como un
caso de estudio .,” Argentina, 2005.
[56] Usuariowindows, “Cómo evitar que un usuario cambie la contraseña de inicio de sesión en
Windows.” [Online]. Available: http://usuariowindows.com/como-evitar-que-un-usuario-
cambie-la-contrasena-de-inicio-de-sesion-en-windows/. [Accessed: 22-May-2015].
[57] U.S. Nuclear Regulatory Commission Office of Nuclear Regulatory Research, “Human-
System Interface Design Review Guidelines Human-System Interface Design Review
Guidelines,” Washington,DC 20555-0001, 2002.
[58] J. R. Quintero H and H. de J. Cuicas R, “Símbolos Gráficos para el despliegue de procesos
105
Norma ANSI/ISA -S5.5-1985,” 1996.
[59] “ISA–5.5–1985,” Joel Rodríguez Guillén, 2012. [Online]. Available:
http://es.scribd.com/doc/83566377/ISA-5-5-1985#scribd. [Accessed: 22-May-2015].
[60] Msdn.microsoft, “Visual C#,” 2016. [Online]. Available: https://msdn.microsoft.com/es-
mx/library/kx37x362.aspx. [Accessed: 03-Feb-2016].
[61] A. Corporation, “ATmega8U2 ATmega16U2 ATmega32U2 Datasheet - doc7799.pdf,”
2010. [Online]. Available: http://www.atmel.com/Images/doc7799.pdf. [Accessed: 29-
Feb-2016].
[62] Dynamo electronis, “Motorreductor 12Kg.cm, Vel 200rpm, 12Vdc, relacion 50:1.”
[Online]. Available:
http://www.dynamoelectronics.com/index.php?page=shop.product_details&flypage=dyna
mo.tpl&product_id=1118&category_id=100&option=com_virtuemart&Itemid=58.
[Accessed: 29-Feb-2016].
[63] Pololu Corporation, “Pololu USB AVR Programmer.” [Online]. Available:
https://www.pololu.com/product/1300. [Accessed: 29-Feb-2016].
[64] S. L. Chaparro Cardenas, “Diseño y construcción de un módulo de desarrollo para control
de procesos,” Instituto Politécnico Nacional, 2016.
[65] S. T. Data, “Integrated Silicon Pressure Sensor On-Chip Signal Conditioned ,
Temperature Compensated and Calibrated SERIES,” Time, pp. 1–9, 2001.
[66] SMC®, “Electroválvula proporcional compacta.”
[67] National Instruments, “PID Theory Explained - National Instruments,” mar 29, 2011.
[Online]. Available: http://www.ni.com/white-paper/3782/en/#toc2. [Accessed: 08-Feb-
2016].
[68] G. J. Klir, “Fuzzy logic unearthing its meaning and significance,” IEEE Potentials, vol.
14, no. 4, pp. 10–15, 1995.
106
ANEXOS
Comunicación.c
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#include "serial.h"
void pwm_init()
{
TCCR2A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01);
TCCR2B |= _BV(CS00);
DDRB |= _BV(PB3); // pin B3 como salida de PWM para atmega328p
}
int main(void)
{ pwm_init();
setupTimer();
PORTB|=(1<<ICP); //pullup Habilitado
DDRB&=~(1<<ICP); //ICR1 como entrada
107
int valor;
char valor1;
int num=134;
char input;
int RPM, RPMP, contador, RPM_Ant;
char buff[20];
char str[8];
int a=0;
char i=0;
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
sei();
while(1)
{
if (uart_available())
{
_delay_ms(4);
valor = uart_getc(); // Inicio de transmisión
_delay_ms(4);
valor1 = uart_getc(); // Dato
if(valor==0x01)
{
OCR2A=valor1; // Valor para PWM
}
if(valor==0x01)
{
uart_putc( (unsigned char)0x21 ); // Envía inicio de transmisión
uart_putc( (unsigned char)RPMP ); // Envía lectura del encoder
_delay_ms(1); // Estabiliza lectura
108
}
Serial.c
/*************************************************************************
Title: Interrupt UART library with receive/transmit circular buffers
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
File: $Id: uart.c,v 1.6.2.1 2007/07/01 11:14:38 peter Exp $
Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher
Hardware: any AVR with built-in UART,
License: GNU General Public License
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "serial.h"
/*
* constants and macros
*/
109
#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) ||
defined(__AVR_ATmega32__) \
|| defined(__AVR_ATmega323__)
/* ATmega with one USART */
#define ATMEGA_USART
#define UART0_RECEIVE_INTERRUPT USART_RXC_vect
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
#define UART0_STATUS UCSRA
#define UART0_CONTROL UCSRB
#define UART0_DATA UDR
#define UART0_UDRIE UDRIE
#elif defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__)
/* ATmega with one USART */
#define ATMEGA_USART
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
#define UART0_STATUS UCSRA
#define UART0_CONTROL UCSRB
#define UART0_DATA UDR
#define UART0_UDRIE UDRIE
#elif defined(__AVR_ATmega163__)
/* ATmega163 with one UART */
#define ATMEGA_UART
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
#define UART0_STATUS UCSRA
#define UART0_CONTROL UCSRB
#define UART0_DATA UDR
#define UART0_UDRIE UDRIE
#elif defined(__AVR_ATmega162__)
/* ATmega with two USART */
#define ATMEGA_USART0
#define ATMEGA_USART1
#define UART0_RECEIVE_INTERRUPT USART0_RXC_vect
#define UART1_RECEIVE_INTERRUPT USART1_RXC_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#define UART1_STATUS UCSR1A
#define UART1_CONTROL UCSR1B
#define UART1_DATA UDR1
#define UART1_UDRIE UDRIE1
#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
/* ATmega with two USART */
#define ATMEGA_USART0
#define ATMEGA_USART1
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#define UART1_STATUS UCSR1A
#define UART1_CONTROL UCSR1B
#define UART1_DATA UDR1
110
#define UART1_UDRIE UDRIE1
#elif defined(__AVR_ATmega161__)
/* ATmega with UART */
#error "AVR ATmega161 currently not supported by this libaray !"
#elif defined(__AVR_ATmega169__)
/* ATmega with one USART */
#define ATMEGA_USART
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART0_STATUS UCSRA
#define UART0_CONTROL UCSRB
#define UART0_DATA UDR
#define UART0_UDRIE UDRIE
#elif defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) ||
defined(__AVR_ATmega168__) || \
defined(__AVR_ATmega48P__) ||defined(__AVR_ATmega88P__) ||
defined(__AVR_ATmega168P__) || \
defined(__AVR_ATmega328P__)
/* TLS-Added 48P/88P/168P/328P */
/* ATmega with one USART */
#define ATMEGA_USART0
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#elif defined(__AVR_ATtiny2313__)
#define ATMEGA_USART
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
#define UART0_STATUS UCSRA
#define UART0_CONTROL UCSRB
#define UART0_DATA UDR
#define UART0_UDRIE UDRIE
#elif defined(__AVR_ATmega329__) || defined(__AVR_ATmega649__) ||
defined(__AVR_ATmega325__) ||defined(__AVR_ATmega3250__) ||
defined(__AVR_ATmega645__) ||defined(__AVR_ATmega6450__)
/* ATmega with one USART */
#define ATMEGA_USART0
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#elif defined(__AVR_ATmega3290__) || defined(__AVR_ATmega6490__)
/* TLS-Separated these two from the previous group because of inconsistency in the
USART_RX */
/* ATmega with one USART */
#define ATMEGA_USART0
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) ||
defined(__AVR_ATmega640__)
/* ATmega with two USART */
111
#define ATMEGA_USART0
#define ATMEGA_USART1
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART1_RECEIVE_INTERRUPT USART0_UDRE_vect
#define UART0_TRANSMIT_INTERRUPT USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#define UART1_STATUS UCSR1A
#define UART1_CONTROL UCSR1B
#define UART1_DATA UDR1
#define UART1_UDRIE UDRIE1
#elif defined(__AVR_ATmega644__)
/* ATmega with one USART */
#define ATMEGA_USART0
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) ||
defined(__AVR_ATmega644P__)
/* ATmega with two USART */
#define ATMEGA_USART0
#define ATMEGA_USART1
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
#define UART1_RECEIVE_INTERRUPT USART0_UDRE_vect
#define UART0_TRANSMIT_INTERRUPT USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
#define UART0_STATUS UCSR0A
#define UART0_CONTROL UCSR0B
#define UART0_DATA UDR0
#define UART0_UDRIE UDRIE0
#define UART1_STATUS UCSR1A
#define UART1_CONTROL UCSR1B
#define UART1_DATA UDR1
#define UART1_UDRIE UDRIE1
#else
#error "no UART definition for MCU available"
#endif
/*
* module global variables
*/
static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
static volatile unsigned char UART_TxHead;
static volatile unsigned char UART_TxTail;
static volatile unsigned char UART_RxHead;
static volatile unsigned char UART_RxTail;
static volatile unsigned char UART_LastRxError;
112
static volatile unsigned char UART1_TxTail;
static volatile unsigned char UART1_RxHead;
static volatile unsigned char UART1_RxTail;
static volatile unsigned char UART1_LastRxError;
#endif
ISR(UART0_RECEIVE_INTERRUPT)
/*************************************************************************
Function: UART Receive Complete interrupt
Purpose: called when the UART has received a character
**************************************************************************/
{
unsigned char tmphead;
unsigned char data;
unsigned char usr;
unsigned char lastRxError;
/* */
#if defined( AT90_UART )
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#elif defined( ATMEGA_USART )
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#elif defined( ATMEGA_USART0 )
lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) );
#elif defined ( ATMEGA_UART )
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#endif
if ( tmphead == UART_RxTail ) {
/* error: receive buffer overflow */
lastRxError = UART_BUFFER_OVERFLOW >> 8;
}else{
/* store new index */
UART_RxHead = tmphead;
/* store received data in buffer */
UART_RxBuf[tmphead] = data;
}
UART_LastRxError = lastRxError;
}
ISR(UART0_TRANSMIT_INTERRUPT)
/*************************************************************************
Function: UART Data Register Empty interrupt
Purpose: called when the UART is ready to transmit the next byte
**************************************************************************/
{
unsigned char tmptail;
113
if ( UART_TxHead != UART_TxTail) {
/* calculate and store new buffer index */
tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK;
UART_TxTail = tmptail;
/* get one byte from buffer and write it to UART */
UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
}else{
/* tx buffer empty, disable UDRE interrupt */
UART0_CONTROL &= ~_BV(UART0_UDRIE);
}
}
/*************************************************************************
Function: uart_init()
Purpose: initialize UART and set baudrate
Input: baudrate using macro UART_BAUD_SELECT()
Returns: none
**************************************************************************/
void uart_init(unsigned int baudrate)
{
UART_TxHead = 0;
UART_TxTail = 0;
UART_RxHead = 0;
UART_RxTail = 0;
114
UBRR0H = (unsigned char)(baudrate>>8);
UBRR0L = (unsigned char) baudrate;
#endif
}/* uart_init */
/*************************************************************************
Function: uart_getc()
Purpose: return byte from ringbuffer
Returns: lower byte: received byte from ringbuffer
higher byte: last receive error
**************************************************************************/
unsigned int uart_getc(void)
{
unsigned char tmptail;
unsigned char data;
if ( UART_RxHead == UART_RxTail ) {
return UART_NO_DATA; /* no data available */
}
}/* uart_getc */
/*************************************************************************
115
Function: uart_putc()
Purpose: write byte to ringbuffer for transmitting via UART
Input: byte to be transmitted
Returns: none
**************************************************************************/
void uart_putc(unsigned char data)
{
unsigned int tmphead;
UART_TxBuf[tmphead] = data;
UART_TxHead = tmphead;
}/* uart_putc */
/*************************************************************************
Function: uart_puts()
Purpose: transmit string to UART
Input: string to be transmitted
Returns: none
**************************************************************************/
void uart_puts(const char *s )
{
while (*s)
uart_putc(*s++);
}/* uart_puts */
/*************************************************************************
Function: uart_puts_p()
Purpose: transmit string from program memory to UART
Input: program memory string to be transmitted
Returns: none
**************************************************************************/
void uart_puts_p(const char *progmem_s )
{
register char c;
while ( (c = pgm_read_byte(progmem_s++)) )
uart_putc(c);
}/* uart_puts_p */
/*************************************************************************
Function: uart_available()
Purpose: Determine the number of bytes waiting in the receive buffer
Input: None
116
Returns: Integer number of bytes in the receive buffer
**************************************************************************/
int uart_available(void)
{
return (UART_RX_BUFFER_MASK + UART_RxHead - UART_RxTail) %
UART_RX_BUFFER_MASK;
}/* uart_available */
/*************************************************************************
Function: uart_flush()
Purpose: Flush bytes waiting the receive buffer. Acutally ignores them.
Input: None
Returns: None
**************************************************************************/
void uart_flush(void)
{
UART_RxHead = UART_RxTail;
}/* uart_flush */
/*
* these functions are only for ATmegas with two USART
*/
#if defined( ATMEGA_USART1 )
SIGNAL(UART1_RECEIVE_INTERRUPT)
/*************************************************************************
Function: UART1 Receive Complete interrupt
Purpose: called when the UART1 has received a character
**************************************************************************/
{
unsigned char tmphead;
unsigned char data;
unsigned char usr;
unsigned char lastRxError;
/* */
lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) );
if ( tmphead == UART1_RxTail ) {
/* error: receive buffer overflow */
lastRxError = UART_BUFFER_OVERFLOW >> 8;
}else{
/* store new index */
UART1_RxHead = tmphead;
/* store received data in buffer */
UART1_RxBuf[tmphead] = data;
}
UART1_LastRxError = lastRxError;
}
117
SIGNAL(UART1_TRANSMIT_INTERRUPT)
/*************************************************************************
Function: UART1 Data Register Empty interrupt
Purpose: called when the UART1 is ready to transmit the next byte
**************************************************************************/
{
unsigned char tmptail;
if ( UART1_TxHead != UART1_TxTail) {
/* calculate and store new buffer index */
tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK;
UART1_TxTail = tmptail;
/* get one byte from buffer and write it to UART */
UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
}else{
/* tx buffer empty, disable UDRE interrupt */
UART1_CONTROL &= ~_BV(UART1_UDRIE);
}
}
/*************************************************************************
Function: uart1_init()
Purpose: initialize UART1 and set baudrate
Input: baudrate using macro UART_BAUD_SELECT()
Returns: none
**************************************************************************/
void uart1_init(unsigned int baudrate)
{
UART1_TxHead = 0;
UART1_TxTail = 0;
UART1_RxHead = 0;
UART1_RxTail = 0;
/*************************************************************************
118
Function: uart1_getc()
Purpose: return byte from ringbuffer
Returns: lower byte: received byte from ringbuffer
higher byte: last receive error
**************************************************************************/
unsigned int uart1_getc(void)
{
unsigned char tmptail;
unsigned char data;
if ( UART1_RxHead == UART1_RxTail ) {
return UART_NO_DATA; /* no data available */
}
}/* uart1_getc */
/*************************************************************************
Function: uart1_putc()
Purpose: write byte to ringbuffer for transmitting via UART
Input: byte to be transmitted
Returns: none
**************************************************************************/
void uart1_putc(unsigned char data)
{
unsigned char tmphead;
UART1_TxBuf[tmphead] = data;
UART1_TxHead = tmphead;
}/* uart1_putc */
/*************************************************************************
Function: uart1_puts()
Purpose: transmit string to UART1
Input: string to be transmitted
Returns: none
**************************************************************************/
void uart1_puts(const char *s )
119
{
while (*s)
uart1_putc(*s++);
}/* uart1_puts */
/*************************************************************************
Function: uart1_puts_p()
Purpose: transmit string from program memory to UART1
Input: program memory string to be transmitted
Returns: none
**************************************************************************/
void uart1_puts_p(const char *progmem_s )
{
register char c;
while ( (c = pgm_read_byte(progmem_s++)) )
uart1_putc(c);
}/* uart1_puts_p */
/*************************************************************************
Function: uart1_available()
Purpose: Determine the number of bytes waiting in the receive buffer
Input: None
Returns: Integer number of bytes in the receive buffer
**************************************************************************/
int uart1_available(void)
{
return (UART_RX_BUFFER_MASK + UART1_RxHead - UART1_RxTail) %
UART_RX_BUFFER_MASK;
}/* uart1_available */
/*************************************************************************
Function: uart1_flush()
Purpose: Flush bytes waiting the receive buffer. Acutally ignores them.
Input: None
Returns: None
**************************************************************************/
void uart1_flush(void)
{
UART1_RxHead = UART1_RxTail;
}/* uart1_flush */
#endif
Serial.h
#ifndef UART_H
#define UART_H
/************************************************************************
Title: Interrupt UART library with receive/transmit circular buffers
120
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
File: $Id: uart.h,v 1.8.2.1 2007/07/01 11:14:38 peter Exp $
Software: AVR-GCC 4.1, AVR Libc 1.4
Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz
License: GNU General Public License
Usage: see Doxygen manual
/**@{*/
/*
** constants and macros
*/
/** @brief UART Baudrate Expression for ATmega double speed mode
* @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz
* @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
*/
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-
1)|0x8000)
/*
** high byte error return code of uart_getc()
*/
#define UART_FRAME_ERROR 0x0800 /* Framing Error by UART */
#define UART_OVERRUN_ERROR 0x0400 /* Overrun condition by UART */
#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */
#define UART_NO_DATA 0x0100 /* no receive data available */
/*
** function prototypes
121
*/
/**
@brief Initialize UART and set baudrate
@param baudrate Specify baudrate using macro UART_BAUD_SELECT()
@return none
*/
extern void uart_init(unsigned int baudrate);
/**
* @brief Get received byte from ringbuffer
*
* Returns in the lower byte the received character and in the
* higher byte the last receive error.
* UART_NO_DATA is returned when no data is available.
*
* @param void
* @return lower byte: received byte from ringbuffer
* @return higher byte: last receive status
* - \b 0 successfully received data from UART
* - \b UART_NO_DATA
* <br>no receive data available
* - \b UART_BUFFER_OVERFLOW
* <br>Receive ringbuffer overflow.
* We are not reading the receive buffer fast enough,
* one or more received character have been dropped
* - \b UART_OVERRUN_ERROR
* <br>Overrun condition by UART.
* A character already present in the UART UDR register was
* not read by the interrupt handler before the next character arrived,
* one or more received characters have been dropped.
* - \b UART_FRAME_ERROR
* <br>Framing Error by UART
*/
extern unsigned int uart_getc(void);
/**
* @brief Put byte to ringbuffer for transmitting via UART
* @param data byte to be transmitted
* @return none
*/
extern void uart_putc(unsigned char data);
/**
* @brief Put string to ringbuffer for transmitting via UART
*
* The string is buffered by the uart library in a circular buffer
* and one character at a time is transmitted to the UART using interrupts.
* Blocks if it can not write the whole string into the circular buffer.
*
* @param s string to be transmitted
* @return none
*/
extern void uart_puts(const char *s );
/**
122
* @brief Put string from program memory to ringbuffer for transmitting via UART.
*
* The string is buffered by the uart library in a circular buffer
* and one character at a time is transmitted to the UART using interrupts.
* Blocks if it can not write the whole string into the circular buffer.
*
* @param s program memory string to be transmitted
* @return none
* @see uart_puts_P
*/
extern void uart_puts_p(const char *s );
/**
* @brief Macro to automatically put a string constant into program memory
*/
#define uart_puts_P(__s) uart_puts_p(PSTR(__s))
/**
* @brief Return number of bytes waiting in the receive buffer
* @param none
* @return bytes waiting in the receive buffer
*/
extern int uart_available(void);
/**
* @brief Flush bytes waiting in receive buffer
* @param none
* @return none
*/
extern void uart_flush(void);
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
extern void uart1_init(unsigned int baudrate);
/** @brief Get received byte of USART1 from ringbuffer. (only available on selected
ATmega) @see uart_getc */
extern unsigned int uart1_getc(void);
/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on
selected ATmega) @see uart_putc */
extern void uart1_putc(unsigned char data);
/** @brief Put string to ringbuffer for transmitting via USART1 (only available on
selected ATmega) @see uart_puts */
extern void uart1_puts(const char *s );
/** @brief Put string from program memory to ringbuffer for transmitting via USART1
(only available on selected ATmega) @see uart_puts_p */
extern void uart1_puts_p(const char *s );
/** @brief Macro to automatically put a string constant into program memory */
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
/** @brief Return number of bytes waiting in the receive buffer */
extern int uart1_available(void);
/** @brief Flush bytes waiting in receive buffer */
extern void uart1_flush(void);
/**@}*/
#endif // UART_H
123