X

CONTROL DE MOTOR PASO A PASO CON MICROCONTROLADOR PIC16F877

En este reciente trabajo se realizó un montaje con un teclado matricial 4×3, una pantalla LCD y un circuito integrado ULN2003 con el fin de controlar el sentido de giro de un motor paso a paso. Para esta práctica se realizó un montaje físico en la protoboard para un motor paso a paso, simulación en proteus con el adicional del código en C que permite controlar el sentido de giro del motor paso a paso.

 

OBJETIVO DEL CONTROL DE MOTOR PASO A PASO

Controlar el sentido de giro de un motor paso a paso por medio de un teclado matricial 4×3 y visualizar el sentido de giro por medio de un display LCD.

Figura 1. Control de motor paso a paso con microcontrolador

 

PROGRAMA DEL CONTROL DE MOTOR PASO A PASO CON EL PIC16F877

PROGRAMA.
#INCLUDE <16f887.h>
#USE DELAY(CRYSTAL=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
#FUSES hs, nowdt
#include <lcd.c>
#DEFINE USE_PORTB_KBD
#INCLUDE <KBD.C>
#BYTE PORTB= 6
#BYTE WPUB= 0X95 // declarar registro option
#BYTE OPTION_REG = 0X81
char letra;
char sentidoDeGiro;
long i = 0;
int j = 0;
long cantidadPasos = 0;
int paso[9] = { 0b00000001,
0b00000011,
0b00000010,
0b00000110,
0b00000100,
0b00001100,
0b00001000,
0b00001001,
0b00000001};
void limpiarLCD(void){
lcd_gotoxy(1, 1);
lcd_putc(” “);
lcd_gotoxy(1, 2);
lcd_putc(” “);
lcd_gotoxy(1, 1);
}
void main()
{
OPTION_REG = 0; //en el MAIN desactivas el registro OPTION
WPUB= 0B11111111;// y seleccionas los pullups q vas a utilizar

lcd_init();
kbd_init();
set_tris_C(0b00001111);

 

//printf(lcd_putc,”Hola”);

while(1)
{
lcd_gotoxy(1, 1);
lcd_putc(“MOTOR – STEPPER.”);
lcd_gotoxy(1, 2);
lcd_putc(“PRESIONE: … “);
delay_ms(2000);

limpiarLCD();

lcd_gotoxy(1, 1);
lcd_putc(“* ANTIHORARIO “);
lcd_gotoxy(1, 2);
lcd_putc(“# HORARIO “);

while(1){
letra = 0;
letra = KBD_GETC();
if((letra == ‘*’) || (letra == ‘#’)) break;
}

if (letra == ‘*’){
limpiarLCD();
lcd_gotoxy(1, 1);
lcd_putc(“GIRAR EN SENTIDO”);
lcd_gotoxy(1, 2);
lcd_putc(” ANTIHORARIO “);
delay_ms(2000);
}

if (letra == ‘#’){
limpiarLCD();
lcd_gotoxy(1, 1);
lcd_putc(“GIRAR EN SENTIDO”);
lcd_gotoxy(1, 2);
lcd_putc(” HORARIO “);
delay_ms(2000);
}

sentidoDeGiro = letra;
limpiarLCD();
lcd_gotoxy(1, 1);
lcd_putc(” CUANTOS PASOS? “);
lcd_gotoxy(1, 2);
lcd_putc(“(1 – 9): “);

while(1){
letra = 0;
letra = KBD_GETC();
if((letra != ‘*’)&&(letra != ‘#’)&&(letra != ‘0’)&&(letra != 0)) break;
}
lcd_putc(letra);
lcd_putc(” PASOS”);
delay_ms(500);

if (letra == ‘1’) cantidadPasos = 1*64; // 45º
if (letra == ‘2’) cantidadPasos = 2*64; // 90º
if (letra == ‘3’) cantidadPasos = 3*64; // 135º
if (letra == ‘4’) cantidadPasos = 4*64; // 180º
if (letra == ‘5’) cantidadPasos = 5*64; // 225º
if (letra == ‘6’) cantidadPasos = 6*64; // 270º
if (letra == ‘7’) cantidadPasos = 7*64; // 315º
if (letra == ‘8’) cantidadPasos = 8*64; // 360º
if (letra == ‘9’) cantidadPasos = 9*64; // 405º

//# HORARIO
if(sentidoDeGiro == ‘#’){
for(i = 0; i <= cantidadPasos; i++){
for(j = 0; j < 8; j++){
output_c(paso[j]);
delay_ms(11);
}
}
}

//* ANTIHORARIO
if(sentidoDeGiro == ‘*’){
for(i = 0; i <= cantidadPasos; i++){
for(j = 8; j > 0; j–){
output_c(paso[j]);
delay_ms(11);
}
}
}

//Paramos los motores
output_c(0b00000000);
}
}

CONTENIDOS RELEVANTES

Categories: MICROCONTROLADORES
fabio figueroa: soy el administrador del sitio web. si tienes alguna duda, no dudes en contactarme

Este sitio usa cookies