- 3D-Druck Einstieg und Tipps         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 41

Thema: Alles PWM oder wie?

  1. #11
    HaWe
    Gast
    Anzeige

    Powerstation Test
    verstehe nicht was du meinst.
    du hast 2 Pins pro Motor, einer ist für die Richtung, der andere für die PWM.
    welcher wofür, weiß ich nicht, möglicherweise der erste für PWM, der 2. für die Richtung. Oder umgekehrt - frag ggf. beim Händler an.

    PS,
    und lass mal das seltsame
    255 - velo
    weg - das ist normalerweise Unsinn.
    velo alleine ist die PWM, für beide Richtungen.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    Du übergibst fest "200"?
    Dann kann aber auch nur der Wert verarbeitet werden.

    Schon mal Versucht einfach eine Geschwindigkeitsrampe zu erzeugen?
    0 bis max. Rückwärts und zurück zu 0 und bis max. Vorwärts und zurück zu 0.

    Bsp.:
    Code:
    int speed;
    
    void loop(){
      for (int speed=0; speed <=255; speed++){
        void Motor_1_Backw(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        void Motor_1_Backw(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        void Motor_1_Forw(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        void Motor_1_Forw(speed);
        delay(10);
      }
    }
    
    void Motor1Forw(char velo){
      Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    
    void Motor1Backw(char velo){
      Motor1_In1 = 1;
      Motor1_Pwm = 255 - velo;
    }
    Was macht er denn mit diesem Code?

    Wenn es zu langsam ist die "delay" rauswerfen.

  3. #13
    HaWe
    Gast
    Vorschlag:


    Code:
    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)

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    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...
    gruß inka

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    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?

  6. #16
    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)

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

  8. #18
    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!

  9. #19
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    53
    Beiträge
    540
    Blog-Einträge
    17
    Zitat Zitat von inka Beitrag anzeigen
    so habe ich versucht das umzusetzen:

    Code:
    int Motor_1_Pwm;
    .
    .
    .
    
    void Motor_1_Backw(char velo)
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      Motor_1_Pwm = 255 - velo;
    }
    Ich hätte vielleicht etwas Erklärung dabei schreiben sollen, sorry. Also du wählt bspsw. IN1 für Richtung und IN2 für speed. Dann musst du auch IN1 an einen Digitalausgang und IN2 an den PWM Ausgang anschließen.
    Wenn IN1 == 0 dann geht der PWM Wert proportional zu velo
    Wenn IN1 == 1 dann (Richtungsumkehr) geht der PWM Wert umgekehrt proportional zu velo, von 100% auf 0.
    Bei mir ist der PWM Wert vom typ char, daher diese 255 - velo für Richtungsumkehr. Bei int oder anderen Wertebereichen muss man die Funktion entspr. anpassen.

  10. #20
    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.

Seite 2 von 5 ErsteErste 1234 ... 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
  •  

12V Akku bauen