mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Regelung Paramter ?


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich habe für einen Motor eine PI - Regelung programmiert.
Jetzt fehlt mir die Erfahrung beim einstellen der Regelparameter.
hier mein code :
  230     /* PI-Regler rechter Motor // Motorausgang 1 */
  231
  232     FehlerRechts = 0;
  233     FehlerRechts =(sollWert-istRechts);                     //
  234     FehlerRechts += Differenz;                              //
  235
  236     //  Anteil P-Regler
  237     KorrRechts =  (FehlerRechts*0.5);                      // Kp
  238
  239     //  Anteil I-Regler
  240     IntegralRechts += (FehlerRechts*0.2);                   //
  241     if(IntegralRechts > 5) IntegralRechts = 5;              //
  242     if(IntegralRechts < -5) IntegralRechts = -5;            //
  243     KorrRechts += IntegralRechts;                           //
  244
  245     aktuellerWert_Rechts +=KorrRechts;                      //
  246                                                             //
  247                                                             //
  248                                                             //
  249                                                             //
  250     if (aktuellerWert_Rechts>29) aktuellerWert_Rechts=29;
  251     if (aktuellerWert_Rechts<-29) aktuellerWert_Rechts=29;
  252     vRechts =  Ticks_Gesch(aktuellerWert_Rechts);            //
meine parameter sind für prop-Regler : 0.5,
für I-Regler 0.2
bei dieser Einstellung schwingt meine drehzal zwischen langsam -schnell
... wenn ich den I anteil komplett weglasse driftet der Robotor nach
links( der robotor hat 2 Räder , jedes Rad hat seine eigene Regelung )


Wie ist die Vorgehensweise beim Einstellen einer Regelung ?
(nicht durch rechnen, sondern durch "Probefahrten" ? )
  Danke
   chris

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was regelst du? Die Drehzahl? Wenn ja, wie mißt du diese?

Ich würde den I-Anteil erstmal ganz zurücknehmen. Dann die
Proportionalverstärkung schrittweise erhöhen bis die Stabilitätsgrenze
erreicht ist (unter dieser bleiben). Jetzt sollte er ja bis auf die
bleibende Regelabweichung stabil regeln. Nun kannst du Regelabwichung
durch langsames erhöhen des I-Anteiles minimieren. Dabei mußt du aber
gleichzeitig deinen P-Anteil wieder mit zurücknehmen, sonst neigt dein
System zum Überschwingen.
Fehler können natürlich auch von deiner Drehzahlinformation kommen (zu
geringe Auflösung...).

Gruß

Thomas

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>if (aktuellerWert_Rechts<-29) aktuellerWert_Rechts=29???;
muß das nicht -29 heißen?

MW

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten morgen,
ich regel die Drehzahl per PWM.
An meinnem Motoren sind Lichtschranken und EncoderScheiben(Schwarz weiß
gestrichelt) damit messe ich die Übergänge zwischen weis -schwarz und
schwarz-weis, jeweils 1 Tick.
also ich messe die Ticks die gefahren wurden, vergleiche es mit dem
Sollwert und geben dann einen neuen wert für die PWM ein.
(Fehler bei der Drehazahlinfo sind schon ausgeschlossen)
  Chris
PS: kann mit jemand erklären wie ich rausfinde in welche richtung sich
mein Rad dreht ? habe 2 Lcihtschrenken pro Encoderscheibe,
Encoderscheib e oben im Text beschrieben ?

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja .. danke .. bei dem Testfall bin ich noch gar nicht.Sonst wäre ich da
auch reingefallen.
  chris

Autor: Rahu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Chris,

zur Funktionsweise, in welche Richtung deine Scheibe dreht, solltest du
dir mal die Funktionsweise von Drehencodern angucken:
Wenn sich die beiden Lichtschranken in einem Segment befinden, dann
wird eine der beiden bei Bewegung dieses Segment verlassen. Durch die
Anordnung der Lichtschranken kann man dann feststellen, in welche
Richtung sich das Rad gedreht hat.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andi  enc_last, 0x0    ;Ausmaskieren der letzten 2 Bits
  clr  int_i      ;Löschen des Ergebnis Registers
  sbic  PINC, 2      ; Die nächsten 7 Zeilen sind der Kern für den ich 
20
Minuten gebraucht habe ;-)
  inc  int_i        ;
  ldi  temp, 0b00000011
  sbic  PIND, 2     ;
  eor  int_i, temp     ;
  sub  int_i, enc_last    ;
  add  enc_last, int_i    ;
  sbrs  int_i, 0    ; Es dreht sich sorum
  rjmp  _ioc1a1
  sbrs  int_i, 1    ;   Oder es dreht sich andersrum
  rjmp    _ioc1a2
  sbi  PORTD, 1    ; Zum Beispiel Wert runterzählen
  rjmp  _ioc1a1
_ioc1a2:        ;
  cbi  PORTD, 1    ; Zum Beispiel Wert hochzählen
_ioc1a1:        ; Ende


PS: Ich hoffe es bringt dir was ;-) Bin gerade auch dabei mir einen
PI-Regler zu bauen welcher mit PWM regelt.....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.