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
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
>if (aktuellerWert_Rechts<-29) aktuellerWert_Rechts=29???;
muß das nicht -29 heißen?
MW
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 ?
ja .. danke .. bei dem Testfall bin ich noch gar nicht.Sonst wäre ich da auch reingefallen. chris
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.
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.....
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.