- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 41

Thema: Alles PWM oder wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Wie ist den der komplette Code bei dem,

    "Motor_1_Backw(200);"

    zu einem drehenden Motor geführt hat?

    Mein Code ist ein Sniplet, das einzufügen ist.
    das
    Code:
    int speed;
    halt ganz am Anfang um die Variable zu deklarieren.
    Code:
    den Abschnitt void setup()
    {
    bla bla
    }
    habe ich komplett weggelassen, da der ja bereits existieren muß wenn
    "Motor_1_Backw(200);"
    etwas bewirkt.
    (ich weis ja nicht wie, welche Pins definiert sind)

    In die Hauptschleife void loop()
    halt die For Schleifen um speed zu inkrementieren und zu dekrementieren.
    Und die beiden Funktionen unverändert von witzkatz.

    - - - Aktualisiert - - -

    Zitat Zitat von inka Beitrag anzeigen
    aber die pins haben dann trotzdem keine verbindung zur hardware, also zum motortreiber? Das ist das was ich nicht verstehe...
    Wenn sich der Motor dreht, was ist denn angeschlossen?

    Plus und Minus zu einer Stromquelle und zwei Anschlüsse zu einem Motor sind das mindeste damit überhaupt was passieren könnte.

    Ist außer diesen 4 Drähten sonst noch irgendeine Leitung irgendwo angeschlossen?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von i_make_it Beitrag anzeigen
    Wie ist den der komplette Code bei dem,

    "Motor_1_Backw(200);"

    zu einem drehenden Motor geführt hat?

    Wenn sich der Motor dreht, was ist denn angeschlossen?

    Plus und Minus zu einer Stromquelle und zwei Anschlüsse zu einem Motor sind das mindeste damit überhaupt was passieren könnte.

    Ist außer diesen 4 Drähten sonst noch irgendeine Leitung irgendwo angeschlossen?
    - das ist der code der zu einem drehendem motor geführt hat:
    Code:
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    
    
    int Motor_1_Pwm;
    int Motor_2_Pwm;
    //char velo;
    
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
    
      Serial.begin(9600);
      Serial.println("Enter number for control option:");
      Serial.println("1. FORWARD");
      Serial.println("2. REVERSE");
      Serial.println("3. STOP");
      Serial.println();
    }
    
    
    void loop()
    {
      char user_input;
    
    
      while (Serial.available())
      {
        user_input = Serial.read();
        /*
          digitalWrite(IN1, LOW); //OFF
          digitalWrite(IN2, LOW);
          digitalWrite(IN3, LOW);
          digitalWrite(IN4, LOW);
        */
        if (user_input == '1')
        {
          Forward();
        }
        else if (user_input == '2')
        {
          Reverse();
        }
        else if (user_input == '3')
        {
          Stop();
        }
        else
        {
          Serial.println("Invalid option entered.");
        }
      }
    }
    
    
    
    
    void Forward()
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
    
    
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    
    void Reverse()
    {
      Motor_1_Backw(50);
      Motor_2_Backw(50);
    
    
    
    
      //digitalWrite(IN1, LOW);
      //digitalWrite(IN2, HIGH);
    
    
      Serial.print("Motor 1 Reverse");
      Serial.println();
    
    
      //digitalWrite(IN3, LOW);
      //digitalWrite(IN4, HIGH);
    
    
      Serial.println("Motor 2 Reverse");
      Serial.println();
    }
    
    
    void Stop()
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Stop");
      Serial.println();
    
    
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Stop");
      Serial.println();
    
    
    }
    /*
    void Motor1Forw(char velo)
    {
        Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    void Motor1Backw(char velo)
    {
        Motor1_In1 = 1;
        Motor1_Pwm = 255 - velo;
    }
    */
    
    
    void Motor_1_Forw(int velo)
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      Motor_1_Pwm = velo;
    
    
    }
    void Motor_1_Backw(int velo)
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, velo);
      //Motor_1_Pwm = 255 - velo;
    }
    
    
    void Motor_2_Forw(int velo)
    {
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      Motor_2_Pwm = velo;
    
    
    }
    void Motor_2_Backw(int velo)
    {
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, velo);
      //Motor_2_Pwm = 255 - velo;
    }
    - angeschlossen ist +/-/ IN1/IN2/IN3/IN4/motor 1/motor 2
    gruß inka

  3. #3
    HaWe
    Gast
    ok, ich bin raus, macht was ihr wollt...

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    @Inka wie vertraut bist Du denn mir dem allgemeinen Aufbau eines Arduino Sktechs?

    Code:
    konstanten und Variablen Deklaration
    
    void setup()
    {
    Eingänge, Ausgänge konfigurieren
    Initialationen und Code der einmalig beim Controller Power On ausgeführt werden soll. 
    }
    
    void loop()
    {
    Hauptschleife  die immer wieder durchlaufen wird 
    }
    
    void <funktionname>()
    {
    Funktionen und Interrupt Service Routinen die aus der Hauptschleife oder durch IRQ's aufgerufen werden
    }
    Ist dieses allgemeine Schema bekannt oder kopierst Du eher bestehenden Code zusammen und variierst ihn dann für Deine Bedürfnisse?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich verwende fast ausschliesslich die TT-getriebemotoren, als verteiler meistens diese prototypeboards hier:
    Klicke auf die Grafik für eine größere Ansicht

Name:	prototype_board.jpg
Hits:	12
Größe:	98,6 KB
ID:	33285
    mit den steckbretteren habe ich eher schlechte erfahrungen, da weiss man nie, hat er nun kontakt oder nicht?
    gruß inka

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @i_make_it,
    danke für den code, die demo funktioniert gut...

    werde jetzt versuchen die hardware hier einzubauen und den code entsprechend anzupassen. Hiermit ging es nicht gut, zumindest nicht gut genug...
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Freut mich zu hören.
    Dadurch das da jetzt 4 Parameter sind, kannst Du falls der Gradeauslauf, wegen Toleranzen in den Motoren nicht stimmt (fährt eine leichte Kurve) eine Koriktur für Links oder Rechts einbauen.
    Oder noch besser, anhand von Odometrie einen Korrekturwert errechnen und alles in der Regelung verarbeiten.

    Auch kannst Du , bei entsprechenden Sensoren z.B. bei mehr als 2m Platz nach vorne auf Maximalgeschwindigkeit gehen und wenn es enger wird z.B. bei unter 1,5m auf 75% bei unter1m auf 50% und bei unter 0,5m auf 25% gehen. Und wenn er z.B schräg auf eine Wand fährt, braucht man nicht auf der Stelle zu drehen, sondern kann, wenn man z.B. Maximalgeschwindigkeit mit 230 definiert, das Rad auf dessen Seite ein Sensor den kürzerne Abstand zur Wand misst, die Geschwindigkeit erhöhen, so das er parallel zur Wand fährt.

    Sprich man kann das ganze Fahrverhalten später viel dynamischer und flüssiger gestalten als es bei dem üblichen Beispielcode ist, wo er immer anhält und dreht oder gar anhält, zurücksetzt und dann dreht.
    Aber erstmal ist es die Luft nach oben für viel später um sowas ohne komplette Neuprogrammierung einbauen zu können.

    Stopp, hatte ich in der Demo weggelassen, da man dazu ja einfach alle nur 4 Parameter auf 0 setzen muß.

    Falls es von Interesse ist, heute morgen habe ich die Schaltpläne für die Sensoren meines aktuellen Projektes hochgeladen.
    https://www.roboternetz.de/community...l=1#post642759
    Das hat jetzt 2 Jahre auf Eis gelegen, bis ich mir Weihnachten mal alle Schmierzettel angesehen habe und zumindest für die HW das meiste riengezeichnet habe.
    (Es fehlen noch die Sharp Sensoren für Abgründe und als Nahbereichs Distanzsensoren)

    PS da mein aktuelles Projet für meine Großneffen geplant war, ist das nicht so ambitioniert wie Dein Balancer.
    Bei mir soll der am Ende erst mal nur in alle Räume fahren und dort Helligkeit, Luftdruck, Luftfeuchte und Temperatur messen und mit einem Zeitstempel versehen, abspeichern. Das dann aber so ungefähr alle Stunde einmal. und wenn die Wohnungstür offensteht, darf er im Treppenhaus halt nicht die Treppe runterfahren sondern soll den Abgrund erkennen und wieder rein kommen.

    Übrigens bin ich selbst kein Fan von Shields, da man da oft nur dem folgen kann was sich der Shieldentwickler gedacht hat. und einem manschmal was verbaut wird.
    Für meine Arduino Nanos habe ich mir nur ein Breakout Board geholt und arbeite ansonsten viel mit Steckbrettern.

    Da ich in dem aktuellen Projekt 5 Interrupteingänge benötige, stören Shields auch, wenn ich mit attachedinterrupt() eine doch recht individuelle PIN Konfiguration einstelle.

    Wenn es geht, verpass Deinem Balancer doch mal vorne und hinten Stützräder, so das er nicht mehr als 10° kippen kann. Wenn er es dann schafft sich wiederholt auszubalancieren, dürfte die Regelung passen.
    Ggf. kann es aber auch sein, das Deine Motoren nicht die Reserven haben um genug Dynamik für die Regelung zu entwickeln.
    Ich habe auch 2 von den Sets hier liegen, bin aber noch nicht dazu gekommen damit zu basteln. Kann also nichts über deren Leistungsfähigkeit sagen.
    Geändert von i_make_it (22.02.2018 um 12:13 Uhr)

Ähnliche Themen

  1. 2 Atmegas verwenden oder doch alles in einem
    Von moritz31 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 12.03.2014, 17:02
  2. Alles Matrix, oder?
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 21.12.2012, 21:30
  3. Real Time Clock oder Uhrenquarz? Alles möglichst stromarm
    Von MelMan im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.06.2011, 17:01
  4. Was brauche ich alles
    Von Haveaniceday im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 02.08.2007, 12:07
  5. Ist in dem BAusatz alles drin, oder braucht man noch was ???
    Von michiE im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.03.2005, 16:10

Berechtigungen

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

LiFePO4 Speicher Test