Arduino com 2 Drivers A4988 e motoers de passo NEMA17 se comportando de forma irregular

Olá pessoal , estou desemvolvendo um projeto aqui com um Arduino uno 2 Drivers A4988 e 2 Motores de passo NEMA 17 e 5 botões, 3 ainda não adicionei nenhuma função ,coisa que era pra ser simples até funciona mas eu resolvi de implantar a biblioteca AccelsSepper aí a vaca foi pro brejo kkkkkk

Era pra se comportar da seguinte forma : quando aperto o botão "esquerdo" o motor1 dá 118 voltas (-23600 passos) enquanto o motor2 dá 10148 passos depois aperto o botão"direito"  o motor1 dá mais 118 voltas no mesmo sentido (-23600 passos)  e o motor2 dá -10148 passos voltando a sua posição inicial na primeira vez que eu aperto o botão independente de qual seja funciona tudo perfeitamente só que na segunda vês o motor1 inverte o sentido até usei a função currentposition() para ver pra onde ele vai e vai para uma posição que não tem nada a ver .

outra coisa que eu não consegui fazer é usar a função move().

Bom vou deixar o código a baixo e pedir que se possivel alguém me ajude kkkk por que deve ser um erro bem de principiante.

2_Nema_17.ino

Exibições: 191

Responder esta

Respostas a este tópico

Boa noite  Sr. NC, (se não gosta que te chame pelas iniciais, avise),

gostaria muito de te ajudar, mas para isto recomendo as seguintes ações:


1. Remova seu sketch da área de texto do seu tópico;

2Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo"

    e anexe o arquivo  com o seu sketch;


3. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar


4. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
     linha e facilita a ajuda.

RV

Muito obrigado pela orientação , já vou fazer isso.

Sim hoje de manhã kkkk mas vou estudalos novamente , se o motor fosse voltar pra para a posição original não teria problema outra coisa que também notei é que se eu reduzir o número e passos de -23600 para -2360  funciona perfeitamente.

Ok, obrigado pela compreensão.

Vc usou um enable só para os 2 motores?

RV

Sim , ligado a o pino 8 do arduino por que os 2 sempre trabalham sincronizados .

inicio :

destino   é                             =  " valor não definido" suponho que pode ser 0.

motor1.currentPosition()  é   =  suponho 0 também.

1a apertada

destino = motor1.currentPosition() - 23600;    destino = -23600.

depois do movimento   motor1.currentPosition()  = -23600.

2a  apertada

destino = motor1.currentPosition() - 23600;    destino = -47200.

Como a variável destino é uma int, ela vai de -32767  até + 32767.

Na primeira apertada o valor dentro da variável fica -23600, mas na segunda ele 

ficará   32767 -23600 =  + 9167 e o motor rodará ao contrário.

Mude a variável destino para o formato unsigned long e teste se funciona correto.

RV

Bah me caiu os butiá do bolso agora kkkkk muito obrigado, vou mudar e depois conto os resultados .

Noooossssaaaa, caiu e quebrou?????

move() é uma função relativa  e moveTo() é uma função absoluta.

Se o motor estiver em X e vc usar movo(X), ele  não fara´nada.

Se o motor estiver em X e vc usar movoTo(X), ele movera X posições.

Acho que é assim.

RV.

Ficou perfeito RV muito obrigado !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço