Sketch übertragen - Motor bewegt sich automatisch?

Hallo,

ich beschäftige mich zur Zeit mit dem Steppermotor (NEMA 17), den ich mittels eines A4988 betreibe.

Wenn ich nun einen neuen Sektch auf meinen Arduino lade, rattert der Motor während der Übertragung immer ein paar einzelne, undefinierbare Schritte.

Wenn ich in dem Code die Setup-Passage auskommentiere tut er es trotzdem.

Ist das normal?

Der Sketch sieht zur Zeit wie folgt aus:

//Pinbelegungen
const int stepPin=13;
const int dirPin=12;
const int StartPin=2;

//Settings Rampe
float EngineMaxSpeed=1000;
int RampSections=4;

//Sonstige
boolean Direction=false;

void setup() {
  //Pinmodes setzen
  Serial.begin(9600); 
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  pinMode(StartPin,INPUT);
}

void loop() {  
  int StartSignal=digitalRead(StartPin);
  if (StartSignal==HIGH)
  {
    MoveCarrier(5000,Direction); 
    Direction=!Direction;
  }
}

void MoveCarrier(int Steps, boolean Direction)
{
  float StepsCount=0;
  float MotorDelay=0;
  int StartRange=round(Steps*(1.0/RampSections));
  int EndRange=round(Steps*(RampSections-1)/RampSections);
  
  digitalWrite(dirPin,Direction);
  
  while(StepsCount<=Steps)
  {
    //DriveUp
    if (StepsCount<=StartRange)
    {
      MotorDelay=EngineMaxSpeed*exp(1-StepsCount/StartRange);
    }
    //Normal
    if (StepsCount>StartRange && StepsCount<=EndRange)
    {
      MotorDelay=EngineMaxSpeed;
    }
    //ShutDown
    if (StepsCount>EndRange)
    {
      MotorDelay=EngineMaxSpeed*exp(1-(Steps-StepsCount)/StartRange);
    }
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(100);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(MotorDelay);
    StepsCount++;
  }
}

Gruß!

Leider sagst du nicht, welchen Arduino du einsetzt?
Und leider auch nicht, welche Upload Methode du nutzt…

Beim ATMega328 Arduino wird PIN 13 und auch 12 für ISP Uploads genutzt.
Auch zappelt der Bootloader an Pin 13.

Hallo,

ich benutze die “normale” Arduino-Umgebung.

Ich habe einen Arduino/Genuino Uno, welchen Chip weiß ich leider nicht genau.
Jedenfalls blinken fleißig die Leuchten, wenn ich den Sketsch übertrage.

Ich habe mal die Pin 13 Belegung entfernt - dennoch dreht sich der Motor beim Übertragen.

Gruß!

Wenn Du einen anderen als Pin 13 verwendest, wird es gehen.

Hallo,

danke soweit für die Antworten. Ich habe die Belegungnen nun auf 11 bzw. 10 gelegt. Trotzdem dreht sich der Motor.

Ich glaube ich habe einen ATMEL 1417 bzw. ATMEGA328-P

Gruß!

Du solltest einen ATmega328 haben. Versuch mal einen Pullup oder Pulldown-Widerstand an die Pins die den A4988 ansteuern anzuschließen.

Grüße Uwe

Hallo,

perfekt, das war die Lösung. Vielen Dank!

Warum kommt das Ganze nur beim Übertragen vor?

Liegt es an "schwebenden" Pins, wenn ein neues Programm auf den Arduino geladen wird?

PIN13 kann ich weiterhin nicht nutzen, dann macht der Motor (diesmal zwar nur kurz) auch ein paar undefinierte Steps - den lasse ich erstmal weg, solange ich keine PIN-Engpässe habe.

Gruß!

Liegt es an "schwebenden" Pins,

Wenn die Pullups helfen, dann ist das offensichtlich so.

Die Schlussfolgerung von mir wohl eine Binsenweisheit. Etwas bescheiden ausgedrückt, sorry. Die Frage die sich mir stellt ist eher, warum treten diese gerade beim Übertragen eines Sketches auf. Während der Ausführung des Programms hatte ich bisher nie Probleme.

Gruß!

Weil während der Übertragens alle Pins des Arduinos (außer TX/RX oder ISP-Pins je nach Übertragungsmethode) alle hochohmige Eingänge sind und die A4988 Platine eine hat. So werden jegliche Störung als Signal interpretiert und der Motor macht einige Schritte.

Grüße Uwe