Ir ao conteúdo
  • Cadastre-se

Bruno Ferraz

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por Bruno Ferraz

  1. 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:

    ;

    }

     

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!