Forum: Fahrzeugelektronik PMOS Überwachung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Steffen H. (steffenh)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine ECU, die über einen PMOS (MTP2955) ein Magnetventil gegen 
Masse ansteuert. Die Last sitzt ganz normal am Drain und Source ist mit 
U_Bat verbunden.

Beim Aufstarten macht die Software nun etwas Seltsames: Sie steuert den 
PMOS Transistor an und prüft, ob sich U_Bat erhöht (um mindestens 3V). 
Dann schaltet sie den PMOS ab und prüft, ob die Spannung wieder auf den 
Ursprungswert sinkt (plus ca. 1V Reserve)! Falls beides zutrifft, wird 
ein Fehler gesetzt.


Warum wird das gemacht? Vermutlich soll geprüft werden, ob über das 
Magnetventil ein Strom injiziert wird. Ich verstehe aber nicht, wie das 
funktionieren soll:

(1) Wo soll der Strom herkommen? Im Fahrzeug gibt es nur eine 
Bordnetzspannung.
(2) Mal angenommen, es gibt tatsächlich irgendwo ein höheres 
Spannungsniveau (bspw. weil die ECU Unterspannung hat, der Rest des 
Bordnetzes aber nicht) und mal angenommen, das Magnetventil hat einen 
Kurzschluss dahin: Der PMOS wird doch so oder so leitend, da an Drain 
nun immer die erhöhte Spannung anliegt, am Gate aber max. U_Bat (was 
höheres kennt die ECU ja nicht). Folglich öffnet der PMOS und U_Bat 
steigt - und zwar unabhängig von der Ansteuerung! Das heißt, das 
testweise Ansteuern der Software würde gar nichts bringen.
(3) Ergänzend hat der PMOS auch noch die Body Diode, die den vorherigen 
Punkt (2) unterstützt.


Irgendwo habe ich einen Denkfehler drin. Hat jemand eine Tipp?

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-1 lesenswert
nicht lesenswert
> Aufstarten
Ist das das Gegenteil von zulanden?

> Hat jemand eine Tipp?
Ohne einen korrekten(!) Schaltplan in verständlicher Form sicher nicht.

von Martin S. (sirnails)


Bewertung
-3 lesenswert
nicht lesenswert
Ben B. schrieb:
>> Hat jemand eine Tipp?
> Ohne einen korrekten(!) Schaltplan in verständlicher Form sicher nicht.

Mei was schwadronierst Du hier schon wieder? Musst Du wirklich in jedem 
Thread einen gehaltlosen Beitrag abkippen?

Steffen H. schrieb:
> Irgendwo habe ich einen Denkfehler drin. Hat jemand eine Tipp?

Auf welcher Seite vom PMOS wird denn gemessen? Kann es sein, dass die 
Schaltung prüfen soll, ob die Pumpe überhaupt angeschlossen ist?

Ich glaube Drain und Source sind bei Deiner Darstellung falsch herum.

Woher kennst Du die Softwareprüfung?

von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> Auf welcher Seite vom PMOS wird denn gemessen?

Es wird die Betriebsspannung gemessen. Der Fehlerspeichereintrag 
erfolgt, wenn sich die Betriebsspannung beim Ansteuern des PMOS erhöht.


Martin S. schrieb:
> Kann es sein, dass die
> Schaltung prüfen soll, ob die Pumpe überhaupt angeschlossen ist?

Das wird bereits an anderer Stelle geprüft. Ich will es trotzdem nicht 
ausschließen. Nur: Wie soll das mit der beschriebenen Methode 
funktionieren?

Martin S. schrieb:
> Woher kennst Du die Softwareprüfung?

Aus dem Quellcode.



Irgend eine Idee?

von Distanz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Programmierer fragen ist keine Option?

von Steffen H. (steffenh)


Bewertung
-1 lesenswert
nicht lesenswert
Distanz schrieb:
> Programmierer fragen ist keine Option?

Tja, leider nein :-(

von Martin S. (sirnails)


Bewertung
-1 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Martin S. schrieb:
>> Auf welcher Seite vom PMOS wird denn gemessen?
>
> Es wird die Betriebsspannung gemessen. Der Fehlerspeichereintrag
> erfolgt, wenn sich die Betriebsspannung beim Ansteuern des PMOS erhöht.

Dann gibt es entweder ein Szenario, bei dem das Ansteuern des Ventils 
die Betriebsspannung erhöht, oder es gibt Eckdaten der Hardware, die Du 
uns nicht mitteilst bzw. selbst nicht kennst.

> Martin S. schrieb:
>> Kann es sein, dass die
>> Schaltung prüfen soll, ob die Pumpe überhaupt angeschlossen ist?
>
> Das wird bereits an anderer Stelle geprüft. Ich will es trotzdem nicht
> ausschließen. Nur: Wie soll das mit der beschriebenen Methode
> funktionieren?

So ergibt das keinen Sinn. Aus Spaß wird der Programmierer das aber wohl 
kaum implementiert haben.

> Irgend eine Idee?

Entweder hast Du irgendwas nicht verstanden, Du verpasst irgendwo etwas 
wichtiges oder Du liest den Quellcode falsch oder der Programmierer 
hatte einen Knoten im Gehirn und hat die Berechnung falsch 
aufgeschrieben.

Wir werden das hier nicht nachvollziehen können.

von Philipp G. (geiserp01)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Beim Aufstarten macht die Software nun etwas Seltsames: Sie steuert den
> PMOS Transistor an und prüft, ob sich U_Bat erhöht (um mindestens 3V).
> Dann schaltet sie den PMOS ab und prüft, ob die Spannung wieder auf den
> Ursprungswert sinkt (plus ca. 1V Reserve)! Falls beides zutrifft, wird
> ein Fehler gesetzt.

Könnt es nicht sein, dass die ECU prüft ob ein Kurzschluss beim 
Magnetventil vorliegt, und ob die Versorungsspannung nicht einknickt 
(Falls Batterie (fast) leer)?

von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> Entweder hast Du irgendwas nicht verstanden, Du verpasst irgendwo etwas
> wichtiges oder Du liest den Quellcode falsch oder der Programmierer
> hatte einen Knoten im Gehirn und hat die Berechnung falsch
> aufgeschrieben.

Ja klar, eins davon ist es. Und um Ersteres auszuschließen wende ich 
mich an Euch.

Martin S. schrieb:
> Wir werden das hier nicht nachvollziehen können.

Warum nicht? Was fehlt Dir? Falls weitere Infos benötigt werden, 
versuche ich natürlich, sie zu liefern.


Philipp G. schrieb:
> Könnt es nicht sein, dass die ECU prüft ob ein Kurzschluss beim
> Magnetventil vorliegt, und ob die Versorungsspannung nicht einknickt
> (Falls Batterie (fast) leer)?

Das war auch mein erster Gedanke und es wäre so naheliegend. Aber ich 
habe es mehrmals im Quellcode und auch im Debugger überprüft: es ist 
definitiv anders herum! Er steuert das Magnetventil an und prüft, ob die 
Spannung steigt! So und nicht anders herum. Leider.

Eine Kurzschlussdiagnose gibt es, wie gesagt, auch. Sie findet aber an 
anderer Stelle statt.

von c r (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Ja klar, eins davon ist es. Und um Ersteres auszuschließen wende ich
> mich an Euch.

Na, dann zeig doch mal den relevanten Ausschnitt im Quellcode... Oder 
ist der wieder super-geheim+?

von Philipp G. (geiserp01)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Das war auch mein erster Gedanke und es wäre so naheliegend. Aber ich
> habe es mehrmals im Quellcode und auch im Debugger überprüft: es ist
> definitiv anders herum! Er steuert das Magnetventil an und prüft, ob die
> Spannung steigt! So und nicht anders herum. Leider.

Ok, und was steuert dieses Magnetventil? Wenn es während dem 
Anlassvorgang ausgewertet wird (~8V), oder kurz danach (Lichtmaschine, 
Ubat > 14.0) dann wäre das ja eine Möglichkeit.

von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
c r schrieb:
> Na, dann zeig doch mal den relevanten Ausschnitt im Quellcode... Oder
> ist der wieder super-geheim+?

Nein, wie kommst Du darauf? Ich bin nur der Meinung, dass ich ihn 
verstanden habe. Aber vielleicht habe ich ja wirklich etwas übersehen. 
Ich bin gespannt auf Deine RM! Es handelt sich übrigens um eine CPU32.
1
D7.b = 0x01;
2
do
3
{
4
  // Get ECU supply voltage for reference
5
  D3.w = RJURR[5];
6
7
  // Drive EV 0
8
  PWM6B = 0x4F;
9
  TPUPARCH6[3] = 0x005A;
10
  TPUPARCH6[5] = 0x0000;
11
12
  // Wait for appr. 10 ms
13
  wait_ms(10);
14
15
  // Check behaviour of ECU supply voltage
16
  if(RJURR[5] > (D3.w + 0x1E))
17
  {
18
    RAM_62122++;
19
    RAM_51002 |= 0x0080;
20
  }
21
  else
22
  {
23
    RAM_62122 = 0x00;
24
    RAM_55112 = 0x00;
25
    D7.b = 0x00;
26
    RAM_51002 &= 0xFF7F;
27
  }
28
29
  // Release EV 0
30
  TPUPARCH6[5] = 0x002F;
31
32
  // Check behaviour of ECU supply voltage
33
  if(RAM_62122 > 0)
34
  {
35
    RAM_55110++;
36
    wait_ms(50);
37
    if(RJURR[5] < (D3.w + 0x0A))
38
    {
39
      if(RAM_55110 == 25)
40
        D7.b = 0x00;
41
    }
42
    else
43
      RAM_51002 &= 0xFF7F;
44
  }
45
}
46
while(D7.b == 0x01);

von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
Philipp G. schrieb:
> Ok, und was steuert dieses Magnetventil?

Es steuert den Öldruck für eine hydraulische Kupplung.


Philipp G. schrieb:
> Wenn es während dem
> Anlassvorgang ausgewertet wird (~8V), oder kurz danach (Lichtmaschine,
> Ubat > 14.0) dann wäre das ja eine Möglichkeit.

Die Diagnose wird beim Aufstarten der ECU durchgeführt (Klemme 15). Aber 
selbst wenn, bliebe es mir ein Rätsel, wie der Ausgang zum Magnetventil 
oberhalb der Bordspannung liegen sollte. Und auch wenn er das täte, 
warum wird dafür das Magnetventil angesteuert? Was ist das Ziel dieser 
Diagnose?

von Martin S. (sirnails)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Es steuert den Öldruck für eine hydraulische Kupplung.

Ist denn auf dem Hydrauliksystem überhaupt Druck drauf? Wird Klemme 15 
während des Anlassvorgangs spannungsfrei geschaltet, sodass es nach dem 
Loslassen des Anlassers zu einem erneuten Einschalten der 
Betriebsspannung kommt?

Letzterer Fall könnte sogar halbwegs plausibel sein, denn wenn nach dem 
Anlassvorgang die Boardspannung steigt (Boardspannung ohne Lichtmaschine 
ist niedriger als mit), dann weiß er, ob der Motor läuft.

Handelt es sich um ein 24V Netz? Dann wären die 3-4V Spannungsdifferenz 
sogar plausibel!

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Philipp G. schrieb:
>> Könnt es nicht sein, dass die ECU prüft ob ein Kurzschluss beim
>> Magnetventil vorliegt, und ob die Versorungsspannung nicht einknickt
>> (Falls Batterie (fast) leer)?
>
> Das war auch mein erster Gedanke und es wäre so naheliegend. Aber ich
> habe es mehrmals im Quellcode und auch im Debugger überprüft: es ist
> definitiv anders herum! Er steuert das Magnetventil an und prüft, ob die
> Spannung steigt! So und nicht anders herum. Leider.

kann es sein das der Programmierer deswegen nicht zu befragen ist weil 
abwesend? (will jetzt nicht schreiben verstorben, gekündigt, abgehauen)

solche SW durfte ich auch mal richten als ich in der Prüftechnik neu 
anfing.

1. Programmierer hatte Fehler drin, Messkarte nur einpolig kontaktiert, 
kann passieren, dumm halt nur das 10.000 Baugruppen ausgeliefert wurden, 
einige werden aber schon funktioniert haben.
2. Programmierer hatte gemogelt und nur Luftmessungen gemacht und wurde 
nach ausserhalb zum Abteilungsleiter befördert.

Vor Programmfehler ist niemand sicher, nicht mal Windows und Linux

von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> Ist denn auf dem Hydrauliksystem überhaupt Druck drauf? Wird Klemme 15
> während des Anlassvorgangs spannungsfrei geschaltet, sodass es nach dem
> Loslassen des Anlassers zu einem erneuten Einschalten der
> Betriebsspannung kommt?
>
> Letzterer Fall könnte sogar halbwegs plausibel sein, denn wenn nach dem
> Anlassvorgang die Boardspannung steigt (Boardspannung ohne Lichtmaschine
> ist niedriger als mit), dann weiß er, ob der Motor läuft.

Hmm, Klemme 15 bleibt intakt beim Anlassen. Es würde auch nicht 
erklären, warum die Software das Ventil ansteuert, denn das müsste sie 
dafür nicht. Im Gegenteil, es wäre sogar gefährlich, da die Kupplung 
dann stellt.


Joachim B. schrieb:
> kann es sein das der Programmierer deswegen nicht zu befragen ist weil
> abwesend?

Ganz genau. Die Software ist alt und der Autor nicht bekannt. Aber was 
hilfts, ich muss da durch. Mir macht es aber durchaus Spaß, Rätsel zu 
lösen. Nur bei diesem verstehe ich den Hintergrund nicht. Wobei ich 
inzwischen eine Idee habe...


Joachim B. schrieb:
> Vor Programmfehler ist niemand sicher, nicht mal Windows und Linux

:-)

von Martin S. (sirnails)


Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Im Gegenteil, es wäre sogar gefährlich, da die Kupplung
> dann stellt.

Nicht zwangsläufig. Eventuell will man damit den Gegendruck abbauen.

Aber das sind jetzt alles Mutmaßungen. Sonst habe ich keine Ideen.

von Gtx F. (gtx-freak)


Bewertung
1 lesenswert
nicht lesenswert
Steffen H. schrieb:
>> Ok, und was steuert dieses Magnetventil?
>
> Es steuert den Öldruck für eine hydraulische Kupplung.

Kannst Du weitere Details des Systems preisgeben?

Ist das eine Kupplung die den zu startenden Motor kraftmässig mit 
irgendwas verbindet?

Dann wäre folgendes *möglich*:
1. unter de Annahme das das anzukuppelnde system (noch) rotative energie 
hat (warum auch immer wir kennen das system nicht, im einfachen Fall ein 
großes schwungrad was sich noch dreht oder ein Hamsterrad wo der Hamster 
gerade läuft)...
2. unter der Annahme das dein Motor in diesem Moment aus ist (warum auch 
immer, ausgegangen oder lief nie) und das Magnetventil die Kupplung 
getrennt hat...
-> Wenn Du in diesem Moment den Motor starten würdest (OHNE das es 
Deine Abfrage gäbe) bestünde die Möglichkeit jetzt durch die Kupplung 
den Motor Kraftmässig auf das noch drehende system aufzukuppeln. 
Vielleicht ist das nicht erwünscht oder gar eine gaanz schlechte 
idee?(wir kannen die Hintergründe ja nicht)
-> Deine Abfrage würde durch betätigen der Kupplung die rotative Energie 
des unbekannten Systems auf den stehenden Motor bringen. evntl reicht 
die Trägheit oder die Kompression des Motors NICHT aus um das System 
zu bremsen/stoppen, der Motor würde also schnell genug drehen damit der 
Generator (Lichtmaschine) so schnell dreht das Ugen>Ubat+3V. Es fände 
also enegetisch Rückspeisung aus dem angekuppelten System in den Motor 
statt. Um zu erkennen ob das wirklich rückgespeiste Energie war(oder ob 
genau in diesem Moment jemand ein Ladegerät an die Batterie 
angeschlossen hat oder einen anderen großen Verbraucher vom der Batterie 
weggeschaltet hat und dadurch die SPannung wieder steigt) wird danach 
wieder ausgekuppelt und Ubat nochmal gemessen, wenn Die wieder kleiner 
ist dann lag Rückspeisung vor. Und In diesem Fall soll wohl ein Fehler 
abgelegt werden.

Von weitem betrachtet scheint dieser Umweg über die Ladespannung des 
Generators nicht der einfachste Weg zu sein, aber ohne alle Details zu 
kennen kann man nicht sagen ob das der 
sicherste/billigste/zuverlässgste/einfachste/Patenfreie/coolste/sonstwas 
??  weg ist.

: Bearbeitet durch User
von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht lesenswert
Ja, das ist eine hervorragende Idee! Es kann sich zwar nicht um 
mechanische Energie handeln, da nichts angetrieben wird. Aber 
stattdessen um Magnetische im Elektroventil. Insofern könntest Du 
goldrichtig liegen!

Ich nehme inzwischen an, dass es sich um eine Diagnose der 
Masseverbindung handelt (Masseversatz).

Danke für Deine und Eure Tipps!
Steffen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.