- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 566

Thema: outdoor I

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von inka Beitrag anzeigen
    in beiden videos sieht und hört man, dass die Stepper beim einschalten hin und her rattern, bevor sie das links- rechts- drehen starten...

    hier und hier
    Das ist ziemlich schlecht, wenn das schon bei unbelastetem Motor auftritt. Mach mal ein Rad ran, und sieh wie es sich entwickelt.

    Die Logik-Signale an den Anschlüssen sind doch nun wirklich nicht kompliziert:

    ENABLE (erlauben/einschalten) hat einen Überstrich, ist also active Low. Ein Low schaltet den Chip also an. SLEEP hat auch einen Überstrich, bei Low legt sich der Chip schlafen und schaltet sich auch intern das meisste ab. RESET ist ebenfalls active Low, muß also auf High damit der Chip nicht im Reset hängt.

    Also muß also ENABLE auf Low und SLEEP und RESET auf High, dann arbeitet der Chip. Und im ersten Schritt legt man die Abschlüsse mit Pull-Ups oder Pull-Downs fest auf den richtigen Pegel. Ein Pulse an Step lässt dann den Motor einen Schritt machen. Wenn erstmal alles funktioniert, kann man sich ums Stromsparen oder andere Sachen kümmern.


    Zum Testen würde ich einen Taster an den Prozessor schalten und ein kleines kleines Programm schreiben: Taster entprellen und für jeden Druck einen Puls ausgeben. Je nach dem Pegel von DIR muß der Motor einen Schritt nach links oder rechts machen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    nochmal zum Überbrücken SLEEP und RESET:

    Der SLEEP - Eingang am Treiber kann von außerhalb unbeschaltet bleiben, weil der mit einem 5k-Widerstand gegen VDD verbunden sein soll. Wenn man Sleep also nicht braucht, muss der nicht zusätzlich beschaltet werden. Wird RESET auch nicht benötigt, wird der gerne einfach mit dem SLEEP verbunden, somit liegt der RESET dann auch über 5kOhm an VDD.



    MfG

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Klebwax Beitrag anzeigen
    Das ist ziemlich schlecht, wenn das schon bei unbelastetem Motor auftritt. Mach mal ein Rad ran, und sieh wie es sich entwickelt.
    es rattert weniger, weil eine grössere masse bewegt werden muss...

    Zitat Zitat von Klebwax Beitrag anzeigen
    Die Logik-Signale an den Anschlüssen sind doch nun wirklich nicht kompliziert:
    stimmt. Ich habe auch inzwischen keine probleme mit dem eigentlichen code. Das problem liegt im einschalten. Seltsamer weise ratterts nur wenn vier Stepper gleichzeitig eingeschaltet werden, beim einzelnen passiert es nicht...
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Das letztere war ein Gedanke, den ich auch schon hatte.
    Prüfe mal, ob beim Einschalten, aller 4 Motoren gleichzeitig, die Spannung einbricht! Bei Batterien geht nur runter, sinkt evtl. auf 5V ab oder was ähnliches. Beim Netzteil könnte es sein, dass die Spannung bei Überlast kurzzeitig ganz abgeschaltet wird und dann zu diesen Aussetzern führt. Wenn ich es richtig gelesen habe, brauchen die Stepper-Treiber am Eingang wenigstens 8V.

    Da ist es: Load Supply Voltage Range VBB Operating 8 – 35 V


    Kannst ja mal an allen Treibern das Trimpoti (frühere Strombegrenzung = weniger Strom für die Motorspulen) verstellen, dass die Stepper noch anlaufen und nicht stehen bleiben. Bei jedem einzeln einstellen (nicht alle zusammen an der Spannungsquelle hängen lassen). Dann noch mal alle zusammen ausprobieren. Funktioniert es dann, liefert Deine Spannungsquelle nicht ausreichend Strom, bei wenigstens 8V.




    MfG
    Geändert von Moppi (02.11.2019 um 09:35 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    habe ich jetzt gemessen, allerdings ist beim ausgeschalteten steckernetzteil ja alles stromlos. Beim einschalten habe ich erstmal (ganz kurz nur) so um 3.5V gemessen, bevor es auf 12V ging...

    Ich muss jetzt wirklich auf den akku warten, die chinesen zieren sich aber irgendwie. Zwei verkäufer haben schon einen rückzieher gemacht, die kapazität von 10.000 mAh beim preis von ca. 15€ scheint nicht so ganz easy zu liefern zu sein...

    Habe jetzt ein akku über Amazon bestellt, natürlich mehr als doppelt so teuer. Mal sehen ob und wann er kommt. Und ob er dann auch in die knie geht...

    vielleicht die motoren mit einer kleinen verzögerung schalten?
    gruß inka

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Nutzt Dir später nicht viel. Die müssen auch alle zur selben Zeit laufen können. Wenn das Teil mal was transportieren soll, arbeiten die sich richtig warm. Dafür brauchen die Motoren Energie.



    MfG

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    das hier entspricht in etwa den daten des akkus, auf den ich warte:


    • Spannung: 12V
    • Kapazität: 15Ah
    • Energie: 180Wh


    kann man daraus auf den strom schliessen den die Stepper ziehen können?

    Du sprichst von "laufen"... - ist der stromverbrauch beim laufen und an-laufen gleich?
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Wenn die ausgelastet sind, können die ständig MAX-Strom benötigen, der wird ja vom Treiber begrenzt.
    Daher kann der im Betrieb genau so hoch sein, wie beim ersten Step.
    Du kannst den Max-Strom am Treiber mit dem Trimpoti einstellen.
    Beim Anfahren dürfte der größte Strom fließen.

    Müsste man mal messen, wenn das Fahrzeug fährt, was für ein Strom durchschnittlich insgesamt fließt (Strommessgerät).
    Sind vielleicht auch maximal nur 6 bis 8A. Pro Treiber sind es max. 1.5 bis 2A, dann mit Kühlung, dass der Treiber nicht
    wegschaltet, falls er thermisch überlastet wird.



    MfG

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    der kleinere akku ist da, also kann ich weiter experimentieren. Bei diesem
    Code:
    #include <AccelStepper.h>
    #include <Wire.h>
    #include <IRremoteInt.h>
    #include <ir_Lego_PF_BitStreamEncoder.h>
    #include <IRremote.h>
    #include <Bounce2.h>
    
    
    uint8_t RECV_PIN = 13; //13
    uint8_t taste = 0;
    uint8_t zaehler = 0;
    
    uint8_t idx;
    
    #define PIN2RESET 10
    
    
    
    #define dirPin_VL 2
    #define stepPin_VL 3
    #define dirPin_HL 4
    #define stepPin_HL 5
    #define dirPin_VR 6
    #define stepPin_VR 7
    #define dirPin_HR 8
    #define stepPin_HR 9
    
    #define enbl_VL 40
    #define enbl_HL 42
    #define enbl_VR 41
    #define enbl_HR 43
    
    IRrecv irrecv(RECV_PIN);
    
    decode_results results;
    
    Bounce debouncer = Bounce();
    
    enum stepper_e
    { stepper_VL, stepper_HL, stepper_VR, stepper_HR, stepper_MAX };
    
    
    AccelStepper stepper[stepper_MAX]
    {
      AccelStepper(1, stepPin_VL, dirPin_VL),
      AccelStepper(1, stepPin_HL, dirPin_HL),
      AccelStepper(1, stepPin_VR, dirPin_VR),
      AccelStepper(1, stepPin_HR, dirPin_HR)
    };
    
    
    void setup()
    {
      Serial1.begin(115200);
      Serial.begin(115200);
    
      Serial.println("code----//home/georg/Arduino/outdoor_robo/stepper/test_vier_stepper/mit_lib/infra_rot_pin_13/remote_vier_stepper_switch_1_enbl");
    
      //pinMode(RECV_PIN, INPUT_PULLUP);
    
      pinMode(PIN2RESET, INPUT);
    
      debouncer.attach(RECV_PIN);
      debouncer.interval(5); // interval in ms
    
      irrecv.enableIRIn(); // Start the receiver
    
      for (idx = stepper_VL; idx < stepper_MAX; idx++)
      {
        stepper[idx].setMaxSpeed(1000);
        stepper[idx].setSpeed(800);
        stepper[idx].setAcceleration(100);
      }
    
    
      digitalWrite(enbl_VL, HIGH);
      digitalWrite(enbl_HL, HIGH);
      digitalWrite(enbl_VR, HIGH);
      digitalWrite(enbl_HR, HIGH);
    
      digitalWrite(PIN2RESET, HIGH);
    }
    
    void loop()
    {
    
      // Update the Bounce instance :
      debouncer.update();
    
      // Get the updated value :
      zaehler = debouncer.read();
    
      if (zaehler == 1)
      {
        zaehler = 0;
        if (irrecv.decode(&results))
        {
          taste = results.value;
          Serial.println(taste);
          //      delay(1000);
          irrecv.resume(); // Receive the next value
        }
        //    taste = 0;
        tasten_abfrage();
        //vorwaerts();
    
        fahrt_ausfuehren();
      }
    }
    
    
    /***********************************************************/
    
    void tasten_abfrage(void)
    {
      switch (taste)
      {
    
        case 151 ://taste 1 große FB
          {
            if (taste == 151 )
            {
              Serial.println("szenario_1");
              Serial1.println("szenario_1");
    
              //fahre szenario_1
    
              delay (1000);
    
              break;
            }
          }
    
        case 103://taste 2 große FB
          {
            if (taste == 103)
            {
              Serial.println("szenario_2");
              Serial1.println("szenario_2");
    
              //fahre szenario_2
    
              delay (1000);
    
              break;
            }
          }
    
        case 79://taste 3 große FB
          {
            if (taste == 79)
            {
              Serial.println("szenario_3");
              Serial1.println("szenario_3");
    
              //fahre szenario_3
    
              delay (1000);
    
              break;
            }
          }
    
    
        case 207://taste 4 große FB
          {
            if (taste == 207)
            {
              Serial.println("szenario_4");
              Serial1.println("szenario_4");
    
              //fahre szenario_4
    
              delay (1000);
    
              break;
            }
          }
    
    
        case 253://OK taste, motor stop
          {
            if (taste == 253)
            {
              alle_stepper_stop();
    
              break;
            }
          }
    
    
        case 61:// rotate rechts große FB
          {
            if (taste == 61)
            {
              rechts_drehen();
    
              break;
            }
          }
    
    
        case 221:// rotate links große FB
          {
            if (taste == 221)
            {
              links_drehen();
    
              break;
            }
    
          }
    
    
        case 157:// fahre vor große FB
          {
            if (taste == 157)
            {
              vorwaerts();
    
              break;
            }
          }
    
    
        case 87:// fahre rückwärts große FB
          {
            if (taste == 87)
            {
              rueckwaerts();
    
              break;
            }
          }
      }
    
    
    }
    
    
    /***********************************************************/
    void alle_stepper_stop(void)
    {
      for (idx = stepper_VL; idx < stepper_MAX; idx++)
      {
    
        stepper[idx].stop();
    
      }
    
      digitalWrite(enbl_VL, HIGH);
      digitalWrite(enbl_HL, HIGH);
      digitalWrite(enbl_VR, HIGH);
      digitalWrite(enbl_HR, HIGH);
      reboot();
    }
    
    /***********************************************************/
    void vorwaerts(void)
    {
    
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      for (idx = stepper_VL; idx < stepper_VR; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(-200);
      }
    
      for (idx = stepper_VR; idx < stepper_MAX; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(200);
      }
    }
    
    
    /**********************************************************/
    
    void rueckwaerts(void)
    {
    
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
    
      for (idx = stepper_VL; idx < stepper_VR; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(200);
      }
    
      for (idx = stepper_VR; idx < stepper_MAX; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(-200);
      }
    }
    
    /***********************************************************/
    void rechts_drehen(void)
    {
    
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      for (idx = stepper_VL; idx < stepper_VR; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(-200);
      }
    
      for (idx = stepper_VR; idx < stepper_MAX; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(-200);
      }
    }
    
    
    /**********************************************************/
    void links_drehen(void)
    {
    
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      for (idx = stepper_VL; idx < stepper_VR; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(200);
      }
    
      for (idx = stepper_VR; idx < stepper_MAX; idx++)
      {
        stepper[idx].runSpeed();
        stepper[idx].move(200);
      }
    }
    
    /***********************************************************/
    void reboot()
    {
      pinMode(PIN2RESET, OUTPUT);
      digitalWrite(PIN2RESET, LOW);
      delay(100);
    }
    /***********************************************************/
    
    boolean fahrt_fertig()
    {
    
      return        stepper[stepper_VL].isRunning() && stepper[stepper_HL].isRunning() && stepper[stepper_VR].isRunning()
                    && stepper[stepper_HR].isRunning();
    
    }
    
    /************************************************************/
    void fahrt_ausfuehren()
    {
      //  while ( ! fahrt_fertig() )
      {
        for (idx = stepper_VL; idx < stepper_MAX; idx++)
        {
          stepper[idx].run();
          // delay(1);
        }
      }
    }
    für eine fernbedienung, die ich im code mit bounce entprellt habe, stellte ich fest, dass bei einer "Vorwärts - STOP - Rückwärts" befehlsfolge die abgebrochene vorwärtsbewegung beim betätigen der rückwärtstaste erstmal zu ende ausgeführt wird bevor es rückwärts geht...
    Ich verstehe es nicht, weil ich den gleichen code bereits bei den anderen, kleinere steppern - ohne dieses phänomen - verwendet habe. Hier scheint es mir so zu sein, dass nach einem stop-befehl die variablen nicht in den zustand versetzt werden, der nach RESET bzw. neustart des codes vorhanden ist. Kann das an der motortreibern liegen?
    Ich konnte mir zunächst damit helfen, dass ich den arduino im STOP befehl mit diesem
    Code:
    #define PIN2RESET 10
    
    void setup()
    
    {
    
      Serial.begin(115200);
    
      Serial.println("code----//home/georg/Arduino/tools/reboot");
    
      pinMode(PIN2RESET, INPUT);
    
      delay(2000); //nur für test
    }
    
    void loop()
    
    {
    
      reboot();
      //  delay(2000); //nur für test
    }
    
    /***********************************************************/
    void reboot()
    {
      pinMode(PIN2RESET, OUTPUT);
      digitalWrite(PIN2RESET, LOW);
      delay(100);
    }
    resette. Es funktioniert, ganz wohl ich mir aber nicht dabei...
    gruß inka

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von inka Beitrag anzeigen
    Kann das an der motortreibern liegen?
    Wenn du damit die Hardware Treiber Module meinst, nein. Die haben keine Variablen, merken sich nichts. Beim enablen/disablen kann es höchtens einen Ruckler um +- 1/2 Schritt geben, also so rund um 1° Drehung.

    Es ist ein Software Problem.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Abstandsmessung Outdoor bis 3m
    Von robo218 im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 14.12.2017, 06:56
  2. outdoor spy robot
    Von jancrombach im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 14.08.2010, 13:09
  3. Outdoor Roboter
    Von OsramLED im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 07.08.2006, 09:34
  4. Outdoor-Robo
    Von RobotrixerP im Forum Mechanik
    Antworten: 3
    Letzter Beitrag: 16.04.2006, 18:38
  5. [ERLEDIGT] Outdoor - Navigation
    Von Quaio im Forum Sensoren / Sensorik
    Antworten: 37
    Letzter Beitrag: 21.04.2005, 12:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress