- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Motoren wollen nicht mit niedrigen PWM Werten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2015
    Beiträge
    17

    Motoren wollen nicht mit niedrigen PWM Werten

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe 50:1 Metal Gearmotor 37Dx54L von Pololu.

    Leider gelingt es mir nicht die Motoren mit PWM < 30 zum drehen zu bewegen. Damit ist sehr langsames fahren so gut wie ausgeschlossen.

    Ist das Problem hausgemacht oder mache ich da eventuell einen Fehler?

    Als Treiber verwende ich einen Pololu dual vnh5019. An jedem Port sind 2 Motoren angeschlossen (sprich 4WD).

    Vielen lieben Dank!

    Gruß
    Robert
    Geändert von nofear87 (28.12.2017 um 14:27 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.059
    Das ist normal. Du musst zuerst eine höhere PWM wählen und kannst dann wieder heruntergehen. Das Problem ist aber das der Motor bei einer größeren Last (z.B. Steigung) stehenbleiben kann. Allerdings ist eine Drehzahlregelung (also mit Drehzahlrückführung) besser, da die PWM je nach Drehzahl angepasst.

    MfG Hannes

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    .. 50:1 Metal Gearmotor 37Dx54L von Pololu .. nicht die Motoren mit PWM < 30 zum drehen zu bewegen ..
    Hallo Robert,

    irgendwie sind die Angaben etwas sehr dünn. PWM - 30 von wieviel? Es gibt ja PWM mit fast beliebig hoher Obergrenze, meine Motörchen (nicht nur die pololus) fahren PWM 8 bis 10bittig, manche PWMs fahre ich sogar deutlich höher. Gilt Deine Aussage für Motor mit Last (welche, wieviel, welche Fahrbahn etc) oder einfach nur testweise am Tisch liegend? Welche Spannung? Welcher maximal mögliche Strom?

    Ich hab den 30:1 Metal Gearmotor 37Dx52L mm with 64 CPR Encoder (nach eigenen Messungen hat meiner aber 29:1) - dieses pololuding - MIT Encoder. Zwei davon habe ich in meinen archie eingebaut, fahrbereit aktuell ca. 6 kg, ca. 90+ cm hoch. Der archie fährt mit ca. 12+ V Akku (ca. max >50A MÖGLich, nie gemessen) am Motortreiber locker an die 7 kmh, vermutlich auch schneller, Anfahrt in der Ebene !im archie! bei ca. 15 PWM/8-bittig. Im Leerlauf, 12,5V, bei Strombegrenzung 4A, keine Last, Motor mit freier Achse, fährt der etwa bei 7..9 PWM/8bittig los.

    Wie Hannes schreibt, ein bisschen Dampf brauchen unsere Motörchen schon - so wie jeder Motor ein gewisses Losbrechmoment hat. Ist ja auch kaum ein Problem - ausser wenn man die Motoransteuerung mit Werten von z.B. -255 bis +255 macht, dann braucht man in der Um-die-Null-Lücke ein bisschen if-then Tricks. Aber - kein Problem. Archie z.B. fährt butterweich von mässig vorwärts über langsamer werden - "durch die Null" - bis sanft nach rückwärts . . .
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    867
    Hmm,
    ich hab mir dazu einen ZeroBoost in die Regelung eingebaut, weil dieser Minimal-PWM-Wert bei mir:
    - abhängig von der Batteriespannung ist (sinkt während des Betriebs)
    - abhängig vom Untergrund ist (anderer Wert für Teppich, als für Laminat)
    - im Extremfall bis zur Vollaussteuerung gehen muss, insbesondere wenn der Roboter beim Anfahren direkt vor einem überfahrbaren Hindernis (Teppichkante o.ä.) steht.

    Der Zeroboost ist bei mir ein Zähler, der im zyklischen Durchlauf der Motorregelung hochzählt, wenn keine Änderungen an den Inkrementalgebern angezeigt werden, der Roboter also steht. Bei einer Änderung der Inkrementalgeberwerte (hurra, die Masse bewegt sich) wird er auf 0 zurückgesetzt.
    Multipliziert mit einer Konstante KZB wird der Zeroboost-Zähler auf den vom PID-Regler generierten PWM-Wert aufaddiert.

    Eigentlich könnte das auch der I-Anteil des Reglers. Der allerdings neigt bekanntlich zu Überschwingen. Das ist insbesondere dann tödlich, wenn nur eine kurze Strecke zurückgelegt werden soll. Auch kann KZB wesentlich größer als KI gewählt werden, so dass die PWM-Rampe vor dem Anfahren schneller steigt.

    Keine Ahnung, ob das so der amtliche Weg ist, mir fiel damals nix Besseres ein.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.04.2013
    Beiträge
    526
    Du musst halt mindestens den Leerlaufstrom bereitstellen, sonst kann sich nichts rühren. Wenn dein Blockierstrom z.B. 10 A ist und dein Leerlaufstrom 1 A, brauchst du mindestens 10%, damit sich der Motor ohne Last überhaupt dreht.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    .. ich hab mir dazu einen ZeroBoost in die Regelung eingebaut, weil dieser Minimal-PWM-Wert bei mir ..
    Ei, was für ein prächtiger Trick. Den hatte ich ähnlich auch schon bei Testfahrten gemacht (wohl auch bei der etwas hakeligen Regelung am WALL R), aber bei der üblichen Regelung von Drehzahl oder Stellung total unbeachtet gelassen :-/ Schöner Hinweis, danke.

    Du musst halt mindestens den Leerlaufstrom bereitstellen ..
    Das bezweifle ich stark. Immer wieder stelle ich fest, dass ich den Motor - wenn er mal läuft - deutlich geringer bestromen kann bis zum Stillstand. Und das ist natürlich so, sonst hätte die Haftreibung ihr Existenzrecht verloren.
    Ciao sagt der JoeamBerg

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2015
    Beiträge
    17
    Hallo zusammen,

    Zitat Zitat von oberallgeier Beitrag anzeigen
    Hallo Robert,

    irgendwie sind die Angaben etwas sehr dünn. PWM - 30 von wieviel? Es gibt ja PWM mit fast beliebig hoher Obergrenze, meine Motörchen (nicht nur die pololus) fahren PWM 8 bis 10bittig, manche PWMs fahre ich sogar deutlich höher. Gilt Deine Aussage für Motor mit Last (welche, wieviel, welche Fahrbahn etc) oder einfach nur testweise am Tisch liegend? Welche Spannung? Welcher maximal mögliche Strom?

    Ich hab den 30:1 Metal Gearmotor 37Dx52L mm with 64 CPR Encoder (nach eigenen Messungen hat meiner aber 29:1) - dieses pololuding - MIT Encoder. Zwei davon habe ich in meinen archie eingebaut, fahrbereit aktuell ca. 6 kg, ca. 90+ cm hoch. Der archie fährt mit ca. 12+ V Akku (ca. max >50A MÖGLich, nie gemessen) am Motortreiber locker an die 7 kmh, vermutlich auch schneller, Anfahrt in der Ebene !im archie! bei ca. 15 PWM/8-bittig. Im Leerlauf, 12,5V, bei Strombegrenzung 4A, keine Last, Motor mit freier Achse, fährt der etwa bei 7..9 PWM/8bittig los.

    Wie Hannes schreibt, ein bisschen Dampf brauchen unsere Motörchen schon - so wie jeder Motor ein gewisses Losbrechmoment hat. Ist ja auch kaum ein Problem - ausser wenn man die Motoransteuerung mit Werten von z.B. -255 bis +255 macht, dann braucht man in der Um-die-Null-Lücke ein bisschen if-then Tricks. Aber - kein Problem. Archie z.B. fährt butterweich von mässig vorwärts über langsamer werden - "durch die Null" - bis sanft nach rückwärts . . .
    Ich nutze einen Raspi Zero gemeinsam mit Johnny Five (JavaScript). Hier ist PWM meines Wissens nach derzeit auf 8bit beschränkt. Ich arbeite zwischen 0-255. Die Motoren habe ich vorerst an einer Holzkonstruktion befestigt. Es handelt sich ja noch um einen ersten Prototypen. Gefahren wird eben auf Laminatboden. Die Konstruktion samt Akkus, Elektronik und Motoren hat ein Gesamtgewicht von ca. 1,5 KG.

    Betrieben werden die Motoren mit einem 3S Lipo Akku. Also ca 12V.

    Zitat Zitat von Holomino Beitrag anzeigen
    Hmm,
    ich hab mir dazu einen ZeroBoost in die Regelung eingebaut, weil dieser Minimal-PWM-Wert bei mir:
    - abhängig von der Batteriespannung ist (sinkt während des Betriebs)
    - abhängig vom Untergrund ist (anderer Wert für Teppich, als für Laminat)
    - im Extremfall bis zur Vollaussteuerung gehen muss, insbesondere wenn der Roboter beim Anfahren direkt vor einem überfahrbaren Hindernis (Teppichkante o.ä.) steht.

    Der Zeroboost ist bei mir ein Zähler, der im zyklischen Durchlauf der Motorregelung hochzählt, wenn keine Änderungen an den Inkrementalgebern angezeigt werden, der Roboter also steht. Bei einer Änderung der Inkrementalgeberwerte (hurra, die Masse bewegt sich) wird er auf 0 zurückgesetzt.
    Multipliziert mit einer Konstante KZB wird der Zeroboost-Zähler auf den vom PID-Regler generierten PWM-Wert aufaddiert.

    Eigentlich könnte das auch der I-Anteil des Reglers. Der allerdings neigt bekanntlich zu Überschwingen. Das ist insbesondere dann tödlich, wenn nur eine kurze Strecke zurückgelegt werden soll. Auch kann KZB wesentlich größer als KI gewählt werden, so dass die PWM-Rampe vor dem Anfahren schneller steigt.

    Keine Ahnung, ob das so der amtliche Weg ist, mir fiel damals nix Besseres ein.
    Die Idee finde ich super. Lässt sich sicher auch mit JavaScript gut umsetzten. Das einzige Problem was ich derzeit habe ist, das ich die Encoder noch nicht vernünftig auslesen kann. Hier muss ich noch ein wenig testen. Ich habe die Hoffnung das es mit Johnny Five am Ende irgendwie funktionieren muss... Am Ende sind es doch 2 einfach digitale Eingänge pro Encoder?

    Gibt es Erfahrungswerte wie lange der höhere Anlaufstrom zur Verfügung gestellt werden muss, bevor ich wieder herunterregeln kann?

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    .. das ich die Encoder noch nicht vernünftig auslesen kann .. Am Ende sind es doch 2 einfach digitale Eingänge pro Encoder? ..
    Genau. Das Arbeiten der Encoder sieht ungefähr so aus - klick. Meine Dokumentation zur Auswertung sieht so aus - nochnklick - die Farbenliste [White] bis [Red] bezieht sich auf das Kabel für den Motoranschluss!!

    Mit Java kann ich ja nu nicht helfen, aber vielleicht bietet Dir (m)ein C-Code-Schnippsel ne Hilfe oder zumindest nen Anhaltspunkt ? Wobei hier für Dich eher nur die IencdrX-Werte für die (Teil)Umdrehungen/Drehwinkel und die tmrEx-Werte für die Drehzahlmessung von Interesse sind.
    Code:
    // ============================================================================= =
    // ===  Initialisierung der externen Interrupts bei m1284, doc 8272D-AVR-05/12
    //      EXT_INT0 auf PORTD2 Pin 16  --  Encoder IencB0 auf PINC 2 Pin 24  und
    //      EXT_INT1 auf PORTD3 Pin 17  --  Encoder IencB1 auf PINC 3 Pin 25
    // ============================================================================= =
      void XTI_0_1_init( void )    // Initialisiere beide Interrupts auf RISING edge
     {                //  => EICRA ISC00/~01 + ~10/~11 auf 1     doc S68
      EICRA   |=  (1<<ISC01)|(1<<ISC00);    // INT0 triggert auf RISING edge
      EICRA   |=  (1<<ISC11)|(1<<ISC10);    // INT1 triggert auf RISING edge
      EIMSK   |=  (1<<INT0) | (1<<INT1);    // erlaube INT0 und INT1 in EIMSK  
    // Initialisierung der Zeiten:            
      Iencdr0  =  Iz_diff0  =  Iz_yseci0  =  Iz_ysecv0  =  0;
      Iencdr1  =  Iz_diff1  =  Iz_yseci1  =  Iz_ysecv1  =  0;
      tmrE0  =  tmrE1  =  0;        // Timer für Drehzahlerfassung
     }      // Ende von void XTI_0_1_init( void )
    // ============================================================================= =
    
    
    // ============================================================================= =
    // ===  Nicht unterbrechbare ISR für EXT_INT0 auf mega1284      ================ =
    // Der Timer tmrE0 für Laufzeit des EXT_INT0 wird ausgelesen
     ISR(INT0_vect)                 // INT0 triggert auf RISING edge => 
     {                              //   => Wenn Aufruf, dann PORTD2 = high
    //  ToggleBit (PTLED, LCr);     // rtLED toggeln
    // - - - - - - - - - - - - - - - -
    //      Encoderticks Iencdrx nur hochzählen, IencBx rauf- od runterzählen
      Iz_diff0  = tmrE0;    // Hier die Zeit (in x 50µs-tupsi) seit letztem ISR-Aufruf
      tmrE0     =    0;     // Resetten ##>> IN der ISR ohne CLI/SEI möglich
      Iencdr0 ++;           // Incrementiere Encodercounter, zählt NUR aufwärts
      if (IsBitSet (PINC, 2)) IencB0++;     // Rad treibt vorwärts,  math. negativ
      else                    IencB0--;     // Rad treibt rückwärts, math. positiv
     }      // Ende ISR(INT0_vect)
    // ============================================================================= =
    
    
    // ============================================================================= =
    // ===  Nicht unterbrechbare ISR für EXT_INT1 auf mega1284      ================ =
    //  Routine setzt einfach einen Zähler hoch.
    //  Sonst wie ISR für EXT_INT0 für Motor li,re und PWM/Geschw.
     ISR(INT1_vect)                         // hiess mal: ISR(SIG_INTERRUPT1)
     {                                      //
    //  ToggleBit (PTLED, LCr);     // rtLED toggeln
    // - - - - - - - - - - - - - - - -
    //      Encoderticks Iencdrx nur hochzählen, IencBx rauf- od runterzählen
      Iz_diff1  = tmrE1;    // Hier die Zeit (in x 50µs-tupsi) seit letztem ISR-Aufruf
      tmrE1     =    0;     // Resetten ##>> IN der ISR ohne CLI/SEI möglich
      Iencdr1 ++;           // Incrementiere Encodercounter, zählt NUR aufwärts
      if (IsBitSet (PINC, 3)) {IencB1--;}   // Rad treibt rückwärts (math. positiv)
      else                    {IencB1++;}   // Rad treibt vorwärts (math. negativ)
     }      // Ende ISR(INT1_vect)
    // ============================================================================= =
    Ciao sagt der JoeamBerg

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2015
    Beiträge
    17
    Vielen Dank für deine Bemühungen. Ich habe folgenden Code finden können und werde damit vorerst mein Glück probieren. Ich melde mich sobald es neues gibt. Ohne funktionierende Encoder fehlt mir ja leider die Abbruchbedingung für den ZeroBoost.

    https://gist.github.com/rwaldron/5db...d3b2c492737c99

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    867
    Zitat Zitat von nofear87 Beitrag anzeigen
    Gibt es Erfahrungswerte wie lange der höhere Anlaufstrom zur Verfügung gestellt werden muss, bevor ich wieder herunterregeln kann?
    Bis sich das Fahrzeug in Bewegung gesetzt hat. Genau dann hat es sich von der Haftreibung (Motor, Getriebe, Räder) gelöst und muss nur noch gegen die Roll-/Gleitreibung arbeiten.

    In der Praxis: Ich stelle zuerst die PID-Regelparameter KP,KI, KD wie gewohnt auf "langen" Strecken ein. Anschließend optimiere ich KZB anhand der kürzestmöglichen Strecke. "Kürzestmöglich" ist nicht immer "1" (ein Encoderschritt), hängt im wesentlichen vom Haftreibungswert, der Schwungmasse des Fahrzeugs und der Auflösung der Inkrementalgeber ab. Ist die kürzestmögliche Strecke für das System zu kurz gewählt, bekommt man auch mit dem ZeroBoost nur dauerhaftes Schwingen. Hat man diesen Wert allerdings auf das physikalisch Mögliche eingegrenzt, kann man ihn durchaus als Toleranz zum Zielpunkt verwenden.

    BTW, ich hab's mir lange nicht erklären können, aber mal zum Nachexperimentieren: Wenn man das Fahrzeug mit erhöhter PWM gerade so zum Rollen bringt, danach die PWM absenkt und anschließend mit dieser "Schleichfahrt-PWM" einfach die Richtung umkehrt, fährt's in der Regel rückwärts ohne erneuten Startboost weiter.
    Ich vermute mittlerweile, dass die drei Haftreibungskomponenten "Räder, Getriebe, Motorlager" bei dieser Richtungsumkehr bedingt durch das Getriebespiel zeitlich verzögert kommen. Sie wirken also nur noch nacheinander, nicht mehr in der Summe.

    Insofern ist beim Einstellen des Zeroboost die Wirkung eines einzelnen Überschwingers unter erhöhten Lastbedingungen nicht einmal schlimm. Auf ner Schwelle balanciert das Rad so nicht, aber über die Schwelle, danach über den Zielpunkt hinaus und dann wieder zurück geht recht zuverlässig.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Nucleo mit STM32F446 und J-Link wollen nicht...
    Von White_Fox im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 29.05.2016, 15:41
  2. Antworten: 49
    Letzter Beitrag: 13.10.2013, 12:08
  3. rfm 12 module wollen nicht
    Von demlinger im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 18.01.2008, 15:13
  4. Motoren wollen nicht so....
    Von papa_moll im Forum Asuro
    Antworten: 12
    Letzter Beitrag: 25.01.2007, 13:05
  5. Vergleichen von ganzen Werten und nicht nur Bits
    Von Ausbilder 'Durchdrücker' im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 07.04.2005, 16:07

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress