Ich nutze diesen Filter bei einem Absolutdrucksensor und beim Lambda auslesen in meinem Auto. (Ich hatte genau den gleichen Fehler)
Zitat aus meinem Post aus einem anderen Thread:
Das Problem könnte auch noch ein anders sein uns zwar wäre es wahrscheinlich mit einem Filter vorteilhafter das man die akutellen gelesenen Werten etwas "niedriger" bewertet damit auch eventuelle Fehlerwerte oder große Sprünge nicht sofort zu 100% auf die regelung "durchschlagen". Wir machen das bei Analogwerten in der SPS genauso ich habe das auch in einem meiner Programme genutzt sieher hier:
Code:
Code:
int LDlast; // ist global deklaiert !!!!
int get_LD(){ // Funktion Einlesen Ladedruck
int LDY;
int LDX;
int LDact;
int LDdis;
LDact=analogRead(LDin); // Einlesen des Ladedruckistwertes
LDX=LDact*0.1; // Filter neue Lesewert einfluß ca 10% pro Zyklus
LDY=LDlast*0.9; // Filter alter Wert hat einen einfluss von 90%
LDdis=LDX+LDY; // Alter + neuer wert ist gefilterter neuer wert
LDlast=LDdis; // "neuer wert ist dann der alte wert für die nächste Runde
return LDdis;
int get_LD(){ // Funktion Einlesen Ladedruck
int LDY;
int LDX;
int LDact;
int LDdis;
LDact=analogRead(LDin); // Einlesen des Ladedruckistwertes
LDX=LDact*0.1; // Filter neue Lesewert einfluß ca 10% pro Zyklus
LDY=LDlast*0.9; // Filter alter Wert hat einen einfluss von 90%
LDdis=LDX+LDY; // Alter + neuer wert ist gefilterter neuer wert
LDlast=LDdis; // "neuer wert ist dann der alte wert für die nächste Runde
return LDdis;
Bei diesem Filter "dauert" es ca 18-20 Zyklen (Waren bei mit ca 10ms) bis der neue gelesene wert 99,99999% Integriert ist. passt du jetzt die multiplikatoren noch an, also den neuen gelesenen Wert etwas höher "bewerten" dann sind es weniger Zyklen also die integration ist schneller bis du zu einem Schönen ergebniss kommst. Wichtig die Summe beider Multiplikationsfaktoren muss 1 Sein also 100%.
