Вы находитесь на странице: 1из 28

 

   
Departamento de Electrónica y
Electricidad

Carrera Profesional de Mecatrónica Industrial

PROGRAMACIÓN DE MICROCONTROLADORES 

Laboratorio N°05 y 06

Programación, simulación e
implementación de aplicativo I
Integrantes
Castillo Olaya Israel
Gonzales Castañeda Mario
Garay Garrido Eduardo
Narciso Yanavilca Ysael
Sección:​ C16-B

Fecha de realización: ​02-04-19


Fecha de presentación: ​16 -04-19

2019-I
 
Lab. N° 3 Puertos de Entrada y Salida 1

 
 

ÍNDICE

INTRODUCCIÓN

OBJETIVO

FUNDAMENTO TEÓRICO
Servomotores

Timer1

Sistema de aparcamiento automático

EQUIPOS Y MATERIALES

PROCEDIMIENTO

CONCLUSIONES

BIBLIOGRAFÍA

​pág. 2
Lab. N° 3 Puertos de Entrada y Salida 1

1. Introducción

En la actualidad, los grandes avances en la tecnología permiten que los componentes se


hagan más pequeños y autónomos, osea ya casi no es necesario el control humano para
verificar el funcionamiento rutinario de estas, salvo que se generen nuevos eventos, en el
caso de la industria, últimamente con el ingreso de la electrónica, que últimamente sus
componentes cada vez se reducen ​más y permiten obtener o ganar espacio para colocar
nuevos actuadores para los diferentes procesos de las plantas, ​así podemos determinar que
mediante la electronica tambien podemos obtener el control de una planta, como es el caso
de un PLC, que es aquella herramienta que permite tener el control de la planta, pero que a
su vez obtener uno puede ser muy costoso, en caso de requerir uno podría darse el caso de
adquirir un microcontrolador que nos puede ofrecer las mismas características que un
PLC, ​además que su costo puede unas 10 veces menor que uno de estos, incluso su tamaño
es mucha veces menor que este.

2. Objetivo

1. Utilizar las instrucciones para programar al microcontrolador PIC16F877A.


2. Utilizar software de desarrollo proporcionada por el fabricante.
3. Utilizar software de simulación digital.

3. Equipos y Materiales

● Computadora
● Software de desarrollo
● Proyector multimedia
● Texto del curso
● Manual del fabricante
● Tarjeta de desarrollo

​pág. 3
Lab. N° 3 Puertos de Entrada y Salida 1

4. Fundamento teórico
 

SERVOMOTORES

Los servomotores han existido durante mucho tiempo y se utilizan en muchas aplicaciones.
Son pequeñas en tamaño pero tienen un gran impacto y son muy eficientes energéticamente.
Estas características les permiten ser utilizados para operar ​carros de juguete , ​robots y
aviones controlados por control remoto o por radio . Los servomotores también se utilizan en
aplicaciones industriales, robótica, fabricación en línea, productos farmacéuticos y servicios
de alimentos.

En el interior del servomotor hay una configuración bastante simple: un pequeño ​motor de CC
, un ​potenciómetro y un circuito de control. El motor está unido por engranajes a la rueda de
control. A medida que el motor gira, la resistencia del potenciómetro cambia, por lo que el
circuito de control puede regular con precisión cuánto movimiento hay y en qué dirección.

Fig. 1 Motor ensamblado y composición interna. Fuente: Jameco Electronics

Los servos se controlan mediante el envío de un pulso eléctrico de ancho variable, o


modulación de ancho de pulso (PWM), a través del cable de control. Hay un pulso mínimo,
un pulso máximo y una frecuencia de repetición. Un servomotor generalmente solo puede
girar 90 ° en cualquier dirección para un movimiento total de 180 °. La posición neutral del
motor se define como la posición en la que el servo tiene la misma cantidad de rotación
potencial tanto en sentido horario como antihorario. El PWM enviado al ​motor determina la
posición del eje y en función de la duración del impulso enviado a través del cable de control;
el ​rotor girará a la posición deseada. El servomotor espera ver un pulso cada 20 milisegundos
(ms) y la duración del pulso determinará a qué distancia gira el motor. Por ejemplo, un pulso
de 1.5ms hará que el motor gire a la posición de 90 °. Más corto que 1.5 ms, lo mueve en
sentido contrario a las agujas del reloj hacia la posición de 0 °, y un máximo de 1.5 ms girará
el servo en la dirección de las agujas del reloj hacia la posición de 180 °.

Cada servomotor funciona en una frecuencia PWM diferente, pero la frecuencia más común
es de 50 Hz.

​pág. 4
Lab. N° 3 Puertos de Entrada y Salida 1

Fig. 2 Control de ancho de pulso variable posición servo. Fuente: Jameco Electronics

El PIC16F877A no puede generar señales PWM de baja frecuencia utilizando el módulo


CCP. De acuerdo con la hoja de datos, el valor más bajo posible que se puede configurar para
la frecuencia PWM es 1.2 KHz. Así que tenemos que abandonar la idea de usar el módulo
CCP y encontrar una manera de crear nuestras propias señales PWM. Es por esto que se
recurre al uso del ​temporizador para generar señales PWM con una frecuencia de 50Hz. Por
lo tanto, nuestro tiempo de encendido y apagado deben ser de 20 ms.

TIMER1

El timer1 PIC es un temporizador contador de 16 bits, el registro TMR1 es el temporizador


contador timer1 PIC en sí, es donde se guardan los valores del timer1 PIC, cuando es utilizado
como temporizador, sus valores aumentaron de uno en uno entre 0 y 65535 con cada 4 ciclos
de reloj. Este pin es identificado como T1CKI que en el PIC16F877A es el pin 15 o RC0, esto
puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T1CKI.

- Los bits 7 y 6 no se utilizan por lo que se les pone a 0.


- Los bits 5 y 4 son para elegir un prescaler, mediante las combinaciones de estos bits se
pueden elegir los prescaler 1, 2, 4 u 8.
- El bit 3 es para cuando se quiere conectar un oscilador independiente al timer1 PIC,
este oscilador se debe colocar entre el pin T1OSO (pin 15) y el pin T1OSI (pin16)
para esto hay que poner este bit a 1.
- El bit2 es para hacer que el timer1 PIC cuando es programado como contador trabaje
en forma sincronizada con el sistema interno del pic.
- El bit1 (TMR1CS), con este bit se elige si el timer1 PIC será utilizado como contador
o como temporizador, al poner este bit a 1 TMR1CS=1 se elige la opción de utilizar el
timer1 PIC como contador, al ponerlo a 0 se elige la opción de utilizarlo como

​pág. 5
Lab. N° 3 Puertos de Entrada y Salida 1
temporizador, el aumento en las cuentas del timer1 PIC será siempre por flanco de
subida de la señal en el pin T1CKI.
- El bit 0 (TMR1ON) al poner este bit a 1 se habilita el uso del timer1 PIC, cuando este
bit está a 0 el timer1 PIC estará desactivado.

SISTEMA DE APARCAMIENTO AUTOMÁTICO

El sistema automático de aparcamiento permite el estacionamiento de vehículos piso tras piso


y, por lo tanto, reduce el espacio utilizado. Aquí cualquier número de coches se puede aparcar
de acuerdo a los requerimientos. Esto hace que los sistemas se modernicen e incluso ahorran
espacio. Aquí, en el sistema automático de estacionamiento de automóviles, trabajamos en la
idea de mostrar el número de estacionamientos disponibles en el lugar de estacionamiento. 
 

 
Fig. 3 Sistema de parqueo automático. Fuente: May Thaw Htet. 

​pág. 6
Lab. N° 3 Puertos de Entrada y Salida 1

5. Procedimiento Laboratorio 05 y 06

Programa para hacer girar un servomotor de 0 grados hasta su límite de 180 grados

CÓDIGO

​pág. 7
Lab. N° 3 Puertos de Entrada y Salida 1

SIMULACIÓN

​pág. 8
Lab. N° 3 Puertos de Entrada y Salida 1
RETO EN CLASE:

PROGRAME EN EQUIPO:

● Indicar en un Display LCD 16x2 el valor del ángulo del servomotor, que cada 1 seg.
este gire 45° angulares, iniciando desde 0° y finalice en los 180°, luego regrese desde
los 180° a 0° angulares, de esa manera repite su ciclo por 10 veces.

CÓDIGO

​pág. 9
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 10
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 11
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 12
Lab. N° 3 Puertos de Entrada y Salida 1

LIBRERÍAS EDITADAS

include<mensajelab5VF.asm>

​pág. 13
Lab. N° 3 Puertos de Entrada y Salida 1

SIMULACIÓN PROTEUS

Programa mueve el servo de 0 a 180 grados (ida y vuelta) 10 veces. El LCD muestra el
número de ciclos de la variable “contador”; y la posición angular del servo “grado”.

Cuando la variable contador llega a 10 y la variable repeticiones ha sido decrementada de 10


hasta 0; el programa finaliza con la subrutina “FINPROGSERVO”.

​pág. 14
Lab. N° 3 Puertos de Entrada y Salida 1
Procedimiento – CASO DE ESTUDIO PROPUESTO EN LABORATORIO
DESIGNADO A CADA GRUPO.

Programar y simular el caso de estudio propuesto en el laboratorio:


Enunciado:

Programar y simular un circuito con display LCD 16X2, donde simule 6


GRUPO estacionamientos en el 1° piso y otros 6 en el 2° piso, en la pantalla LCD debe
1 indicar los espacios disponibles y los no disponibles.

CÓDIGO

​pág. 15
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 16
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 17
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 18
Lab. N° 3 Puertos de Entrada y Salida 1

​pág. 19
Lab. N° 3 Puertos de Entrada y Salida 1
 
   

​pág. 20
Lab. N° 3 Puertos de Entrada y Salida 1
 
 
 

 
Se conectaron 12 LDR a los puertos B y C del PIC16F877A. Una resistencia dependiente de
la luminosidad por cada estacionamiento entre los pisos 1 y 2. Cuando no hay auto en el
estacionamiento, la luz entra en contacto con el LDR, haciendo que su resistencia sea nula.
Por medio de un divisor de voltaje se obtiene una salida entre 0.9 V a 1.2 V; lo que equivale a
un 0 lógico. Cuando si hay auto en el estacionamiento, la luz no puede entrar en contacto con
el LDR, haciendo que su resistencia sea de 10K. Por medio de un divisor de voltaje se obtiene
una salida de 4.95 V; lo que equivale a un 1 lógico. En la programación expuesta más arriba
se establecen condiciones para que el PIC comunique al LCD que mostrar en cada caso.

​pág. 21
Lab. N° 3 Puertos de Entrada y Salida 1

LIBRERÍAS EDITADAS

include<Mensaje.asm>

​pág. 22
Lab. N° 3 Puertos de Entrada y Salida 1

SIMULACIÓN INICIAL

Inicialmente se probó el código en una simulación en donde interruptores reemplazaran a los


LDR. Cuando un pin del PIC (correspondiente a algún estacionamiento) recibe un 1 lógico, el
LCD mostrara que dicho estacionamiento está ocupado. Por otro lado, cuando este mismo pin
reciba un 0 lógico, el LCD mostrara que dicho estacionamiento está libre

​pág. 23
Lab. N° 3 Puertos de Entrada y Salida 1

SIMULACIÓN FINAL

Finalmente, antes de la implementación, se probó el código en una simulación usando LDR’s.


Cuando un pin del PIC (correspondiente a algún estacionamiento) recibe un 1 lógico, el LCD
mostrara que dicho estacionamiento está ocupado. Por otro lado, cuando este mismo pin
reciba un 0 lógico, el LCD mostrara que dicho estacionamiento está libre

Se muestra estacionamiento 01 del piso 01 en estado libre, ya que envía al pin 7 del puerto C
un 0 lógico.

Se muestra estacionamiento 06 del piso 02 en estado ocupado, ya que envía al pin 3 del puerto
B un 1 lógico.

​pág. 24
Lab. N° 3 Puertos de Entrada y Salida 1

IMPLEMENTACIÓN FINAL

VIDEO: ​ ​https://youtu.be/kLiR92qHPfQ

​pág. 25
Lab. N° 3 Puertos de Entrada y Salida 1

6. Observaciones

● Es necesario conocer la frecuencia de trabajo del servomotor que se quiere controlar


con el PIC. Esta información se encuentra en el Datasheet.

● El PIC puede funcionar sin los condensadores, sin embargo, es una buena práctica
para evitar fallas repentinas que se ocasionen por picos.

● Un circuito de OPAMS hubiera ocupado más espacio, el circuito se realizó usando


solamente LDR’s

● Se utilizó un LCD con conector hembra, sin embargo, es más cómodo y ordenado
trabajar con LCD de conector macho; ya que se puede fijar y conectar al protoboard.

​pág. 26
Lab. N° 3 Puertos de Entrada y Salida 1

7. Conclusiones

● Para el control de servomotores con un microcontrolador es necesario conocer las


características de trabajo de ambos (PIC y Servo) y saber aplicar la fórmula para el
cálculo del TMR1.

● El registro TMR1 es un contador que tiene 16 bits en total, lo que equivale a 65536
instrucciones.

● El tiempo deseado es el periodo de trabajo de un servomotor. En este caso el


servomotor tiene una frecuencia de 50 Hz, que equivale a un periodo de trabajo de
20ms.

● La frecuencia del PIC es de 20MHz, lo que equivale a 0.05 us.

● El tiempo de instrucción del PIC es de 4 veces su reloj (4 * 0.05us), es decir, 0.20 us.

● Fue necesario escalar el tiempo de instrucción del PIC usando un pre-escaler. Lo que
se hizo fue usar un pre-escaler equivalente a un valor de 2, haciendo que el tiempo de
instrucción del PIC sea más alto. Esto permite que dentro del periodo de 20ms, se
puedan utilizar menos cantidad de instrucciones. Inicialmente se realizó el cálculo sin
un pre-escaler, pero la cantidad de instrucciones necesarias para desbordar el TMR1
era un resultado negativo, es decir, se requerían más instrucciones de las que el
contador TMR1 podría contar.

● El resultado de 15536 significa la cantidad de instrucciones que faltarían para poder


desbordar el registro TMR1. En este caso se busca un desborde a los 20 ms, ya que ese
es el periodo de trabajo del servomotor.

● Los servomotores tienen un circuito integrado que interpreta el tiempo que recibe un
pulso positivo dentro de su periodo de trabajo de 20ms, y en función a esto cambian su
posición angular.

● El control de posición angular en los servomotores está en función al tiempo en el que


se le envía un 1 lógico. Si el servo trabaja a 50Hz, su periodo siempre será de 20ms,
sin embargo, se puede lograr diferentes posiciones angulares dependiendo del tiempo
dentro de esos 20ms en el que uno le envía un pulso.

● Se puede hacer un sistema de control de parqueo de manera práctica y económica,


usando un PIC, un LCD, demás componentes y tantos LDR’s como parqueos se quiera
controlar.

​pág. 27
Lab. N° 3 Puertos de Entrada y Salida 1

● Se podría haber hecho un aplicativo más preciso usando OPAMS, sin embargo,
funcionó muy bien con los LDR’s

8. Bibliografía

- García, Anthony (2016). ¿Qué es y cómo funciona un servomotor? Recuperado del


blog de PanamaHitek.
- (2017). Controlar un servomotor con PIC. Recuperado del canal de Youtube de Micro
Tutoriales PIC.}
- R. González(2002). Servomotores. Recuperado del blog de Fundamento sde la
robótica de R. González Víctor.

​pág. 28

Вам также может понравиться