Controle de vários motores de passo Nema 17 ao mesmo tempo ou NemaStepper

imagem

Olá pessoal.

Acho que se você trabalhou com o arduino + nema 17, sabe que pode ser muito difícil iniciar vários motores ao mesmo tempo.

Existem diferentes maneiras de resolver esse problema, o mais fácil, talvez, é usar a biblioteca NemaStepper. A biblioteca simplifica essa tarefa várias vezes, a principal vantagem é que ela não interrompe o programa. Está instalado, assim como todas as outras bibliotecas. Distribuído sob licença do MIT.

Bem, vamos começar. E vamos começar conectando.

Usaremos o Simple Nema 17 com aliexpress por 500 rublos, o driver L298N e o arduino uno. Aqui estão elas:

imagem

imagem

imagem

  • No exemplo, mostrarei quatro drivers conectados ao arduino, apesar de usar apenas um.
  • Existem muitos tutoriais sobre como conectar o Nema 17 na Internet, então não vou descrevê-lo em detalhes aqui.

Então, conectamos o motor ao motorista:

imagem

imagem

A biblioteca é orientada a objetos. Vejamos um exemplo de ligação de um motor:

NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); void Setup(){ Stepper1.SetStepCount(100); //   100  } void Update(){ Stepper1.Step(); //  } 

Todos os métodos da biblioteca podem ser encontrados nos arquivos de código-fonte da biblioteca (há uma descrição no cabeçalho da biblioteca).

* Mais sobre o código no exemplo.

E agora para o exemplo.

A biblioteca possui um exemplo embutido (no momento em que está sozinho), que permite controlar três motores com o Serial de uma só vez.

Este exemplo aceita os seguintes comandos para a porta.

Vamos desmontar.

Vamos começar com o cabeçalho - conectando bibliotecas:

 //This file - example of NemaStepper library. #include "NemaStepper.h" String inString; bool IsStepperEnabled = false; 

A seguir, três motores são declarados, com os seguintes parâmetros:

1. Primeiro pino
2. Segundo pino
3. terceiro pino
4. Quarto pino
5. O número de etapas por rotação - a maioria dos motores Nema 17 tem 200.
6. velocidade inicial
7. Um valor indicando se deve manter o eixo após a parada (se verdadeiro, os motoristas se tornam um churrasco)

 NemaStepper Stepper1(2, 3, 4, 5, 200, 10, false); NemaStepper Stepper2(6, 7, 8, 9, 200, 10, false); NemaStepper Stepper3(10, 11, 12, 13, 200, 10, false); 

Próxima inicialização da porta:

 void setup() { Serial.begin(9600); } 

Então, IMPORTANTE! No loop principal, você precisa atualizar a posição dos mecanismos com o comando Step ().

 void loop() { if (IsStepperEnabled == true){ Stepper1.Step(); Stepper2.Step(); Stepper3.Step(); } GetCommandFromSerial(); } 

A seguir, é apresentada uma sub-rotina que recebe dados da porta, liga / desliga os motores, define a velocidade, os freios e a rotação.

 void GetCommandFromSerial() { if (Serial.available() > 0) { //    int inChar = Serial.read(); if (inChar == '/') { String command = ((String)inString[0] + (String)inString[1] + (String)inString[2]); String param; int len = inString.length(); for (int i = 3; i < len; i++) { param = (String)param + (String)inString[i]; } if (command == "MV1") { Stepper1.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV2") { Stepper2.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "MV3") { Stepper3.SetStepCount(param.toInt()); Serial.println(param.toInt()); } if (command == "SS1") { Stepper1.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS2") { Stepper2.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SS3") { Stepper3.SetSpeed(param.toInt()); Serial.println(param.toInt()); } if (command == "SB1") { Stepper1.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB2") { Stepper2.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "SB3") { Stepper3.SetBrakes(param.toInt()); Serial.println(param.toInt()); } if (command == "EMS") { IsStepperEnabled = true; Serial.println(param.toInt()); } if (command == "DMS") { IsStepperEnabled = false; Serial.println(param.toInt()); } inString = ""; } else { inString += (char)inChar; } } } 

E então, vamos tentar fazer o download para o quadro.

Carregado?

Depois, entramos no monitor da porta e inserimos os comandos do código.
Cada comando termina com um /.
Os três primeiros caracteres são o nome da equipe.
Isso entre o nome e / - parâmetros.
Vamos ligar os motores com o comando “EMS /” (Ativar MotorS).
Em seguida, indicaremos a velocidade 60 do motor 1 com o comando "SS160 /" (velocidade definida), onde 60 é a velocidade.
E, finalmente, ligue o primeiro motor com o comando “MV1100 /”, (MoVe), em que 100 é o número de rotações.
Tudo funciona. Viva.

O mesmo com o resto dos motores.

Bem, onde conseguir a biblioteca.

A biblioteca pode ser baixada agradecendo ao criador, seguindo o link, indicando o preço real:

NemaStepper Obter

Obrigado pela leitura, espero que meu artigo tenha ajudado.

Quando eu estava procurando uma solução para o meu problema, ela acabou sendo a única biblioteca adequada.

Source: https://habr.com/ru/post/pt464859/


All Articles