Drive By Wire mit Leerlaufregelung - Denkanstoss

Hallo zusammen,

ich baue grad ein Motorsportfahrzeug auf und die Regeln besagen, das ich die Drosselklappe beibehalten muss. Die Elektronisch Steuerung (ECU) ist aber freigestellt. Da ich seit 10 Jahren freie Steuerungen programmiere ist das nicht all zu schwer.

Was mir edoch den kopf zerbricht ist die Ansteuerung der Drosselklappe (das kann das frei programmierbare Stg. leider nicht).
Ich hab im Forum ein skript gefunden samt Schaltung die grundsätzlich erstmal die Klappe ansteuert. Der Arduino erhält ein TPS Signal vom Gaspedal (0-5V) und setzt dies als PWM an einen TIP 120 um.

Damit ist erstmal die grundsätzliche Ansteuerung möglich. Aber die Drosselklappe regelt natürlich auch den Leerlauf. Die Leerlauf Steuerung kommt aber direkt vom Steuergerät. Ich müsste also eigentlich 2 Leitungen an die Drosselklappe setzen was aber bestimmt zu Problemen führt. Denn dann würde die Klappe 2 unterschiedliche PWM Signale erhalten (1x vom Arduino wie das Gaspedal steht und 1x von der ECU ob Leerlauf oder nicht)

Meine Idee wäre das Leerlauf PWM Signal mit über den Arduino laufen zu lassen, habe dazu aber nur was gefunden, das dies wohl nicht geht. Der Arduino kann mit PWM nicht viel anfangen (ist ja eigentlich nicht ein schnelles Digitales 1/0).

Hat da jemand noch eine andere Idee? Vielleicht sowas schon mal gemacht?

Liebe Grüße
david

dbehr1986:
...

Eine konkrete Idee habe ich nicht. Mir fällt dazu jedenfalls nur das Stichwort Interrupt ein.

In diesem Zusammenhang eine Frage: Um welche PWM-Frequenz geht es?

Gruß

Gregor

Hi

Leerlauf ist, wenn das Steuergerät den Leerlauf-PWM ausgibt, oder?
Also nicht 'kein Gas = Leerlauf', da der Motor ja durchaus in ganz anderen Regionen drehen kann, auch wenn halt kein Gas gegeben wird.
Ändert sich das Leerlauf-PWM-Signal, also wird Dieses so von der Steuerung angepasst, daß der Motor an bleibt?

Wie ändert sich das Leerlauf-PWM-Signal, wenn Gas gegeben wird?

Wenn Du Dich komplett selber um das Signal kümmerst?
Bei unter 700 r/min 'etwas mehr Gas', bei über 750 r/min 'etwas weniger Gas', wenn Gas gegeben wird 'Das, was halt muß'.
Bin selber aber bestenfalls mit den Fingern an irgendwelchen 'hard-programmierten' Vergasermotörchen aka Rasenmäher.

MfG

Da ich mich ein klein wenig mit Motoren auskenne, kann ich sagen, dass der Drosselklappenantrieb nicht "feinfühlig" genug für eine Leerlaufregelung ist.

Darum haben alle (die meisten?) mir bekannten Modelle einen Leerlaufregler.
Entweder als Bypass zur Drosselklappe.
Oder einen Stellmotor für einen variablen Drosselklappenanschlag.

Zumindest hättest du so 2 Ziele für deine PWM.

Der Arduino kann mit PWM nicht viel anfangen (ist ja eigentlich nicht ein schnelles Digitales 1/0).

Das verstehe ich nicht!
Meine Arduinos können ganz gut PWM verarbeiten.
Sowohl am Eingang, als auch am Ausgang.

Und wenn wenn ein Arduino nicht geht, was muss der "Andere" für Fähigkeiten haben, damit er deine Anforderungen erfüllt?

@ Gregor: wir reden von 32Khz. Allerdings spiele ich damit noch rum. Vielleicht geht es auch mit etwas weniger.

@ino: Ja Richtig. Leerlauf macht das Steuergerät aber eben durch ansteuerung der Drosselklappe. Das Problem bei nur "steuergerät" ist das E-Gas Pedal. Ich kann dem Steuergerät nicht beibringen das der TPS Sensor am Gaspedal genutzt werden soll dann umrechen und als PWM ausgeben. Genau da ist das Problem.

Deswegen muss die E-Gas Umsetzung von einem "dritten" erfolgen. Es sei denn man nutzt Canbus aber das hat mein Auto noch nicht. Gab es erst im Facelift Modell.

@Combie:
Doch die Drosselklappe übernimmt auch den Leerlauf. Da ist nichts weiteres mehr angeschlossen. Da ich mich ebenfalls ein "klein wenig" auskenne (früher mal Rennmotoren gebaut) kann ich dir sagen, das diese Drosselklappen Art alles einem macht. Leerlauf / Gas geben / Drehzahlschwankung bei Licht/Klima/Heizung einschalten ausgleichen usw. Es gibt aber auch wie du schon erwähnt hast klappen die können das so nicht. Meine kann das jedoch.

Ich hab es bislang nur darüber gelesen das der Arduino bei einem PWM Eingang streikt. Das dem das "zu schnell" ist. Ausprobiert hab ich das noch nicht. So fit bin ich in der ganzen Arduino Sache nicht. Wie hast du das gelöst?

Mir ist dazu gerade aber eine Idee gekommen, bin aber aktuell noch aufgeschmissen wie das Schaltschema dazu aussehen müsste. Folgendes: Das GasPedal besitzt 2 TPS Sensoren. Der Serienhersteller verbaut im E-Gas Pedal immer 2 TPS Sensoren zur gegenseitigen Überwachung. Diese Überwachung findet aber im Steuergerät statt. 1 TPS Sensor ist natürlich "verbraucht" - für den Arduino.

Der 2 TPS Sensor ist jedoch noch frei. Jetzt ist meine Idee das man den 2. TPS mit in den Arduino einbindet und per Programmierung dann umstellt. So in der Art "Wenn 2.TPS gleich 0 dann schalte Ausgang D4".

Und mit Schalte X meine ich eine Art Schalter. Auf der einen Seite kommt PWM Arduino und PWM Leerlauf an. Dann gibt es einen Eingang der prüft ob D4 1 oder 0 ist. Und der Ausgang geht dann zur Drosselklappe.

Praktisch eine Art "Trenner" von 2 Leitungen und je nach Zustand wird dann eben PWM 1 oder 2 zur Drosselklappe geschickt.

Ich hoffe man kann mir soweit folgen.

Ich hab es bislang nur darüber gelesen das der Arduino bei einem PWM Eingang streikt. Das dem das "zu schnell" ist. Ausprobiert hab ich das noch nicht. So fit bin ich in der ganzen Arduino Sache nicht. Wie hast du das gelöst?

Mit Timern.
Die sind in jedem AVR eingebaut.
Untersuche das Datenblatt deines Arduinos.
Manche dieser Timer können sogar mit 64MHz getaktet werden.

Also, wenn du irgendwas liest, dann fange mit dem Datenblatt an.
Denn mit den Arduino Komfort Methoden/Funktionen wirst du nicht weit kommen.
Da wirst du tiefer in die Trickkiste greifen müssen.

Du kannst das pwm auch glätten und dann analog einlesen. Z.b. Mit sowas

Im RC Bereich gibt es für den Arduino libs, die ein pwm problemlos einlesen können, allerdings weiß ich nicht, bis zu welcher Frequenz.

Hi

Gerade, wenn Da eine hohe Frequenz rein kommt, bin ich mit pulsin doch direkt richtig gut im Geschäft.
Mir geht es ja nicht darum, JEDE Flanke mitzubekommen, aber das PWM-Signal wird sich ja auch nicht mit mehreren zig kHz völlig ändern - also wird wohl nicht von 10% auf 90% hin und her tanzen, sondern - laienhaft gesprochen - den PWM-Wert den Gegebenheiten anpassen, was wohl ein/zwei Motorumdrehungen dauern dürfte.

So habe ich die Leerlauf-PWM (gebe ich stur vor) und die Steuergeräte-PWM.
Je nach Lust und Laune gebe ich eine der Beiden wieder aus.

Andere Idee wäre ein Analog-Schalter - man müsste testen, wie lange Der das Bord-Netz überlebt.

MfG

PS: Selbst, wenn der Arduino nur alle ms eine Runde in der loop() schafft, kommst Du 1000x an Deiner Messung vorbei.
Anmerkung: pulsin ist blockierend, hier sollte mit timeout gearbeitet werden, damit Dir während der Wartezeit, wenn doch kein Impuls rein kommt (Standard, also ohne angegebenen timeout, immerhin 1 Sek !!) Nichts kaputt geht.

ElEspanol:
Im RC Bereich gibt es für den Arduino libs, die ein pwm problemlos einlesen können, allerdings weiß ich nicht, bis zu welcher Frequenz.

Im Modellbau sind 50Hz üblich. Für Sondererfordernisse (schnellere Reaktion zB Hubschrauber) gibt es noch 400Hz.

Grüße Uwe

@Ino: Danke für den Tipp... Ich denke das kommt dem ganzen schon sehr nah dran. Du hast einmal eine "krasse" änderung. Von Vollgas auf leerlauf. Aber dazwischen ist ein riesiger Zeitlicher Sprung. Ist der gang Eingekuppelt braucht der Motor jede Menge Zeit bis der in richtung Leerlauf geht (leerlauf ca. 900rpm - Vollast max. Drehzahl 8000)

Selbst wenn man auskuppelt braucht das immer noch mehrer Sekunden bis die Drehzahl unten ist. Bis dahin sollte der Arduino es aber gescheckt haben, das TPS 2 = 0 ist. Das Steuergerät hat dann schon einen fixen PWM Wert... Wenn es merkt, das die Drehzahl zu hoch ist steuert es dagegen in dem es langsam den PWM runterregelt.. Das ganze ist dann PID gesteuert damit das nicht anfängt zu schwingen. Die Controller der Drehzahl (Soll rpm zu IST rpm) erfolgt dann in 150ms abstand.

Auch das sollte ja nach deiner beschreibung vom Arduino passen. Ich hab aktuell einen Nano im Einsatz.

gregorss:
Um welche PWM-Frequenz geht es?

dbehr1986:
@ Gregor: wir reden von 32Khz.

Ist doch etwas höher als beim Modellbau. Deswegen meine Einschränkung bei den libs.