Ir ao conteúdo
  • Cadastre-se

Compilador CCS, PIC16F877A, motor de passo bipolar, driver L297


Posts recomendados

Olá,

 

Esta aplicação trata-se de uma parte de um projeto o qual estou desenvolvendo. 

 

Preciso deslocar o motor de passo bipolar acionado pelo L297 numa determinada quantia de passos a ser especificada por uma IHM.

O motor de passo tem uma resolução de 200 passos. A velocidade será sempre fixa e defini a frequência do clock para o driver em 1khz.

 

Em um primeiro momento estou apenas desenvolvendo a lógica de acionamento, pois a IHM já está pronta, depois é apenas endereçar as variáveis

adquiridas pela IHM na lógica do acionamento.

 

Analisando o código (compilador CCS) que postarei abaixo, percebe que se v for menor que q então o motor irá avançar no sentido horário uma volta a cada pulso de sensor, agora, se v for menor que q e maior que zero, ele deverá retroceder um volta a cada pulso de sensor, isso repete-se infinitamente.

 

O problema está quando simulo no proteus, ele até avança e retrocede mas não conforme a lógica.

 

 

 

float p, pn, v = 0;

#bit sens=porta.3         //deifine essa porta para o sensor

#bit sentido=portc.1     //define essa porta para o sentido de rotação do motor

#bit motora=portc.0      //define essa porta para o clock do motor

 

void main ()

{

   q = 10;                      //dado de teste, futuramente inserido pela IHM
   pn = 200;                  //dado de teste, futuramente inserido pela IHM
   c=0;
   v = 0;
   p = 0;
   sentido = 0;

 while (1)         // Laço infinito 
                       {      
                        
                       IF (sens && v<q && sentido==0)            //Se apertado sensor e se v maior que que e se o sentido for horário, então realiza o bloco
                           {
                                                                     
                            while (0<=p<=pn)  {                   //Laço para o clock do motor de passo, faz ele "avançar" em uma frequencia de 1khz durante um valor estimado pela IHM (no caso pn)
                             v  = v + 1/pn;                             //Incrementa um quando o laço chegar ao fim, fazendo com que o clock seja definido
                             p = p + 1;
                             motora = 0;
                             delay_us(500);
                             motora = 1;
                             delay_us(500);
                             break;
                                               } 
                          }
                          
                     ELSE IF (sens && v==q && sentido==0)       //Se sensor for pressionado e se v for igual a q e se sentido for igual horário, então realiza o bloco
                        { 
                           sentido = 1;                                                                        //Define o sentido de rotação para anti-horário
                        }
                      ELSE IF (sens && v>0 && sentido==1)         //Se sensor for pressionado e se v for maior que zero e se sentido for igual a 1, então realiza o bloco
                      {
                             while (0<=p<pn)             //Laço para o clock do motor de passo, faz ele "retroceder" em uma frequencia de 1khz durante um valor estimado pela IHM (no caso pn)
                                {
                             v = v - 1/200;                 //Decrementa 1 quando o laço chegar ao fim
                             p = p - 1;                           //Decrementa um a cada iteração, fazendo com que o clock seja definido.
                             motora = 0;
                             delay_us(500);
                             motora = 1;
                             delay_us(500);
                             break;
                                }
                       }  
                      ELSE IF (sens && sentido==1 && v/200==0)       //Se sensor for pressionado e se v for igual a q e se sentido for igual horário, então realiza o bloco
                            { 
                              sentido =0;        //Define o sentido de rotação para horário
                            }
                                      
                         }

fim:

;

}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...