- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 7 von 7

Thema: Abstandsregelung Regler reagiert zu langsam

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hi, schon mal danke für deine Antwort!
    Ta habe ich mithilfe dieses Codes gemessen (am Ende der Loop platziert):
    Code:
    unsigned long cycleTime;
    unsigned int cycleCount;
      cycleCount++;
      if (cycleCount>=100)
      {
        Serial.print("Cycle Time: ");
        Serial.print((micros()-cycleTime)/cycleCount);
        Serial.println(" microseconds");
        cycleCount=0;
        cycleTime=micros();
    Dabei kamen dann Werte zwischen 17000 und 25000 µs raus, was ich als Taktzeit interpretiert habe. Ich habe dann für Ta einfach mal einen Wert in der Mitte angenommen. Meine Variablen sind wie folgt definiert:
    Code:
    float d_soll = 0.4, d_ist;
    float e, esum = 0, ealt = 0;
    unsigned long TaMicros = 20000; //Abtastzeit in Mikrosekunden
    float Ta = (float)TaMicros/1000000;
    unsigned long currentMicros;
    unsigned long previousMicros = 0;
    float vy = 0;
    float Kp = 1.5;
    float Ki = 0;
    float Kd = 0;
    Die Loop-Schleife sieht dann so aus:
    Code:
      currentMicros = micros();
      d_ist = ultraSensor.distanceCm()/100; //Methode des Herstellers (eigene Library) zum Auslesen des Sensors
      regelung(); //ist in meinem ersten Post enthalten
        motor1.runSpeed(vy,0); //Methoden des Herstellers zum Ansteuern der Motoren
        motor2.runSpeed(vy,0); //Umrechnung in für den Motor zu verarbeitende Drehzahlen findet an anderer Stelle statt
        motor3.runSpeed(vy,0);
        motor4.runSpeed(vy,0);
    Hoffe das ist ausreichend, um dir eine Ahnung zu von dem was ich treibe zu verschaffen

  2. #2
    HaWe
    Gast
    meine ersten Ideen:

    Einheit aller Timestamps immer in identischen Einheiten berechnen (also immer micros oder immer millis)

    Du solltest die Zeit pro Schleifendurchlauf exakt stoppen (machst du glaube ich per cycletime)
    Ta müsste exakt die Dauer des aktuellen Schleifendurchlaufs sein, also Ta=(float)cycletime (kannst du auch direkt einsetzen, ohne zusätzliches Ta)

    Die delays pro Schleife würde ich so wählen, dass ca. 10 millisec = 10000 micros pro Schleife anfallen

    Kp, Ki und Kd können theoretisch durchaus Werte zwischen 0.001 bis 1000000 annehmen, also nicht begrenzen

    Ki allerdings neigt zu übermäßigem Aufsummieren, daher zusätzlich mit einem Dämpfungsfaktor multiplizieren:
    esum = 0.7*( esum + e);

    edit:
    der Dämpfungsfaktor (hier 0,7) mag irgendwo zwischen 0,5 und 0,9 liegen
    Geändert von HaWe (03.03.2018 um 09:27 Uhr)

Ähnliche Themen

  1. CMPS03 reagiert nicht
    Von Jon im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 12.08.2009, 14:27
  2. Interrupt reagiert nicht oder nur langsam
    Von Maxxtro im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 09.08.2009, 21:38
  3. PollSwitch reagiert falsch?
    Von weisserAdler im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 22.06.2007, 22:39
  4. IR Abstandsregelung
    Von Wrag im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 23.08.2005, 21:23
  5. AVR reagiert nicht auf Tastendruck
    Von quad im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 12.06.2005, 17:55

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress