Kreuztisch mit Schrittmotoren bestücken

Fertige Geräte mit Bilden, Schaltungen, Programmen vorstellen.
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

e69-fan hat geschrieben: Fr 18. Feb 2022, 09:20 Frage: Die Flasche im Hintergrund, ist das Borwasser oder Nervennahrung ? :lol: :lol: :lol:
Das ist Holunder Sirup. Sehr süße Pampe. Bei mir faulen Hund dauert es immer etwas, bis der Müll den Weg zur Tonne findet :roll:
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Ich habe mir ja die zwei Taster bestellt, die Schließer UND Öffner haben. Und auch einen roten Leuchtring. Aber ich Blödmann habe erst jetzt gelesen, dass die Bestellten Dinger den Leuchtring für 230 Volt haben :(o): :(o): Ich wollte eigentlich, dass der Rote Ring am Taster leuchtet, wenn man in den Endschalter gefahren ist. Dann leuchtet der rote Ring am Taster und sagt mir, dass ich da drauf drücken muss, dass ich den Tisch wieder freifahren kann. Aber leider war ich zu blöd, um das richtige zu bestellen :evil: :(o):

Jetzt habe ich mir nochmal einen Taster bestellt. Die werden immer teurer. :evil: :evil: Da steht der Knopf am Taster über, kann man also leicht unabsichtlich dran kommen. Aber OK, der löst ja nichts aus. Wenn man am Tisch arbeitet, hat die Taste ja keine Auswirkung, nur wenn man im Aus gelandet ist. Und da macht der Tisch ja eh nichts mehr.

Diese Led´s im Taster haben meistens 9-24 Volt, Manchmal 6-24 Volt und auch 230 Volt. Aber selten 5 Volt. Diese hier, die ich jetzt bestellt habe, hat 4-12 Volt. Ich bin gespannt ob die dann richtig leuchtet, denn bei 6-24 Volt sieht man fast nichts vom Leuchtring wenn man die LED mit 5 Volt betreiben will. Ich hoffe jetzt mal, dass die nicht nur eine 6-24 Volt Taste genommen haben und im Verkaufstext 4-12 Volt geschrieben haben, dass ein paar Idioten, die mit 5 Volt arbeiten, das Ding dann kaufen.
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Ich habe den Taster zum Entsperren des Endschalters eingebaut. Ich kann auch damit den in den Endschalter gelaufenen Kreuztisch wieder entsperren. Aber der Leuchtring, der signalisiert, dass der Endschalter den Tisch gestoppt hat, leuchtet nicht. Aber heute ist es mir schon zu dunkel zum Störungssuchen :)

Servus
Franz

PS: jetzt wollte ich den Fehler doch noch gleich finden. Und er ist beseitigt. Eine Lötverbindung war Mist, weil ich mit meinen Sch*** Augen wahnsinnig viel Licht brauche um vernüntig arbeiten zu können. Ja, und in dem Steuerungskasten ist es nun mal finster. :(o): Aber der Kandidat hat 100 Punkte, der Leuchtring macht jetzt was er soll. :(V):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von e69-fan »

Hallo Franz,

Bitte teste mal folgende Datei bei Dir:
3;0;1;1000;4000;10
1;1;1;1000;32000;80
3;0;2;1000;4000;10
1;1;2;1000;32000;80
3;0;2;1000;4000;10
1;1;2;1000;48000;120
3;0;1;1000;4000;10
1;1;1;1000;48000;120
3;0;1;1000;4000;10
Anstelle von 120mm
1;1;2;1000;48000;120
1;1;1;1000;48000;120

fährt er jeweils 43,84mm gem. Anzeige im Display
???

Als nächstes mache ich mal die Bohrstopp raus.

Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Das war nix

PS: Bin noch nicht weiter gekommen.

PS: Hatte immer noch keine Zeit zum weitermachen.
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Ich glaube ich habe die Lösung. Ich habe mir die Schritte aus dem mm im Programm ausgerechnet. Das scheint zu klappen. Habe aber keine Lust mehr das ins Programm zu übernehmen. Mache ich morgen, also Samstag.

Gute Nacht
Franz :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Hallo Wolfgang
mir hat eine Deklaration einen Streich gespielt. Ich habe nicht mehr dran gedacht, dass ich an der herumgebogen habe. Jetzt bin ich gerade mal so weit, dass es besser gehen sollte. Das könntest du mal testen.

Code: Alles auswählen

/*
  ################################################################################################################
  +++++++++++++++++++++++++++++++Kreuztisch_Pr._V3.5 vom 27.02.2022+++++++++++++++++++++++++++++++++++++++++++++++
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Kreuztisch Steuerung mit Schrittmototoren erstellt mit der Mobatools Lib. die ich sehr empfehlen kann.
  Die Fahrdaten werden mit Excel eingegeben, auf eine SD-Karte mit Trennung durch Semikolon exportiert,
  und vom Arduino wieder ausgelesen.
  Die beötigten Daten in einer Fahrdaten Zeile sind:
  Position 1: Motor / Achse 1 - 3 für X, Y, Z
  Position 2: Fahren ja / nein. Im Moment immer 1
  Position 3: Dir, also rechts / links = 1 - 2
  Position 4: Tempo 1 - 1000
  Position 5: Schritte 1 - 250000
  Das ist die Version 3.2 als erster Lauffähiger Code.
  Die Pins des Kartenlesers sind beim Arduino Mega:
  Miso Pin 50
  Mosi Pin 51
  SCK Pin 52
  CS Pin 53
  GND und VCC 5 Volt natürlich auch noch.
  Der Kartenleser macht Karten bis 32GB
  Mit FAT16/FAT32-Partition
  Wenn die Fahrgeschwindigkeit zu gering ist, kann man in der Lib.Datei "MobaTools.h"
  "#define CYCLETIME       200" ändern auf "#define CYCLETIME       100"
  Dann das Programm nochmal neu auf den Arduino übertragen.
  !!!Achtung!!! die Mobatools.d ist dann für dieses Programm i.O.
  aber muss danach wieder in den ursprünglichen Zustand versetzt werden !!
  Wir belegen mit SPI und I2C mindestens 27-30 Pin´s also fallen kleinere Arduinos aus.
  Im Moment sind es nur 23 Pin´s aber für Spindel ein/aus, Kühlung, Absaugung,
  sollte man sich die Möglichkeit offen halten. Also lieber mit 30 rechnen!!!
  Ich habe immer gerne Luft nach oben, wenn ich was baue.
  ###############################################################################################################
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//---SD Kartenleser-------------------------------
#include <SPI.h>
#include <SD.h>
File myFile;

byte gelesen = 0;
const byte chipSelectPin = 53;
const String filename = "Mappe1.csv";
char zeilenBuffer[30];
char auswerteBuffer[6][8];
byte automatik = 0;
//----------------Sonderzeichen-------------------
#define OHM   "\xF4"    // Zeichen für Ohm
#define AE    "\xE1"    // Zeichen für "ä"
#define OE    "\xEF"    // Zeichen für "ö"
#define SS    "\xE2"    // Zeichen für "ß"
#define OBEN    "\x5E"    // Zeichen für "hoch"
#define RECHTS   "\176" // Pfeil nach rechts
#define LINKS   "\177"  // Pfeil nach links
#define UE  "\365"      // Zeichen für "ü"
#define GRAD  "\337C"   // Zeichen für "Grad" Celsius
//------------------------------------------------
#define MAX8BUTTONS // spart Speicher, da nur 8 Taster benötigt werden (saves RAM)
#include <MobaTools.h>
// Pindefinitions - change to your needs
//----------Motor 1-------------------------------
const byte dirPin1       = 5;
const byte stepPin1      = 4;
const byte enaPin1       = 6;
//----------Motor 2-------------------------------
const byte dirPin2       = 9;
const byte stepPin2      = 8;
const byte enaPin2       = 10;
//----------Motor 3-------------------------------
const byte dirPin3       = 44;
const byte stepPin3      = 43;
const byte enaPin3       = 45;
//----------Taster--------------------------------
const byte button1Pin   = A1; //---Motor1 links---
const byte button2Pin   = A2; //---Motor1 rechts--
const byte button3Pin   = A3; //---Motor2 links---
const byte button4Pin   = A4; //---Motor2 rechts--
const byte button5Pin   = A5; //---Motor3 links---
const byte button6Pin   = A6; //---Motor3 rechts--
const byte button7Pin   = A7; //---Fräsen Start Bedienteil---
const byte button8Pin   = A8; //---Fräsen Start Station------
//--------------Taste zum Entsperren, wenn Stopp durch fahren==0
const byte entsperrtaste = A9; // Taste die nicht im MoToButton integriert ist
//----------Tempo_Poti---------------------------------------------------------------
const byte potPin       = A0;   // Poti muss ein analoger Eingang sein
const int STEPS_REVOLUTION = 1600;
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit01 = 1000;
//--------Fahrdaten------------------------------------------------------------------
byte motor = 0;               // Achsenauswahl 1-2-3 ist X-Y-Z
byte fahren = 1;              // Motoren bewegen
byte richtung = 0;            // Richtung der Bewegung 1 oder 2
int tempo1 = 0;               // Tempo für Handsteuerung, wird vom Poti eingestellt
int tempo2 = 0;               // Tempo zum Fräsen
int tempo = 0;                // Wird vom Programm zur übergabe benutzt
float mm = 0;
float multiplikator = 25;
float teiler = 10000;
long schritte = 0;   // Schritte die der Motor fahren soll
//-----------------------------------------------------------------------------------
//Stepper einrichten ( 1600 Schritte / Umdrehung - 1/4 Microstep )
MoToStepper myStepperX( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
MoToStepper myStepperY( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
MoToStepper myStepperZ( STEPS_REVOLUTION, STEPDIR );  // 1600 Steps/ Umdrehung
// Taster einrichten
// Den Tasternamen die Indizes 0...7 zuordnen
enum { Button1 = 0, Button2, Button3, Button4, Button5, Button6, Button7, Button8 };
// muss als byte definiert sein, damit ein enfaches sizeof funktioniert
const byte buttonPins[] = { button1Pin, button2Pin, button3Pin, button4Pin, button5Pin, button6Pin, button7Pin, button8Pin};
MoToButtons button( buttonPins, sizeof(buttonPins), 20, 500 );

MoToTimebase speedIntervall;    // Zeitinterval zum Auslesen des Speedpotentiometers
// the speed pot ist read only every 'speedintervall' ms

int vspeed = 0;                 //Steppergeschwindigkeit in U/min*10
//==============================================================================================================
void setup()
{
  lcd.begin();
  lcd.backlight();
  Serial.begin(9600);
  pinMode(entsperrtaste, INPUT_PULLUP); // Eingang für Entsaperrtaste
  //-----------------------------Motor 1----------------------------------------------------
  myStepperX.attach( stepPin1, dirPin1 );
  myStepperX.attachEnable( enaPin1, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperX.setSpeed( 200 );
  myStepperX.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  speedIntervall.setBasetime( 100 );                  // 100ms Tickerzeit
  //------------------------------Motor 2-----------------------------------------------------
  myStepperY.attach( stepPin2, dirPin2 );
  myStepperY.attachEnable( enaPin2, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperY.setSpeed( 200 );
  myStepperY.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  //-----------------------------Motor 3------------------------------------------------------
  myStepperZ.attach( stepPin3, dirPin3 );
  myStepperZ.attachEnable( enaPin3, 10, LOW );        // Enable Pin aktivieren ( LOW=aktiv )
  myStepperZ.setSpeed( 200 );
  myStepperZ.setRampLen( 100 );                       // Rampenlänge 100 Steps bei 20U/min
  //------------------------------------------------------------------------------------------
  //----------CD_Kartenleser aktivieren-------------------------------------------------------
  pinMode(SS, OUTPUT);
  Serial.begin(9600);
  while (!Serial)
    Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelectPin)) // Ist SD Karte nicht ansprechbar?
  {
    Serial.println("Initialisierung fehlgeschlagen!");
    lcd.setCursor (0, 0);
    lcd.print(F("!! Karten_Fehler !!"));
    while (1); // Wenn Karte nicht ansprechbar, ist hier Programm Ende !!!
  }
  lcd.setCursor (0, 1);
  lcd.print(F("                   "));
  lcd.setCursor (0, 1);
  lcd.print(F(" Karte ist bereit! "));
  //-----------------------------------------------------------------------------------------
}
//=============================================================================================================
void loop() {
  lcd.setCursor (0, 0);
  lcd.print(F("Kreuztisch_Pr._V3.5 "));
  //------SD_Karte öffnen zum Lesen-------------------------------------------------------
  if (automatik == 1)
  {
    lcd.setCursor (0, 2);
    lcd.print(F("  Automatik l"AE"uft  "));
    lcd.setCursor (0, 3);
    lcd.print(F("                   "));
    lcd.setCursor (0, 1);
    lcd.print(F("                   "));
    myFile = SD.open(filename);
    if (myFile)
    {
      while (myFile.available())
      {
        if (fahren == 1)
        {
          leseZeile();
          ausgabeZeile();
          teileZeile();
          ausgabeWerte();
        }
        else {
          // ---------------Ist Taste Weiter gedrückt??---------------------------------
          if (digitalRead(entsperrtaste) == 0)
          {
            fahren = 1;
            lcd.setCursor (0, 2);
            lcd.print(F("    Weiterfahren   "));
          }
        }
      }
      // schließe die Datei:
      myFile.close();
      //Serial.println(F(" geschlossen!"));
      automatik = 0;
      lcd.setCursor (0, 2);
      lcd.print (F("                    "));
      lcd.setCursor (0, 2);
      lcd.print (F(" Karte abgearbeitet "));
    }
    else
    {
      // Wenn die Datei nicht geöffnet wurde, drucke einen Fehler :
      //Serial.print("Fehler beim öffnen von ");
      //Serial.println(filename);
    }
  }
  //--------------------------------------------------------------------------------------
  button.processButtons();          // Taster einlesen und bearbeiten

  // Speed alle 100ms neu einlesen und setzen
  if ( speedIntervall.tick() ) {
    // wird alle 100ms aufgerufen ( Tickerzeit = 100ms im setup() )
    vspeed = map((analogRead(potPin)), 0, 1023, 20, 1800);  //Poti mappen auf 2 ... 180 Umdr/Min
    //min speed =2 and max speed =180 rpm
    tempo1 = vspeed;
    tempo = tempo1;
    if (millis() - Sekundenablauf01 >= Pausezeit01)  // 1000msec abgelaufen?
    {
      lcd.setCursor (0, 3);
      lcd.print (F("  VSPEED = "));
      lcd.setCursor (12, 3);
      lcd.print (F("     "));
      lcd.setCursor (12, 3);
      lcd.print (vspeed);
      Sekundenablauf01 = millis();
    }
    myStepperX.setSpeed( tempo );
    myStepperY.setSpeed( tempo );
    myStepperZ.setSpeed( tempo );
  }
  //----------------------------------------------------------------
  // Drehen Motor1 rechtsrum
  if (button.pressed(Button1) ) {
    //Taster1 gedrückt
    tempo = tempo1;
    myStepperX.rotate( 1 );          // Stepper1 dreht vorwärts
  }
  if ( button.released(Button1) ) {
    //Taster1 losgelassen
    myStepperX.rotate(0);             // Stepper1 stoppt
  }

  //Drehen Motor1 linksrum
  if (button.pressed(Button2) ) {
    //Taster2 gedrückt
    tempo = tempo1;
    myStepperX.rotate( -1 );         // Stepper1 dreht rückwärts
  }
  if ( button.released(Button2) ) {
    //Taster2 losgelassen
    myStepperX.rotate(0);    // Stepper1 stoppt
  }
  //-----------------------------------------------------------------
  // Drehen Motor2 rechtsrum
  if (button.pressed(Button3) ) {
    //Taster3 gedrückt
    tempo = tempo1;
    myStepperY.rotate( 1 );          // Stepper2 dreht vorwärts
  }
  if ( button.released(Button3) ) {
    //Taster3 losgelassen
    myStepperY.rotate(0);            // Stepper2 stoppt
  }

  //Drehen Motor2 linksrum
  if (button.pressed(Button4) ) {
    //Taster4 gedrückt
    tempo = tempo1;
    myStepperY.rotate( -1 );         // Stepper2 dreht rückwärts
  }
  if ( button.released(Button4) ) {
    //Taster4 losgelassen
    myStepperY.rotate(0);            // Stepper2 stoppt
  }
  //-----------------------------------------------------------------
  // Drehen Motor3 rechtsrum
  if (button.pressed(Button5) ) {
    //Taster5 gedrückt
    tempo = tempo1;
    myStepperZ.rotate( 1 );          // Stepper3 dreht vorwärts
  }
  if ( button.released(Button5) ) {
    //Taster5 losgelassen
    myStepperZ.rotate(0);             // Stepper3 stoppt
  }

  //Drehen Motor3 linksrum
  if (button.pressed(Button6) ) {
    //Taster6 gedrückt
    tempo = tempo1;
    myStepperZ.rotate( -1 );         // Stepper3 dreht rückwärts
  }
  if ( button.released(Button6) ) {
    //Taster6 losgelassen
    myStepperZ.rotate(0);            // Stepper3 stoppt
  }
  if (button.pressed(Button7) ) {
    //Taster7 gedrückt
    automatik = 1;                  // Automatik von SD Karte starten
  }
  if ( button.released(Button7) ) {
    //Taster7 losgelassen
  }
  if (button.pressed(Button8) ) {
    //Taster8 gedrückt
    automatik = 1;                  // Automatik von SD Karte starten
  }
  if ( button.released(Button8) ) {
    //Taster8 losgelassen
  }
  //-----------------------------------------------------------------

}
//=========================================================================================
void leseZeile()
{
  char myChar = '\0';
  static byte bufferPosition = 0;
  if (bufferPosition == 0) memset(zeilenBuffer, '\0', sizeof(zeilenBuffer));
  while (myFile.available() && myChar != '\n')
  {
    myChar = myFile.read();
    if (isPrintable(myChar))
    {
      zeilenBuffer[bufferPosition] = myChar;
      bufferPosition++;
    }
  }
  // Hier ist ZeilenEnde / DateiEnde
  bufferPosition = 0;
}
//=========================================================================================
void ausgabeZeile()
{
  Serial.print(F("eingelesene Zeile ist: "));
  Serial.println(zeilenBuffer);
}
//=========================================================================================
void teileZeile()
{
  // zeilenbuffer in auswerteBuffer umschreiben
  memset(auswerteBuffer, '\0', sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]));
  strcpy (auswerteBuffer[0], strtok(zeilenBuffer, ";"));
  strcpy (auswerteBuffer[1], strtok(NULL, ";"));
  strcpy (auswerteBuffer[2], strtok(NULL, ";"));
  strcpy (auswerteBuffer[3], strtok(NULL, ";"));
  strcpy (auswerteBuffer[4], strtok(NULL, ";"));
  strcpy (auswerteBuffer[5], strtok(NULL, ";"));
  //Serial.println(F("Puffer geteilt!"));
}
//========================================================================================
void ausgabeWerte()
{
  for (byte b = 0; b < sizeof(auswerteBuffer) / sizeof(auswerteBuffer[0]); b++)
  {
    //Serial.print(F("Wert "));
    //Serial.print(b);
    //Serial.print(F(" ist: "));
    //Serial.println(auswerteBuffer[b]);
    motor = atoi(auswerteBuffer[0]);
    fahren = atoi(auswerteBuffer[1]);
    richtung = atoi(auswerteBuffer[2]);
    tempo = atoi(auswerteBuffer[3]);
    myStepperX.setSpeed(tempo);
    myStepperY.setSpeed(tempo);
    myStepperZ.setSpeed(tempo);
    mm = atoi(auswerteBuffer[5]);
    schritte = (mm *10000) / 25;
    if (b == 0)
    {
      lcd.setCursor (0, 3);
      lcd.print(F("                    "));
      lcd.setCursor (0, 0);
      lcd.print(F("                    "));
      //----Display Motor1-------------
      if (motor == 1)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot X");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          lcd.print(F(RECHTS));
        }
        if (richtung == 2)
        {
          lcd.print(F(LINKS));
        }
      }
      //----Display Motor2-------------
      if (motor == 2)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot Y");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          lcd.print(F("v"));
        }
        if (richtung == 2)
        {
          lcd.print(F(OBEN));
        }
      }
      //----Display Motor3-------------
      if (motor == 3)
      {
        lcd.setCursor (1, 0);
        lcd.print("Mot Z");
        lcd.print (F(" "));
        if (richtung == 1)
        {
          lcd.print(F(OBEN));
        }
        if (richtung == 2)
        {
          lcd.print(F("v"));
        }
      }
      lcd.print (F(" "));
      lcd.print(mm);
      lcd.print("mm");
    }
    //-------------Motor 1 fahren------
    if (motor == 1)
    {
      if (richtung == 1)
      {
        myStepperX.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperX.doSteps(-schritte);
      }
      motor = 0;
      richtung = 0;
      schritte = 0;
    }
    //-------------Motor 2 fahren------
    if (motor == 2)
    {
      if (richtung == 1)
      {
        myStepperY.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperY.doSteps(-schritte);
      }
      motor = 0;
      richtung = 0;
      schritte = 0;
    }
    //------------Motor 3 fahren-------
    if (motor == 3)
    {
      if (richtung == 1)
      {
        myStepperZ.doSteps(schritte);
      }
      if (richtung == 2)
      {
        myStepperZ.doSteps(-schritte);
      }
      if (fahren == 0)
      {
        lcd.setCursor (0, 2);
        lcd.print(F(" --- BOHRSTOPP --- "));
      }

      motor = 0;
      richtung = 0;
      schritte = 0;
    }
  }//---------fahren ende-----------------
  while (myStepperX.moving() > 0) {}
  while (myStepperY.moving() > 0) {}
  while (myStepperZ.moving() > 0) {}
}
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Und, hast du´s schon getestet? Also ich kann da jetzt nicht falsches entdecken. Ich habe in der SD Karte 30mm bis 320mm getestet. Wird richtig angezeigt und richtig gefahren. mit 330mm bin ich in den Enschalter gefahren. In der Breite muss ich meine Endschalter Begrenzung noch ein wenig anpassen, über 80mm breite laufe ich in die Umgrenzung. Und bei 330 Länge komm ich auch schon raus in den Endschalter. Aber das ist OK. Nur dass ich bei 80mm Breite schon ins Ende Fahre, wo wir ja 100mm Platz haben, das ist bischen eng. :evil:

Franz
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von e69-fan »

Hallo Franz,

ich suche verzweifelt eine Beschreibung für den Treiber DM556 und hier speziell die Funktion der roten LED.

Ein Treiber funktioniert nicht mehr.
Bein Einschalten leuchtet nur die grüne LED - Motor lässt sich nicht fahren.
Beim Ausschalten leuchtet die rote LED kurz auf.

:agt:

Servus - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Kreuztisch mit Schrittmotoren bestücken

Beitrag von Admin »

Wenn der Enable (Ena) in der Luft hängt, dann leuchtet die Rote nur kurz auf, beim Einschalten wie auch beim Ausschalten. Der ist aber nicht lebenswichtig. Da muss mehr fehlen als nur der Enable. Hörst du am Motor "laufgeräusche" wenn er eigentlich laufen sollte, es aber nicht tut? Dann kann es sein, dass du Enable mit Puls vertauscht hast. Der Enable muss vom Arduino Pin Plus, also VCC 5 Volt bekommen, wenn der Motor nicht laufen soll. Also wenn der Enable im Stand nicht Plus ist, sondern Minus, dann ist er am falschen Pin, oder gar nicht angeschlossen. Aber wenn er in der Luft hängt, läuft der Motor trotzdem.

Franz

PS: Nochmal. Wenn der Punkt "Puls" mit dem Punkt "Enable" vertauscht ist, dann hört sich der Motor an, als ob er laufen würde. Der Punkt "Puls" heißt ja deshalb so, weil der dauernd Impulse gibt im Tackt wie die Wiklungen wechelweise gesteuert werden sollen. Wenn dieser Arduino Ausgang "Puls" jetzt aber dem Enable des Treibers dauernd impulse gibt, wird der Motor dauernd aktiviert / deaktiviert / aktiviert / ..... Da das der Tackt ist in dem die Wicklungen des Motors beim echten Lauf abwechselnd bestromt werden, hört sich das wirklich an, als ob der Motor läuft, nur etwas leiser. Da hat mich der Motor wirklich mal verarscht. Ich habe das Zeug in Betrieb genommen, habe aber nicht gleich auf den Motor geschaut, und dachte durch das Motorgeräusch, der Motor läuft. Also ich den Motor dann angeschaut habe, musste ich feststellen , dass sich der überhaupt nicht rührt. :O: Und es ist nun mal schnell passiert, dass man den Stecker mit den drei Anschlüssen falsch rum am Arduino ansteckt. Der "Dir" Punkt ist der mittlere Anschluss, der ist also immer richtig dran, und die "Puls" und "Enable" sind dann eben vertauscht. Ist kein Beinbruch, da geht nichts kaputt, aber der Motor macht eben keinen Mux. :sad: Nr richtig schöne Laufgeräusche. :eek:
Antworten

Zurück zu „Fertige Projekte Vorstellen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste