This is my Arduino piece of code to keep the MAF value under control vs RPM, in idle mode and above (sorry for the french comments)
- "RPM" contains RPM value,
- "MAF_Memory" in contains 60ms square-averaged values of MAF voltage data,
- "MAF_Voltage_int" contains 120ms square-averaged values of MAF volttage data
- "valeur" contains the MAF_out voltage value to be sent to the ECU.
I have kept a 0.02V and 10 RPM 'security' to stay 100% away of any limp mode.
//
****//
{ //* M A F_in analyse et traitement des mises en sécurité ECU *//
//
***//
moteur_arrete = false;
if (RPM <= 600 ) valeur = MAF_Memory_in; // pas de signal RPM -> MAF_out = MAF_in
else
{
if (MAF_Voltage_int <= 2.20) valeur = 1.80; // on force la sortie MAF à 1.80V fixe et stable;
// De 2.20V on passera à 1.80V soit - 0.40 V au ralenti
// jusque 2,80 Volts en input, on rejoint linéairement la courbe MAF_in :
else if (MAF_Voltage_int < 2.80) valeur = 1.80 + (MAF_Voltage_int - 2.20) * 1.66667 ;
else valeur = MAF_Voltage_int;
/
* Traitement des mises en sécurité */
/* il faut vérifier que la tension MAF n'est pas */
/* - au dessus de 3.55V en dessous de 2000tr/mn */
/* - au dessus de 3.78V en dessous de 2500tr/mn */
/* - au dessus de 3.98V en dessous de 3000tr/mn */
/* - au dessus de 4.20V en dessous de 3500tr/mn */
if (RPM <= 2010.0) { if (valeur > 3.53) valeur = 3.53;}
else if (RPM <= 2510.0) { if (valeur > 3.86) valeur = 3.86;}
else if (RPM <= 3010.0) { if (valeur > 3.96) valeur = 3.96;}
else if (RPM <= 3510.0) { if (valeur > 4.18) valeur = 4.18;}
}
}