Está en la página 1de 12

Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica

de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

SECCION 2

1. INTRODUCCION
Por medio de la técnica de modulación de ancho de pulso se puede realizar un control para
sistemas que están a larga distancia ya que se puede evitar la interferencia proveniente del
exterior permitiendo realizar un control de la forma más óptima. La ventaja de utilizar el
ancho de pulso como control de una variable, es que no se ve afectada por ruido eléctrico,
inyectado a lo largo de la línea de transmisión, sin importar si la amplitud del pulso se ve
reducida por el ruido externo o por la misma resistencia de la línea de transmisión; ya que el
circuito no está observando la amplitud de la señal si no la frecuencia que ésta posee además
del ancho de pulso.
Se trata de controlar la velocidad de un motor DC con una señal de impulsos. Variando el
tiempo en estado alto de la señal con respecto al tiempo en estado bajo conseguiremos reducir
la tensión media que le llega al motor y en consecuencia variaremos su velocidad.
1.1 PWM
Para hacer ese control con el PIC, en este proyecto emplearemos el modo PWM (Pulse Width
Modulation). Leeremos una tensión con el conversor AD del PIC proporcionada por unos
button como control manual de la velocidad. Este valor determinará el tiempo de los pulsos
en estado alto de la señal que controlará la velocidad. Se puede observar en la ilustración 1

En el modo PWM el PIC compara el valor del registro CCP (en este caso el CCP2) con el
valor del timer1. En el registro CCP habremos cargado previamente un valor responsable de
la velocidad del motor. Cuando ambos coinciden, se produce la interrupción con la que
gestionaremos el cambio de estado de la señal hasta una nueva comparación con la cuenta
del timer 1. Para poder generar esta señal con nuestro PIC, se hace uso de los módulos CCP
(Comparador, Captura y PWM). Dicho módulo permite realizar tres funciones básicas.
Comparar: Compara el valor del temporizador con el valor de un registro y provoca
una acción en el PIC.
Captura: Obtiene el valor del temporizador en un momento dado, fijado por la acción
de un terminal del PIC.
PWM: Genera una señal modulada por ancho de pulso.
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

Ilustración 1 PWM FUNCIONAMIENTO

El módulo PWM (Pulse Width Modulation), permite obtener de los pines CCP1 (Pin 17) y
CCP2 (Pin 16) una señal periódica (Es decir que se repite en el tiempo) la cual podemos
modificar su ciclo de trabajo (Duty Cycle en ingles). Dicho PWM o Modulación por Ancho
de Pulso, puede tener una resolución máxima de 10 BITS. En otras palabras. Como sabemos
que el PIC trabaja con voltajes binarios (0V o +5V), podemos configurar el PWM para que
trabaje un determinado tiempo en +5V (Ton) frente al tiempo que está en nivel bajo 0V
(Toff), tal y como lo podemos apreciar en la siguiente ilustración.
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

1.2 ¿Cómo funciona el potenciómetro?


Un potenciómetro es un resistor cuyo valor de resistencia es variable. De esta manera,
indirectamente, se puede controlar la intensidad de corriente que fluye por un circuito si se
conecta en paralelo, o la diferencia de potencial al conectarlo en serie.
Normalmente, los potenciómetros se utilizan en circuitos de poca corriente. Para circuitos de
corrientes mayores, se utilizan los reóstatos, que pueden disipar más potencia.
1.3 Encoder
Un encoder es un dispositivo de detección que proporciona una respuesta. Los Encoders
convierten el movimiento en una señal eléctrica que puede ser leída por algún tipo de
dispositivo de control en un sistema de control de movimiento, tal como lo que estamos
utilizando un PIC. El encoder envía una señal de respuesta que puede ser utilizado para
determinar la posición, contar, velocidad o dirección. Un dispositivo de control puede usar
esta información para enviar un comando para una función particular.
CÓDIGO
#include <16f877a.h>

#USE DELAY(CLOCK=4000000)

#FUSES XT, NOWDT, NOPROTECT, NOPUT

#include <LCD.C>

#use standard_io(b)

#use standard_io(c)

int i=0; //variable que servira como contador

#INT_EXT //FUNCION DE LA INTERRUPCION EXTERNA

void INTERRUPCION()

i--; //decremento del contador por pulsacion de la interrupcion

if(i==0){

set_pwm1_duty(0);

lcd_gotoxy(1,1);

printf (LCD_PUTC, "\f");


Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

printf(LCD_PUTC, "REDUCC AL 0 */*");

break;

if(i==1){

set_pwm1_duty(64);

lcd_gotoxy(1,1);

printf (LCD_PUTC, "\f");

printf(LCD_PUTC, "REDUCC AL 25 */*");

break;

if(i==2){

set_pwm1_duty(128);

lcd_gotoxy(1,1);

printf (LCD_PUTC, "\f");

printf(LCD_PUTC, "RUDUCC AL 50 */*");

break;

if(i==3){

set_pwm1_duty(192);

lcd_gotoxy(1,1);

printf (LCD_PUTC, "\f");

printf(LCD_PUTC, "REDUCC AL 75 */*");

break;

void main()

lcd_init();
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

lcd_gotoxy(1,1);

printf(LCD_PUTC, "BIENVENIDO");

delay_ms(200);

printf (LCD_PUTC, "\f"); //Limpia el LCD

ENABLE_INTERRUPTS(GLOBAL);

ENABLE_INTERRUPTS(INT_EXT); //HABILITACION DE LA INTERRUPCION

setup_ccp1(ccp_pwm); //Configura el modulo CCP1 en modo PWM

set_pwm1_duty(0); //Determina el ciclo de trabajo en escala de 0 a 255 (PARAMETRO DE INICIO)

while(true)

if(INPUT(PIN_B1)==1) //condicion de la pulsacion de incremento

i++; //incremento del contador con cada pulsacion

switch (i) //ingreso del valor de la variable en un switch

case 1:

delay_ms(100);

printf(LCD_PUTC, "\f"); //Borra o limpia la LCD

lcd_gotoxy(1,2);

printf(LCD_PUTC, "Vel. al 25 */*");//visualizar en pantalla el contador

set_pwm1_duty(64);

break;

case 2:

delay_ms(100);

printf (LCD_PUTC, "\f"); //Borra o limpia la LCD

lcd_gotoxy(1,2);
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

printf(LCD_PUTC, "Vel. al 50 */*");//visualizar en pantalla el contador

set_pwm1_duty(128);

break;

case 3:

delay_ms(100);

printf (LCD_PUTC, "\f"); //Borra o limpia la LCD

lcd_gotoxy(1,2);

printf(LCD_PUTC, "Vel. al 75 */*");//visualizar en pantalla el contador

set_pwm1_duty(192);

break;

case 4:

delay_ms(100);

printf (LCD_PUTC, "\f"); //Borra o limpia la LCD

lcd_gotoxy(1,2);

printf(LCD_PUTC, "Vel. al 100 */*");//visualizar en pantalla el contador

set_pwm1_duty(255);

break;

case 5:

delay_ms(100);

i=4;

break;

}
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

2. Circuito PROTEUS

Ilustración 2 y 3 PWM PROTEUS


Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

Conclusión
En esta sección se utilizó el pic 16f877 el cual es muy versátil para ciertas aplicaciones que
comprenden proyectos más complejos debido a que posee 5 puertos de trabajo, un módulo generador
de PWM, un adc interno, etc.

3. SEGUNDO SENSOR (Encoder)


A continuación, vamos a realizar un medidor de Velocidad de un Motor DC con PIC,
utilizando como sensor un Encoder de 10 Pulsos por Revolución. Para eso vamos a necesitar
configurar el MOTOR-ENCODER del proteus dando doble clic y colocando los 10 pulsos.

Para poder controlar el motor de 12 V necesitamos utilizar un Mosfet. Los mosfets de


potencia (power mosfets) son componentes electrónicos que nos permiten de controlar
corrientes muy elevadas. Como en el caso del los mosfets comunes, tienen tres terminales de
salida que se llaman: Drain, Source y Gate (D, S y G). La corriente principal pasa entre
Source y Drain (ISD) mientras que el control de esta corriente se obtiene aplicando una
tensión sobre el terminal Gate (respecto al terminal Source), conocida como VGS.

A través de un potenciometro, regularemos la velocidad del motor 12VDC, utilizando un


mosfet en la etapa de potencia. El motor tiene acoplado un Encoder que entrega un tren de
pulsos. Ese tren de pulsos debe ser conectado en el PIN RB0 del PIC y por medio de la
interrupción Externa y por lectura bien sea del flanco de subida o flanco de Bajada, se debe
calcular la velocidad en RPM (Revoluciones por Minuto) y mostrarlas en una pantalla LCD.

Ilustración 4 ENCODER
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

4. Código de implementación

#INCLUDE <16F887.h>
#DEVICE ADC=10
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#INCLUDE <LCD.C>

long contador=0;
int16 duty=0;
int Timer2,Poscaler;
double RPM;

//Interrubción por cambio en RB0


#INT_EXT
ext_isr()
{
contador++;
}

void main()

//Configura los Puertos del PIC


set_tris_a(0x01);
set_tris_b(0x01); //RB0 como entrada
set_tris_d(0);

//Configura la Entrada Analoga

setup_adc_ports(sAN0); //Configurar ADC (Lectura de temperatura)


setup_adc(adc_clock_internal); //Reloj interno para la conversion analoga digital)
//Configura el PWM

// Generemos una Señal cuadrada de 1 Khz


Timer2=249; //Se carga timer 2 con 249 como lo vimos en la pagina
//Preescaler=4; //Preescaler solo puede tomar valores de: 1 - 4 - 16
//Para el preescaler colocamos "t2_div_by_4"
Poscaler=1; //Preescaler solo puede tomar valores de: 1
setup_timer_2(t2_div_by_4,Timer2,Poscaler); //Configuracion de Timer 2 para
establecer frec. PWM a 1kHz
setup_ccp1(ccp_pwm); //Configurar modulo CCP1 en modo PWM
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

//Habilita las Interrupcciones


enable_interrupts(int_ext); //Activa interrupcion por RB0
ext_int_edge(L_TO_H); //Activa interrupción por flanco de bajada
enable_interrupts(global); //Habilita interrupciones de forma global

lcd_init();
lcd_gotoxy(1,1);
LCD_PUTC("VELOCIDAD MOTOR");

//Hace por siempre

while(1)

//Lectura del Potenciometro

set_adc_channel(0); //Escoge el canal 0 de los puertos analogos


delay_us(100);
duty=read_adc(); //Almacena en duty el valor del voltaje del pot
set_pwm1_duty(duty);//10 bits= 1023 y 8bit= 255

//Espera por 1 segundo

delay_ms(999);

//Despues de 1 segundo multiplica el valor de los pulsos contados en


//contador y los multiplica por 60 (para pasarlo a minutos) y lo divide
//por el numero de pulsos que tiene el encoder, en este caso el encoder
//da 10 pulsos en 1 giro completo
RPM=contador*60/10;

//Reinicia el contador de Pulsos


contador=0;
//Visualiza la Velocidad
lcd_gotoxy(1,2);
printf(lcd_putc,"RPM: %f ",RPM);

}
Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

5. Circuito Proteus

Ilustración 3 ENCODER Y OSCILOSCOPIO


Azcatl Huerta Gustavo Angel, Urbina Calderón Francisco Roberto, Universidad Politécnica
de Puebla, Tercer Carril del Ejido "Serrano" s/n, Juan C. Bonilla, 72640 Puebla, Pue.

CONCLUSION

Después de una investigación sobre el sensor logramos tener una idea clara para su diseño y
conocer los elementos necesarios para la construcción del mismo. Se simulo el circuito y la
codificación del PIC se hiso en Software de PIC C COMPILER. Se logró con éxito la
visualización de las revoluciones por minuto que da un motor en una pantalla de LCD
Una vez concluido con esta práctica es necesario reconocer y recalcar que para la realización
del mismo fue necesario tener claro los conocimientos adquiridos a lo largo de este
cuatrimestre.

Referencias
1. Omega Pasaje Electrónico. (2010). Recuperado el 23 de junio de 2013, de
OPTOACOPLADOR ECG 3100:
2. http://www.electronicaomega.com/index.php?page=shop.product_details&flypag
e=flypage.tpl&product_id=1683&category_id=151&option=com_virtuemart&Itemi
d=53&vmcchk=1&Itemid=53
3. Proyectos electronics. (2011). Recuperado el 22 de junio de 2013, de
encoder:http://proyectoselectronics.blogspot.com/2008/09/encoder-que-esycomo-
funcionan.html
4. Reyes, C. (2008). Microcontroladores PIC, Programación en Basic. En C. Reyes,
Microcontroladores PIC, Programación en Basic (págs. 96-98). Quito-Ecuador.
Reyes, C. (2008). Microcontroladores PIC. Quito-Ecuador.
5. Wikipedia. (s.f.). Recuperado el 23 de junio de 2013, de Desplaye:
http://es.wikipedia.org/wiki/Displays%C3%ADa
6. Universidad de El Salvador - Facultad de Ingeniería Y Arquitectura - Escuela de
Ingeniería Eléctrica - Instrumentación Electrónica I. “UNIDAD III - SENSORES Y
TRASNDUCTORES”
7. Instrumentación y Control Industrial. Antonio Javier Barragán Piña

También podría gustarte