MPX4250AP Ladedruckanzeige

Hi Leute,

ich will mit einem MPX4250AP Sensor den Ladedruck im Auto messen. Soweit ich das verstanden habe, muss der Sensor folgendermaßen verkabelt werden.

  • Pin 1 wird an den Analog Eingang (z.B. Analog 0) angeschlossen
  • Pin 2 wird an Ground angeschlossen
  • Pin 3 wird an 5 Volt angeschlossen

Wie würdet ihr vorgehen, um Druck an einem LCD Display auszugeben? Was haltet ihr davon:

Ist mal wieder was von adafruit, da wird es sicher auch eine Libary geben oder? Toll wäre eine Lösung wie diese hier:

YouTube - Beispiel Ladedruck

Der Kerl ist so nett und hat sogar den Sketch hochgeladen. Ich will aber nicht einfach nachbauen, sondern auch verstehen wie das Programm geschrieben werden kann. Es muss allerdings auch nicht so komplex sein wie im Video. Erst mal klein anfangen.

Habt ihr Tipps für mich?

Gruß

Irfan

An BMP wirst du keinen Schlauch anschließen können er misst nur Atmosphäre. Mit dem MPX4250AP bist du auf dem richtigen Weg. Der Sensor misst Absolute Pressure (AP) das heißt er misst den (1bar Atmosphärendruck über Vakuum) das heißt du hast noch 1,5bar Überdruck zur Verfügung.
Programmmäßig musst du beim Start einen Null abgleich machen sonst misst du auch noch ob wir gerade in einem Hochdruck oder Tiefdruck Gebiet sind. Also vor dem Starten des Motors abgleichen. Danach kannst du dann Unterdruck im Saug-Betrieb feststellen und Überruck im Lader-Betrieb bis ca 1,5bar. Dann kann man das Blowoff perfekt einstellen (Bei meinem Volvo Turbo war das -0,3 bar).
Die Sensor Leitung muss natrülich hinter die Drosselklappe da dort die Werte “herrschen” die den Motor betreffen. Achtung der Sensor ist sehr empfindlich gegenüber Spannungsschwankung an der 5V Versorgung
Gruß
DerDani

#trauertimmernochseinemVolvoTurbohinterher

Hi Dani,

schön von dir hier zu lesen. Ich habe den MPX4250AP. Ein Nullabgleich ist interessant, daran habe ich gar nicht gedacht. Muss ich mir mal genauer anschauen. Blow Off bei 0,3 Bar? Low Pressure :smiley: ich fahre 1,3 Bar Overboost :smiley: :smiley: :smiley:

Ich habe mal was gebastelt. Hier das Youtube Video:

YouTube - Ladedruckanzeige Irfan

Was mir noch gefallen würde ist ein Max-Wert der angezeigt wird. In den allermeisten Fällen wird der mit einem Knopf zurück gesetzt. Ich fände es besser, wenn der nach 5 Sekunden zurück gesetzt wird. Tipps?

Bräuchtest du nicht einen Differenzdruckgeber? Der atmosphärische Druck ist ja nicht jeden Tag und auf jeder Höhe gleich. Und du willst ja, wenn ich das richtig verstehe, nicht den absoluten Druck, sondern den Überdruck, bezogen auf Atmosphäre, anzeigen :wink:

Kleines Missverständnis. Das BlowOff wurde hinter der Drosselklappe angeklemmt und sobald nach dem Gaswegnehmen -0,2 bis -0,3bar hat das BlowOff im abgeblasen damit im Teilastbereich nicht soviel über das BlowOff an Fremdluft zog.
Der 2,3l Turbo (kleiner Mitsubishi 13C Lader wg. schnellem Spool-Up) habe ich auf 1,1bar gefahren. Mit 0,9bar hatte der Motor 190PS Messung bei 1,1bar(Peak) habe ich nie gemacht(ca.220-230PS).
Druckaufbau ab 1400 U/min bis 0,5bar ab 2100 U/min habe ich vollen Ladedruck zugelassen :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp: bei 4900U/min brach der zusammen auf 0,8-0,9bar.
Heckschleuder mit DiffSperre.
Der 15G Lader hat oben mehr Rums kann aber bei den Abgasströmungen unterhalb 2500 nicht so schnell Liefern wie der 13C. Welche Verdichtung hat der 2,0l Turbo?
Lesitung?

Ich bleib dran scheint ein interressantes Projekt zu werden. (Bis zum Boostcontroller mit Map und Taktbventil für eine Boostmap).

Gruß
DerDani

@nix_mehr_frei
Gibt es Differenzdruckgeber auch mit 0-5V die dann auch Unterdruck messen können?
Ich meine die haben nur Überdruck zur Atmosphäre. Dem AP kann man dann auch Saugdruck(Unterdruck) messen.
Gruß
DerDani

Bin ich jetzt überfragt. Habe mit Druckgebern privat noch nichts gemacht. Aber beruflich haben wir an einer Maschine (mit SPS) einen Differenzdrucksensor, der einmal den Unterdruck im Abzug und Atmosphäre misst und nur wenn der Abzug genügend Unterdruck hat und nicht versifft ist, dann über die SPS zuschaltet.
Differenzdruckgeber haben doch 2 Schlauchanschlüsse. Von da her kann ich doch so messen, das ich auch bei Unterdruck ein positives Ergebnis am Analogausgang bekomme.

Gerade habe ich bemerkt, dass der atmosphärische Druck heute bei 0,2 liegt. Gestern war der bei 0,0...spinne ich jetzt?

Genau das meine ich.
Die Differenz sollte aussagekräftiger als der absolute Druck sein.
Wobei das auch wieder relativ ist. Die Verbrennung interessiert sich nur für die absoluten Mengen und die daraus resultierenden Mischungsverhältnisse. Darum wird in der Industrie, wenn es um chemische Reaktionen geht, mit Mass Flow Controllern (MFC's) gearbeitet, da dort die Masse und nicht der Druck ausschlaggebend ist bei Gasen.
Im Auto behilft man sich halt mit der Nachregelung durch die Lambdasonde.

So sieht aktuell mein Sketch aus:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Analogwert = 1.22;
int Mapped = 3.32;

void setup() {

Serial.begin(9600);
while(!Serial);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“OPEL CALIBRA”);
delay(500);
lcd.setCursor(0,1);
lcd.print(“TURBO 4x4”);
delay(500);
lcd.clear();
delay(500);

}

void loop()
{
Analogwert = analogRead(A0);
Mapped = map(Analogwert, 0.0, 1023.0, -80.0, 150.0);
Serial.println(Mapped);

delay(100);
lcd.setCursor(0, 0); // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print(“Ladedruck:”); // Temp. : auf LCD ausgeben
lcd.setCursor(11, 0); // Anfang auf Stelle 11, Zeile 0 setzen
printNumber(Mapped);
Serial.println(Mapped);
delay(100); //wartet 1 Sekunde zwischen den Auslesewerten
}
void printNumber(float num)
{
lcd.print(num/100);

if (num < 1000) lcd.print(’ ‘);
if (num < 100) lcd.print(’ ‘);
if (num < 10) lcd.print(’ ');
}

Könnt ihr mir mal mehr zum Thema “Nullabgleich” sagen? Ich finde nichts, wenn ich danach google. Bitte nicht einen Nullabgleich in meinen Sketch einbinden. Ich will das selbst lernen und würde mich vorher gerne einlesen. Ihr könnt mir ggf. den Sketch einbinden, wenn ich nicht weiter komme.

Vielen lieben Dank!

Kann es sein, dass ich um eine Kalibrierung durchführen zu können, einen weiteren Drucksensor benötige der lediglich den atmosphärischen Druck misst?

Dann eine Art Sketch:

Atmosphräischer Druck = Sensor 1
MPX4250AP = Ladedruck

Kalibrierung

MPX4250AP = Ladedruck (Aktuell) - Atmosphärischer Druck (Sensor 1)

Hi Achilles,
du willst ja keinen fertigen Code. Mal zu erklärung. Du hast ja ein 0-5V => 0-2500mbar(250kPA).
Also Motor aus (keinen Unterdruck bzw Überdruck).

  • Analogwert Messen und als Bezugsnull setzten. (das gehört in den Setup fürs Beispiel 416Bit)
    Dann ausrechnen wie viel mbar ein Bit sind. 2500mbar/1023Bit 2,4mBar pro Bit.(Kann eine Konstante sein)
    (Messwert-Nullwert)2,4mBar = aktueller Druck sowohl über als auch Unterdurck.
    z.B. Saugbetrieb
    (124-416)=-292Bit
    2,4mBar/Bit=-700,8 mbar Unterdruck bzw -0,7bar Unterdruck
    Turbobetieb
    (875-416)=459Bit*2,4mBar/Bit=1101,6 mBar Überdruck bzw. 1,1bar Ladedruck.

Gruß
DerDani

Habe mal meine PN hier reinkopiert macht mehr Sinn. Denn Nullwert sollte man über meherere Messungen machen.

ins Setup

for (int i; i < 4; i++) {
    Nullpunkt = Nullpunkt + analogRead(A0);
  }
  Nullpunkt = Nullpunkt / 5;

(124-416)=-292Bit2,4mBar/Bit=-700,8 mbar Unterdruck bzw -0,7bar Unterdruck
Turbobetieb
(875-416)=459Bit
2,4mBar/Bit=1101,6 mBar Überdruck bzw. 1,1bar Ladedruck.

Das habe ich verstanden mit den 416 bit als Beispiel. Danke!

Denn Nullwert sollte man über meherere Messungen machen.

Kannst du das erklären?

for (int i; i < 4; i++) {
Nullpunkt = Nullpunkt + analogRead(A0);
}
Nullpunkt = Nullpunkt / 5;

Den Sketch habe ich überhaupt nicht verstanden. Dazu fehlen mir wohl noch die Programmierkenntnisse. Ich habe mir das Buch Arduino Paxiseinstieg gekauft. Ich hoffe das bringt mich etwas weiter.

Dieser kleine Code misst fünf mal hintereinander den Wert und baut daraus einen Mittelwert, das macht den Abgleich sicherer falls man doch einen Peak oder irgendeinen Falschen Wert misst.
Gruß
DerDani

Dani, kannst du mir helfen die Kalibrierung in meinen Sketch einzubauen? Ich kriege das nicht hin.

Mache ich selten aber hier mal fertigen Code

#define MPX A0

int nullpunkt = 0;
int MPXunskaliert = 0;
int LDLast = 0;
float Ladedruck_in_mbar = 0.0;
const float mbar_pro_bit = 2.4;

int get_LD() {                                      // Funktion Einlesen Ladedruck unskaliert
  return LDLast = (analogRead(MPX) * 0.2) + (LDLast * 0.8); // Der neue gelesene Wert hat pro Zyklus nur einen einfluß von 20%
/*
Diese Funktion liest den neuen Wert ein und Bewertet ihn mit 20% den Wert aus dem vorherigen Zyklus mit 80% dies führt zu 
stabilisierung des Wertes. Auf keinen Fall darf in der Loop delay() benutzt werden
*/
}

void setup() {
  for (int i; i < 4; i++) {  // Der Motor muss hier noch aus sein
    nullpunkt = nullpunkt + analogRead(MPX);
  }
  nullpunkt = nullpunkt / 5;
}

void loop() {
  MPXunskaliert = get_LD();   // Einlesen Rohwert
  Ladedruck_in_mbar = (MPXunskaliert - nullpunkt) * mbar_pro_bit;  // Umrechenen nach Druck
}

Ich habe ihn Kommentiert. Damit bekommst du Floatwerte Druck in mbar als Float incl Über und Unterdruck.

Gruß
DerDani

Hi Dani,

1000 Dank du bringst mich auf neue Ideen bzw. deine Hinweise helfen mir dabei die Programmiersprache zu verstehen. Ich habe meinen eigenen Sketch weiter geschrieben und vorerst mal deine 5-fache Messung und deine Gewichtung 20% zu 80% auch außen vor gelassen. Ich möchte es erst einmal einfach halten und lese aktuell viele Werte mit dem Seriellen Ausgang aus, um die Sketches zu verstehen. Aktuell sieht es bei mir so aus:

schleife = analogRead(A0);     //Lesevorgang vom Analogport im Loop
nullwert = schleife-start;                //nullwert ist die differenz der Schleife und des startwertes (der startwert ist analogRead(A0) im Setup
berechnung = (nullwert*0.0024);     //Berechnung ist dann der nullwert*2,4
Serial.println(berechnung);

Mir ist jedoch aufgefallen, dass der Sensor ja 1,5 Bar Überdruck lesen kann. Nachdem bei mir 0,1 Bar für den atmosphärischen Druck abgezogen wird, kann ich den MPX quasi nur noch bis 1,4 bar nutzen. Das schlechte daran ist, dass der Unterdruck dann wohl auch nicht bei -0,8bar landen wird, sondern bei -0,7 bar, richtig?