Motor de Passo Bipolar

4
#include <p18f4520.h> #include <i2c.h> #include <delays.h> #include <stdlib.h> #include <stdio.h> #include <adc.h> #include <math.h> #include <string.h> #include <usart.h> #pragma config OSC =HS #pragma config PWRT = ON #pragma config BOREN = OFF //#pragma config BORV = 0 //causando reset devido a quedas de tensão 4.89V #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF #define MD PORTCbits.RC0 #define ME PORTCbits.RC1 unsigned int M1 = 0, M2 = 0; unsigned char passos[4] = {0X03, 0X06 , 0X0C, 0X09}; void tras( unsigned int distancia) { unsigned int x = 0 , pulsos; pulsos = distancia/2.09; // calculo da quantidade de pulsos necessários para deslocar para frente MD = 1; ME = 1; for(;;) { if(M1==0) M1 = 4; if(M2==0) M2 = 4; PORTB = (passos[M1-1]<<4)|passos[M2-1]; Delay10KTCYx(25); M1--; M2--; x = x + 1; if(x>=pulsos) break; }

description

Código em linguagem C para controle de motor de passos bipolar utilizando microcontrolador PIC18F4550

Transcript of Motor de Passo Bipolar

  • #include #include #include #include #include #include #include #include #include #pragma config OSC =HS #pragma config PWRT = ON #pragma config BOREN = OFF //#pragma config BORV = 0 //causando reset devido a quedas de tenso 4.89V #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF #define MD PORTCbits.RC0 #define ME PORTCbits.RC1 unsigned int M1 = 0, M2 = 0; unsigned char passos[4] = {0X03, 0X06 , 0X0C, 0X09}; void tras( unsigned int distancia) { unsigned int x = 0 , pulsos; pulsos = distancia/2.09; // calculo da quantidade de pulsos necessrios para deslocar para frente MD = 1; ME = 1; for(;;) { if(M1==0) M1 = 4; if(M2==0) M2 = 4; PORTB = (passos[M1-1]
  • MD = 0; ME = 0; } void frente(unsigned int distancia)// funo para deslocar o rob para frente a uma distncia d em mm { unsigned int x = 0 , pulsos; pulsos = distancia/2.09; // calculo da quantidade de pulsos necessrios para deslocar para frente MD = 1; ME = 1; for(;;) { if(M1==3) M1 = -1; if(M2==3) M2 = -1; PORTB = (passos[M1+1]
  • Delay10KTCYx(25); M1--; M2++; } MD = 0; ME = 0; } void esquerda() { MD = 1; ME = 1; for(;;) { if(M1==3) M1 = -1; if(M2==0) M2 = 4; PORTB = (passos[M1+1]
  • &USART_EIGHT_BIT &USART_BRGH_HIGH ,129); //configurao da comunicao I2C OpenI2C(MASTER, SLEW_OFF); SSPADD = 49; frente(100); Delay10KTCYx(250); Delay10KTCYx(250); tras(100); Delay10KTCYx(250); Delay10KTCYx(250); frente(50); Delay10KTCYx(250); Delay10KTCYx(250); tras(40); Delay10KTCYx(250); Delay10KTCYx(250); tras(8); Delay10KTCYx(250); Delay10KTCYx(250); direita(); while(1); } // FIM DO PROGRAMA.