PWM Signal Manipulieren für KFZ

Hallo zusammen und einen angenehmen Tag.

Kurze Vorgeschichte:
Ich kümmere mich derzeit um das Auto eines Freundes (Mitsubishi L200) welcher nach diversen Umbaumaßnahmen für den Offroadbetrieb nun kurz davor steht TÜV zu bekommen.

Innerhlab der Umrüstungsmaßnahmen wurden unter anderem auch deutlich größere Räder montiert.
Diese deutlich größeren Räder sorgen nun für eine Tachoabweichung (der Tacho zeigt nun ca. 18% weniger an als das Fahrzeug in Realität fährt).

Alle anderen Umbaumaßnahmen sind TÜV Konform und es mangelt "nurnoch" an einer korrekten Tachoanzeige. Sollte diese erfolgen bekommt der Wagen endlich wieder TÜV. (Die Kontrolle ob der Tacho richtig geht und die Dokumentation dessen übernimmt hierbei ebenfalls der TÜV).

Da Mechanisch nicht viel Möglich ist (Die Tachodrehzahl wird mittels Kunststoffzahnrad abgenommen und dann von einem Sensor direkt am Getriebe in ein elektronisches Signal umgewandelt) möchte ich es nun gerne auf dem Elektronischen Wege versuchen.

Folgende Problemstellung ergibt sich dadurch:
Besagter Tachosensor besitzt über 3 Pins (12V Plus, Fahrzeugmasse und P)
Plus und Masse erklären sich hierbei von selbst, P scheint dabei die Signalleitung zu sein die zurück zum Tacho führt.

Mittels Oszilloskop konnte ich nun bereits zwischen P und Fahrzeugmasse einen Signalverlauf abbilden. Es sieht meiner Meinung nach wie ein relativ normales PWM Signal aus. Zum testen habe ich die mechanische Seite des Sensors in den Akkuschrauber eingespannt und drehen lassen.

Der erhaltene Signalverlauf macht auf mich den Eindruck dass das Tastverhältnis zwischen ON und OFF hierbei ziemlich (vllt auch komplett) gleich bleibt. Also immer 50% ON 50%OFF, was aus rein mechanischer Sicher auch irgendwie Sinn ergeben würde, da es sich um einen rotierenden Sensor handelt und die Strecken die innerhalb einer Rotation zurückgelegt werden ja immer gleich bleiben müssen.

Drehe ich den Sensor mit dem Akkuschrauber nun schneller erhalte ich in der selben Zeit mehr "Ausschläge" als wenn ich den Akkuschrauber langsam drehen lassen.

Die Signalspannung beträgt hierbei ca.9V

Nun meine Frage:
Besteht irgendwie die Möglichkeit das erhaltene Signal abzugreifen, in den Arduino einzuspeisen und mit z.B. 18% weniger Ausschlägen wieder auszugeben und an den Tacho weiterzuleiten? Meine Vermutung ist hierbei, dass sowzusagen die Impulse pro fester Zeit vom Tacho bzw. dem eingebauten Steuergerät ausgewertet werden und daraus eine Geschwindigkeit berechnet und angezeigt wird.

Es wäre auch kein Problem wenn dies leicht Zeitverzögert, also nicht in Echtzeit geschieht, sondern mit z.B. einer Sekunde Differenz. Bei der Fahrzeugträgheit und anderen Faktoren wäre dies kein Problem.

Hat irgendjemand eine Idee wie man hier vorgehen könnte? Die verschiedenen Spannungen (5V Arduino , 9V Signal ) machen mir hier ebenfalls etwas zu schaffen. Leider habe ich auf diesem Gebiet nicht viel Erfahrung und mein erster Gedanke ging in Richtung Solid State Relais, wobei ich mich auch hier zu wenig auskenne um verlässliche Aussagen zu treffen.

Vielen Dank für Alle Ideen im Voraus und liebe Grüße aus der Werkstatt :slight_smile:

P.S. Die Bilder sind etwas verwackelt, das Signal hat in Wirklichkeit glatte Flanken.







Hi

Den Arduino musst Du vor dem KFZ-Bordnetz schützen - sonst macht Der's nicht lange!
http://www.dse-faq.elektronik-kompendium.de

Dann musst Du das Signal für den Arduino überlebbar machen - Optokoppler würde sich hier anbieten.
Wahrscheinlich brauchst Du ebenfalls mehr als die 5V des Arduino, damit der Tacho damit auch wieder zuckt - ginge ebenfalls über einen Opto-Koppler.

Nun brauchst Du 'nur noch' einen Sketch, Der die Zeiten zwischen den Flanken mitschneidet, diese Länge um 18% verkürzt und zum Tacho schickt.

Pulsein ist dafür nicht sonderlich geeignet, da blockierend.
Ein reines Warten auf die nächste Flanke endet ebenfalls im Nirwaner, sobald Du an der ersten Ampel hältst.

Ob ein Arduino hier erlaubt ist, kA - sofern den 'Postangestellten interessiert nur die Adresse' auch beim TÜV zutrifft, wird's wohl egal sein.
Ein Tacho (Geschwindigkeitsmesser) scheint vorgeschrieben, der Kilometerzähler nicht.

MfG

postmaster-ino:
Ein Tacho (Geschwindigkeitsmesser) scheint vorgeschrieben, der Kilometerzähler nicht.

Macht ja auch Sinn. Die Polizei hält Dich im normalfall auch nicht an, weill du mit Deinem Fahrzeug zuviele Kilometer zurüklegs (es sei denn, Du hast das am Stück getan und bist deswegen übermüdet).
Aber wenn Du zu schnell fährst, verstehen die keinen Spass mehr.

In einem Bestimmten Bundesstaat in den USA, weiss jetzt nicht mehr welchem, da darfst Du mit nem Fahrzeug fahren, das keine Frontscheibe drin hat, ABER, Du darfst nicht mit dem Fahrzeug fahren, wenn es keine Scheibenwischer hat!
Da darf man dann über den Sinn streiten.

LG Stefan

@ postmaster-ino

Vielen Dank, das klingt schonmal sehr vielversprechend und als ob mein Vorhaben nicht unmöglich ist. :smiley:

Zum Thema TÜV kann ich bestätigen, solange nachweislich dokumentiert wird dass der Tacho innerhalb des vorgegebenen Toleranzbereichs liegt spielt es soweit keine Rolle wie dies erreicht wird. Solange keine anderen Gesetze damit gebrochen werden versteht sich. Bei älteren Modellen wäre ein umritzeln des Tachos ebenfalls möglich. Bei manchen aktuellen Modellen sind desweiteren auch Anpassung an der Tachosoftware durch den Hersteller möglich, (VAG Gruppe zum beispiel) Mitsubishi bietet dies aber leider nicht an.

Zum Thema Opto-Koppler: Leider ist das einzige was ich darüber weiß das was eine 5 Minütige Google Suche und das lesen des Wikipedia Artikels her gibt. Meine Programmierfähigkeiten beschränken sich darüber hinaus auch auf ein Minimum. Benötige ich bei dieser Variante noch zusätzliche Relais oder derartiges oder ist das quasi mittels Arduino und Opto-Kollpler möglich?

@Deltaflyer
Das stimmt meines Wissens nach so, Kilometerzähler sind nur dann vorgeschrieben wenn die Fahrzeuge beruflich genutzt werden. Sollte sich mein Problem allerdings lösen lassen schlage ich zwei Fliegen mit einer Klappe, da die zurückgelegte Strecke bei diesem Tacho meines Wissens nach einfach aus Fahrgeschwindigkeit und Dauer berechnet wird.

Meiner Meinung nach ist das Problem zwar lösbar, ber du benötigst ein paar elektrische und elektronische Kenntnisse, um s erfolgreich zu verwirklichen.

Zunächst mal ist das Bordnetz eines Autos ein elektrisch gesehen ein Seuchenpfuhl.
Betriebsspannung suber machen, Filtern, und alle unbenutzte Eingänge sauber auf Masse ziehen oder wenigstens Abblocken.

Eingangspegel der Pulse via Optokoppler ( ist einfach ) auf 5V runter bringen.

Die Impule nicht mit mit pulseIn einlesen, sondern blöckadefrei.

z.B. so:

Vorher einfügen

#include <Servo.h>

const byte    pulsePin = 10;  // Pin an dem der Puls anliegt
unsigned long startTime;      // Zeit an der positiven Impulsflanke
unsigned long startTime2;
bool          lastPinState;   // letzter Zustand am Pulse-Pin
int           pulseLength;    // Länge des Pulses
//const byte    pulseOut = 11;  // nur für genauigkeitstest mit LA
byte          pulseValue;     // Auswertezustand der Pulslänge
byte          pulseNeu;

void setup()

 pinMode( pulsePin, INPUT );
  lastPinState = digitalRead( pulsePin );   // für Erstauswertung
  pinMode( NAV, OUTPUT );
  pinMode(LL, OUTPUT );
  //pinMode( pulseOut, OUTPUT );   



void loop()

bool actPinState = digitalRead( pulsePin );
  if ( actPinState != lastPinState ) {
    // Es hat ein Flankenwechsel stattgefunden
    if ( actPinState == HIGH ) {
      // Positive Flanke -> Zeitmessung starten
      startTime = micros();
      
    } else {
      // negative Flanke, Zeit auswerten
      pulseLength = micros()-startTime;
     
pulsNeu=pulsLength*082;

digitalWrite(pulsOut, High);
startTime2=micros();
If ( micros==(startTime2+pulsNeu){
digitalWrite(pulsOut, LOW);


pulsLength ist nun die Länge des Pulses in Millisekunden.

pulsNeu wäre dann z.B. pulseLength*.82. ( also minus 18% )

digitalwrite pulseNeu auf einen Ausgang( hier 11 ).
Ausgang wieder auf Optokoppler.
Optokoppler Ausgang 9V an Tacho.

Volltanken, Urlaub fahren.

So ungefähr müsste es gehen.
Kanns leider gerade nicht probieren.
Aber vielleicht könen die Profis hier noch eventuelle Fehler rauspieken.

@skyfox60
WoW! Vielen Dank für die Mühe! Damit hatte ich echt nicht gerechnet!

Ok dann denke ich dass ich jetzt mal schnellstens Opptokoppler bestellen sollte und irgendwann um die Spannung von 9V auf 5V runter zu bekommen.

Gibt es hier irgendwas bestimmtes? Wenn ich in der Bucht oder auf Amazon nach Opptokoppler 5-9V suche bekomme ich alles mögliche, in meiner Unwissenheit bin ich hier aber definitiv nicht in der Lage zu entscheiden was genau ich hier brauche bzw. worin sich die einzelnen Komponenten überhaupt unterscheiden.

Also copy/paste gleube ich nicht, dass das schon alles so funktioniert.
Ich konnte es wie gesagt nicht testen. Sollte so als Hinweis dienen, wie man einen Puls einlesen kann ohne blockade.
Bin selbst noch Anfänger und hatte den Tip hier aus dem Forum bekommen.

Bin mir auch nicht sicher, ob man dafür auch noch eine andere Library benötigt.
Wenn ja, dann einfach dazu packen. Die ist für vieles super nützlich.
such mal nach mobTools.
#include <MobaTools.h>

Die ist klasse.

Was die Optos angeht

DIE hier sind sehr gut, hab ich schon verbaut.

Die haben Vorwiderstände drauf, kannse also direkt mit dem Ausgang des Arduino ansteuern.
Also für die Weitergabe an den Tacho.

Eingangsseiting denke ich, sollte ein 2k" reichen, da mit dem Signal von 9V drauf, Ausgangsseitig an die 5V hängen und die Emitter wieder direkt an den Arduino. Die schalten auch schnell. Ich hab das mit Pulsen vom 50mS ausprobiert. Geht aber auch mehr.

HIER findest du ein Datenblatt von dem eigentlichen Optokoppler.

Denk dran, das die Dinger die Ausgangsimpulse wieder ein wenig verlängern.

Mit dem Wert *0.82 im Sketch wirst du am Ende nicht auskommen, das musst du noch Korrekturen für die Verfälschungen einbauen, zumal die bei unterschiedlichen Spannungen auch noch unterschiedlich groß ausfallen.

Das wird schon noch Experimentiererei bis das alles so läuft.
Die Tachosignale, von/bis welcher Frequenz werden die anstehen?
Das hat starke Auswirkung auf die Möglichkeiten der weiteren Programmierung.
Der Sketch sollte von Anfang an möglichst Zeitoptimiert laufen.
So Dinge, wie delay u. ä. kann man da nun mal gar nicht brauchen.

Wird schon, nur Mut.

Wie sagt der Tommy so zutreffend in seiner Signatur: "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken".

Viel SPaß bei der Umsetzung. Las dir auch von den Profis helfen hier, ich kann nur Denkanstöße geben.

Und halt uns auf dem Laufenden bitte.

Nicht das es nachher funzt, du bist hier weg, und wir stehen im Regen, nicht wissend, ob ein Tip geholfen hat oder nicht.

Hab ich beim Nachlesen alter Threads leider oft gesehen.

PS:
Mein "Hinweis-Sketch" enthält nix, um die Ausgangs-Pause genauso groß zu machen wie den Ausgangs-Puls selbst.
Das kann man allerdings ggf. genauso lösen, wie den Einschaltvorgang.
Hab nur nicht die Zeit mich da jetzt tiefer rein zu knien.

Hallo,

hast Du schon mal darüber nachgedacht den Tacho auszubauen und einfach die Skala neu zu machen. Ich könnte mir vorstellen das das eventuell einfacher ist.

Heinz

Hi

Dann werden die Kilometer aber nicht mehr ganz passen - ob man dann hinkommt, wenn man 'Faktor x1,28' dazuschreibt?

MfG