Lambda-Anzeige

Moin, ich möchte mir eine Lambdaanzeige (Sprungsonde!) bauen.

Hierfür habe ich diese Seite gefunden, die das ganze mit einem AT90S2313 macht.

http://www.mdvp.de/Lambda/Lambda.html

Leider wird der AT90s2313 schon lange nicht mehr Produziert. War auch nicht mehr Zeitgemäß.
(Selbst der ATMega48 ist asbach uralt :grin: )

Nun will ich das Ganze auf dem Arduino Mini mit 16x2 LCD umsetztn.

Habe alles so weit das ich ein Spannung anzeigen kann, 0-5V.

Nun zu meinen Fragen:

  • Kann ich die Genauigkeit der Spannungmessung noch weiter erhöhen? Brauche eigentlich nur von 0 bis 1,25 Volt (bei 8 Bit).

  • Wie kann ich die Spannung am besten auf die Kennlinie übersetzen? (Nicht Linear! Siehe Bild)
    mdvp.de hat das ganze mit einer art Datenbank gemacht. Geht das hier auch?

Temp.gif

  • Kann ich die Genauigkeit der Spannungmessung noch weiter erhöhen? Brauche eigentlich nur von 0 bis 1,25 Volt (bei 8 Bit).

Der Mini hat eine eingebaute Referenz von 1,1V 20 MOhm ist etwas zuviel für die AVR. Dir fehlt noch ein Impedanzwandler. Der kann auch gleich die Pegel anpassen.

Also ja. Das geht alles. Mit 10 Bit Auflösung.

schnibbelwind: - Kann ich die Genauigkeit der Spannungmessung noch weiter erhöhen? Brauche eigentlich nur von 0 bis 1,25 Volt (bei 8 Bit).

Der Atmega328 hat eine interne 1.1V Referenz

Wenn dir das nicht ausreicht (da du 1,25V messen willst), kannst du auch an AREF eine externe Spannungsreferenz anschließen. 1,2V passt vielleicht gerade so. Da gibt es z.B. den LM 385-Z1,2.

Ansonsten gibt es welche mit 2,5V. Das ist doppelt so gut wie die 5V vom Arduino.

Wie kann ich die Spannung am besten auf die Kennlinie übersetzen? (Nicht Linear! Siehe Bild) mdvp.de hat das ganze mit einer art Datenbank gemacht. Geht das hier auch?

Klar. Eine Tabelle (d.h. ein Array) und interpolieren für die Zwischenwerte

combie: Dir fehlt noch ein Impedanzwandler. Der kann auch gleich die Pegel anpassen.

Ein Impendanzwandler alleine passt keinen Pegel an. Ansonsten hast du recht dass man auch mit einem zusätzlichen OP danach die Eingangsspannung auf 0-5V spreizen kann. Wäre einfacher als eine externe Referenz wenn man sowieso einen OP braucht.

Du kannst die 1,1V Referenzspannung für den ADC nehmen, wenn diese Spannung (wie im Diagramm angegeben) ausreicht.

Die Skalierung würde ich in zwei Teile zerlegen, links und rechts vom Wendepunkt der Kurven, und dann nochmal für den etwa linearen Bereich am Rand. Mit etwas Glück bekommst Du dann Polynome 2. oder 3. Grades, mit Koeffizienten entsprechend der Temperatur.

Vielleicht etwas einfacher eine Interpolation zwischen ein paar Stützstellen. Wo die berechneten Kurven zu stark abweichen, fügst Du weiter Stützstellen hinzu, bis alles paßt.

Wenn du eine Sprungsonde verwendest, interessiert dich der Bereich lambda = 1. Und nur, ob du drüber oder drunter bist. Eine Sprungsonde eignet sich nicht, um andere Werte als Lambda=1 zu messen. Dafür ist auch die Genauigkeit des AD ausreichend, allerdings musst du noch einen OP davorschalten, um die hohe Impedanz zu bekommen.

Wenn du Lambda messen willst, brauchst du eine Breitbandsonde. Die ist aber aufwändiger, weil du zusätzlich noch die Heizung regeln musst, und die Auswerteschaltung sind auch nicht ohne.

Also, die Aussage "Lambda anzeigen" und "Sprungsonde" widersprechen sich.

Elektroniken für Otto-Motoren machen die lamda-Regelung oft einfach so: Gemisch anfetten, bis der Lambdawert springt, wieder langsam abmagern, bis Lambdawert zurückspringt. So pendelt die Maschine immer um Lamda = 1.

WOW :o Danke für so viele Antworten :slight_smile:

Ich werde heute mal versuchen das ganze mit der 1,1V Ref. zu testen, glaube aber 1,1 sollten reichen (650C° 1,1V=Lambda 0,78=extrem Fett) :wink:
Und morgen mich mal mit der Interpolation auseinander setzen.

Ja die Sprungsonde ist jetzt nicht sehr genau.
Ich glaube aber, das es für meine Vergaser Maschine ausreicht. Will damit dann nur fest stellen, ob sie mir nicht zu mager läuft.
Also immer fein “Lambda < 1” (siehe mdvp.de)

Meinst du das der AD-Eingang nicht ausreichend hochohmig ist? (100MOhm?!)

Wie genau ist die 1,1V Ref. wirklich? Erfahrungen? (Datenblatt sagt ja 1.0-1.1-1.2)

Der ADC ist für Signalquellen mit ca. <10 kOhm dimensioniert. Wenn du da eine Quelle mit so hoher Impedanz dazu schaltest geht das nicht, da Parallelschaltung.

Die Lösung ist ein Operationsverstärker als Impedanzwandler:

Wie genau ist die 1,1V Ref. wirklich?

Messe eine genau bekannte Spannung, dann merkst du es.

schnibbelwind:
Meinst du das der AD-Eingang nicht ausreichend hochohmig ist? (100MOhm?!)

Im Datenblatt steht zwar 100Mohm beim AD, aber du musst beim Wandeln auch immer die Eingangskapazität umladen. Deshalb empfiehlt das Datenblatt eine Impedanz <10k für Schaltungen am AD-Wandler.

Du kannst mal versuchen, ob du das mit einem 10nF als Stützkondensator vor dem AD eventuell beheben kannst.

schnibbelwind:
Wie genau ist die 1,1V Ref. wirklich? Erfahrungen? (Datenblatt sagt ja 1.0-1.1-1.2)

ja, die 1,1V ist ungenau.
Wenn du die 1,1V mit 10% nun der 5v mit 2% gegenüberstellst, dann hast du an absoluter Genauigkeit nicht viel gewonnen. Im Gegenteil: bei einer zu messenden Spannung von ca. 0,55V bist du mit 5V rechnerisch, genauer hast aber höheres Bitrauschen. Letzich dürfte es egal sein. Wenn du es wirklich genau willst, brauchst du eine externe Referenz.

Laut Datenblatt sollte man die interne Referenz auch an AREF messen können. Ausprobiert habe ich es aber noch nicht.

Serenifly: Laut Datenblatt sollte man die interne Referenz auch an AREF messen können. Ausprobiert habe ich es aber noch nicht.

Beim Mini ist Aref nicht zugänglich.

Die interne 1,1V kann man da auch nur messen, wenn sie aktiviert ist.

Von AVR zu AVR ist die Streuung schon recht groß. Aber sie ist recht stabil. Kaum abhängig von irgendwelchen Rahmenbedingungen. Auf jeden Fall viel stabiler als die Versorgung.

Also wäre diese Schaltung angesagt, Bild Ref.Volt. Mit 5V sollte die ja trotzdem passent laufen?!

MDVP hat den ADC so beschaltet, Bild LCD. Wäre doch die Lösung?!

Wenn ich anfange mit einem OP-Amp zu arbeiten kann ich eigentlich gleich die Sondenspannung von 1,1 auf z.B. 4,1V verstärken und die 5V Ref. verwenden. Ist ja eine lineare Verstärkung?!

Edit:
Oder welcher OP-Amp eignet sich für einen genauen Spannungsfolger?

LCD.gif

Ref.Volt.jpg

Das mit AREF am ProMini ist natürlich doof. Daran hatte ich nicht gedacht. Dann kannst du da auch keine externe Referenz verwenden. :confused:

Wenn ich anfange mit einem OP-Amp zu arbeiten kann ich eigentlich gleich die Sondenspannung von 1,1 auf z.B. 4,1V verstärken und die 5V Ref. verwenden. Ist ja eine lineare Verstärkung?!

Wenn du das willst, nimm einen zwei-fach OP. Dann kannst du einen als Impedanzwandler und dahinter einen als Verstärker verwenden.

Aber ich würde mal die 1,1V probieren. Wie gesagt ist die ziemlich stabil.

Man kann die Referenz auch direkt mit dem ADC messen:

Nach der Zeile hast du in “result” die Referenzspannung als Binärwert:

long result = (high<<8) | low;

Der Code ist eigentlich dazu da um die Versorgungsspannung zu messen. Er macht das indem man die Referenz misst. Das kann man dann so anpassen dass man die letzte Umrechnung nicht macht.

Wenn man dann eine sehr genaue 5V Versorgung hast…

combie:
Die interne 1,1V kann man da auch nur messen, wenn sie aktiviert ist.

Das war schon klar :slight_smile:

schnibbelwind: MDVP hat den ADC so beschaltet, Bild LCD. Wäre doch die Lösung?!

ja, so könnte das gehen. der 100k ist als Schutz für den Eingang. Ich würde einfach mal die Lambda-Sonde so an den arduino anschliessen und versuchen, was du messen kannst. die Referenz kannst du ja per Software umschalten. Erst, wenn du merkst, dass es nicht richtig geht, dann eine OP-Schaltung verwenden. hat deine Sonde eine Heizung? Dann hast du ja auch einen Temperatursensor drin, der würde dann sicherlich mit 5V versorgt werden.

Ich werde das ganze mal zweigleisig aufziehen. Eine Version mit dem Arduino Mini Pro, 10 LED-BAR und 1nF ADC. (Schätzeisen) Die andere Version wird mit einem Arduino Micro, 1.2V Ref, OP eingang und LCD sein.

Die 1.1V Ref. kann ich mal mit meinem Netzteil und Multimeter testen

DU kannst doch aus deinem Link in der Mitte das Dokument wo mit Hilfe von zwei LM324 die Lambda Spannung verstärkt wird diese nehmen und auf deinen Arduino setzten. Das wird dann so auch ohne weiters gehen. Gruß DerDani

So hab mir gestern die nötigen Komponenten bestellt.

Nun beschäftige ich mich erstmal mit der Interpolation und frage mich war hier die beste herangehensweise ist?!

Ich hab ja quasi meine Tabelle mit z.B.

Spannung | Lambda-Wert
500mV    | Lambda 1
400mV    | Lambda 0,...

oder
Spannung | LED
500mV    | LED5
400mV    | LED 3+4 (Zwischenwert zwischen zwei LEDs)

am besten Stützpunkttabelle und lineare interpolation.

ich hatte das früher mal so gelöst:

const int SensorPin = A10;

int i = 0;

void setup() {                
  Serial.begin(115200);   

}

void loop() {
  
  long Druck = Sensorlesen();
  Serial.print("  Druck: ");Serial.println(float(Druck/1000.0));
  
 delay(1000);
  
} //end loop

/*************************************************************************************************
**  Funktion Sensorlesen()												**
**************************************************************************************************
** Liest den AD-WErt an Pin "SensorPin"								**
** und interpoliert aus der Tabelle den korrekten pysikalischen Wert.				**
**  												**
**  												**
**  											   	**
**  Input: nix											**
**  Output: Druck in mBar									**
**  genutzte Globale Variablen: SensorPin							**
**************************************************************************************************/
long Sensorlesen() {
  static boolean init = true;
  const int ValidUG = 60;     // festlegen der unteren Grenze für gültige AD-Werte
  const int ValidOG = 600;  // festlegen der oberen Grenze für gültige AD-Werte
  /* Wertetabelle Sensor Werte */  
  const int Sensorpunkte = 11;
  const int SensTab[Sensorpunkte][2]={	{ 84 , 0},   // Wertepaare: AD-Wert, physikalische Wert
 					  { 163 , 1000},
 					  { 229 , 2000},
 					  { 286 , 3000},
 					  { 336 , 4000},
 					  { 379 , 5000},
 					  { 417 , 6000},
 					  { 451 , 7000},
 					  { 481 , 8000},
 					  { 509 , 9000},
 					  { 533 , 10000}};
                                    
                                    
  int SensorAD = analogRead(SensorPin);  
  
Serial.print("AD "); Serial.print(SensorAD); 
      
  // Überprüfen des AD-Signales auf Gültigkeit
  if (SensorAD < ValidUG || SensorAD > ValidOG){
    return -99;                  // Fehlercode -99 zurückgeben, wenn AD ausser Bereich.
  }
    
  int i = 0;    
  while (i < Sensorpunkte && SensorAD > SensTab[i][0]){i++;}  // passenden Eintrag in der Tabelle suchen
  // richtigen Wert interpolileren
  long Wert = (((SensTab[i][1] - SensTab[i-1][1]) * ( SensorAD - SensTab[i-1][0] ))/ (SensTab[i][0] - SensTab[i-1][0] )) + SensTab[i-1][1];

  return Wert;
} // End of Sensorlesen

Macht es wirklich Sinn, die Bereiche < Lambda 1 > zu interpolieren ?
Der Graph in dort sehr steil, genaue Lambdawerte lassen sich dort eh nicht errechnen.
(Das Verhalten einer Sprungsonde, wie schon erwähnt)

IHMO reichen 3 Led’s aus, die mit simplen if <> Abfragen oder ähnlichem gesteuert werden

rudirabbit:
Macht es wirklich Sinn, die Bereiche < Lambda 1 > zu interpolieren ?
Der Graph in dort sehr steil, genaue Lambdawerte lassen sich dort eh nicht errechnen.
(Das Verhalten einer Sprungsonde, wie schon erwähnt)

IHMO reichen 3 Led’s aus, die mit simplen if <> Abfragen oder ähnlichem gesteuert werden

Bei Einspritzern, mit Motorsteuergerät, ja.

Aber bei Vergasermotoren nicht. Da ist Lamba 1 unfahrbar.
Da ist hauptsächlich der Bereich von Lambda 0,7 bis 1 interessant.
Alles drüber und drunter kann im Prinzip abgeschnitten werden.

Und ja: Breitbandsonden wären besser geeignet.
Sind aber deutlich teurer.
Und haben eine höhere Betriebstemperatur (ca 850°C), welche schwieriger zu erreichen ist.

combie: Da ist hauptsächlich der Bereich von Lambda 0,7 bis 1 interessant.

aber eine Sprungsonde wird immer nur eine grobe, ungenaue Idee geben wo Lambda gerade liegt. Mehr: weit weg von 1, nicht so weit weg. Die Kennlinie ist in diesen Bereiche sehr ungenau und ohne die Sondentemperatur zu kennen ist das sowieso Kaffeesatzleserei. (wobei manche der Kaffeesatzleser hier im Forum erstaunlich gut liegen. ;) ) Aber um ein paar bunte LEDs am Armaturenbrett anzusteuern reichts allemal.