0% encontró este documento útil (0 votos)
13 vistas6 páginas

Reportedepractica PWM4 y 5

El documento describe dos prácticas para controlar la velocidad de un motor de CD utilizando el microcontrolador PIC16F887. En la primera práctica, se implementa un sistema de control a lazo abierto mediante PWM y botones para ajustar la velocidad, mientras que en la segunda práctica se utiliza un potenciómetro para modificar la velocidad del motor a través de un convertidor analógico-digital. Ambas prácticas enfatizan la importancia de la programación y la configuración del hardware para lograr un control efectivo del motor.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas6 páginas

Reportedepractica PWM4 y 5

El documento describe dos prácticas para controlar la velocidad de un motor de CD utilizando el microcontrolador PIC16F887. En la primera práctica, se implementa un sistema de control a lazo abierto mediante PWM y botones para ajustar la velocidad, mientras que en la segunda práctica se utiliza un potenciómetro para modificar la velocidad del motor a través de un convertidor analógico-digital. Ambas prácticas enfatizan la importancia de la programación y la configuración del hardware para lograr un control efectivo del motor.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Práctica 4

SISTEMA DE CONTROL DE VELODIDAD DE UN MOTOR DE CD EN LAZO


ABIERTO CON PIC16F887

Objetivo: El alumno comprobara el funcionamiento de un sistema de control de velocidad de un


motor de cd usando el modulo pwm del microcontrolador pic16f887 a lazo abierto incrementando o
decrementando la velocidad con teclas.

Desarrollo de la Práctica:
Arme el circuito de la siguiente figura, programe el PIC y energícelo para observar su correcto
funcionamiento, haga los ajustes necesarios para que el circuito funcione adecuadamente y obtener
un control de velocidad digital de un motor de cd en lazo abierto.

Código de programación:
char txt[7];
//PUERTOS DONDE SE CONECTA LA LCD AL MICRO
bit LCD_RS at RD0_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
//DEFINIR VARIABLES PARA GUARDAR
int DATO,PWM,aumento=0;
char i[16];
int ancho_pulso=0;
unsigned short current_duty, old_duty, current_duty1, old_duty1;
void InitMain() {
ANSEL=0X00;
ANSELH=0;
C1ON_bit = 0;
TRISD=0X00;
PORTA = 255;
TRISA = 255; /
TRISB=0XFF;
TRISC=0X00;
PORTD=0;
PORTC=0;
PORTB=0;
PWM1_Init(5000); // Inicializar el PWM1 module a 5KHz
}
void main() {
InitMain();
current_duty = 1; // Iniciar value de current_duty
PWM1_Start(); // Comenzar el PWM1
PWM1_Set_Duty(current_duty); // Establecer current duty de PWM1
//ACCIONES QUE VA A HACER EL DISPLAY
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,2,msg1);
Lcd_Out(2,2,msg2);
delay_ms(2000);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
delay_ms(1000);
while(1)
{
if(PORTB.F1==0 && aumento<=254)
portc.f5=1;

portc.f4=0;
aumento++;
delay_us(100);
}
if(PORTB.F6==0 && aumento>=0)
{
portc.f5=0;
portc.f4=1;

aumento--;
delay_us(100);
}
if(PORTB.F7==0)
{
aumento=0;
delay_us(100);

}
PWM1_Set_Duty(aumento);
PWM=(aumento)*100/254;
Lcd_out(1,2,"PORCENTAJE DE");
Lcd_out(2,2,"PWM=");
IntToStr(PWM,txt);
Lcd_Out_Cp(txt);
Lcd_out(2,13,"%");
delay_ms(10);
}}

Evidencia:

Conclusión:

En esta práctica ocupamos push boton para aumentar de uno en uno la modulación por ancho de
pulso, de esta forma, poder aumentar la velocidad del motor o disminuirla los cuales están en pull up
y con la ayuda de un tercer botón (paro o stop), el cual sería como un paro de emergencia ante un
accidente.
Práctica 5
SISTEMA DE CONTROL DE VELODIDAD DE UN MOTOR DE CD EN LAZO
ABIERTO CON PIC16F887

Objetivo: El alumno comprobara el funcionamiento de un sistema de control de velocidad de un


motor de cd usando el modulo pwm del microcontrolador pic16f887 asi como el modulo de
conversión análogo digital cuya señal de consigna es fijado por un potenciómetro, el sistema es a
lazo abierto.

Desarrollo de la Práctica:
Modifique el circuito de la práctica anterior y ahora diseñe un programa que le permita controlar la
velocidad del motor manipulando un potenciómetro para modificar la velocidad, el potenciómetro se
conectara a la entrada analógica AN0, arme el circuito y energícelo para observar su correcto
funcionamiento, haga los ajustes necesarios para que el circuito funcione adecuadamente y obtener
un control de velocidad de un motor de cd en lazo abierto.

Código de programación:
char txt[7];
//PUERTOS DONDE SE CONECTA LA LCD AL PIC
bit LCD_RS at RD0_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
//MENSAJE QUE VA APARECER AL PRINCIPIO
char msg1 []= "BIENVENIDO";
char msg2 []="GRAN DEME";
//DEFINIR VARIABLES PARA GUARDAR
int DATO,PWM;
char i[16];
unsigned short current_duty, old_duty, current_duty1, old_duty1;
void InitMain() {
ANSEL=0X01;
ANSELH=0;
C1ON_bit = 0; // Disable comparators
TRISD=0X00;
PORTA = 255;
TRISA = 255; // configure PORTA pins as input
TRISB=0XFF;
TRISC=0X00;
PORTD=0;
PORTC=0;
PWM1_Init(5000); // Initialize PWM1 module at 5KHz
}
void main() {
InitMain();
current_duty = 255; // initial value for current_duty
PWM1_Start(); // start PWM1
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
//ACCIONES QUE VA A HCER EL DISPLAY
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1,2,msg1); //APARECE EL PRIMER MENSAJE QUE ES BIENVENIDO
Lcd_Out(2,2,msg2); //APARECE EL SEGUNDO MENSAJE QUE ES GRAN DEME
delay_ms(2000); //TIEMPO QUE APARECEN
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR); //LIMPIA EL DISPLEY BORRA LOS MENSAJES
delay_ms(1500);
while(1)
{
DATO = ADC_Read(0);
PWM1_Set_Duty(DATO/4);
PWM=(DATO/4)*100/255;
Lcd_out(1,2,"PORCENTAJE DE");
Lcd_out(2,2,"PWM=");
IntToStr(PWM,txt);
Lcd_Out_Cp(txt);
Lcd_out(2,13,"%");
delay_ms(10);
portc.f5=1;
portc.f4=0;
}}
Evidencia:

Conclusión:
En esta práctica ocupamos varias librerías las cuales algunas de esas fueron el convertidor análogo
digital, pwm, conversor, lcd las cuales fueron muy importantes pues sin el convertidor de análogo
digital no podríamos modificar el ancho de pulso de pwm y por ende no podríamos modificar la
velocidad del motor, el verdadero problema fue poner en forma de barra del 1-100 y que apareciera
en la lcd conforme a que tanto había aumentado el pwm y para esto el potenciómetro tiene la escala
de valores del 1023 entonces el pwm solo tiene la capacidad de 255 entonces tendríamos que dividir
entre 4 para que el potenciómetro pudiera modificar el pwm de 255 valores.

También podría gustarte