mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei: AppNote AVR221 - PID-Regler


Autor: Peter Bandhauer (basejump)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könntet ihr mir mal sagen ob ich das richtig verstanden habe?

1.
Get_Reference() soll meinen Soll-Wert zurückgeben?
Zum Beispiel eine feste Soll-Temperatur von 25°C

2.
Get_Measurement() soll der aktuelle gemessene Wert sein?
meinetwegen irgendwas zwischen 10 und 30°C



mit 3.   Set_Input()
komm ich nicht klar!

Kann mir dafür mal einer ein Beispiel nennen?



/*! \brief Read reference value.
 *
 * This function must return the reference value.
 * May be constant or varying
 */
int16_t Get_Reference(void)
{
  return 8;
}

/*! \brief Read system process value
 *
 * This function must return the measured data
 */
int16_t Get_Measurement(void)
{
  return 4;
}

/*! \brief Set control input to system
 *
 * Set the output from the controller as input
 * to system.
 */
void Set_Input(int16_t inputValue)
{
  ;
}

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo genau hängts denn? Bzw. beschreibe Dein Problem einmal genauer! Was 
soll geregelt werden. Welche Messwerte werden erfasst und wie?

Normalerweise hast man ja einen Sollwert (bei Dir wahrscheinlich die 
Reference) und man hat den aktuellen Zustand des Systems (das ist die 
Messung). Werden beide Werte voneinander abgezogen bekommt man den 
Regelfehler. Diesen übergibt man dem Regler, der dann die Steuergröße 
ausspukt und damit wieder auf das System einwirkt. So sollte es im 
groben Ablaufen. Wo genau hängt bei Dir ?

Grüße,
Michael

Autor: Peter Bandhauer (basejump)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

es geht um einen Spannungswandler mit dem ich eine ordentliche konstante 
Spannung erzeugen möchte.

Es funktionier schon halbwegs, aber irgendwas stimmt an der Schaltung 
nicht und die PWM-Regelung im Controller ist auch nicht so gut.

Ich hab das hier mal aufgebaut und die Werte ausgeben lassen.
In dem Bild im Anhang ist es grafisch aufbereitet worden und man erkennt 
gleich das etwas mit der Regelung des PWM-Signals nicht stimmt.

Mein Programm schaltet den Mosfet mit Masse kurz wenn die On-Zeit 100% 
erreicht, das tut der Batterie weh wenn da jemand so zieht.

grün = PWM
rot = Eingangsspannung 3-4V
gelb = Ausgangsspannung 10V

Ich hät mir den Quellcode aber mal etwas besser durchlesen sollen.
    // Run PID calculations once every PID timer timeout
    if(gFlags.pidTimer)
    {
      referenceValue = Get_Reference();
      measurementValue = Get_Measurement();

      inputValue = pid_Controller(referenceValue, measurementValue, &pidData);

      Set_Input(inputValue);

      gFlags.pidTimer = FALSE;
    }

Der Abschnitt hat Verständnisprobleme bei mir verursacht:
/*! \brief Set control input to system
 *
 * Set the output from the controller as input
 * to system.
 */
void Set_Input(int16_t inputValue)
{
  ;
}

Setze den Ausgang des Controllers als Eingang zum System.

Damit meinten die nicht den mikro-Controller sonder die PID-Methode.

Ich füttere jetzt einfach meinen PWM-Timer mit dem "inputValue".

Hatst du (oder jemand anderes) diese Regelung mal in einem Projekt 
verwendet?



Einfrage hab ich aber noch!

Was mach ich mit pid_Reset_Integrator

Wann muss ich den Integrationsanteil zurücksetzen?
Ist das eine Art Anti-Wind-Up Schutzschaltung oder gibt es da eine 
Regel?
*! \brief Resets the integrator.
 *
 *  Calling this function will reset the integrator in the PID regulator.
 */
void pid_Reset_Integrator(pidData_t *pid_st)
{
  pid_st->sumError = 0;
}

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.