VW TDI forum, Audi, Porsche, and Chevy Cruze Diesel forum banner

2005 Passat and 2006 Jeep CRD - ECM Glowplug Control Signal Issue - Arduino solution

2K views 6 replies 4 participants last post by  dlp 
#1 · (Edited)
2005 Passat and 2006 Jeep CRD - ECM Glowplug Control Signal Issue - Arduino Solution

I rarely post to forums, but this is such an unexpected problem I feel I should share.
We have both a 2005 Passat 2.0L TDI and a 2006 Jeep Liberty 2.8L CRD. Two completely different vehicles, with the same symptoms and the same root cause. They both developed difficulty in starting in cold weather, noticeable below 0 celsius, and progressively harder as it gets colder.
I went through quite a lot of trouble to find this, but both vehicles use Bosch glowplug control modules (GCM) and while they weren’t the problem, the pulse-width modulated (PWM) signal from the engine control module was.
I’m a retired electronics technician, so I’ll list all the info I have. With a Fluke DMM, the Passat glowplug voltage would start at 7.8Vdc (rms) for 1 to 2 seconds, then drop to 1.8V for the remainder of the 13 second cycle after you turn the key. This was the same for all glowplugs, and they were all drawing the same current. BTW, I must state that glowplugs or any heating element like them, like in a stove or hot water tank, do not get weak. They’re either good or they’re not, like an incandescent light bulb. And they should glow red brightly when you bench test them, something I didn’t know, though it seems obvious now.
The Passat glowplugs are rated for 11Vdc. While at the 1.8Vrms level a scope on the glowplugs show a 6.6Vp-p pulse at 31hz with a 18% duty cycle. Far too little, you barely see it glow at all at the end of a few 14 second cycles with your hands cupped around it. 11 volts is about 87% of a 12.6V battery, so you should see a pulse duty cycle of 87%. That is, the glowplugs should be on 87% of the time, not the 18% I was seeing. If I connected the glowplugs to the battery, through some resistance wire to drop the voltage to 11V, the car started without difficulty.
I don’t have schematics for this vehicle and some schematics I found online for a previous year show the glowplugs directly connected to the engine control module (ECM). This is incorrect for my Passat and only after I’d opened the ECM and started some continuity checks did I find there’s a separate GCM located under the coolant reservoir.

The GCM is a Bosch# 0281 003 027, VW#038907281C. The nine leads are as follows:
G1-G4 Glowplug leads
87 Switched 12V from ignition
31 Ground
D1 Data out to the ECM
30 Always-on 12V
ST Control signal from the ECM

Inside the GCM there’s one main IC, an ST Microsystems L9524 glowplug controller and four ST P85NF55L MOSFETs that do the actual pulsing of the glowplug voltage. These are obsolete parts but you can still find the datasheets online. After study of the datasheets the input signal from the ECM will be used as a clock for the Data Out line and the input signal pulse should be the inverse of what you want on the glowplugs. So I connected the ST input to a separate PWM signal from an Arduino circuit and found the glowplugs were now getting the correct voltage, ruling out the GCM as the source of the trouble. Since I had the ECM open anyway, I traced the glowplug control signal directly to a Bosch#30554 controller IC. I couldn’t find a datasheet for this one, but I found some replacements available on Aliexpress and others. This is about a 64-pin chip though, so clearly it controls more than just the glowplugs, likely the injector solenoids as well. And because of that it’s likely programmable for timing and the number of cylinders. If replaced, it’s possible I might be able to program it via the Rosstech VSDS, but it may be programmed separately and without information on it I really can’t take that chance. And of course replacing the ECM on either vehicle would be far too expensive.
So as an alternative, I created a low-cost Arduino circuit that inputs the PWM signal from the ECM, synchronizes a new correct PWM signal to it, then outputs it to the GCM.
Our Jeep Bentley manual outlines a control strategy based on the coolant temperature as follows:

Coolant
Temp Wait-To Start Pre-Heat Post-Heat
"Key ON" Lamp "ON" (s) GlowPlugs on (s)
-30C 10 SEC. 35 SEC. 200 SEC.
-10C 10 SEC. 23 SEC. 180 SEC.
+10C 1 SEC. 21 SEC. 160 SEC.
+30C 1 SEC. 20 SEC. 140 SEC.
+40C 1 SEC. 19 SEC. 70 SEC.
+70C 1 SEC. 16 SEC. 20 SEC.

This may not be the way the Jeep was actually programmed since the dashboard glowplug indicator has no bearing on the preheat time and the operator would have no clue to pause for that time before turning the key to start. So I have an LED on the dash that the Arduino flashes when the key is turned and glowplugs are started. It will remain flashing for the preheat period, then stays on steady for the post-heat period. So the operator knows to wait until the flashing stops and it’s on steady before starting the engine. The times in the chart may be overkill. You don’t really need 20 seconds of preheat to start it at 20C, but better too much preheat than not enough.

I happened to have some small boards with an ATTiny85 and a MCP9808 temperature sensor, but any temperature sensor would do. The temperature rating of all the parts made it OK to strap the circuit board to the coolant hose in order to sense the temperature, but one could put this sensor on another board (or use a sensor like a DS18B20) and have only it strapped to the coolant hose. You’d have to modify the code to suit a different sensor of course.

Installation: Cut the wire to the GCM ‘ST’ terminal, connect the end that goes to the ECM to ‘ECM IN’ in the circuit below and the end that goes to the ‘ST’ terminal connect to ‘ST - PWM OUT’. Splice the wire going to the 87 terminal so it goes to both the GCM and Arduino circuit ’87 – Key-on 12V’. Splice the ground to both as well. Add an LED to the dashboard and run leads to the Arduino circuit connections. Best to make all connections plug-in so you can bench-test the circuit if anything goes wrong.

The schematic is as follows:
Rectangle Font Schematic Parallel Slope


There is more information in the comments of the code below. The pulseIn() function is sufficient to synchronize the output PWM signal with the ECM, so the ECM can still read the diagnostics from the GCM.
The terminal ‘Tx OUT’ is a diagnostic serial connection that will output the temperature from the sensor, the corresponding times from the interpolated look-up table and indicates Preheat, Posthead and Done when it finishes. After this, the Arduino will stop the PWM output, which will turn off the glowplugs, and then enter sleep mode. In order to read the serial output you’d need a serial converter like the FTDI232 or CH340 that many Arduinos use and a PC with Hyperterminal or just use the serial monitor in the Arduino IDE.

The arduino code is in the attached text file
 

Attachments

See less See more
2
#2 ·
I should note specifically, the input signal to the Bosch glowplug control module from the ECM is inverted compared to the output signal. So don't be confused when testing both with an oscilloscope. As noted in the code comments, the Arduino circuit outputs a standard 5V PWM pulse which is inverted and amplified to a 12V pulse by the MOSFET, then sent to the GCM. So if you want the glowplugs to be on 87% of the time for an equivalent of 11Volts, the input signal to the GCM should show a 13% duty cycle.
 
#7 ·
I've posted this on Jeep forum as well, but here's the schematic and code for using the DS18B20 temperature sensor instead of the one I used in the original post. You can buy it as a sensor with leads, so you can strap it to your coolant hose and tuck the arduino circuit out of the way maybe in a pill case strapped to the glowplug control module would be good.

Here's a place to purchase the sensor:
1.01US $ 27% OFF|1pcs Ds1820 Stainless Steel Package Waterproof Ds18b20 Temperature Probe Temperature Sensor 18b20 For Arduino - Sensors - AliExpress

I wanted to encourage anyone to try building this. The information I've given can seem daunting, but I've done 90% of the work. You just need to build the circuit, upload the program to it and package it for installation in the vehicle. It's one of the strengths of the Arduino family of microprocessors. There so much code out there people have freely shared, it makes it so much easier to build something you need. In fact the code I've written uses sections gleaned from others. Like the code for creating the pulse, getting the temperature from the sensor, or putting it to sleep at the end.
There are some tricks to programming the Attiny85. You can use a Arduino UNO if you have one, or I use a 'USBAsp' programming interface like this:

2.03US $ 30% OFF|1pcs Usbasp Usbisp Avr Programmer Usb Isp Usb Asp Atmega8 Atmega128 Support Win7 64 - Integrated Circuits - AliExpress

If you need a different glowplug voltage find the line in the code like this and change the value:

OCR1B = 79;


For 5 volts use 53
For 7 volts use 79
For 9 volts use 95
For 11 volts use 111

You don't need to have a printed circuit board made. This is a simple enough circuit to use all 'through-hole' components on a small piece of perf-board, all available at Digikey, Mouser, or wherever.
If you get stuck, there's all kinds of info available on line as well. It'd be a good, doable project with a purpose - the best kind. I know I was ecstatic, when I finally, FINALLY got my vehicles glowplugs working.


Rectangle Slope Font Parallel Circle


I've attached the code in a text file. Just copy and paste it all in a new Arduino sketch:
 

Attachments

This is an older thread, you may not receive a response, and could be reviving an old thread. Please consider creating a new thread.
Top