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 .
Tags:
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.
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por