Forum: Fahrzeugelektronik Motorsteuergerät Schaltplan EMV Schutzmaßnahmen


von Tobias R. (rieto)


Lesenswert?

Hallo,

ich entwickle für ein Projekt ein Motorateuergerät:
Ein STM32 detektiert über einen Hallsensor die Position des Kolbens und 
berrechnet anhand mehrerer Kennfelder die Einspritzdauer, den 
Einspritzzeitpunkt und den Zündzeitpunkt. Einspritzventile werden über 
MOSFETs angesteuert und machen mitentsprechender EMV Schutzbeschaltung 
keine Probleme.
Der HallSensor macht auch keine Probleme mit geschrimten Kabel und 
ebenfalls mit entsprechender EMV Schutzbeschaltung und diverser 
Modifikationen.
Mit der Zündspule kommen die Probleme:
- Verbaut ist eine Doppelfunkenzündspule da 4 Zylinder von einem GOLF
 https://www.ebay.de/itm/390917026412?hash=item5b0478726c:g:w1EAAOSwwTZdn1Ex
diese wird mit 5V Signalen angesteuert und triggert auf die steigende 
Flanke. Die Probleme kommen wenn ich die Zündspule extern, über einen 
Funktionsgenerator ansteuere (50Hz Testweise). Die Probleme sind:
- Der STM32 löst wilkürlich seine Interupts aus. Dort liegt der Hall 
Sensor drauf. Das Hall Sensor Signal ohne uC sieht gut aus 
(Rauschverhalten, Spikes etc.) Nur am uC angschlossen gibt es 
ordenltliche Probleme.
Wie kann ich den uC schützen? Die Spannungsversorung ist ordnungsgemäß 
und zeigt auch keine Veränderungen.
Hat jemand evtl einen Schaltplan von eine Motorsteuergerät? Bitte kein 
Speeduino oä wo die Hälfte fehlt und meiner Meinung nach dieselben 
Probleme erscheinen werden.

Schönen Sonntag noch

: Verschoben durch Moderator
von Anja (Gast)


Lesenswert?

Tobias R. schrieb:
> Hat jemand evtl einen Schaltplan von eine Motorsteuergerät?

Und Du glaubst daß es dir etwas nützt?
Da sind lauter ASICs drauf auf die Du sicher keinen Zugriff hast.

Ich hoffe Du hast wie die Motorsteuergeräte auch ein solides 
Metallgehäuse.
Die Eingangssignale sind selbstverständlich so gefiltert daß nur die 
Nutzfrequenzen durchkommen. Häufig wird aber auch schon der Sensor 
gestört, dann nützt dir die Filterung im Steuergerät gar nichts weil das 
Signal wie ein Nutzsignal aussieht.
Der Eingang geht nach dem Filter auf einen Schmitt-Trigger Eingang.
Interrupt geht gar nicht sofern der Prozessor keine Glitch-filterung am 
Eingang durchführt um Fehlimpulse auszublenden.
Wenn das Dein Prozessor nicht kann ist es ggf. der falsche.


Gruß Anja

von Tobias R. (rieto)


Lesenswert?

Danke für den Tipp mit dem Schmitt Trigger. Werde ich mal testen.
Und: Ja das in einem KFZ MSG alles mit Asics gelöst wurde habe ich 
vermutet.
Mit geht es dabei auch eher um die EMV Schutzschaltungen der Asics. 
Welche Maßnahmen wurden an der Versorgungsspannung getroffen, welche an 
Analogen Sensorwerten, welche an digitalen Eingängen der Asics. Wie 
sieht die befilterung aus. Wird dort mit den heiß diskutierten Ferrit 
Beads gearbeitet, wo und wieviele Dioden Varistoren etc.
Natürlich werden die Schaltungen nicht 1:1 passen aber da wird was 
brauchbares davei sein - hoffe ich - mit dem ich meine EMV Probleme in 
den Griff bekommen.

von Thomas F. (igel)


Lesenswert?

Tobias R. schrieb:
> Ein STM32 detektiert über einen Hallsensor die Position des Kolbens

Ich dachte bisher man detektiert den Kurbelwellenwinkel.

Schau mal hier:
http://www.megamanual.com/ms2/pcb.htm

von MaWin (Gast)


Lesenswert?

Tobias R. schrieb:
> Hat jemand evtl einen Schaltplan von eine Motorsteuergerät?

http://megasquirt.de/wiki/index.php?title=Stromlaufpl%C3%A4ne

Tobias R. schrieb:
> Nur am uC angschlossen gibt es ordenltliche Probleme.

Na ja, wie sieht DEINE bisherige Schaltung und ihr Aufbau aus ?

Du musst erst mal für guten Masseanschluss sorgen, EIN Masseverbinder an 
der Steuerung und die Abschirmung des Hallsensors geht direkt an ihn, 
ebenso Massepins anderer Leitungen Das Signal und VCC des Hallsensors 
sind somit in der Nähe und werden mit kleinen Kondensatoren gegen Masse 
abgestützt. Sie dürfen nicht so gross sein, dass sie das Signal bis zur 
Unbrauchbarkeit verschleifen, so 1-10nF am Signal und 10-100nF an VCC. 
Um das Hallsensorkabel darf ein Ferrit.
Serienwiderstande in der Datenleitung sind möglich, sogar 10 bis 100 Ohm 
in der VCC Leitung.

Von dieser Platinenstelle darf die Leitung weiter zum uC gehen, das 
Gehäuse ist hoffentlich geschirmt und mit genau der Massestelle 
verbunden. Masse von diesem Punkt über die Platine zum uC sollte 
niederinduktiv erfolgen, breit und kurz oder Massefläche.

von Uwe B. (uwebre)


Lesenswert?

Eine einfache Motorsteuerung mit Atmega für Guzzis mit Einspritzanlage
Sicherlich nicht die Krone der Steuergeräteschöpfung, funktioniert aber 
bei meiner 1100 Sport seit Jahren einwandfrei. Auf jeden Fall besser als 
das schlecht abgestimmte Originalsteuergerät. (aus den kleinen Fiats der 
Zeit)
Die Parameter lassen sich per Bluetooth und Android App justieren.

https://www.myecu.biz/MyECU/index.htm

Schaltpläne unter "How it works"

Uwe

von R.B. (Gast)


Lesenswert?

Hi,

Das wahr früher so, dass die Entwicklung mit FPGAs gemacht wurde und die 
FPGAs aus dem Grund der Stückzahlenkosten in ASICs gegossen wurden. Der 
Grund war die zu geringe Performance der MCUs. jetzt geht man immer mehr 
wieder zu MCUs über, weil die Performance gegeben ist, man jetzt alles 
reprogrammieren kann, MCUs sind günstiger als Asics (Asics kosten auch 
in der Entwicklung) und man die Hardwarevarianten reduzieren kann 
(dasselbe Steuergerät für sämtliche 4-Zylinder Motoren - Unterschied nur 
noch in SW und Parameter-Codierung).

Da ich selbst aus der Branche bin, kann ich nur den Tipp geben - blende 
die Sensoren/Interrupts zum Zeitpunkt der Zündspulenaktivität aus. Eine 
statische Filterung reicht da für eine zuverlässige Funktion nicht aus, 
da die Zündspule einen ganz "bösen" Impuls erzeugt, der vom Nutzsignal 
nicht mehr unterschieden werden kann. Dieser Impuls streut auch über 
alle Anschlüsse rein.

z.B. Zündvorgang:
__disable_interrupts
__inhibit sensor input
__ignite
__wait_500us
__enable_sensor_input
__enable_interrupts

Metallgehäuse ist ein Muss, da der Zündimpuls sogar den Zero-Flag-Bit im 
Armcore kippen kann, wodurch ein Conditional Jump vollkommen irrational 
ausgeführt werden kann (if then else, while, case funktionieren 
plötzlich nicht zuverlässig).

von R.B. (Gast)


Lesenswert?

Vom ECU Input zum GPIO sind dann noch folgende Beschaltung:

- 2 Dioden zwischen GND->SIG->VCC
- ESD Supressor
- Serienwiederstand zur Strombegrenzung (Wert abhängig von Max ratings 
des MCU)

- Filterung basierend auf RC (Wobei die Filterung immer öfter in SW 
gelöst wird als FIR / IIR Filter eventuell sogar adaptiv = 
Filterparameter ändern sich abhängig von der Motordrehzahl).

von Anja (Gast)


Lesenswert?

R.B. schrieb:
> __wait_500us

ganz tolle Idee: damit verliert man bei 6000 RPM bei jedem Zündimpuls 18 
Grad an Winkelposition.

Gruß Anja

von R.B. (Gast)


Lesenswert?

Punkt 1: Die 500us waren ein reiner Beispielwert, der genaue Wert muss 
noch bestimmt werden (Impulsdauer mim Oszi bestimmen. 6000 ist übrigens 
ein sehr interessanter Betriebsbereich eines Motors :)

Punkt2: man verliert gar nichts! Da die Zeitbasis immer noch gegeben 
ist.

Punkt3: Konstruktiver Gegenvorschlag Deinerseits? :) :) (jetzt bin ich 
gespannt) :) :)

von Prokrastinator (Gast)


Lesenswert?

Tobias R. schrieb:
> Wie kann ich den uC schützen?

Metallgehäuse gegen eingestrahlte Störungen und Optokoppler zur 
galvanischen Trennung funktionieren zuverlässig.

von Tobias R. (rieto)


Lesenswert?

Danke für die Ratschläge und die Beispiel Motorsteuergeräte.

Ja über einen Hall Sensor jeweils die Nockenwelle und die Kurbelwelle.
Thomas F. schrieb:
> Ich dachte bisher man detektiert den Kurbelwellenwinkel.

Danke für den Tipp mit dem Interrupt ausblenden. Das funktioniert nach 
bisschen rum probieren mit den Zeiten super.
R.B. schrieb:
> blende
> die Sensoren/Interrupts zum Zeitpunkt der Zündspulenaktivität aus

Ansonsten hier mal eine kleine Auflistung was bei mir zu einem guten 
Ergebniss geführt hat:
- EMV Störquelle verringern: Widerstand im HV Bereich erhöhen um 
schnelle Strom Transienten zu vermeiden mit zusätzlichen 5 kOhm in der 
Zündkerze
- 2 Interrupt Pins (werden bauartbedingt nie gleichzeit ausgelöst, 
wurden aber durch EMV) mit einem EXOR und einem AND Gatter so 
verschaltet, dass nie an beiden Interrupts gleichzeit HIGH anliegen kann 
und Interrupts kurz vor und nach der Zündung ausblenden.
- Erhöhung des Stroms des Hall Sensors (OpenCollecor mit vormals 9mA 
Pull Down, jetzt mit 86mA)
- Versorgungsspannung stabilierst mit Lastwiderstand und Elko am Ende 
der Leitung
- Und ganz banal in die uC Versorgungsspannung eine 1N4007 in Reihe mit 
einer Ferritperle.

Das System funktioniert so bei mir jetzt. Das einzeige Problem was mir 
jetzt nur noch bekannt ist, ist der Ground der 12V Versorgungsleitung 
hat Spikes bei jedem Zündimpuls. Nach allen Maßnahmen nur etwa 200 - 500 
mV (vorher etwa 2 - 3 V). Wenn man den noch runter bekommen könnte wäre 
das natürlich super. Was meint ihr? Ist das nur Kosmetik oder relevant?

von HG (Gast)


Lesenswert?

Prokrastinator schrieb:
> Optokoppler zur
> galvanischen Trennung funktionieren zuverlässig.

Ja genau, Makers Wunderwaffe der Optokoppler.
Wozu sollte man in einem Motorsteuergerät gleich wieder galvanisch 
trennen ?

von Prokrastinator (Gast)


Lesenswert?

HG schrieb:
> Ja genau, Makers Wunderwaffe der Optokoppler.

Nein, die Erfahrung von jemanden der HV Impulsprüfplätze gebaut hat und 
dabei mit erheblichen MCU Problemen konfrontiert war.

HG schrieb:
> Wozu sollte man in einem Motorsteuergerät gleich wieder galvanisch
> trennen ?
Wenn man die Probleme hat die der TO beschreibt und keine Ahnung wie man 
dem beikommt, braucht man eine Lösung und kein Ideologisches Gewäsch von 
jemanden der zwar die vorgeschlagenen Lösungen Kacke findet, selbst aber 
keine funktionierende anbieten kann.

Leitungsgebundene Störungen sind nunmal ätzend zu filtern, wenn das 
Signal trotzdem schnell sein muss.

von R.B. (Gast)


Lesenswert?

Zu den Impulsen auf auf der 12V Maße - wenn du mehrere solche 
Steuergeräte baust - könnte durch die Bauteiletoleranz irgendwo ein 
Schwellwert überschritten werden. Arbeitet die Core intern mit 3V3 oder 
mit 1V8 Versorgung da kommt man mit 500mV schon näher an einen 
Bitkipper. Dann kann auch noch die Wärme den Arbeitspunkt wegschieben. 
Würde ich probieren, noch etwas weg zu filtern. Je nach impulsbreite 
müssen nicht mal sehr große Elkos rein. Prüf beim Testen dann auch den 
Temperaturbereich - zumindest sollte der Motor bis 90°C hochgefahren 
werden und einige Zeit in diesem Bereich bleiben. die MCUs haben oft 
einen eingebauten Temperatursensor - da kann man gucken, wohin die 
Temperatur im Steuergerät geht.

von Anarchist (Gast)


Lesenswert?

Verbrenner werden doch baldmöglichst verboten, nach dem Willen der 
Grünen am besten noch heute.
Hilf lieber bei der Entwicklung moderner Batteriezellen für Elektroautos 
mit, da gibt es solche krassen EMV-Probleme nicht.

von Tobias R. (rieto)


Lesenswert?

@ R.B. Danke für den Input. Kannst du mich bitte PN anschreiben. Ich 
würde gerne mal mit dir telefonieren.

von Anja (Gast)


Lesenswert?

R.B. schrieb:
> 6000 ist übrigens
> ein sehr interessanter Betriebsbereich eines Motors :)
Je nach Motor: beim Motorad ist das knapp über Leerlauf.

R.B. schrieb:
> Punkt2: man verliert gar nichts! Da die Zeitbasis immer noch gegeben
> ist.
Du denkst daß die Drehzahl konstant ist?

R.B. schrieb:
> (jetzt bin ich
> gespannt) :) :)
Hättest Du meinen ersten Beitrag hier gelesen:
Tiefpaß, Schmitt-Trigger + (digitales) Glitch-Filter.
Letzteres verzögert das Nutzsignal nur, entfernt aber keine Flanke.

Gruß Anja

von Roman B. (Firma: ****) (r_b)


Lesenswert?

Anja schrieb:
> R.B. schrieb:
>> 6000 ist übrigens
>> ein sehr interessanter Betriebsbereich eines Motors :)
> Je nach Motor: beim Motorad ist das knapp über Leerlauf.

Ja, aber oben ist die Rede vom Golf, nicht Mopped! Da ich selbst eine 
Ninja gefahren bin, kenn ich den Drehzahlbereich. Aber, wie gesagt, geht 
um Golf.

>
> R.B. schrieb:
>> Punkt2: man verliert gar nichts! Da die Zeitbasis immer noch gegeben
>> ist.
> Du denkst daß die Drehzahl konstant ist?
>

Nein ist sie nicht, aber sie ändert sich nicht von 6000 auf 0 innerhalb 
der 250ms bzw. zwischen 2 Zähnen (die i.d.R. 10° Auflösung haben) man 
kann definitiv aufgrund der Zeitbasis rekonstruieren, ob ein Zahn 
verpasst wurde, da man ausgehend von der gegebenen Drehzahl eine min. 
oder eine max. Drehzahl hat, die innerhalb von 250ms machbar ist. Und, 
wie bereits erwähnt ist 250ms eine erste Näherung, die genaue Zahl 
sollte am Prüfstand mit realer Physik justiert werden.

> R.B. schrieb:
>> (jetzt bin ich
>> gespannt) :) :)
> Hättest Du meinen ersten Beitrag hier gelesen:
> Tiefpaß, Schmitt-Trigger + (digitales) Glitch-Filter.
> Letzteres verzögert das Nutzsignal nur, entfernt aber keine Flanke.

Hier willst du statisch filtern, obwohl die Drehzahl sich dynamisch über 
einen großen Bereich ändert? Wer von uns beiden hat also die Annahme, 
die Drehzahl wäre konstant? Btw. Glitch-Filter digital auszulegen, halte 
ich für eine sehr gute Idee, da eine diskrete Auslegung zu viele 
Bauteile braucht und die Kosten p.p. hochtreiben würde, zumindest bei 
einem Serienprojekt. Allerdings müsste evaluiert werden, ob ein reiner 
statischer Filter ausreicht - am besten mit einem Oszi am 
Motorprüfstand.

von Anja (Gast)


Lesenswert?

Roman B. schrieb:
> Hier willst du statisch filtern,
Habe ich nicht behauptet. Man kann auch ein Glitchfilter zur Laufzeit 
umprogrammieren wenn es richtig gemacht ist.

Auf der anderen Seite: bei Start-Stop Systemen ist in der Impulsbreite 
häufig die Drehrichtung codiert. (2 verschiedene Impulsdauern für 
vorwärts / rückwärts).

Roman B. schrieb:
> (die i.d.R. 10° Auflösung haben)
i.d.R. nur beim Motorad (oder hochtourige Motoren)
Beim PKW sind es häufiger 6 Grad.

Gruß Anja

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.