BMW S65 (V8 M3) Ion Sensing
Posted: Tue Dec 14, 2021 12:17 am
I decided to start a new topic so the different hardware solutions could be kept separate.
I finally got a chance to test out a running car. The coils have three pins: 12V, GND, and a signal wire that doubles as ignition and sense signals. It seems that the ECU drives it to 0V to charge the coil, 5V-ish to release the spark and perform ion sensing, and then 2.5V-ish to idle the coil.
1. If the signal wire is disconnected, the voltage floats to 4.12V
2. If the signal wire is connected to a 1kO/1kO divider from 5V (to simulate 2.5V), the voltage is 3.6V
3. If the signal wire is connected to a 11kO/11kO divider from 5V (to simulate 2.5V), the voltage is 3.82V
4. If the signal wire is pulled up to 5V with a 1kO resistor, the voltage is 4.63V
5. If the signal wire is pulled up to 5V with a 11kO resistor, the voltage is 4.37V
Sorry for the ground offset in these pictures, just trust that the real voltage range is 0-5V. The voltage sense is 1/11th what it should be (so take the major grid division on the bottom for yellow and multiply by 11). These were taken with no load on the motor; I know ion sensing isn't as useful at idle but I don't have a portable oscilloscope.
Dwell time is about 2ms. There are some interesting spikes during dwell that I can't explain; there are similar spikes after the measurement period that I can't explain either - a series of 4 shorts to ground that occur within 1.5-2ms.
It seems the ECU pulls the signal wire high during the measurement period which varies with RPM - at 2000RPM the measurement period is 15ms which is 180 degrees, and the dip in the signal occurs about 24 degrees after the spark. That seems awfully soon to be a peak pressure measurement, unless this is just the expected behavior for no load?
For 775RPM, the measurement period is 20m or 93 degrees, and the dip occurs about 15 degrees after the spark. Again that seems really early?
So, uh, any feedback on the graphs? Any idea on the pulses during coil charge or after the measurement block? Is this all worthless until I see it under load?
Seems in order to drive it I need something capable of driving 2.5V and 0V with low impedance, along with the ability to disconnect the driver and just have a pull-up to 5V with measurement across the resistor. Maybe use an output from the MCU to indicate 0V or 2.5V, an opamp to provide the current needed to keep the voltage stable, a mosfet controlled by another output of the MCU to allow the driver voltage through, and an opamp to measure the voltage drop across the current sense resistor?
I finally got a chance to test out a running car. The coils have three pins: 12V, GND, and a signal wire that doubles as ignition and sense signals. It seems that the ECU drives it to 0V to charge the coil, 5V-ish to release the spark and perform ion sensing, and then 2.5V-ish to idle the coil.
1. If the signal wire is disconnected, the voltage floats to 4.12V
2. If the signal wire is connected to a 1kO/1kO divider from 5V (to simulate 2.5V), the voltage is 3.6V
3. If the signal wire is connected to a 11kO/11kO divider from 5V (to simulate 2.5V), the voltage is 3.82V
4. If the signal wire is pulled up to 5V with a 1kO resistor, the voltage is 4.63V
5. If the signal wire is pulled up to 5V with a 11kO resistor, the voltage is 4.37V
Sorry for the ground offset in these pictures, just trust that the real voltage range is 0-5V. The voltage sense is 1/11th what it should be (so take the major grid division on the bottom for yellow and multiply by 11). These were taken with no load on the motor; I know ion sensing isn't as useful at idle but I don't have a portable oscilloscope.
Dwell time is about 2ms. There are some interesting spikes during dwell that I can't explain; there are similar spikes after the measurement period that I can't explain either - a series of 4 shorts to ground that occur within 1.5-2ms.
It seems the ECU pulls the signal wire high during the measurement period which varies with RPM - at 2000RPM the measurement period is 15ms which is 180 degrees, and the dip in the signal occurs about 24 degrees after the spark. That seems awfully soon to be a peak pressure measurement, unless this is just the expected behavior for no load?
For 775RPM, the measurement period is 20m or 93 degrees, and the dip occurs about 15 degrees after the spark. Again that seems really early?
So, uh, any feedback on the graphs? Any idea on the pulses during coil charge or after the measurement block? Is this all worthless until I see it under load?
Seems in order to drive it I need something capable of driving 2.5V and 0V with low impedance, along with the ability to disconnect the driver and just have a pull-up to 5V with measurement across the resistor. Maybe use an output from the MCU to indicate 0V or 2.5V, an opamp to provide the current needed to keep the voltage stable, a mosfet controlled by another output of the MCU to allow the driver voltage through, and an opamp to measure the voltage drop across the current sense resistor?