You are on page 1of 5

Microcontroladores

Segunda Unidad. Prctica 2.


Control de velocidad de un Motor CD
Paola Daz Castaeda
Juan A Reyes Cstulo
Kairos Snchez Snchez
Diego Daniel Olmos Vzquez
Samuel Snchez Estrada

INTITUTO TECNOLGICO DE COLIMA


Departamento de Ingeniera Mecatrnica
Av. Tecnolgico No.1. C.P. 28976. Villa de lvarez, Col.
Tel/Fax (01 312) 3129920. 3140933 www.itcolima.edu.mx
Resumen: En este reporte mostramos
como logramos controlar la velocidad de
un motor controlando el ancho de pulso
(PWM).
Introduccin:
El control PWM es uno de los tres posibles
modos de operacin del mdulo CCP de
los
microcontroladores
PIC16F88,
16F628A y 16F877A, y se describe a
continuacin debido a su gran importancia
en el campo de la automatizacin.
Una seal PWM es una forma de onda
digital binaria de una determinada
frecuencia y ciclo de trabajo (duty cycle)
variable. Un ejemplo tpico de aplicacin es
el control PWM de potencia (figura 9.1),
que se suele utilizar para el control de una
lmpara incandescente o un motor DC. Si
se considera que el nivel 0 representa OFF
y el nivel 1 representa ON, la potencia que
consume la carga ser directamente
proporcional a la duracin del pulso.

Objetivos:

Encontrar las mximas RPM a la


que gira nuestro motor.
Disear un encoder.

Realizar un programa capaz


de controlar el ancho de pulso
(pwm).

Material:

Motor dc
Fuente de computadora
Microcontrolador 16F877A
Cables de para practicas
Programador
de
Microcontroladores
Resistencia para Master Clear
Proteus
8
(software
de
simulacin)
PIC C Compiler 4.104 (software
de programacin)
PICkit 2 v2.61 (software para
introducir el programa al PIC)

Sensor de herradura
Lcd 16x2
Compuerta not

Frmulas:
RPM = (Pulsos/ Encoder) tiempo.
PWM=0.125 (Valor. Ingr. -200)+100

Desarrollo de la Prctica
Lo primero que se hizo
conseguir todo el material
necesario para desarrollar la
prctica, una vez con ya con el
material
proseguimos con la
prctica.

Lo siguiente fue hacer un


encoder y acoplrselo al eje del
motor para sacar el mximo de
RPMS, para ello se utilizaron las
formulas (0-01) y un sensor de
herradura.
Una vez que se supo a cuantas
RPM giraba nuestro Motor se
prosigui a hacer la simulacin
en
el
Software
Proteus
profesional 8 y la programacin.
Una vez que nos funcion en
Proteus se prosigui a hacerlo
en fsico.

#include <16f877A.h>
#fuses HS,NOWDT
#USE DELAY (CLOCK=20Mhz)

set_timer0(0);
//Reinicia cuenta

//#INCLUDE <KBD_B 4X4.C>

set_timer1(3036);
Recarga a 0.5s

//#include <LCD_D.c>

#include <LCD_INVDISA.c>

//***********************************
***********

#include
4X4.C>

<KBD_B_INDVISA

VOID MAIN()

#USE STANDARD_IO (a)

int16 counter=0;

int32 n,x,v1[4]={' ',' ',' ',' '};

int32 num;
//***************
TIMER1*********************

char tecla;
INT

#int_TIMER1

signed int t;

char PWMH=0,PWML=0;

void TIMER1_isr(void) {

lcd_init();

counter=get_timer0();
//Lectura contador TMR0
counter=((counter/9)*(0.5)) ;
Conversin a rpm

//

kbd_init();
//

PORT_B_PULLUPS(TRUE);

setup_timer_0(rtcc_ext_l_to_h
|RTCC_DIV_2);
//Configuracin TMR0
lcd_gotoxy(1,2);
printf(lcd_putc,"%lu
",counter);

rpm

setup_timer_1(T1_internal|
T1_DIV_BY_8);
//Configuracin TMR1

set_timer0(0);
//Borrado contador

if(tecla=='C')break;

set_timer1(3036);
//Carga a 0.5s
enable_interrupts(int_timer1);

lcd_gotoxy(1,1);
printf(lcd_putc,"%Lu"v1[t]);

enable_interrupts(global);
//Habilitacin interrupciones
}
WHILE (TRUE) {
//TECLADO:
Inicio:

//convercion
n=1; t=t-1;
while (t>=0)
{

printf(lcd_putc,"\f rev.#? ");

v1[t]=(v1[t]*n);

num=0;

num=num+v1[t];

tecla=' ';

n=n*10;

//No de vueltas

t--;

for(t=0;t<=3;t++)

//restincion de numeros

do

if(num<=50 || num>=3151 ){

lcd_gotoxy(1,1);
printf(lcd_putc,"Error

tecla=kbd_getc();
if(tecla=='C')break;
v1[t]=tecla-48;
} while(v1[t]>9);

");
lcd_gotoxy(1,2);
printf(lcd_putc,"Intente de
nuevo");

delay_ms(400);

for(PWML;PWML>0;PWML-){

printf(lcd_putc,"\f");

OUTPUT_LOW(PIN_A0);}

goto Inicio;

if(input(PIN_A1)==0){
}
OUTPUT_LOW(PIN_A0);

//valores pwm
break; }

x=((0.125)*(num-200))+100;

WHILE (TRUE) {
// para pwm
//
num<=3150 ){

if(num>=92

||
}

// OUTPUT_LOW(PIN_A2);}
PWMH=x;
PWML=270-PWMH;
for(PWMH;PWMH>0;PWMH
--){
OUTPUT_HIGH(PIN_A0);}