- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 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
    57
    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?

  2. #2
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    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)

  4. #4
    HaWe
    Gast
    Zitat Zitat von inka Beitrag anzeigen
    das ist jetzt der code, der sich auch kompilieren lässt:
    Code:
    int speed;
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop(){
      for (int speed=0; speed <=255; speed++){
        Motor_1_Backw(speed);
    //    delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Motor_1_Backw(speed);
    //    delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Motor_1_Forw(speed);
    //    delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Motor_1_Forw(speed);
    //    delay(10);
      }
    }
    
    
    void Motor_1_Forw(char velo){
    int  Motor1_In1 = 0;
    int    Motor1_Pwm = velo;
    }
    
    
    void Motor_1_Backw(char velo){
    int  Motor1_In1 = 1;
    int  Motor1_Pwm = 255 - velo;
    }
    aber nach dem hochladen passiert nichts...

    ich muss mir das noch genauer anschauen...

    jetzt hast du ja immer noch das bescheuerte 255-velo drin, was soll das?
    und wo hast du definiert, was in1 und in2 für Pin-Nummern haben?
    Und dass die pinMode Output haben??

    Außerdem habe ich oben andere Funktionen hingeschrieben! (edit, c+p verrutscht)

    void Motor_1_Forw(char velo)
    {
    analogWrite(IN1, velo);
    digitalWrite(IN2, HIGH);
    }


    void Motor_1_Backw(char velo)
    {
    analogWrite(IN1, velo);
    digitalWrite(IN2, LOW);
    }
    Geändert von HaWe (21.02.2018 um 08:49 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Zitat Zitat von HaWe Beitrag anzeigen
    jetzt hast du ja immer noch das bescheuerte 255-velo drin, was soll das?
    Was daran ist bescheuert?
    (255-velo) ist die Inversion von (velo).
    Das eine nimmt man bei einer positiv Logik das andere bei einer negativ Logik.
    Bei witzkatz funktioniert es.
    Ob es mit dieser Hardware funktioniert oder das Ergebniss invertiert ist, muß sich erst noch zeigen.
    Nur "pauschal" bescheuert ist es halt nicht.

  6. #6
    HaWe
    Gast
    üblich ist bei L293D, L298N, BTS7960 und IRF3205/MC33886 das pwm für Geschwindigkeit, unabhängig von der Richtung.

    der 2. Pin bei diesen H-Brücken (bei 2-pin Logik) wird für die eine Richtung auf HIGH, für die andere auf LOW gesetzt.

    In jedem Fall müssen aber in setup() die GPIO-Pins definiert und auf OUTPUT gesetzt werden!

  7. #7
    HaWe
    Gast
    In jedem Fall müssen aber in setup() die GPIO-Pins definiert und auf OUTPUT gesetzt werden!
    z.B.

    #define in1 3
    #define in2 4

    //...

    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);

    @witkatz:
    ich glaube dein Beispiel mit dem 255-velo ist extrem verwirrend ud führt hier auch (bei L298-Logik) auch nicht weiter.

  8. #8
    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
    @Inkawie vertraut bist Du denn mir dem allgemeinen Aufbau eines ArduinoSktechs?
    Zitat Zitat von i_make_it Beitrag anzeigen

    Code:
    konstantenund Variablen Deklaration
    
    voidsetup()
    {
    Eingänge,Ausgänge konfigurieren
    Initialationenund Code der einmalig beim Controller Power On ausgeführt werdensoll. 
    }
    
    voidloop()
    {
    Hauptschleife die immer wieder durchlaufen wird 
    }
    
    void<funktionname>()
    {
    Funktionenund Interrupt Service Routinen die aus der Hauptschleife oder durchIRQ's aufgerufen werden
    }
    Istdieses allgemeine Schema bekannt oder kopierst Du eher bestehendenCode zusammen und variierst ihn dann für Deine Bedürfnisse?

    ja,dieses allgemeine schema ist mir bekannt. Und ich richte mich im allgemeinenn auch danach. Trotzdem kopiere ich mir schon mal ein paar codeblöcke zusammen und versuche sie mir zurecht zu schnitzen...




    Zitat Zitat von witkatz Beitrag anzeigen
    Ichhätte vielleicht etwas Erklärung dabei schreiben sollen, sorry.Also du wählt bspsw. IN1 für Richtung und IN2 für speed. Dannmusst du auch IN1 an einen Digitalausgang und IN2 an den PWM Ausganganschließen.
    Zitat Zitat von witkatz Beitrag anzeigen
    WennIN1 == 0 dann geht der PWM Wert proportional zu velo
    WennIN1 == 1 dann (Richtungsumkehr) geht der PWM Wert umgekehrtproportional zu velo, von 100% auf 0.
    Beimir ist der PWM Wert vom typ char, daher diese 255 - velo fürRichtungsumkehr. Bei int oder anderen Wertebereichen muss man dieFunktion entspr. anpassen.
    dieseerklärung hätte mir genügt, danke...
    gruß inka

  9. #9
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    553
    Blog-Einträge
    17
    @inka: Welchen Treiber hast du denn jetzt tatsächlich da dran?
    Nur um sicher zu gehen dass ich das noch richtig verstehe. Es geht immer noch um Anteuerung über IN1 und IN2 für einfache Brückentreiber wie L9110 oder den MX1508 vom Eröffnungspost, die allein über IN1 und IN2 (ohne En!) angesteuert werden. Oder?
    Weil für den echten L298N oder dem vom RoboHolIc aufgeführten TB6612FNG gilt das so nicht. Da darfst du das PWM nicht negieren.

    - - - Aktualisiert - - -

    Deswegen finde ich die Beschreibung des Teils aus dem Eröffnungspost auch zum kotzen. L298N wird nur als buzzword benutzt um mehr Interesse zu wecken. Tatsächlich haben die Teile damit nichts zu tun und Versuche mit Ansteuerung und Codebeispielen für L298 führen in eine Sackgasse.

    - - - Aktualisiert - - -

    Sorry, wenn mein 8-bit Beispiel nicht so ganz in die Arduino Umgebung gepasst hat, aber ich habe aus meiner "bescheidenen" 8-bit Welt gepostet was ich habe. @inka: wenn du den Brückentreiber an Arduino am laufen hast, kannst du vielleicht dein funktionierendes Arduino Codesnippet für die Nachwelt präsentieren, um den Thread rund zu machen. Von mir aus kannst du auch einen Sketch daraus drehen
    Geändert von witkatz (20.02.2018 um 19:43 Uhr)

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    So,

    anhand des Sketches vermute ich mal daß das auf einem Due oder Mega 2560 läuft.
    Auf einem Uno oder Nano funktioniert das nicht mit PWM und diesen PIN's.
    Code:
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Code:
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    - - - Aktualisiert - - -

    Dann kann der Motor nur mit 100% laufen,
    Code:
    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();
    }
    Für PWM sollte es aber ein
    Code:
    analogWrite(pin, value)
    sein.
    https://www.arduino.cc/en/Tutorial/PWM

    https://www.arduino.cc/reference/en/...o/analogwrite/

    - - - Aktualisiert - - -

    So, das ist jetzt mit der heißen Nadel gestrickt.
    Habe hier keine Hardware auf dem ich es laufen lassen kann.
    Lässt sich aber fehlerfrei comilieren.
    Code:
    /* 
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    */
    
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    int speed;
    
    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()
    {
      for (int speed=0; speed <=255; speed++){
        Forward(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Forward(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Backward(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Backward(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Rotateleft(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Rotateleft(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Rotateright(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Rotateright(speed);
        delay(10);
      }
    }
    
    void Forward(int speed){
      analogWrite(IN1, speed);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
      analogWrite(IN3, speed);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    void Backward(int speed){
      digitalWrite(IN1, LOW);
      analogWrite(IN2, speed);
      Serial.print("Motor 1 Backward");
      Serial.println();
      digitalWrite(IN3, LOW);
      analogWrite(IN4, speed);
      Serial.println("Motor 2 Backward");
      Serial.println();
    }
    
    void Rotateleft(int speed){
      digitalWrite(IN1, LOW);
      analogWrite(IN2, speed);
      Serial.print("Motor 1 Backward");
      Serial.println();
      analogWrite(IN3, speed);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    void Rotateright(int speed){
      analogWrite(IN1, speed);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
      digitalWrite(IN3, LOW);
      analogWrite(IN4, speed);
      Serial.println("Motor 2 Backward");
      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();
    }
    Wenn ich keinen Fehler drin habe, müssten sich die Räder einmal vorwärts drehen.
    Und zwar von Stillstand bis zur Maximaldrehzahl und wieder bis zum Stillstand.
    Dann einmal rückwärts.
    Einmal Gegenläufig für drehen auf der Stelle, linksrum und einmal rechtsrum.
    Geändert von i_make_it (21.02.2018 um 06:41 Uhr)

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ä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
  •  

Labornetzteil AliExpress