Ich habe ein Projekt, bei dem ich einem Auto, das keinen hat, einen Flex-Fuel-Sensor hinzufügen möchte. Ich habe den Flex-Fuel-Sensor eingebaut und verkabelt. Mein Plan ist, ein Arduino zu verwenden, um das Signal vom Sensor zu lesen und die Frequenz in den Ethanolprozentsatz umzuwandeln. Ich habe einen Arduino-Klon mit dem ATMega34U4-Chip gekauft.
Dies ist die Dokumentation zum Flex-Fuel-Sensor:
Der Kraftstoffsensor verwendet einen Mikroprozessor, um den Ethanolprozentsatz und die Kraftstofftemperatur zu messen, die er verwendet, um ein Signal zu erzeugen und auszugeben. Das Kraftstoffsensorsignal ist ein Rechteckspannungssignal. Das Signal variiert sowohl in der Frequenz als auch in der Impulsbreite:
Die Frequenz des Signals zeigt den Ethanolprozentsatz an. Die Ausgangsfrequenz ist in Bezug auf den prozentualen Ethanolgehalt im Kraftstoff linear. Das PCM liefert einen internen Pull-up auf fünf Volt im Signalstromkreis, und der Kraftstoffsensor zieht die 5 Volt impulsweise auf Masse. Der normale Bereich der Betriebsfrequenz liegt zwischen 50 und 150 Hertz:
50 Hertz zeigt 0 % Ethanol an
150 Hertz bedeutet 100 % Ethanol
Die Impulsbreite zeigt die Kraftstofftemperatur an. Die normale Impulsbreite liegt zwischen 1 und 5 Millisekunden:
1 Millisekunde bedeutet -40 °C (-40 °F)
5 Millisekunden bedeuten 125 °C (257 °F)
Ich weiß so gut wie nichts über Elektronik, was mich also verwirrt, ist der Pull-up-Widerstand. Ich habe über den internen Pull-up-Widerstand gelesen, aber der Wert darauf scheint zu hoch zu sein, laut diesem ( http://nefariousmotorsports.com/forum/index.php?topic=9168.0 ) sollte der Widerstand 1,2 bis 3k betragen, während der intern ist näher an 30k.
Meine Frage ist also, wie würde ich den Pull-up-Widerstand löten? Ich habe versucht, ein Ende des Widerstands an Pin 10 und das andere Ende an das VOUT-Kabel des Flex-Fuel-Sensors zu löten, aber das ergab bestenfalls inkonsistente Messwerte. Hier ist eine Pinbelegung für ein ähnliches Produkt ( https://www.sparkfun.com/products/12640 . Wie löte ich diesen Pull-up-Widerstand in dieses System?
Unten ist mein Code. Ich sehe meistens Nullen nach H: und L:
int inputPinNumber = 10;
double sum = 0;
int count = 0;
unsigned long pulseTime = 0;
int frequency = 0;
unsigned long high = 0;
unsigned long low = 0;
void setup()
{
Serial.begin(57600);
pinMode(10, INPUT);
LCD.init(0x3C);
LCD.clearDisplay();
LCD.setTextWrap(false);
LCD.setTextSize(2);
}
void loop()
{
high = pulseIn(inputPinNumber, HIGH);
low = pulseIn(inputPinNumber, LOW);
pulseTime = high + low;
LCD.clearDisplay();
LCD.setCursor(0, 0);
LCD.print("H: ");
LCD.println(high);
LCD.print("L: ");
LCD.println(low);
LCD.print("C: ");
LCD.println(count);
LCD.display();
if (pulseTime > 0)
{
sum += ((1000000 / pulseTime) - 50);
count = count++;
}
if (count > 50) {
LCD.clearDisplay();
frequency = (sum / count);
Serial.println(frequency);
LCD.setCursor(0, 0);
LCD.print(" E");
LCD.println(frequency);
LCD.display();
sum = 0;
count = 0;
}
}
Sie müssen den Ausgang des Sensors mit Pin 10 der Prozessorplatine verbinden und dann auch ein Ende des Widerstands mit demselben Pin 10 verbinden.
Das andere Ende des Widerstands sollte mit +5 V (VCC) verbunden sein, z. B. Pin 4.
Es wird Pull-up genannt, weil es den Signalstift auf 5 V hochzieht, wenn die Quelle ihn nicht niedrig treibt.
Manche Arten von Signalquellen funktionieren nur in eine Richtung. In diesem Fall kann der Sensor das Signal auf Masse zwingen, tut aber im anderen Zustand nichts. Es beruht auf dem Pull-up, um den Signalpegel einzustellen - daher die Notwendigkeit für den Pull-up-Widerstand.
Die Beschreibung des von Ihnen zitierten Sensors zeigt, wenn ich es richtig gelesen habe, dass der Sensorausgang einen internen Pullup-Widerstand (im Sensor) hat, sodass Sie am Arduino-Eingang keinen weiteren Pullup-Widerstand hinzufügen müssen.
Ein Link zum Sensordatenblatt würde zur Klärung beitragen ...
Nick