Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

reading car sensor, makes the car stall...

Status
Not open for further replies.

settra

Member
hello forum. i am in the process of building a simple diagnostic for my car.
all the sensors I have used to get info, are additional, so i haven't interfered with any of the cars sensors, expect 2 : crankshaft position and throttle position sensor.

crankshaft position : provides a 12v pulse, 4 times per engine revolution. i use a simple optocoupler, with 1Kohm resistor, to read that signal.
Thtottle position sensor: 0 - 5v proportional to how much throttle is applied.
i directly feed that, to the microcontroller (arduino) analogue input.. i also use a 5v zener.

so here is the problem : when i have the diagnostic connected, the car behaves strange. meaning. "i press the throttle, and the engine, either lags to rev up , OR it starts to rev up, then stops, then starts etc... "

i don't beleave that the problem resides with the Crankshaft sensor, because i have done the same thing in previous version of the diagnostic, and all was fine.

so... i guess that the problem is , the way i read the TPS. i thought that the microcontroller inputs where high impedence, so it wouldent interfere with the car ECU...

any ideas?? thanks !1
 
So post a real schematic of what you are doing... Obviously, the method you are using to "read" the sensors is not sufficiently non-invasive....
 
Don't know what vehicle you into, but somehow you're interfering with the TPS signal. The engine is only responding to the throttle butterfly plate position changing (more/less air); fuel/timing control info is missing (what the TPS affects). Could also be a hole in the engine side of the intake duct work (same effect as a TPS signal missing/in error).
 
well. the circuit is very simple :
tps.png

the ADC in is the analog pin of the arduino micro controller. it is supposed to have 10Mohm impedance, although i dunno anything about it..

Also, in the connector of the TPS, where i have added my wire, that comes to the diagnostic, i havent really soldered it. just sort of squeezed it inside the cimp of the factory connector (but NO chance of sorting anything though). could a but connection causing it?

I have seen people suggest using a buffer op-amp, to make the reading more non-inversive , because when i un-plug my diagnostic, everything works fine !!

also, clowboybob : no chanche for something mechanical, like a hole in the intake,
 
Put a 10K resistor in the wire between "From TPS" and the cathode of the 5.1V Zener, which also goes to A0 on the Arduino.

Get rid of the opto-coupler. Put a 10K resistor from the crank position sensor to the cathode of a 5.1V Zener, which also goes to A1 on the Arduino.

Connect a 1000pF ceramic capacitor across both Zeners.

Anodes of both Zeners go to Arduino GND, which must be connected to engine block (not the car body).
 
Last edited:
Put a 10K resistor in the wire between "From TPS" and the cathode of the 5.1V Zener, which also goes to A0 on the Arduino.

Connect a 1000pF ceramic capacitor across both Zeners.
Cool, thanks ! I will give it a try! but if I may ask, how will this effect the circuit? Becouse I would like to learn what could be the problem/solution .

thanks !
 
The max allowed input voltage to Aduino's A0 is 5.6V (The reverse-biased 5.1 Zener takes care of that)

The min allowed input voltage to Aduino's A0 is -0.6V (The forward-biased Zener diode-drop takes care of that)

However, you need current-limiting between the signal source and the Zener. (The 10K resistor takes care of that).

How much resistance can you put between the signal source and A0? To minimize the load on the signal source, the higher the better. To not screw up the Arduino's AD accuracy, the less the better. How high will the Arduino tolerate? 10K.

The 1000pF capacitor acts as a noise filter by shunting spikes to ground so that the AD doesn't see them.

The crank sensor is a voltage source, and cannot properly drive a opto-isolator which requires several mA, so get rid of it. Make the crank sensor channel the same as the TPS channel.

To get a clean signal from the crank and TPS sensors, use the engine block (not the car body) as the single-point ground for the Arduino and anything connected to it. There could be +-1 V of noise between the engine block and the car body inside the cabin...
 
cool ! i will do this an post results!

P.S : the crank sensor, on my vehicle , is a 3-wire tipe, or hall-effect. it produces "clean" 12v pulses.. i have even driven a led strip (for test proposes), without any problems on the LEDS, or the ECU... !
 
cool ! i will do this an post results!

P.S : the crank sensor, on my vehicle , is a 3-wire tipe, or hall-effect. it produces "clean" 12v pulses.. i have even driven a led strip (for test proposes), without any problems on the LEDS, or the ECU... !

Most are only two wires (just an inductive pick-up coil), so produce a bipolar pulse...
 
hey ! so i added the ressistors, and tested it for several KM's and it seems to be working good !
Thanks allot for the advice !
If i may ask : would a circuit like that :
fofllower.png

(maybe with some resistors or different configuration)
work better/worse for my problem ? thanks !!
 
The reason you had problems with your original circuit was that the 5.1 volts zener was clamping the TPS signal to 5.1 volts. The ECU would probably expect a 12 volt signal. When you added the 10 K resistor that MikeMl suggested it allowed the signal to the ECU to be 12 volts but still allowed the zener to clamp the voltage to the Arduino. If it works as it is why make it more complex ?

Les.
 
I am a noob , but not that big :p the Tps outputs 0 - 5 volts only ! ( i only installed the zener , for spikes , becouse my car is pretty old ):p
 
I am a noob , but not that big :p the Tps outputs 0 - 5 volts only ! ( i only installed the zener , for spikes , becouse my car is pretty old ):p
Any chance you had the Zener in upside-down?
 
Nope! i had it installed just as the schematic above ! ( i anyway did not re-solderet it).
You think i shouldn't had problems?
 
Nope! i had it installed just as the schematic above ! ( i anyway did not re-solderet it).
You think i shouldn't had problems?

In an Ideal world, if the TPS puts out a signal that is no less than 0V, and no more than 5.0V, then the Zener shouldn't have prevented it from working.
However, if your Ardunio ground was not close to where the TPS gets its ground in the engine compartment, then hooking up the wire to the TPS output could have injected all kinds of noise into the TPS signal. The 10K current-limiting resistor works both ways; it limits noise current injected back into the sensor just as it would limit the current from the sensor into the Zener...
 
However, if your Ardunio ground was not close to where the TPS gets its ground in the engine compartment, then hooking up the wire to the TPS output could have injected all kinds of noise into the TPS signal. The 10K current-limiting resistor works both ways; it limits noise current injected back into the sensor just as it would limit the current from the sensor into the Zener...

yes. that should be it ! I have tried my best to make it as noise free as i can, but the diagnostic is not grounded in the same place as the ECU, so indeed some noise should be injected ! thanks again ! but... would the circuit with the op-amp work better in that case? (asuming that i had -5v to feed the +/- 5v needed to the op-amp)
 
Adding 10K worth of isolation allowed the ECU to read the TPS at the same time the Arduino can read the TPS, however, I suspect that if your Arduino is not grounded to the same single-point ground that the TPS/ECU use, then the signal is horribly contaminated with the common-mode noise between the two disparate grounds that is intrinsic in the automobile...

If you are hell-bent on adding an opamp, then make it a true-differential input (like instrumentation amplifier) with a lot of common-mode isolation, and connect the opamp +input to the TPS signal, and the opamp -input to the TPS ground, right at the sensor. Use a shielded twisted-pair between the TPS and the remote Arduino. Now the Arduino ADC will see the true TPS signal.
 
cool ! thanks allot !
I dont think i will be doing something like that, any time soon, becouse at the meantime, i am more interested i a bit "rough" values, of how "much" the Throttle is open.. so the noise in MY readings, is not a big concern (atm), as much as it is in the ECU's :D
thanks again !
 
4 pulses per rev is an unusual crank signal, thats more like a VSS signal, all the car and industrial engines I've played with are usually 36-1, 18-1x2, etc, vw from memory have something like 9-1x4 I wonder if thats what you have an for some reason your not picking up the shorter pulses, VR type sensors have larger amplitude pulses for the -1 section, or the sensor is contaminated with metal particles, I've found that makes them less sensitive, its a particular issue for abs sensors.

For certain throttle sensors you can get double pots, a good idea if your installation is permanent.
 
Well. my car is pretty old. it has electronic ignition, but not injection. so for ignition, i guess 4 pulses where fine at that time :p .
 
Status
Not open for further replies.

Latest threads

Back
Top