Inhaltsverzeichnis:

Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen - Gunook
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen - Gunook

Video: Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen - Gunook

Video: Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen - Gunook
Video: Drehzahl von großen Motoren über einen MOSFET (IRFZ44N) mit PWM steuern - Arduino Projekt 2024, November
Anonim
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen
Verwenden Sie Arduino, um die Motordrehzahl anzuzeigen

In dieser Anleitung wird beschrieben, wie ich ein Arduino UNO R3, ein 16x2-LCD-Display mit I2C und einen LED-Streifen verwendet habe, der als Drehzahlmesser und Schaltlicht in meinem Acura Integra-Rennwagen verwendet werden soll. Es wurde in Bezug auf jemanden geschrieben, der Erfahrung mit Arduino-Software oder Codierung im Allgemeinen, der mathematischen Software MATLAB und dem Erstellen oder Ändern elektrischer Schaltungen hat. In Zukunft kann dies überarbeitet werden, um es für jemanden mit wenig oder keiner Erfahrung mit diesen Themen leichter verständlich zu machen.

Schritt 1: Wählen Sie einen Sigal-Draht

Wählen Sie einen Sigal-Draht
Wählen Sie einen Sigal-Draht

Sie müssen ein Signal erhalten, das mit der Motordrehzahl korreliert. Es ist möglich, ein System hinzuzufügen, das die Motordrehzahl misst, aber es ist viel praktischer, ein vorhandenes Kabel anzuzapfen, das Motordrehzahlinformationen überträgt. Ein einzelnes Auto kann dafür mehrere Quellen haben, und es kann sogar von Jahr zu Jahr bei einem einzelnen Fahrzeugmodell stark variieren. Für dieses Tutorial verwende ich das Beispiel meines Autos, einen spurmodifizierten 2000 Acura Integra LS. Ich habe festgestellt, dass an meinem Motor (B18B1 mit OBD2) eine ungenutzte Spannung vorhanden ist, die 12 V hoch ist und nach einer vollständigen Umdrehung auf 0 V abfällt.

Dinge, die helfen, ein potenzielles Motordrehzahlsignal zu identifizieren:

  • Schaltplan für Ihr Fahrzeug
  • Durchsuchen von Foren für Ihr Fahrzeug mit Motor-/ECU-Signalen
  • Ein freundlicher Mechaniker oder Autoliebhaber

Schritt 2: Erweitern Sie den Draht zum Arduino-Board

Erweitern Sie den Draht zum Arduino-Board
Erweitern Sie den Draht zum Arduino-Board
Erweitern Sie den Draht zum Arduino-Board
Erweitern Sie den Draht zum Arduino-Board

Sobald Sie ein geeignetes Signal ausgewählt haben, müssen Sie es dorthin erweitern, wo Sie Ihr Arduino-Board platzieren. Ich beschloss, meine im Fahrzeug zu platzieren, wo sich früher das Radio befand, also führte ich das neue Kabel vom Motor durch eine Gummitülle in der Brandmauer und direkt zum Radiobereich. Da es bereits zahlreiche Anleitungen zum Abisolieren, Löten und Schützen von Leitungen gibt, werde ich diesen Vorgang nicht erklären.

Schritt 3: Signalanalyse

Signalanalyse
Signalanalyse

Hier kann es kompliziert werden. Ein allgemeines Verständnis von Signalanalyse und -steuerung wird Ihnen viel helfen, ist aber mit wenig Wissen machbar.

Das gewählte Signalkabel wird höchstwahrscheinlich nicht den genauen Wert der Motordrehzahl ausspucken. Es muss so geformt und modifiziert werden, dass die genaue Anzahl der Motordrehzahlen angegeben wird, die Sie möchten. Da jedes Fahrzeug und jedes gewählte Signalkabel unterschiedlich sein kann, werde ich ab diesem Punkt erklären, wie ich das Positionssignal vom Verteiler auf meinem Integra verwendet habe.

Mein Signal beträgt normalerweise 12 V und fällt auf 0 V ab, wenn eine volle Umdrehung abgeschlossen ist. Wenn Sie die Zeit für eine volle Umdrehung oder einen vollen Zyklus kennen, kann dies mit einigen grundlegenden Konzepten leicht in Umdrehungen/min übersetzt werden.

1 / (Sekunden pro Zyklus) = Zyklen pro Sekunde oder Hz

Umdrehungen pro Minute = Hz * 60

Schritt 4: Codieren Sie Ihre Signalanalyse

Codieren Sie Ihre Signalanalyse
Codieren Sie Ihre Signalanalyse

Dieses Verfahren erfordert das Abrufen der Zeit, die das Eingangssignal benötigt, um einen vollen Zyklus abzuschließen. Glücklicherweise hat die Arduino IDE-Software einen Befehl, der genau das tut, PulseIn.

Dieser Befehl wartet darauf, dass ein Signal einen Schwellenwert überschreitet, beginnt mit dem Zählen und stoppt den Zählvorgang, wenn der Schwellenwert erneut überschritten wird. Es gibt einige Details, die bei der Verwendung des Befehls beachtet werden sollten, daher werde ich hier einen Link zu Informationen von PulseIn einfügen:

PulseIn gibt einen Wert in Mikrosekunden zurück, und um die Mathematik einfach zu halten, sollte dieser sofort in normale Sekunden umgewandelt werden. Nach der Mathematik im vorherigen Schritt kann diese Zeitdauer direkt mit RPM gleichgesetzt werden.

Hinweis: Nach Versuch und Irrtum habe ich festgestellt, dass der Verteiler für jede einzelne Umdrehung der Motorkurbelwelle zwei Umdrehungen durchführt, also habe ich meine Antwort einfach durch 2 geteilt, um dies zu berücksichtigen.

Schritt 5: Identifizieren Sie einen Filter

Identifizieren Sie einen Filter
Identifizieren Sie einen Filter

Wenn Sie Glück haben, wird Ihr Signal kein "Rauschen" (Schwankungen) haben und Ihre Motordrehzahl wird genau sein. In meinem Fall kam viel Lärm vom Verteiler, der oft Spannungen lieferte, die weit von den Erwartungen entfernt waren. Dies führt zu sehr falschen Messwerten der tatsächlichen Motordrehzahl. Dieses Rauschen muss herausgefiltert werden.

Nach einiger Signalanalyse kam fast das gesamte Rauschen bei Frequenzen (Hz), die weit höher waren als das, was der Motor selbst ausgab (was für die meisten echten dynamischen Systeme gilt). Dies bedeutet, dass ein Tiefpassfilter ein idealer Kandidat dafür ist.

Ein Tiefpassfilter lässt tiefe Frequenzen (erwünscht) durch und dämpft die hohen Frequenzen (unerwünscht).

Schritt 6: Filtern: Teil 1

Filtern: Teil 1
Filtern: Teil 1
Filtern: Teil 1
Filtern: Teil 1
Filtern: Teil 1
Filtern: Teil 1

Das Entwerfen des Filters kann von Hand erfolgen, die Verwendung von MATLAB beschleunigt dies jedoch erheblich, wenn Sie Zugriff auf die Software haben.

Ein Tiefpassfilter kann einer Übertragungsfunktion (oder einem Bruch) im Laplace-Bereich (Frequenzbereich) gleichgesetzt werden. Die Eingangsfrequenz wird mit diesem Bruchteil multipliziert und der Ausgang ist ein gefiltertes Signal, das nur die Informationen enthält, die Sie verwenden möchten.

Die einzige Variable in der Funktion ist tau. Tau ist gleich 1 / Omega, wobei Omega die gewünschte Grenzfrequenz ist (muss in Radiant pro Sekunde angegeben werden). Die Cutoff-Frequenz ist die Grenze, an der höhere Frequenzen entfernt und niedrigere Frequenzen beibehalten werden.

Ich stelle die Grenzfrequenz auf eine Drehzahl ein, die mein Motor nie erreichen wird (990 U/min oder 165 Hz). Die FFT-Diagramme zeigen ungefähr, welche Frequenzen mein Rohsignal trug und welche Frequenzen aus dem Filter kamen.

Schritt 7: Filtern: Teil 2

Filtern: Teil 2
Filtern: Teil 2
Filtern: Teil 2
Filtern: Teil 2

Hier wurde aus Zeitgründen wieder MATLAB eingesetzt. Die Grenzfrequenz wird definiert und daraus die resultierende Übertragungsfunktion angezeigt. Beachten Sie, dass dieser Bruchteil nur für die Laplace-Domäne gilt und nicht direkt auf einem zeitbasierten Mikrocontroller wie Arduino UNO R3 verwendet werden kann.

Schritt 8: Filtern: Teil 3

Filtern: Teil 3
Filtern: Teil 3
Filtern: Teil 3
Filtern: Teil 3

MATLAB verfügt über einen Befehl, der eine kontinuierliche Funktion (Frequenzbereich) in eine diskrete Funktion (Zeitbereich) umwandelt. Die Ausgabe dieses Befehls liefert eine Gleichung, die leicht in den Arduino-IDE-Code integriert werden kann.

Schritt 9: Filtern: Teil 4

Filtern: Teil 4
Filtern: Teil 4
Filtern: Teil 4
Filtern: Teil 4

Fügen Sie in der Arduino-Skizze die Variablen u und y vor dem Setup ein. Der float-Befehl definiert einfach, wie die Variable Daten speichert (Dinge wie Maximalwert, Dezimalzahlen usw.) und ein Link zu weiteren Informationen dazu wird hier bereitgestellt: https://www.arduino.cc/reference/en/language /varie…

Beziehen Sie in die Schleife, in der die Umwandlung des Rohsignals in die Motordrehzahl stattfindet, die u-Variable und die y-Vielfachegleichung ein. Es gibt mehrere Möglichkeiten, dies zu verwenden, aber die Variable u sollte gleich dem gemessenen Roheingangssignal gesetzt werden, und die Variable y ist der gefilterte Wert.

Empfohlen: