Verwirrung des externen Pull-up-Widerstands von Adruino

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;
    }
}
Mein Verständnis ist, dass der Pin-Modus den internen Pull-up-Widerstand aktiviert, der etwa 10-mal höher ist als der empfohlene Widerstandswert. Auch hier weiß ich nicht genug über Elektronik, um zu wissen, ob dies ein Problem verursachen wird, aber die Dokumente zeigen, dass dies zu einer langsamen Anstiegszeit führen würde (ich weiß auch hier nicht, ob dies ein Problem wäre).

Antworten (2)

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.

Danke für die klare Erklärung! Ich werde es versuchen. Eine Frage. Wenn ich von VCC auf Pin 1 lege, habe ich 5 Volt an allen Pins? Der Grund, warum ich frage, ist, dass ich eventuell einen Pin als Spannungsausgang für einen Datenlogger verwenden könnte. Hier ist ein direkter Link zum Pinbelegungsbild cdn.sparkfun.com/assets/9/c/3/c/4/523a1765757b7f5c6e8b4567.png
Ich verstehe deine Fragen nicht. Warum ist Pin 1 beteiligt?
In Ihrer Antwort heißt es: "... dann verbinden Sie auch ein Ende des Widerstands mit Pin1." Wollten Sie dort pin10 eingeben?

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 ...

Ich nicht, aber wenn in den Sensorinformationen PCM erwähnt wird, bezieht sich dies auf eines der Computermodule im Auto, wo ich den Pull-up verstehe.