- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: PI(D) - Regler

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    Anzeige

    E-Bike
    aha.
    also, dein bisheriges KP hat im Regler GAR NIX verloren.
    das brauchst du ja nur um die Berechnung von e zu machen, bzw. die Kette zu normieren.

    e=V_soll-V_ist

    da sind wir uns einig.

    V_ist bastelst du dir mit den konstanten die du für links und rechts ermittelt hast.
    für V_soll nimmst du den PWM-Wert her, von mir aus.

    Soweit, so gut.

    jetzt jagst du deine Regelabweichung e in den Regler:

    Code:
    Regler(e){
    Kp=15;
    Ki=0,1;
    e_sum = e_sum + e;
    y = Kp * e + Ki * Ta * esum;
    Return(y);
    }
    Der Funktion übergibst du in 2 nacheinander folgenden aufrufen einmal e_rechts und einmal e_links;
    zurück bekommst du dann entsprechend y_rechts oder y_links.
    das wird dann auf V_soll_rechts bzw. V_soll_links aufgeschlagen, und das jeweils ausgegeben, nehme ich an..?

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    wenn man das sauber machen will sollte man eigentlich Ta in der funktion ermitteln, wenn ich mir das recht überlege.
    immer beim eintritt in die regler-schleife muss einen Zeitstempel nehmen, den alten abziehen und hat so die Zeitdifferenz seit dem letzten Zyklus...

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    34
    Beiträge
    1.080
    Blog-Einträge
    1
    Okay, in Bascom sieht das dann so aus:

    Code:
       l_ist = Left_Distance * 3.518304078
       r_ist = Right_Distance * 3.622007069
       Left_distance = 0
       Right_distance = 0
       PIDR = 0
       PIDL = 0
       Kp = 15
       Ki = 0.1
       Ta = 1
    
       Error = l_soll - l_ist
    
       Error_suml = Error_suml + Error
    
       PIDL = Kp * Error
       PID_Buffer = Ki * Ta
       PID_Buffer = PID_Buffer * Error_suml
       PIDL = PIDL + PID_Buffer
    
       Error = r_soll - r_ist
    
       Error_sumr = Error_sumr + Error
       PIDR = Kp * Error
       PID_Buffer = Ki * Ta
       PID_Buffer = PID_Buffer * Error_sumr
       PIDR = PIDR + PID_Buffer
    Leider muss man in Bascom diese ganzen Rechnungen zerlegen.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    Hmmm.

    Kann Bascom keine Funktionen? hab mich noch nie damit befasst...
    aber so sieht es gut aus, ja.

    und um Ta richtig zu ermitteln würde ich das noch so machen:
    Code:
    T_ist=T1; // oder wie auch immer du den Timer ausliest
    Ta=T_alt-T_ist;
    T_alt=T_ist;
    wobei T_ist und T_alt natürlich statisch sein sollten.

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    34
    Beiträge
    1.080
    Blog-Einträge
    1
    Tja jetzt schwingt er nciht so derbe aber er schwingt noch imemr ziemlich arg. Es ändert sich nicht so schnell, trotzdm fährt die rechte kette ab und zu rückwärts.

    Wie meinst du das mit TA? Wie ist eigentlich TA anzugeben? In hz oder Sekunde?

    Mein Problem ist, dass wenn ich jetzt die Abtastzeit verändere muss ich mir ncohmal den Faktor ausrechnen. Außerdem weiß ich nciht ob da noch genug Peaks/s sekunde vorhanden sind um damit vernünftig rechnen zu können.

    Die Peak/s sind schon so Doppelt weild er Interrupt auf Change ist, daher ein weißer Streifen den Inkrementalinterrupt doppelt aufruft. Das ist aber eigentlich egal.

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    hmmm.
    der faktor sollte eigentlich nur eine umrechnung von Inkrementen zur Motor-Drehzahl darstellen - zumindest würde ich mir so einen Faktor suchen.

    Ta ist wie oben beschrieben die Zykluszeit, nach der der Regler wieder aufgerufen wird.
    und um die korrekt zu ermitteln (ich traue dem Quarz nicht), muss man die eben ausmessen. dazu verwendest du einen Timer, der sowieso läuft und ermittelst mit T_ist dessen stand zu beginn der Reglerstrukur.

    danach musst du die zeittifferenz seit dem letzten aufruf des Reglers ermitteln: Ta= T_ist-T_alt << da hatte ich oben nen dreher drin, sorry.
    danach legst du den gerade ermittelten wert wieder in einer Variablen ab,
    die in der nächsten runde wieder verfügbar ist.

    mit peaks meinst du die inkremente? wenn die natürlich zu langsam kommen ist das ein problem, da gebe ich dir recht. dann kannst du das mit dieser Regelung leider nicht umsetzen, soweit ich das von hier überblicken kann.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    leider muss ich jetzt los, aber ich guck nachher nochmal nach dir
    dann verrate ich dir auch, wie du das massenträgheitsmoment von der Last ermitteln kannst.
    das vom Motor sollte im Datenblatt stehen...

    bis denn,
    Christian

  8. #18
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    34
    Beiträge
    1.080
    Blog-Einträge
    1
    Ich hab jetzt Ta auf 0.25 gesetzt, also 4 Messungen Pro Sekunde.

    Ich hab mal kurz aufgezeichnet was da rauskommt. Es hat sich grundsätzlich nichts geändert
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken verzweiflung_264.jpg  

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    17.12.2005
    Ort
    Untermain
    Beiträge
    58
    hmmm.
    hast du Ta umgestellt, oder auch die Hardware?
    will sagen: wie oft wird die regler-geschichte denn aufgerufen?

  10. #20
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    34
    Beiträge
    1.080
    Blog-Einträge
    1
    die Regler-geschichte wird 4 mal in der Sekunde aufgerufen. Sprich alle 250ms, also müsste ja TA 0.25 sein

    Ich hab den Roboter dann nochmal nen Test durchführen lassen wo er mir alle 250ms 10s lang die Werte der Encoder geliefert hat. Dabei war mein minimum,also PWM 180, 8 Einheiten pro 250ms, also 4 Peaks pro 250ms was wiederum 4 Markierungen pro 250ms sind und das Maximum also 230PWM 20 Einheiten, also 10 Peaks sprich 10 Markierungen pro 250ms

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen