Druckregelung mit ein und Auslassventil

Hallo Arduino Community,

ich bin neu hier im Forum und sage erst einmal Hallo.
Aktuell habe ich ein kleines Projekt gestaretet.
Ich möchte mittels eines Arduino Nano, einem Drucksensor und zwei Ventilen den Luftdruck eines Fahrwerkes einstellen.

Zur Hardware:
-Arduino Nano
-Drucksensoren (liefern 0,5-4,5 V) entsprechend zum Gemessenen Luftdruck (0-150 PSI)
-4 fach Relay Karte
-Ein und Auslassventile des Luftdrucksystems.
-OLED I2C Display.

Ich habe nun alles soweit zursammengesteckt und herumprobiert.
Verwendet hatte ich die ARduino PID library und das Relay Beispiel entsprechend abgewandelt.
Ich habe jedoch das Gefühl das die PID nicht die beste Regelung für meine Umgebung sein könnte.

Das beispiel aus der Library arbeitet ja nur mit einem Relay. Somit kann ich nur Druck auf aber nicht wieder abbauen sollte der Messwert über dem Sollwert liegen.

Eventuell kann mir jemand einen Tipp geben und mir eine geeignete Regelung empfehlen.
Ich bin zwar Informatiker jedoch kenne ich mit mit Regelungstechnik noch nicht so gut aus.

Mit freundlichem Gruß Zimb

Wie kann es dazu kommen, daß der Druck zu hoch wird?

Da es sich um ein Fahrwerk handelt wird der Druck wahrscheinlich schwanken je nach Fahrsituation.
Lass die Lib doch mal weg und schalte deine Relais mit einer ordentlichen Hysterese, wenn das funktioniert dann in das Thema Regelung genauer einsteigen.

Gruß

Hallo,

also das Ziel ist es nicht den Druck wärend der Fahrt konstant zu halten sondern Ihn eigentlich nur bei einem Änderungswunsch bzw. initial beim Aktivieren des Systems zu setzten.
Wenn der Druck dann dem Sollwert entspricht soll dieser nicht weiter geregelt werden.

Der zu hohe Druck war irgendwie meiner PID Regelung geschuldet. Diese öffnet das Ventil nun ja eine gewisse Zeit.

Ich möchte natürlich die Relays und somit die Ventile möglichste wenig triggern um diese in der Lebensauer nicht zu verkürzen.

Bei meinen bisherigen VErsuchen habe ich es auch schon geschafft den gewünschten Sollwert zu erreichen. Jedoch ist es irgendwie noch alles andere als Optimal.
Wenn ich heute zuhause bin kann den Code einmal posten.

Gruß Zimb

also das Ziel ist es nicht den Druck wärend der Fahrt konstant zu halten sondern Ihn eigentlich nur bei einem Änderungswunsch bzw. initial beim Aktivieren des Systems zu setzten.

Also nur Druck einmal erreichen und dann abschalten? Dafür ist PID auch nicht richtig wenn ich das richtig verstehe. D braucht man da sowieso nicht.

Vielleicht einen PI-Regler wenn man es wirklich genau ausregeln möchte (geht aber natürlich mit der PID Library). Aber das Problem ist dass PIDs eigentlich für analoge Stellgrößen gedacht sind. Nicht für digitale wie Relais. Wobei man da auch Dinge tun kann wie die Stellgröße auf eine Zeit umsetzten in der das Relais schließt (PWM macht ja auch nichts anders, aber viel zu schnell für ein Relais).

Was passiert denn wenn du den Druck misst und einfach abschaltest wenn er erreicht wird? Hast du da irgendwelche Totzeiten im System die den Druck nach dem Abschalten noch ansteigen lassen?

Nicht so kompliziert denken

Ist eine Klassische 2 Punkt Regelung.

Merke dir den Eingabewert, berechne eine Hysterese.

Schalte das Relais ein bis Sollwert erreicht. Dann schalte erst wieder ein, wenn Sollwert - Hysterese erreicht wird. Pendelt dein Druck während des Betriebs und erzeugt somit einen zu kleinen Wert und lässt relais zuschalten musst du diese Situation erkennen (Fahrwerk...also fährst du, irgendwie damit koppeln). Solange gefahren wird nichts ändern. Im Stillstand nur hochpumpen wenn kleiner als Hysterese unter Soll.

Wie genau muss das den sein? Welche Luftmengen lässt das Ventil fliesen. Daraus musst du ermitteln welche Hysterese du noch benutzen kannst. Ich weis nicht wie genau der Druck sein muss im Fahrwerk. Wenn du hier große Genauigkeit brauchst, ein Ventil benutzen das nur ganz kleine Mengen fliesen lässt. So kommst du dann auf ordentliche Ein/Aus Zeiten die dir das genaue einstellen erleichtern

Guten Abend liebe Leute,

schön das Ihr mir schon so fleißig geantwortet habt.

Ich hänge hier erst einmal einen Auszug aus meinem gebastelten Code an.

Ich dachte mir es wäre eventuell besser eine Regelung aller PID zu verwenden um ein möglichst sauberes und schnelles Regelverhalten zu bekommen. Das war meine Grund Idee.
Wenn ich es recht verstehe wird doch ein Zweipunktregler anfangen zu schwingen oder nicht?
Das System ist absolut dicht. Es kann also keinerlei Luft entweichen. Lediglich durch erwärmen oder Beladungsänderungen etc. kann sich der Messwert ändern. Aber das Ganze soll ja wirklich nur beim Einschalten des Arduino (Zündung ein) den letzten eingestellten werder annehmen. Sobald dieser dann erreicht wurde darf die Regelung schlafen und erst wieder aktiv werden wenn der Wert manuell geändert wird. (So die Idee)

Gibt es eine Faustformel nach der ich die Hysterese bestimmen kann oder ist das reines Ausprobieren und feintuning?

Hoffentlich lacht mich keiner aus wegen meiner Programmierung :slight_smile:

Achja wenn ich mir das richtig vorstelle können Totzeiten lediglich durch den Querschnitt der Leitungen entstehen.

Gruß Zimb

main.cpp (1.61 KB)

init.cpp (421 Bytes)

Die schnellste Regelung ist 2 Punkt. Aber sie ist nicht sehr genau, vorallem wenn eine trägheit zwischen Aktor und Sensor ist. Also zb Zwischen Heizung und Temperaturänderung. Bei Pneumatik dürfte das aber sehr schnell einander folgen, also eher typisch 1ms zwischen Ventil auf und Druckänderung.

Dann ist ein PID untauglich. Er würde ja den Druckanstieg kalkulieren und etwas früher abschalten, weil sich danach noch Druck aufbaut...was aber real garnicht hinkommt. Somit würde er früher oder später doch ein 2 Punkt Schaltverhalten an den Tag legen. Aber eher später und derweilen dich nerven, weil du mehrmals Druck rauf und runter musst bis der PID gelernt hat das es nichts zu regeln gibt.

Nur wenn du bei sagen wir 2 Bar abschaltest und dann durch Reaktionsverzögerung 2,1 bar drin hast wäre eine Möglichkeit.

Hysterese ist eher Feintuning im laufenden Betrieb. Wann genau änderst du den Luftdruck. Im Stand ohne weitere Bewegung? Dann musst schauen ob der Druck pendelt. Dazu würde ich mir seriell den Druck anzeigen lassen so schnell es geht und nach dem Abschalten schauen ob er sich noch rauf oder runter bewegt. Dieses Nachpendeln des Drucks musst du über dei Hysterese ausgleichen, sie also größer machen. Täusch dich da mal nicht in der Anzeigeauflösung solcher Druckwandler.

Ohne genaue Details ist es schwer dir eine fundierte Aussage zur Hysterese zu machen. Aber auch wenn, ist das allenfalls ein grober Schätzwert und du musst den dann anpassen durch Versuche.

Kritisch sind nur ungedämpfte Schwingungen. Wenn man am Anfang oder bei Änderungen des Sollwerts feststellt, ob der Druck erhöht oder erniedrigt werden muß, kann man dafür sorgen, daß anschließend Luft nur nachgefüllt (oder abgelassen) wird, aber nicht beides. Dann kann man bei einem Zweipunktregler mit einer größeren Hysterese anfangen, und sie anschließend immer kleiner machen. Dazu sollte der Sensor nahe am Ventil sitzen, damit der Regler beim Überschreiten des Sollwerts sicher abschaltet, bevor der Druck im ganzen System zu hoch (bzw. zu niedrig) wird. Wird dann die Abweichung klein genug (z.B. 0,1bar), und die Zeit bis zum Abfall auf den Einschaltpunkt größer als eine bestimmte Zeit (z.B. 2s), kann man den Regler abschalten und zum Normalbetrieb übergehen.

Es ist ein Fahrwerk. Keinen Plan of ein 1:18 Modell oder ein Custom Showcar. Und ich kenne Customcars die mittels Druckluft springen. Da hast du natürlich enorme Schwingungen.

Ist also aus den vorhandenen Daten schwer zu sagen ob man Pendeln berücksichtigen muss oder nicht. Kommt eben stark drauf an, wie schnell die Luft eingefüllt wird und wie groß die Geschwindigkeit wird mit der sich dann etwas bewegt. Oder ob garkeine bewegung aufkommt und die Gassäule nur im Kolben pendelt.

Wir hatten im Labor mal einen Typen für EMV-Prüfungen, der hatte Luftdrucksensoren gebaut. Damit konnte er Messen in welcher Höhe sein Gürtel ist. Boden legen, kalibrieren, Hochheben ablesen. Luftdruckänderungen von 0,01pascal mit 10.000 Abfragen/sec. Arduino fragt locker auch 1000x/sec ab. So schnell ist der AD-Wandler. Und ein Kolben mit 30cm Länge und ca 100m/s Luftgeschwindigkeit beim Einblasen hat einen Rückpendler bei ca 3ms. Fürs Hirn ist das keine erfassbare Zeit, selbst ein Zeigerinstrument kann das nicht mehr anzeigen, wegen der Masseträgheit seiner Zeiger. Aber Drucksensoren auf Piezobasis haben Grenzfrequenzen im hohen Megahertzbereich. Die zeigen also solche Pendelbewegungen an und man wertet sie aus. Wie das Tastenprellen, das zu mehrfacher Auslösung führt und sich eigentlich im bereich <1 ms abspielt.

Aber…ich habe keine Daten über den Aufbau, den Sensor, die Einströmgeschwindigkeit um zu sagen ob man pendeln berücksichtigen muss. Da es aber nur ein Problem macht wenn man es NICHT entprellt, weise ich eben drauf hin. Und wenn später mal alles funktioniert, kann man es testweise aus dem Code rausnehmen und schauen was passiert. Dann weis man es genauer.

chefin:
Und ich kenne Customcars die mittels Druckluft springen. Da hast du natürlich enorme Schwingungen.

Da wird aber nix geregelt.... also würde ich von einer Niveauregelung ausgehen wie sie in vielen Fahrzeugen schon serienmäßig eingebaut ist.

Guten Morgen,

so viel Beteiligung das finde ich super!
Es handelt sich um ein Airride Fahrwerk. Hier sind quasi statt Federn auf den Stoßdämpfern Luftbalge montiert.
Die Vorder und Hinterachse lassen sich getrennt voneinander einstellen.
Derzeit über zwei Wippschalter und ein Analoges Manometer mit Zeigern.
Ziel ist es am Ende wenn das Fahrzeug abgestellt wird die Luft komplett abzulassen.
Wenn dann die Zündung eingeschaltet wird soll der letzte Druck wieder eingestellt werden.
Zudem hatte ich gedacht das man 2-3 Werte abspeichern kann um sich seine bevorzugten Fahrhöhen einfach abrufen zu können.
Natürlich muss ich das System am Ende so härten das nicht wärend der Fahr durch irgend einen Bug der Luftdruck geändert wird etc.

Im Kofferraum befindet sich entsprechend der Kompressor ein Lufttank. Die schläuche zu den Federbeinen sind 10x6mm. Genaue Kennlinien und der gleichen gibt es leider nicht. Aber ich denke an die Hysterese werdee ich mich relativ leicht herrantasten können.

Der Maximale Druck liegt ca. bei 9 Bar. (ohne jetzt lügen zu müssen)

Wenn das Ausregeln der beiden Achsen mit entsprechend gewünschten Sollwerten funktioniert wollte ich den Code entsprechend mit den weiteren Features erweitern.

Gruß Zimb

Ich denke mal, das Hochpumpen dauert mehr als 1-2sec, damit ist es so langsam das kaum ein Gaspendeln entsteht. Hier kann man wohl auch einfach abschalten beim erreichen des Drucks. Bei bis zu 9 Bar im härtesten Modus dürfte eine Ungenauigkeit von 0,1bar unerheblich sein.

Im laufenden Betrieb beim Fahren könnte man den Luftdruck mitteln. Also über mehrere Sekunden die oberen und unteren Ausschläge des Drucks erfassen und sich einen Mittelwert bilden. Sobald der zu stark absinkt ist Durckverlust und man meldet das per Anzeige. Direktes Nachpumpen würde ich vermeiden, weil es immer auch sein kann, das die Strasse sich so sehr ändert das es der Elektronik wie ein Druckverlust vorkommt.

Das merken der Werte muss man über EEPROM erledigen. Dort einfach hinterlegen, wenn sich was ändert um danach wieder neu aufzubauen und das Ablassventil auf Stromlos offen anschliessen. Ansonsten reicht hier 2 Punkt aus, weil PID für dauerndes Nachregeln und erreichen des Sollwertes ohne überschwindung bei trägen Vorgängen gedacht ist. Optimal wenn man die Aktorstellegröße verändern kann. Aber dein Ventil macht ja nur auf und zu, da würde ein PID nach viel lernen drauf kommen, das nach schliessen noch 0,05bar dazu kommen und um diesen Betrag früher dicht machen. Denke mal für dich unerheblich.

Am einfachsten und sichersten wäre es wenn du das Niveau nur änderst wenn das Auto steht. Da es eh meistens um das Tieferlegen im Stand geht und du mehrere Fahrmodi haben willst bietet sich das doch an.
Falls du OBD hast kannst du mit einem Wandler das Tachosignal abgreifen und als Bedingung setzen.
Auto an, steht aber noch -> Druck regeln
Auto aus oder in Bewegung -> Regelung aus

Gruß

Mahlzeit,

ich habe mir schon einen MCP2515 CAN Bus Modul bestellt. Hierrüber wollte ich auch die aktuelle stellung des Lenkrades abragen (Drehwinkelsensor, sofern ich die passende CAN ID) finde und den Druck nur komplett ablassen sollte das Lenkrad nahezu gerade stehen.

Ein passendes Menü für die Anzeige und Auswahl muss ich auch noch basteln das Projekt wird mich noch etwas Zeit kosten.

Es bleibt also spannend :smiley:
Vielen dank das Ihr so fleißig kommentiert!!!

Gruß Zimb

Na dann viel Glück. Taste dich schrittweise ran, eine Funktion oder Bedingung nach der anderen dazu machen und immer wieder testen

Hallo,

ich bin gerade an einem ähnlichen Projekt. Hast du deinen Aufbau mittlerweile zum Laufen gebracht?
Habe schon mehrere Wege versucht, jedoch hatte ich immer das Problem, dass die Relaiskarte nur schaltet wenn vom Arduino ein Massesignal kommt, das hat jedoch nicht funktioniert, wenn ein vor eingestellter Druck angefahren werden sollte. Wenn ich die Relais per Taster und Arduino angesteuert habe, hat es ohne Probleme funktioniert.

Wie hast du die Stromversorgung der Sensoren und des Relaisboards realisiert?