Hallo Gemeinde,
ich habe einen PI Regler Algo:
1 | float PI_mitL(float Id_neu, float Id_alt, float Imax, float u_test, int PIdurchlauf)
|
2 | {
|
3 | xd = (Imax - Id_neu);
|
4 | if (PIdurchlauf == 0) //Um beim ersten Durchlauf P-Anteil nicht zu vernachlässigen
|
5 | {
|
6 | xd_1 = 0;
|
7 | PIdurchlauf = 1;
|
8 |
|
9 | //new_u_ist = 0.2; schreibe ich das, wird auf diesen Wert begrenzt, warum?
|
10 | }
|
11 | else
|
12 | {
|
13 | xd_1 = (Imax - Id_alt);
|
14 | }
|
15 |
|
16 | TermAu = (xd - xd_1);
|
17 | TermBu = k_Ri_lin * TermAu; //P-Anteil
|
18 | TermCu = T_AB_lin/T_Ri_lin;
|
19 | TermDu = k_Ri_lin * TermCu;
|
20 | TermEu = TermCu * xd_1; //I-Anteil
|
21 | TermFu = TermBu + TermEu;
|
22 | //u_delta = TermF;
|
23 |
|
24 | new_u_ist = new_u_ist + (TermFu);
|
25 |
|
26 | //new_u_ist = (new_u_ist + k_Ri_lin * (xd - xd_1) + k_Ri_lin * T_AB_lin / T_Ri_lin * xd_1) ;
|
27 |
|
28 | if (new_u_ist < 0) new_u_ist=0; //Begrenzung Stellgröße
|
29 | if (new_u_ist > 1) new_u_ist=1;
|
30 |
|
31 | u =new_u_ist;
|
32 | return u; //Übergabe Stellgröße
|
Ich habe nun 2 Versionen, um einen Zündwinkel aus dem bereitgestellten u
zu berechnen.
1.
Ich sage Zündwinkel = Zündwinkel - u;
2.
Ich übergebe u einer Funktion, die daraus und aus Leitdauer und Strom
einen Wert berechnet.
Dies funktioniert auch soweit. Nur ist das System so weit aus träger als
Version1. Was eigentlich andersherum sein sollte. Weiss jemand einen Rat
wieso das so sein könnte?
Dazu sei vielleicht gesagt:
Bei Version 1 schnelles annähren auf Endwert.
Bei Version 2 eben langes Einschwingen.