Hallo zusammen, in der PID-Library für Arduino gibt es ein Code Beispiel, in dem PID-Regelung scheinbar ohne Feedback, also Open-Loop verwendet wird. Macht das überhaupt Sinn? Hier der Link zum Beispiel-Code: http://playground.arduino.cc/Code/PIDLibaryBasicExample Danke und viele Grüße Karl
Gast
#4862903
Es ist "closed-Loop", das Feedback ist das Poti welches per Hand gesteuert wird. Die PID-Lib generiert ein Tastverhältnis / Dutycycle um die Änderung die durch das Poti vorgegeben wird auszugleichen. Im Prinzip ist dieses Beispiel in Betracht der PID-Regelung Mist. Es generiert einfach eine PWM mit Dutycycle anhand des Eingestellten Wertes des Potis. Poti-ADC 0...1023 Dutycycle 0...100% (mit mir unbekannter Frequenz) Gruß
Gast
#4862904
ps. steht sogar im Code-Schnippsel: "Reading analog input 0 to control analog PWM output 3"
Gast
#4862988
Karl-alfred R. schrieb: > Regelung scheinbar ohne Feedback Regelung vs. Steuerung https://de.wikipedia.org/wiki/Steuern_(Systemtheorie) https://de.wikipedia.org/wiki/Regelung_(Natur_und_Technik) https://de.wikipedia.org/wiki/Regelungstechnik
Gast
#4862990
Das Beispiel ist natürlich Unsinn. Es hat mit einer PID-Regelung nichts zu tun. Es ist lediglich eine Filterung des Eingangs. Man kann sich auch ein Loch ins Knie bohren, eine Erbse reinwerfen und als Trillerpfeife nutzen. Einen Sinn ergibt es trotzdem nicht.
Karl-alfred R. schrieb: > Es gibt es ein Code Beispiel, in dem PID-Regelung scheinbar ohne Feedback, > also Open-Loop verwendet wird. Eine Regelung ist nur dann eine Regelung, wenn eine Rückkopplung über das Ausgangssignal der Schaltung vorliegt. Ansonsten handelt es sich um eine Steuerung. Streng genommen ist auch der "Lautstärkeregler" am Radio kein Regler, sondern ein Steller. Allerdings gibt es hier eine Rückkopplung über den hörenden Menschen. Andererseits sind die meisten NF-Verstärker Regler, da sie auf eine konstante Verstärkung unabhängig von der Betriebsspannung geregelt werden.
@Karl-alfred Römer (karl-alfred_roemer) >gibt es ein Code Beispiel, in dem PID-Regelung scheinbar ohne Feedback, >also Open-Loop verwendet wird. Das Beispiel ist maximaler Unsinn und wahrscheinlich auch nie getestet, nur einfach hingeschrieben. > Macht das überhaupt Sinn? Nein! >Hier der Link zum Beispiel-Code: >http://playground.arduino.cc/Code/PIDLibaryBasicExample Die Knalltüten hätten einen Servo nehmen sollen, dort kann man die Soll- und Ist-Position schön über einen Poti darstellen (einer am Servo, einer vom Menschen bedient). Das vermukste Beispiel sieht so aus, siehe Anhang. Das KANN nicht funktionieren, schon gar nicht mit I-Anteil!
Gast
#4863227
Karl-alfred R. schrieb: > in der PID-Library für Arduino > gibt es ein Code Beispiel, in dem PID-Regelung scheinbar ohne Feedback, > also Open-Loop verwendet wird. Macht das überhaupt Sinn? Mit Verlaub und entgegen Anderer, ja es macht Sinn aber nur bei einer Sprungantwort (Systemidentifikation).
Vielen Dank für Eure vielen Antworten! Das mit der Sprungantwort kann ich zum Teil nachvollziehen. Also dass man mit geschickter Wahl der Parameter den Zielwert möglichst schnell erreicht ohne zu überschwingen. Aber so richtig 'geregelt' wird da ja eigentlich nichts.
@Karl-alfred Römer (karl-alfred_roemer) >erreicht ohne zu überschwingen. Aber so richtig 'geregelt' wird da ja >eigentlich nichts. Baus doch einfach mal auf und miss!!! Das Ding wird jeweils in die Ecke rennen, je nachdem ob der Wert vom Poti über oder unter dem Setpoint liegt.
Gast
#4863417
Karl-alfred R. schrieb: > Aber so richtig 'geregelt' wird da ja > eigentlich nichts. Nein wie auch. Es wird auch nicht funktionieren, wenn ein I-Anteil ungleich 0 vorhanden ist.
Gast
#4863425
Falk B. schrieb: > Das vermukste Beispiel sieht so aus, siehe Anhang. Das KANN nicht > funktionieren, schon gar nicht mit I-Anteil! Vielleicht sind I-und D-Anteil gleich groß, dann funktioniert das Beispiel solange bis die I-Variable überläuft :P
http://playground.arduino.cc/Code/PIDLibrary Hmm, wenn man mal in den Quältext schaut, findet man auch schon den ersten Fehler.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
> double dInput = (input - lastInput); > /*Compute PID Output*/ > double output = kp * error + ITerm- kd * dInput; Das mit dem D-Anteil stimmt nicht.
Gast
#4863810
Falk B. schrieb: >> double dInput = (input - lastInput); > >> /*Compute PID Output*/ >> double output = kp * error + ITerm- kd * dInput; > > Das mit dem D-Anteil stimmt nicht.
1 | |
so besser?
Gast
#4864031
Horst schrieb: > so besser? nein. D bezieht sich auch auf E.
@Horst (Gast) >double output = kp * error + ITerm (+) kd * dInput; >so besser? Nur zum Teil. Eher so.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
