- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
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 Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    53
    Beiträge
    540
    Blog-Einträge
    17
    Zitat Zitat von i_make_it Beitrag anzeigen
    Mit den selben Bildern wird das auch als L298N Modul angeboten.
    Mit dem L298N hat dieser Chip aber nichts zu tun, ist vielleicht nur ein Suchbegriff.
    Ich vermute, dass hier der fernöstliche MX1508 oder so was ähnliches verbaut ist.

    - - - Aktualisiert - - -

    Zitat Zitat von inka Beitrag anzeigen
    hast Du da evtl. ein codebeispiel?
    so in der Art mache ich das:
    Code:
    void Motor1Forw(char velo){
        Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    void Motor1Backw(char velo){
        Motor1_In1 = 1;
        Motor1_Pwm = 255 - velo;
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    @Witzkatz: stimmte das Pinout von dem MX1508 passt zumindest auf das was man auf der Platine sieht.

    @inka: Enable braucht man nicht unbedingt.
    Bei größeren Motorreglern nimmt man das halt, um sicherzustellen das die Steuerung bereit ist bevor die Motoren bestromt werden.
    Das verhindert, daß beim Einschalten die Motoren rucken weil unbestimmte Pegel irgendwo anliegen, die der Regler als Fahrbefehl versteht.
    Pro Motor braucht es halt bei dem Teil je ein PWM für Clockwise und ein PWM für Counter Clockwise.
    Ob man das Richtungssignal auf 1 legt und per Enable ein PWM ausgibt oder ob man das PWM direkt an den Richtungsausgängen ausgibt ist eine reine Software Sache.
    So spart man halt pro Motor einen Pin (bei DIR-CW plus DIR-CCW).

    Wenn man so eine Treiber mit einem DIR und einem PWM ansteuern will, braucht man zwei UND und ein NICHT Gatter.
    PWM je auf IN1 der beiden UND's und DIR einmal auf IN2 des einen UND und einmal auf das NICHT und von da auf IN2 des zweiten UND.
    Dann kann man die Ausgänge der Beiden UND's auf den Treiber legen.

    Coden ist aber schneller und braucht keine Hardware.
    Geändert von i_make_it (20.02.2018 um 15:26 Uhr)

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Zitat Zitat von witkatz Beitrag anzeigen
    so in der Art mache ich das:
    Code:
    void Motor1Forw(char velo)
    {
        Motor1_In1 = 0;
        Motor1_Pwm = velo;
    }
    void Motor1Backw(char velo){
        Motor1_In1 = 1;
        Motor1_Pwm = 255 - velo;
    }
    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;
    }
    mit dem aufruf von "Motor_1_Backw(200);"

    dreht der motor zwar, allerdings unabhängig von der zahl "velo", also immer voll power...
    gruß inka

  4. #4
    HaWe
    Gast
    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;
    }
    mit dem aufruf von "Motor_1_Backw(200);"

    dreht der motor zwar, allerdings unabhängig von der zahl "velo", also immer voll power...
    du übergibst doch auch überhaupt keinen velo-Wert an irgendeienen Pin - wie soll es dann was bewirken?
    Stattdessen musst du 1 pin HIGH oder LOW setzen für die Richtung und den anderen per PWM (velo) für die Geschwindigkeit.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Zitat Zitat von HaWe Beitrag anzeigen
    du übergibst doch auch überhaupt keinen velo-Wert an irgendeienen Pin - wie soll es dann was bewirken?
    Stattdessen musst du 1 pin HIGH oder LOW setzen für die Richtung und den anderen per PWM (velo) für die Geschwindigkeit.
    aber die pins haben dann trotzdem keine verbindung zur hardware, also zum motortreiber? Das ist das was ich nicht verstehe...
    gruß inka

  6. #6
    HaWe
    Gast
    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.

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

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

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

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

Seite 1 von 2 12 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
  •  

fchao-Sinus-Wechselrichter AliExpress