Go Down

Topic: Motor de passo com 2 velocidades/ uma em cada botão. AJUDA! (Read 1 time) previous topic - next topic

Xpxis

olá, sou novo nessa assunto, estou precisando fazer uma lógica para que o motor rode em 2 velocidades de deslocamento, e outro botão que inverta a rotação, numa velocidade qualquer.

fiz alguns testes, más, sem sucesso. peguei o IDE de controle de velocidade e fui mexendo, sem sucesso.

Se alguém poder me dar uma luz, de como posso fazer.

desde já agradeço.

bubulindo

Se mostrares o que já tentaste é mais fácil de ajudar...
This... is a hobby.

Xpxis

#define sentido_horario digitalWrite(7, HIGH);     // define comando para sentido horário
#define sentido_antihorario digitalWrite(7, LOW);  // define comando para sentido anti-horário
#define habilita_motor digitalWrite(9, LOW);       // define comando para habilitar motor
#define inibe_motor digitalWrite(9, HIGH);   // define comando para desligar motor
 
int velocidade = 900;     // Variável que informa a velocidade do motor
                        // 0 = motor parado e 1024 = velocidade máxima;
                       
int habilita = 0;       //Variável que guarda o resultado dos comando dos botões de liga e desliga
                        // Se 0 = Para Motor // Se 1 = Roda o Motor
 
int sentido = 1;        // Variável que informa o sentido de giro do motor
                        // se 1 = Sentido Horário // Se 2 = Sentido anti-horário
 
int modo_de_operacao = 0;  // Variável que guarda a combinação dos botões para o programa saber o que fazer
                           // Essa variável pode ter 3 valores
                           // 0 -> desliga motor
                           // 1 -> Liga o Motor no Sentido Horário
                           // 2 -> Liga o Motor no sentido Anti-horário

void setup()
  // put your setup code here, to run once:
{
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);     
  pinMode(9,OUTPUT);
 
 pinMode(2,INPUT_PULLUP);
 pinMode(4,INPUT_PULLUP);
 pinMode(6,INPUT_PULLUP);
}


void loop() {
    if ( !digitalRead(2))   
    {
     habilita_motor
     sentido_horario
     velocidade = 200;   
     tone(8, velocidade);       
          }
       if ( !digitalRead(4))   
    {           

     habilita_motor
     sentido_horario   
     velocidade = 500;   
     tone(8, velocidade);       
         }

         if ( !digitalRead(6))   
    {           
     habilita_motor
     sentido_antihorario           
     velocidade = 500;   
     tone(8, velocidade);       
          }
     else   
     
      {
        inibe_motor
        digitalWrite(8, LOW);
       
     }}

Xpxis

basicamente é isso, quero saber também, se tem outros métodos de declarar a velocidade para subir o rpm

bubulindo

Onde é que viste que era boa ideia usar a função tone() para controlar motores de passo?
This... is a hobby.

Xpxis

cara, estou usando um desse (link abaixo), para "controlar ele" tive a ideia de fazer como se fosse um gerador de pulsos. como eu disse, não tenho muita moral. preciso de algum método de aumentar a velocidade.

https://produto.mercadolivre.com.br/MLB-1072300983-driver-dm542-42a20-50v-motor-passo-200khz-cnc-promoco-_JM?quantity=1#position=13&type=item&tracking_id=901341a9-222a-4412-b471-bdefa3b6a2f3

bubulindo

O driver aceita frequências até 200kHz. A função tone() aceita a frequência em Hz... no entanto, o tipo de dados vai apenas até 65000.

Outra libraria que podes usar é a Timer1. https://playground.arduino.cc/Code/Timer1/

Esta dá-te muito mais controlo sobre a forma de onda que colocas e também permite atingir 200kHz que supostamente o driver aceita. De qualquer forma, vai tentando aos poucos.
This... is a hobby.

Go Up