Почему мой шаговый двигатель работает, когда я открываю последовательный порт?

По какой-то причине мой двигатель двигается на определенное количество каждый раз, когда я открываю последовательный порт, не давая ему никаких других инструкций. Он будет двигаться дальше на ту же величину, если я закрою и снова открою последовательный порт. Пожалуйста, кто-нибудь может сказать мне, как этого избежать? У меня раньше не было такой проблемы.

Я использую два шаговых двигателя с драйвером A4988 каждый.

Вот мой код до сих пор

#include <AccelStepper.h>
#include <MultiStepper.h>


// Define pin connections
const int dirPin1 = 2;
const int stepPin1 = 3;
const int dirPin2 = 4;
const int stepPin2 = 5;

String incomingByte; // for incoming serial data

// Define motor interface type
#define motorInterfaceType 1

// Creates an instance
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);

MultiStepper steppers;

void setup() {
  Serial.begin(9600);
  String excess1 = Serial.readString();
  // Configure each stepper
  stepper1.setCurrentPosition(0);
  stepper2.setCurrentPosition(0);
  stepper1.setMaxSpeed(100);
  stepper2.setMaxSpeed(100);
  stepper1.setAcceleration(10);
  stepper2.setAcceleration(10);
  // Then give them to MultiStepper to manage
  steppers.addStepper(stepper1);
  steppers.addStepper(stepper2);
}

void loop() {
  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.readString();

    // say what you got:
    Serial.print("I received: ");
    //Serial.println(incomingByte, DEC);
    Serial.println(incomingByte);

    int x = incomingByte.toInt();

    long positions[2];

    positions[0] = x;
    positions[1] = 0;
    steppers.moveTo(positions);
    steppers.runSpeedToPosition();
  }
}

, 👍1

Обсуждение

добавьте инструкции serial.print() в свой код, чтобы определить, как продвигается программа ... UNO, вероятно, сбрасывает, @jsotola

Это имеет смысл, что Uno сбрасывается при открытии последовательного порта, но двигатель не должен двигаться, если текущее положение каждый раз равно нулю и нет новых инструкций для перемещения. Я включил строку ниже, чтобы очистить последовательный буфер, поэтому не должно быть никаких новых инструкций. ''' Строка excess1 = Последовательный.ReadString(); "', @SPatel


1 ответ


Лучший ответ:

1

Когда вы открываете или снова открываете последовательный порт, Arduino сбрасывается (в зависимости от того, как вы его открываете; некоторые программы не посылают сигнал на DTR или RTS, что приводит к сбросу).

Я предполагаю, что драйвер шагового двигателя реагирует на то, что Arduino настраивает свои контакты для шагового двигателя. Трудно сказать, что именно там происходит. Чтобы смягчить это, вы можете добавить внешний выдвижной резистор (при условии, что у вас есть активный высокочастотный шаговый драйвер. Для активного низкого уровня используйте подтягивающий резистор). Это должно поддерживать низкую ступенчатую линию драйвера, даже если он не активно управляется Arduino.

,