Ir ao conteúdo
  • Cadastre-se

Bruno Ferraz

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

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