p1 Soe Final

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 15

INSTITUTO TECNOLÓGICO DE MORELIA

“JOSÉ MARÍA MORELOS Y PAVÓN”

SISTEMAS OPERATIVOS EMBEBIDOS


INGENIERÍA EN MECATRÓNICA

PRÁCTICA NO. 1
Túnel Sanitizante con máquinas de estado.

PRESENTA:
ALAN ALVARADO RAMÍREZ 17121109
BERENICE ARZATE RUEDA 17121144
JONATAN ALI MEDINA MOLINA 17121124

PROFESOR:
MIGUELANGEL FRAGA AGUILAR

MORELIA, MICHOACÁN 30 DE ABRIL DE 2020


I. INTRODUCCIÓN

En esta práctica se muestra el planteamiento y desarrollo realizado para elaborar una maqueta
que simule el funcionamiento de un túnel sanitizante con dos puertas, además, se explica el
programa escrito en Code Composer Studio que permite su funcionamiento.

La maqueta está compuesta por un interruptor que indique cuando se abra la puerta de entrada, al
cerrarse dicha puerta se enciende una bomba del rociador de sanitizante la cual permanece
encendida hasta que hayan transcurrido 30 segundos o hasta que se active un segundo interruptor
que además funciona para abrir la puerta de salida.

Primero se abordarán conceptos relacionados con el funcionamiento de los temporizadores de los


microcontroladores pertenecientes a la familia MSP430. En el tercer apartado se mostrará la
máquina de estados planteada para la posterior elaboración del programa en Code Composer, así
como dicho programa y los circuitos implementados para el armado de la maqueta. Por último se
mostrarán los resultados obtenidos y las conclusiones de cada integrante del equipo.

II. MARCO TEÓRICO

A. Temporizadores
Los temporizadores nos permiten controlar el paso del tiempo en el sistema [1]. Dentro de la
familia de microcontroladores MSP430 se mencionan dos tipos de temporizadores:

1. Timers: entre otras cosas permiten:

 Generar eventos transcurrido un determinado tiempo. En consecuencia nos


permiten generar interrupciones.
 Medir intervalos de tiempo. Nos permiten medir el tiempo transcurrido entre dos
eventos consecutivos.
 Generar señales digitales como PWMs.

2. Watchdog: El WDT es un timer de 16-bit que puede ser usado como watchdog o
como un temporizador común. El módulo del WDT puede reiniciar el sistema si
después de un intervalo de tiempo asignado no hubo respuesta por parte del CPU [2].
Podemos decir entonces que es un temporizador específico que permite:

 Controlar bloqueos software. Útil para generar un reset (PUC) tras la expiración
del tiempo del temporizador.
 Generar eventos y en consecuencia provocar interrupciones transcurrido un
determinado intervalo de tiempo

El registro de control del WDT está protegido por una contraseña y está activo al
encender el microcontrolador.
Dentro de los timers vamos a encontrar que se tienen dos tipos: Timer_A y Timer_B. Ambos son
equivalentes, aunque los del tipo B son algo más versátiles puesto que ofrecen algunas
características adicionales que no ofrecen los del tipo A [3].

Alguna de las características generales de los timers son las siguientes:

 Utilizan un contador de 16 bits con cuatro modos de operación.


 Pueden seleccionar y usar diferentes fuentes de reloj.
 Utilizan registros de captura/comparación para su configuración.
 Permiten salidas PWM (Power Width Modulation).
 Pueden usar interrupciones.

Hay dos tipos de bloques bien diferenciados dentro de los timers para abordar la configuración de
dichos bloques se mencionarán las características específicas para el Timer_A.

B. Bloque Contador

El bloque contador dispone de un contador de 16 bits llamado TAxR (donde x será 0 para el
timer TA0 y así sucesivamente). Para controlar este bloque se utiliza el registro TAxCTL [3].

Fig.1. Esquema de un Timer_A bloque contador.

Dentro del registro TAxCTL se encuentran diferentes campos los cuales se deben configurar de
acuerdo con los requisitos del programa que se vaya a implementar:

 El campo TASSEL nos permite seleccionar la fuente de reloj.


 El campo ID permite dividir la frecuencia del reloj.
 El campo MC permite seleccionar el modo de funcionamiento del contador.
 El campo TACLR pone a cero el contador TAxR.
 El campo TAIE habilita las interrupciones generadas por el timer.
 El campo TAIFG indica si se ha producido una interrupción. Generalmente es un campo
para consulta.

En el campo MC, disponemos de cuatro modos de cuenta:


 Stop mode (00b): El timer está parado.
 Up mode (01b): El timer cuenta hasta el valor almacenado en el registro TAxCCR0 y
vuelve a empezar desde 0.
 Continuous mode (10b): El timer cuenta hasta el valor fijo 0xFFFF y vuelve a contar
desde 0.
 Up/Down Mode (11b): El timer cuenta ascendentemente hasta el valor almacenado en el
registro TAxCCR0 y después descendentemente hasta 0.

C. Bloque de captura/comparación

De acuerdo con [1] este bloque contiene registros que en combinación del registro TA0R
implementan las siguientes funcionalidades:

 Almacenar el valor actual de la cuenta al detectar determinados eventos.


 Comprobar el valor actual de la cuenta para generar determinados eventos.
 Contiene un módulo de salida (OUT0, OUT1 y OUT2) que en combinación con el TAR,
TA0CCR0, TA0CCR1 y TA0CCR2 nos permite generar señales digitales en los pines del
microprocesador.

Fig.2. Esquema Timer_A bloque de captura y comparación.

Se puede trabajar con tres bloques de dos registros (TA0CCRx y TA0CCTLx). Estos bloques
trabajan a la vez con el contador. La elección de la forma de trabajo para estos dos registros, es
decir, si trabajan en modo captura o comparación se hace a través del bit CAP del registro
TA0CCTLx:

 Un 0 indica comparación.
 Un 1 indica captura.
1. Modo captura.

Cuando sucede un determinado evento, el valor del registro TA0R se almacena en el registro
TA0CCRx. Ese evento es un cambio de nivel (flanco) de determinadas señales que pueden ser o
bien externas o internas. Cuando se produce ese evento, trabajando en modo captura, se activa el
flag de interrupción CCIFG del registro TA0CCTLx. La señal por capturar (puede ser interna o
externa al microcontrolador) se puede seleccionar mediante los bits CCIS0 y CCIS1 del registro
TA0CCTLx [1].

 Los bits CM0 y CM1 del registro TA0CCTLx nos permiten seleccionar el flanco a
detectar.
 El bit CCI permite leer el valor instantáneo de la señal a capturar.
 El bit SCS permite sincronizar la entrada con el reloj del contador/temporizador, es decir,
nos permite hacer una captura síncrona con la señal de reloj del contador (1) o asíncrona
con la señal de reloj del contador (0).
 El bit SCCI del registro TA0CCTLx contiene el valor digital sincronizado de la señal a
capturar.
 En el modo comparación el registro TA0CCRx se almacena la cuenta que se pretende
lleva a cabo y en el modo captura se registra el valor que tiene TAR cuando se produce un
determinado evento.

2. Modo comparación.

El proceso de comparación se utiliza para comprobar si el valor de la cuenta (registro TAR)


coincide con un valor establecido (almacenado en uno de los registros TA0CCRx). Cuando
suceda que el valor almacenado en estos registros es igual al de la cuenta se deben generar ciertos
eventos [1]. Cuando el valor del registro TAR coincide con el valor establecido en el registro
TA0CCRx se realizan las siguientes operaciones:

 En el bit SSCI se almacena el valor instantáneo de la señal CCI. Esa señal se determina
mediante los bits CCIS0 y CCIS1.
 La señal EQUx se pone a 1.
 Se activa el flag de interrupción CCIFG del registro TA0CCTLx.

El microcontrolador consta de 80 pines programables, los cuales desarrollar diferentes funciones


dependiendo de su configuración, como el MSP430 FR6989 tiene algunos pines asociados a
periféricos específicos (LEDs, botones, etc.) y algunos otros pines no son accesibles se deben
adaptar los requerimientos a las combinaciones de los puertos accesibles. En la figura 3 se
muestra el esquema de los pines del microcontrolador.
Fig.3. Esquema de los pines del microcontrolador.

Cada pin puede asociarse a diferentes funciones, dependiendo de la configuración del mismo, en la figura 4 se
muestra el esquema general de los puertos del microcontrolador.

Fig.4. Esquema general de los puertos.


III. DESARROLLO

A. Máquina de estados
Para la programación en Code Composer se realizó una máquina de estados (véase Tabla 1) para
la cual se considera lo siguiente:

Se tiene dos entradas las cuales corresponden a los botones del microcontrolador asignados a los
pines:
 P1.1- Cuenta arriba
 P1.2- Cuenta abajo.
Dichos botones representan a los interruptores que se han de activar para que se abran las puertas
de entrada y salida del Túnel.

Como salidas de tienen:


 P1.6 TA0CCR1, se utiliza para variar una señal PMW que cambiara el ángulo de un servo
y de esta manera abrir la puerta de entrada.
 P3.3 Bit 1, utilizado para encender la bomba del rociador de sanitizante (dentro de la
maqueta se utilizará un ventilador).
 P2.1 TA1CCR1, se utiliza para variar una señal PMW que cambiara el ángulo de un servo
y de esta manera abrir la puerta de salida.

El estado inicial de las salidas y entradas es:


 TA0CCR1= 0x251C
 Bit 1=0
 TA1CCR1=0x251C
 Incrementa=0
 Decrementa=0

Tabla 1. Máquina de estados.


Etapa Condición Inicializar la siguiente etapa
TA0CCR1=0x2328, TA1CCR1=0x251C, Bit 1=0
Incrementa==1
0
Contador==10 Etapa=1 Incrementa=0 Contador=0
TA0CCR1=0x251C, TA1CCR1=0x251C, Bit 1=1
1 Contador==30 o
Bit 1=0, Etapa=2, Decrementa=0, Contador=0
Decrementa==1
TA0CCR1=0x251C, TA1CCR1=0x2328
2
Contador==10 Bit 1=0, Etapa=3, Decrementa=0, Contador=0
TA0CCR1=0x251C, TA1CCR1=0x251C, Bit 1=0
3
Etapa=0, Decrementa=0, Contador=0
a) Etapa 0
Se inicia la etapa 0 al presionarse el interruptor para abrir la puerta de entrada del túnel (botón
P1.1) entonces se modifica el valor del registro TA0CCR1, es decir se modifica la señal PMW
que hace girar 90° al servo que abre la puerta de entrada. Como la puerta de salida permanece
cerrada (en su estado inicial) y sucede lo mismo con el Bit 1 ya que aún no se requiere que se
encienda el ventilador. Se reinicia el valor de la variable Incrementa y se iguala a 0 el valor del
contador. Se avanza a la etapa 1.

b) Etapa 1
Al inicio de la etapa 1 el registro TA0CCR1 se regresa a su valor inicial y el Bit 1 se iguala a 1,
es decir, se cierra la puerta de entrada y se enciende el ventilador. El registro TA1CCR1
permanece en su estado inicial. Dentro de esta etapa se establece una condicional, cuando hayan
transcurrido 30 o en caso de que la variable decrementa tome el valor de 1 (en caso de que se
presione el botón P1.2) el Bit 1 y la Decrementa se igualan a 0 y se pasa a la etapa 2.

c) Etapa 2
Se modifica el valor del registro TA1CCR1 para abrir la puerta de salida, el registro TA0CCR1
permanece con su valor inicial y sucede lo mismo para el Bit 1. Cuando el contador tome el valor
de 10 se reinicia dicho contador y se pasa a la etapa 3.

d) Etapa 3
En esta última etapa no se tiene una condición y las variables y las salidas se igualan a sus
respectivos valores iniciales. Se pasa a la etapa 0.

B. Programa

Partiendo de los programas revisados en clase se toma uno de ellos para llevar a cabo las
modificaciones y que se adapte a la máquina de estados antes vista.

Para el programa se declaran siete variables globales de tipo entero, las variables “contador”,
“activar”, “incrementa” y “decrementa” que toman un valor inicial de 0 y las variables
“segundos”, “minutos” y “horas”.

Fig.5. Variables del programa.

Enseguida se declara la función reloj de tipo void. Dentro de ella se establece la variable de tipo
static int “interrupciones” igualada a 0, se establece una condicional de manera que cuando
“interrupciones” sea mayor o igual a 64 se reinicie su valor y se aumente en 1 el valor de
“segundos”, además, dentro de esta condicional se establecen dos nuevas condicionales de
manera que cuando “activar” sea igual a 1 “contador” se aumenta en 1 y cuando “segundos” sea
mayor o igual a 60 se reinicia su valor, se aumenta en 1 el valor guardado en “minutos” y se
compara si el valor de “minutos” es mayor o igual a 60 en cuyo caso se manda a 0 dicho valor y
se aumenta el valor guardado en “horas”, en caso de que las condicionales no se cumplan se cicla
la función y únicamente se incrementa el valor de “interrupciones”.

Fig.6. Función reloj.

Al utilizarse dos botones del microcontrolador como interruptores para abrir las puestas se
requiere que se elimine o disminuya el efecto de los rebotes producido cuando se presionan los
botones por lo cual se crean las funciones de tipo void noRebotesS1 y noRebotesS2.

Las dos funciones son iguales, solamente cambia la condición inicial que cambia para el puerto
P1.1 o P1.2, se tienen 3 variables, unos se usa para cuando el botón está presionado y ceros
cuando el botón no está presionado, como el microcontrolador está recibiendo un valor en alto
cuando el botón no está presionado, la condicional inicial sirve para aumentar dichos valores
dependiendo del estado del botón, si se tiene presionado aumentan los unos y reinicia los ceros,
de lo contrario, aumenta los ceros y reinicia los unos. Si el botón se encuentra presionado y
durante 3 veces que se llama a la función se tiene presionado, entonces cambia a la etapa 1;
cuando se deja de presionar el botón, entonces los ceros empiezan a aumentar y cuando se llame
a la función durante 3 veces y se detecte que no está presionado el botón, es entonces cuando ya
se habrán eliminado los rebotes del botón, se cambiará la variable incrementa o decrementa,
dependiendo del caso, a 1, para indicar que uno de los botones fue presionado, además de que se
regresa a la etapa 0 de nuevo.
Fig.7. Función noRebotesS1.

Fig.8. Función void túnel.

La función túnel se realizó en base en la tabla de estados, dentro de esta función la variable
“etapa” y seguido se establece un switch en función de “etapa”, de esta manera variando el valor
de “etapa” de 0 a 3 se harán los cambios de una etapa a otra.

Para la primera etapa (case 0) se establece una condicional de manera que cuando incrementa sea
exactamente igual a 1 se establece en 0x2328 el valor del registro TA0CCR1 con lo cual se
modifica la señal PMW para abrir 90° la puerta de entrada del túnel y la variable activar se iguala
a 1 para que “contador” inicie la cuenta. Cuando la cuenta sea exactamente igual a 10 se
establece en 0 la cuenta, la etapa cambia a 1, incrementa se reinicia en 0 y “activar” se pone igual
a 0.

Para la etapa 1 el registro TA0CCR1 se iguala a 0x251C para que vuelva a modificar la señal
PMW y se cierre la puerta de entrada. Se activa el Bit 1 en la salida para encender el ventilador y
“activar” nuevamente toma el valor de 1 iniciando nuevamente el contador. Cuando el contador
es igual a 30 o en caso de que se decrementa sea igual a 1 se niega el Bit 1 apagando el ventilador
y se reinician los valores de “decrementa”, “contador” y “activar”. La etapa se iguala a 2.

Fig.9. Función void túnel (parte 2).

La etapa 2 tiene mucha similitud con la etapa 1 ya que ahora es el registro TA1CCR1 el que se
iguala a 0x2328 para modifica la señal PMW y abrir la puerta de salida del túnel, la variable
activar se iguala a 1 para que “contador” inicie nuevamente la cuenta. Cuando la cuenta sea
exactamente igual a 10 se establece en 0 la cuenta, la etapa cambia a 3 y “activar” se vuelve a 0.

Fig.10. Configuración Timer 0 y Timer 1.

Por último en la etapa 3 (case 3) el registro TA1CCR1 se regresa a su valor de 0x251C y “etapa”
se hace igual a 0.

Para el ambos timers 0 y 1 se selecciona el reloj SMCLK sin subdivisiones y se selecciona el modo
UP/DOWM que es el más adecuado para el PMW. Se selecciona el modo comparación toggle/set (de
0 a 1). Por último los registros TA0CCR0 y TA0CCR1 se usarán para definir el valor máximo de
conteo y el ciclo de trabajo iniciando este último en un 5%.

Se utilizaron pines de 3 puertos diferentes, del puerto 1 se utilizaron P1.1 y P1.2 como entradas
de los botones que vienen integrados, el P1.6 se asoció al timer para utilizarlo como salida de un
PWM, del puerto 2 se configuraron todos los pines como salidas y se utilizó el P2.1 como salida
del motor, finalmente, del puerto 3 se asoció el P3.3 como salida del timer para la salida del
segundo PWM.

Fig.11. Configuración de los puertos.

IV. RESULTADOS

Con la configuración de los puertos realizada, el resultado fue el diagrama eléctrico como el
mostrado en la figura 12.

Fig.12. Diagrama eléctrico de las conexiones realizadas para el control del túnel sanitizante de 2 puertas.
Se tuvieron algunos problemas con las salidas del PWM, debido a que no salía por el puerto
deseado, problema que se solucionó cambiando el pin de salida del PWM al P3.3. Se requirió una
investigación de las hojas de datos de los servomotores para saber las características de la señal
de entrada para el control del movimiento, la cual decía que debía ser a 50 Hz y con un periodo
de 1ms para 0° y 1.5ms para 90°, cosa que en la práctica no funcionaba y se tuvo que poner un
periodo de 2ms para 90°.

En la figura 13 se muestra el resultado de la maqueta que se utilizó para comprobar el


funcionamiento del programa.

Fig.13. Maqueta del túnel sanitizante.

En el siguiente link se encuentra un video del túnel sanitizante funcionando:


https://youtu.be/DctvLzsncns.

V. CONCLUSIONES

Alan Alvarado Ramírez (17121109): Esta práctica fue realizada usando los conocimientos
adquiridos durante las clases de Sistemas Operativos Embebidos, en especial la metodología de
programación con base en máquinas de estados, ya que esta metodología es especialmente útil,
ya que permite dividir un problema más grande en pequeños problemas, además que se puede
realizar una tabla de estados previo a la programación, para definir cada etapa, cada condición y
parámetros requeridos y a cambiar en cada etapa. Esta metodología fue utilizada durante el
desarrollo de esta práctica y fue de suma utilidad ya que facilitó en gran medida el trabajo de
programación en code composer y en el comportamiento del sistema dependiendo varios factores
y variables usadas. El principal problema al que nos enfrentamos, fue la utilización de las señales
PWM generadas por los timers internos para generar el movimiento de los servos, ya que nunca
se habían controlados directamente desde el microcontrolador (solo desde arduino), además que
se tuvieron que corregir fallos en algunos parámetros de las señales y buscar en el PDF del MSP
los pines de los puertos específicos de donde podía salir la señal de cada uno de los timer que se
programaron.

Berenice Arzate Rueda (17121144): Mediante la realización de esta práctica se puedo


comprobar la utilidad de las máquinas de estado gracias al planteamiento e implementación de
una de ellas. Se observo que basándose en la maquina de estados es más fácil y rápido realizar la
programación ya que se conocen los valores o estados de las entradas y salidas en cada etapa. Al
partir de un código visto en clase y de la máquina de estados lo que presento mayor dificulta a la
hora de programar el funcionamiento del túnel sanitizante fue la correcta elección de los pines de
salida sin embargo al final se solucionaron los problemas que se tuvieron durante la practica y se
pudo programar y realizar la maqueta de manera tal que se cumpliera con el objetivo de la
práctica.

Jonatan Ali Medina Molina (17121124): Durante la práctica se pudieron aplicar los
conocimientos adquiridos del funcionamiento de la máquina de estados, metodología que es muy
interesante por la manera en la que se manejan las tareas, lo que da sensación de que se realizan
varias tareas al mismo tiempo, realizando funciones sencillas que no toman demasiado tiempo.
Se tuvieron algunos errores en la configuración de los puertos como salidas de los timers para el
PWM, eso debido a que se pensó que todos se configuraban igual, cosa que no es así por lo que
se debe tener muy en cuenta el manual de usuario para la configuración de los puertos cuando
harán funciones que son diferentes a entradas o salidas digitales.
Este tipo de metodología de programación nos servirá para futuras materias y para el ámbito
laboral, ya que casi siempre es necesario que un microcontrolador esté a cargo de la realización
de varias funciones al mismo tiempo, cosa que con otra metodología de programación no es tan
sencillo.

Referencias bibliográficas

[1] J.G. G, "TEMPORIZADORES", Microcontroladormsp430.blogspot.com, 2013. [En


línea]. Disponible en:
https://microcontroladormsp430.blogspot.com/2013/06/temporizadores.html. [Consultado:
29- Abr- 2021].

[2] "MSP430 Microcontroller", Itq.edu.mx. [En línea]. Disponible en:


http://www.itq.edu.mx/carreras/IngElectronica/archivos_contenido/Apuntes%20de
%20materias/ETD1022_Microcontroladores/2_MSP430.pdf. [Consultado: 29- Abr- 2021].
[3] A. García, "Timers en MSP430", Digilogic, 2017. [En línea]. Disponible en:
https://digilogicelectronica.wordpress.com/2017/01/22/timers-en-msp430/. [Consultado: 29-
Abr- 2021].

También podría gustarte