INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schrittmotor bewegt sich nicht
25.11.2020, 18:57
Beitrag #57
RE: Schrittmotor bewegt sich nicht
(25.11.2020 18:04)DerMaschbaustudent schrieb:  Okay, also kann ich es doch softwareseitig lösen?!
Also geht es doch über
Code:
MoToStepper myStepper(3200, STEPDIR );
?
In dem Fall musst Du dann am A4988 1/16 Microstepping einstellen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2020, 19:22
Beitrag #58
RE: Schrittmotor bewegt sich nicht
(25.11.2020 18:57)MicroBahner schrieb:  
(25.11.2020 18:04)DerMaschbaustudent schrieb:  Okay, also kann ich es doch softwareseitig lösen?!
Also geht es doch über
Code:
MoToStepper myStepper(3200, STEPDIR );
?
In dem Fall musst Du dann am A4988 1/16 Microstepping einstellen.

Was meinst du mit "einstellen"?
Also nur per Code ohne Einbinden der eigentlichen Microstepping-Anschlüsse?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2020, 19:52 (Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2020 19:53 von MicroBahner.)
Beitrag #59
RE: Schrittmotor bewegt sich nicht
Indem du die entsprechenden Anschlüsse am A4988 auf HIGH bzw LOW ziehst. Ob Du das direkt per Hw-Verdrahtung machst, oder mit Arduino-Pins verbindest, die Du dann fest auf HIGH bzw LOW setzt ist egal.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2020, 20:14
Beitrag #60
RE: Schrittmotor bewegt sich nicht
Dann müsste das vorangegangen Programm doch richtig sein?
Code:
#include <MobaTools.h>

const byte dirPin       = 0;
const byte stepPin      = 2;
const byte enaPin       = 4;
const byte MS1          = 6;
const byte MS2          = 8;
const byte MS3          = 10;
byte mode;
int rpm10;
long angle;
MoToStepper myStepper(3200, STEPDIR );  // 3200 Steps/ Umdrehung




void setup()
{ myStepper.attach(MS1);
  myStepper.attach(MS2);
  myStepper.attach(MS3);
  myStepper.attach( stepPin, dirPin );
  pinMode(enaPin, OUTPUT);        // Enable Pin aktivieren ( LOW=aktiv )
  pinMode(MS1, OUTPUT);
  pinMode(MS2, OUTPUT);
  pinMode(MS3, OUTPUT);
  digitalWrite(enaPin, LOW);
  digitalWrite(MS1, HIGH);
  digitalWrite(MS2, HIGH);
  digitalWrite(MS3, HIGH);
  myStepper.setSpeed(100);
  myStepper.write(45);
  while (myStepper.moving());
  }
void loop() {
}

Oder vertue ich mich da irgendwo?

Mit freundlichen Grüßen,

Maxi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2020, 21:20 (Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2020 21:24 von MicroBahner.)
Beitrag #61
RE: Schrittmotor bewegt sich nicht
(25.11.2020 20:14)DerMaschbaustudent schrieb:  Dann müsste das vorangegangen Programm doch richtig sein?
Code:
{ myStepper.attach(MS1);
  myStepper.attach(MS2);
  myStepper.attach(MS3);
Diese attach-Aufrufe gibt es nicht. Die MoToStepperklasse weis mit deinen Microstep-Pins nichts anzufangen.
Die interessiert sich ausschließlich für die Zahl der Steps die dein Motor für eine Umdrehung braucht.
Der Rest müsste dann schon passen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.11.2020, 03:47 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2020 03:49 von DerMaschbaustudent.)
Beitrag #62
RE: Schrittmotor bewegt sich nicht
Guten Abend,


ich wollte euch gerne mal auf den neuen Stand bringen.
Der Motor (bzw. die Motoren) laufen so wie sie sollen und werden nach einer Tasterabfrage gestarten und drehen dann in einem fest vorgesehenen Winkel einmal vor und einmal zurück.
Nur die Sensoreinbindung macht mir höllische Probleme. Es ist eine Wägezelle mit einem HX711 (Instrumentenverstärker?) Modul.
Das Kalibieren klappt ohne Probleme. Das Abfragen der gemessenen Werte auch.
Mein problem ist nur sozuusagen die Kopplung der beiden Motoren und des Sensors.

Ich möchte eigentlich, dass......
-die Motoren ihren Weg verfahren,sobald der Knopf gedrückt wird, jedoch währenddessen nicht auf erneutes Drücken reagieren (das klappt Smile )
-ab dem Druck des Knopfes der Sensorwert alle 100ms aufgezeichnet wird.
-die Sensoraufzeichnung abbricht, wenn der Aktor sein Neutralposition wieder erreicht hat.


Ich hatte erst überlegt, den Sensor über eine If-Abfrage zu aktivieren, indem er anfängt werte auszugeben, sobald der Taster wieder losgelassen wird.
Das Problem was sich ergibt ist einerseits eine Störung des Verfahrens der Motoren, sobald die If-Abfrage für den Sensor mit im Script steht und ausgeführt wird. Desweiteren zeichnet der Sensor logischweise immer auf, wenn der Taster auf low is. Das gilt natürlich auch für die ganze Zeit, bevor er je betätigt wird.
Sobald der Taster jedoch losgelassen wurde zeichnet er einen Sensorwert auf, was mir natürlich gar nichts nützt.
Desweiteren darf die Ausgabe der Sensorwerte gerne nach dem Ablauf des Aktorverfahrens aufhören.
Also, das der letzte Sensoorwert ausgelesen wird, wenn der Aktor wieder steht.

Meine eigentliche Idee mit der If-Abfrage funktioniert ja leider nicht .Gibt es eine geeignetere Möglichkeit, das zu lösen.

@MicroBahner

Gibt es die Möglichkeit über die MoBatools die Schritte des Motors auszulesen und diese als Varible, an einen Zähler zu verknüpfen, der die Ausgabe des Sensorwertes nur zulässt, solange der Motors noch Schritte verfahren muss?



Mit freundlichen Grüßen,

Maxi


Edit: Natürlich stelle ich trotzdem mal die Überlegung mit der Schleife rein Smile

Code:
#include <MobaTools.h>
#include <HX711_ADC.h>
#include <EEPROM.h>
HX711_ADC LoadCell(42, 43);
const byte dirPin1    = 1;
const byte stepPin1   = 2;
const byte enaPin1    = 6;
const byte MS11       = 5;
const byte MS12       = 4;
const byte MS13       = 3;
const byte dirPin2    = 8;
const byte stepPin2   = 9;
const byte enaPin2    =10;
const byte MS21       =13;
const byte MS22       =12;
const byte MS32       =11;
long angle;
int i;
int taster           =30;
int tasterstatus     =0;
int rpm10;
byte mode;
int repeats;
int eepromAdress = 0;
unsigned long t = 0;

MoToStepper myStepper1 (3200, STEPDIR);
MoToStepper myStepper2 (3200, STEPDIR);

void calibrate() {
  Serial.println("***");
  Serial.println("Start  der Kalibrierung");
  Serial.println("Es sollte sich kein Gewicht auf dem Seonsor befinden!!!");
  Serial.println("Bitte Gewicht platzieren.");
  Serial.println("Geben Sie das Gewicht in das Textfeld ein und bestätigen sie mit ENTER.");
  float m = 0;
  boolean f = 0;
  while (f == 0) {
    LoadCell.update();
    if (Serial.available() > 0) {
      m = Serial.parseFloat();
      if (m != 0) {
        Serial.print("Bekannte Masse: ");
        Serial.println(m);
        f = 1;
      }
      else {
        Serial.println("Ungültig");
      }
    }
  }
  float c = LoadCell.getData() / m;
  LoadCell.setCalFactor(c);
  Serial.print("Kalibrierungsfaktor ist: ");
  Serial.print(c);
  Serial.println(", im Projektsketch nutzen");
  f = 0;
  Serial.print("Diesen Wert im EEPROM speichern?");
  Serial.print(eepromAdress);
  Serial.println(" y/n");
  while (f == 0) {
    if (Serial.available() > 0) {
      char inByte = Serial.read();
      if (inByte == 'y') {
        #if defined(ESP8266)
        EEPROM.begin(512);
        #endif
        EEPROM.put(eepromAdress, c);
        #if defined(ESP8266)
        EEPROM.commit();
        #endif
        EEPROM.get(eepromAdress, c);
        Serial.print("Wert ");
        Serial.print(c);
        Serial.print(" in Eeprom gespeichert: ");
        Serial.println(eepromAdress);
        f = 1;
      }
      else if (inByte == 'n') {
        Serial.println("Wert nicht in Eeprom gespeichert.");
        f = 1;
      }
    }
  }
  Serial.println("Beende Kalibrierung");
  Serial.println("Für manuelles Editieren, senden Sie 'c' zum seriellen Monitor");
  Serial.println("***");
}
void changeSavedCalFactor() {
  float c = LoadCell.getCalFactor();
  boolean f = 0;
  Serial.println("***");
  Serial.print("Widerstandswert ist: ");
  Serial.println(c);
  Serial.println("Den neuen Wert vom seriellen Monitor senden, i.e. 696.0");
  while (f == 0) {
    if (Serial.available() >= 0) {
      c = Serial.parseFloat();
      if (c != 0) {
        Serial.print("Neuer Kalibrierungswert: ");
        Serial.println(c);
        LoadCell.setCalFactor(c);
        f = 1;
      }
      else {
        Serial.println("Ungültiger Wert, beenden");
        return;
      }
    }
  }
  f = 0;
  Serial.print("Diesen Wert zur Eeprom-Adresse speichern ");
  Serial.print(eepromAdress);
  Serial.println("? y/n");
  while (f == 0) {
    if (Serial.available() > 0) {
      char inByte = Serial.read();
      if (inByte == 'y') {
        #if defined(ESP8266)
        EEPROM.begin(512);
        #endif
        EEPROM.put(eepromAdress, c);
        #if defined(ESP8266)
        EEPROM.commit();
        #endif
        EEPROM.get(eepromAdress, c);
        Serial.print("Wert ");
        Serial.print(c);
        Serial.print(" gespeichert in Eeprom: ");
        Serial.println(eepromAdress);
        f = 1;
      }
      else if (inByte == 'n') {
        Serial.println("Wert nicht in EEPROM gespeichert.");
        f = 1;
      }
    }
  }
  Serial.println("Beenden Wechsel des Kalibrierungswerts.");
  Serial.println("***");
}
void setup() {  // put your setup code here, to run once:
myStepper1.attach (stepPin1, dirPin1);
myStepper2.attach (stepPin2, dirPin2);
pinMode (enaPin1, OUTPUT);
pinMode (enaPin2, OUTPUT);
pinMode (MS11,    OUTPUT);
pinMode (MS12,    OUTPUT);
pinMode (MS13,     OUTPUT);
pinMode (MS21,    OUTPUT);
pinMode (MS22,    OUTPUT);
pinMode (MS32,    OUTPUT);
pinMode (taster,  INPUT);
digitalWrite( enaPin1 ,LOW);
digitalWrite( enaPin2 ,LOW);
digitalWrite( MS11    ,HIGH);
digitalWrite( MS12    ,HIGH);
digitalWrite( MS13    ,HIGH);
digitalWrite( MS21    ,HIGH);
digitalWrite( MS22    ,HIGH);
digitalWrite( MS32    ,HIGH);
Serial.begin(9600);
  Serial.println("Starten...");
  LoadCell.begin();
  long stabilisingtime = 2000; // mS  für Tara
  LoadCell.start(stabilisingtime);
  if (LoadCell.getTareTimeoutFlag()) {
        Serial.println("Tara timeout, Verkabelung und Pinbelegung überprüfen");
  }
  else {
        LoadCell.setCalFactor(1.00);
        Serial.println("Startup + Tara komplett");
  }
  while (!LoadCell.update());
    calibrate();
}

void loop() {
LoadCell.update();
tasterstatus=digitalRead(taster);
if (tasterstatus==HIGH){
    myStepper1.setSpeed (20);
    myStepper2.setSpeed (20);
    myStepper1.write (-90);
    myStepper2.write (-90);
      while (myStepper1.moving());
      while (myStepper2.moving());
    myStepper1.setSpeed (20);
    myStepper2.setSpeed (20);
    myStepper1.write (0);
    myStepper2.write (0);
      while (myStepper1.moving());
      while (myStepper2.moving());
if(tasterstatus==LOW){
    LoadCell.update();
      if (millis() > t + 50) {
              float i = LoadCell.getData();
              Serial.print("Wägezellenwert: ");
              Serial.print(i);
              Serial.println(" kg");
              t = millis();}}}
else{
      myStepper1.setSpeed (0);
      myStepper2.setSpeed (0);

}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.11.2020, 16:58
Beitrag #63
RE: Schrittmotor bewegt sich nicht
Hallo Maxi,
zu allererst musst Du lernen, blockadefrei zu programmieren. Die MobaTools blockieren zwar nicht, während der Motor dreht. Aber damit:
Code:
while (myStepper1.moving());
while (myStepper2.moving());
machst Du das alles wieder zunichte: der loop blockiert, bis die Motore ihre Zielposition erreicht haben. Damit kannst Du dann auch während der Bewegung keinen Wägesensor auslesen.

Du solltest dich dringend mit dem Thema 'Zustandsautomat' oder 'finite state machine' beschäftigen. Mit dieser Programmiertechnik kannst Du deine Probleme lösen. Such einfach nach 'arduino Zustandsautomat' - da findest Du reichlich Artikel. Z.B. auch diesen hier.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.11.2020, 21:55
Beitrag #64
RE: Schrittmotor bewegt sich nicht
(30.11.2020 16:58)MicroBahner schrieb:  Hallo Maxi,
zu allererst musst Du lernen, blockadefrei zu programmieren. Die MobaTools blockieren zwar nicht, während der Motor dreht. Aber damit:
Code:
while (myStepper1.moving());
while (myStepper2.moving());
machst Du das alles wieder zunichte: der loop blockiert, bis die Motore ihre Zielposition erreicht haben. Damit kannst Du dann auch während der Bewegung keinen Wägesensor auslesen.

Du solltest dich dringend mit dem Thema 'Zustandsautomat' oder 'finite state machine' beschäftigen. Mit dieser Programmiertechnik kannst Du deine Probleme lösen. Such einfach nach 'arduino Zustandsautomat' - da findest Du reichlich Artikel. Z.B. auch diesen hier.



Ich verstehe nicht, wie mir die FSM da nützen soll, da ich ja keine Zustände nacheinander durchlaufen lasse,, bzw. nicht weiss, welche Zustände das wären?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  SchrittMotor Nema 17- HANPOSE HPV2 Linear Guide 3D Drücker Salvo1969 0 91 10.05.2021 19:27
Letzter Beitrag: Salvo1969
  Arduino startet nicht kpc 14 1.076 27.04.2021 22:24
Letzter Beitrag: hotsystems
  Arduino Mega wird nicht erkannt Gian-Luca 45 12.168 23.04.2021 15:45
Letzter Beitrag: Will Mew
  Schrittmotor mit Endschalter MättyEifel 11 1.382 13.04.2021 13:46
Letzter Beitrag: MicroBahner
  MKR1200 läuft nicht bei Batteriebetrieb kpc 24 3.648 05.04.2021 22:59
Letzter Beitrag: kpc
  Einfaches Projekt funktioniert am USB Anschluss, aber nicht mit Akkus PurpleLightning 3 624 05.04.2021 12:07
Letzter Beitrag: hotsystems
  Sketche lassen sich aus IDE nicht mehr hochladen Steinspiel 9 1.661 19.03.2021 19:11
Letzter Beitrag: Chopp
  Sketches lassen sich nicht mehr hochladen. Was kann ich noch tun? Tonio 3 735 19.03.2021 15:32
Letzter Beitrag: Tommy56
  Servo funktioniert nicht richtig an Arduino Nano Maxcruiser 25 3.602 14.03.2021 17:11
Letzter Beitrag: hotsystems
  Erster Versuch Schrittmotor tomger22 2 875 09.03.2021 17:34
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste