Ola, Estou com um problema de velocidade no motor de passo que não passa de 32 RPM.

Minha configuração de hardware:

fonte atx > já utilizei 12 volts, agora estou com 24 volts. utilizando o fio azul(-12)como negativo e amarelo(+12) como positivo;

driver hy-div268-5a > fullstep 1/1 ,200 passos por volta;

arduino uno;

Estou utilizando a porta de PUL (pulso) Digital 3(PWM); e utizando o comando

PORTD = B00001000 ;
delayMicroseconds(passo*4);
PORTD = B00000000 ;
delayMicroseconds(passo*4);

segue o código como anexo .

Exibições: 2449

Anexos

Responder esta

Respostas a este tópico

OPA !!! Corrigindo ! 

O Grafico é para MEIO PASSO ! ( Half Step ) eu não tinha percebido .

Deve dividir todos os valores por 2, se for usar Passo completo!

Passo completo = PPR = 200 ( 200 pulsos por revolução) 

Meio Passo - PPR = 400  ( 400 pulsos por revolução) 

Para 1000 pps :   (passo completo) 

T = 1 / F = 1/ 1000 = 1000 us 

Portanto intervalo =  T / 2 = 1000 us / 2 = 500 microsegundos 

const int intervalo = 500;

PPS máximo é de aproximadamente  2250 pulsos por segundo. ( para passo completo) 

Sugiro que faça testes com até 1000 pps, quando o torque cai para menos da metade ! 

Mais informações  - Cálculo do RPM :

Para uma volta , o motor precisa de 200 passos PPR = 200 ( Modo passo completo! ) 

PPR = passos por revolução 

Angulo de cada passo do Motor = 1,8 graus   - 1,8 x 200 = 360 graus 

Para 200 pps (passos por segundo) , o motor gira uma vez por segundo (RPS - rotações por segundo) , correto ?

RPS = PPS / PPR = 200 / 200 = 1 RPS   

RPM = 60 x RPS  = 60 x 1 = 60 rpm 

Assim para 2000 pps :    PPR = 200 ( Modo passo completo! ) 

 RPS = PPS / PPR = 2000 / 200 = 10 RPS   

 RPM =  60 x RPS  = 60 x 10 = 600 rpm 

RPS para diferentes Modos de passo :

Passo completo = PPR = 200

Meio Passo - PPR = 400

1/4 passo - PPR = 800

1/8 passo - PPR = 1600

1/16 passo - PPR = 3200 

Obrigado pelas formulas, preciso delas.

Percebo que o problema de velocidade é da minha lógica.....

qual pode ser o problema que faz o motor ficar devagar nesse código(no anexo)?

vou colocar as imagem mais tarde. 

Anexos

Quando pressiona tecla "a" , avança um pulso somente ! 

Esta esquisito isso - O que pretende?

void Motor_Gira(){  if (a)  {
pulso = !pulso; //inverte o estado da variável
digitalWrite(pul, pulso); //atribui o novo estado à porta
delayMicroseconds(intervalo);
}

void Direção = tecla " b" altera direção
void Estado = "a" desliga ou liga driver do motor

 void Motor_Gira(){  if (a)  }

O a é uma variavel boolean. se estiver verdadeira(true) o motor gira.

O motor parece que gira travando. vibrando..

Quando pressiona tecla "a" , avança um pulso somente ! 

Esta esquisito isso - O que pretende?

mas não tem a tecla a

a é uma variável boolean.

ele avança devagar, não é nomal, parece um delay ou liga desliga motor

Amigo, por favor responda :

O que pretende que o motor faça nesse momento ???

Avançar um passo somente ??? 

O objetivo inicial agora é ele girar o mais rápido possível.

O rpm nesse algoritmo é de 32 rpm. Já usando um algoritmo simples de teste de motor ,se esta girando.. é 60 à 70 rpm .

Não sei o que esta havendo para ele girar parando.

Explicando a minha lógica:

void Motor_Gira(){
if(a){    // se o estado da variavel for true o motor gira na velocidade maxima
pulso = !pulso; //inverte o estado da variável
digitalWrite(pul, pulso); //atribui o novo estado à porta
delayMicroseconds(intervalo); }} 

Bom dia , 

Com esse código, o motor avança somente um passo !

José resolvi o caso,obrigado.

Modifiquei a função que gera os pulsos para o motor girar. Coloquei dentro do while.

 //faz o arduino "focar" nessa operação , não dividindo o                    

 //processamento com outras funções do código

void gira(){   
while(a){                               
pulso = !pulso; //inverte o estado da variável
digitalWrite(pul, pulso); //atribui o novo estado à porta
delay(10/passo);
//delayMicroseconds(900);  
if(ReadKeypad() == 'R'){   //botão de estado do motor
Motor_Estado();
delay(200);} } }

abaixo segue um comentário com o anexo.

Consegui aumentar a velocidade no mesmo algoritmo que estava com problema de velocidade.

Modifiquei a função que gera os pulsos para o motor girar. Coloquei dentro do while.

 //faz o arduino "focar" nessa operação , não dividindo o                    

 //processamento com outras funções do código

void gira(){   
while(a){                               
pulso = !pulso; //inverte o estado da variável
digitalWrite(pul, pulso); //atribui o novo estado à porta
delay(10/passo);
//delayMicroseconds(900);  
if(ReadKeypad() == 'R'){   //botão de estado do motor
Motor_Estado();
delay(200);} } }

segue em anexo para quem quiser 

Obrigado a todos, em especial o José Gustavo Abreu Murta pela ajuda e informações muito uteis. abraços

Problema resolvido.

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço