Pesquisar neste blog

10/10/2020

Motor de Passo com PIC 16f877A

Objetivo: Fazer um motor de passo que gire no sentido horário, sentido anti -horário e seja controlado sua velocidade.

Código feito em CCS C Compiler

#include <16F877a.h>
#device ADC = 8
#fuses xt, nowdt, noprotect, put, brownout
#use delay(clock = 20MHz)
#include <lcd.c>

int pinos[] = {0b0001, 0b0010, 0b0100, 0b1000};
//Obs: A variável velocidade e tempo é apenas para demostração
//não é feito nenhum cálculo para calcular a velocidade de rotação do motor
int velocidade, tempo;

void CRESCENTE(){

   for(int i = 0; i < (sizeof(pinos)/sizeof(int)); i++){
      printf(lcd_putc,"\fSENTIDO: HORARIO\nTempo:%d us\tVelocidade= %d rad/s", tempo, velocidade);
      
      output_b(pinos[i]);
      delay_ms(100);
      output_low(pinos[i]);
      delay_ms(tempo);
   
   }
   
}

void DECRESCENTE(){
   printf(lcd_putc,"\fSENTIDO: ANTI-HORARIO\nTempo:%d us\tVelocidade= %d rad/s", tempo, velocidade);
   
   for(int j = (sizeof(pinos)/sizeof(int)); j >= 1; j--){
      output_b(pinos[j-1]);
      delay_ms(100);
      output_low(pinos[j]);
      delay_ms(tempo);
   }
}


void main(void){
     
   SETUP_ADC_PORTS(AN0);
   SETUP_ADC(ADC_CLOCK_INTERNAL);
   SET_ADC_CHANNEL(0);
      
   lcd_init();
   
   while(TRUE){
      velocidade = read_adc();
      printf(lcd_putc,"\fMotor de Passo:\nMotor OFF");
      delay_ms(20);
      
      while(input(pin_C2) == TRUE && input(pin_C5) == FALSE){
         velocidade = read_adc();
         tempo = read_adc() * 0.8;
         
         CRESCENTE();
         
      }
      
      while(input(pin_C2) == FALSE && input(pin_C5) == TRUE){
         velocidade = read_adc();
         tempo = read_adc() * 0.8;
         
         DECRESCENTE();
      }

   }
}




Nenhum comentário: