Jump to content
Click here if you are having website access problems ×

Why The K Series IACV Whistles


revilla

Recommended Posts

As well as the obvious stepper-motor noises (like an electronic chicken) I've noticed that K Series IACVs emit a high pitched whistle whenever the ECU is powered up.

I'm working on an engine monitor (a piece of hardware and software which will let me monitor the behaviour of the engine at a much higher resolution than the 1 per second update of OBDII live data, in fact it should be able to log and graph parameters like ignition timing, injection pulse width, IAT, MAP, TPS once per engine cycle, so recording each individual ignition and injection event). I was planning to make it track the IACV position. Sounds easy enough, count the pulses on the various pins, convert to up and down steps ...

Here is the voltage across one of the IACV coils WHEN IT'S DOING NOTHING AT ALL not making the usual ticking noises, so the IACV isn't moving at all here):

IACVHold.thumb.png.358c21c62fd1b58e892230080c874ad4.png

It's being driven by a 3.91kHz square wave. 3.91kHz is a high pitched whistle.

Here's the IACV when it's doing something, note this is on a much longer timescale:

IACVActive.thumb.png.5167b5e29329af6cae327b24936bff88.png

The solid green bits at the two ends are the 3.91kHz square wave, before and after the IACV moved (in this case a full re-index after turning off the ignition) - they just look like a solid fuzz because of the compressed timescale of 400ms per division needed t display the actual stepper pulses which are a lot slower. In the middle are the normal looking stepper motor pulses driving the motor.

So it looks as though the ECU applies a "hold" signal to the coil corresponding to the current position, I guess to hold it in place and stop the IACV from drifting. It applies less than a full drive pulse to "hold" rather than "move", presumably to avoid excess heat dissipation when less force is required. It does this pulse-width-modulating the drive signal (turning it on and off rapidly so on average it is partially on - this is a lot more electrically efficient that driving it through say a resistance where there would  be a lot energy dissipated as heat in the resistor). And it modulates it at 3.91kHz, giving the high pitched whistle.

This will mean my pulse counting needs to be a lot more sophisticated than I thought. I guess it needs to look for a transition on either coil where the other is steady for a given time (greater than the period of 3.91kHz) either side of it. But that means time-delaying the decision on whether to respond to a signal until you've seen what follows it. That might have to wait for Version 2!

Link to comment
Share on other sites

Actually decoding the stepper motor signal and tracking the position of the stepper motor shouldn't be too difficult.

StepperReversal.png.350499bf57d0f5b932c79c0002d98d37.png

No doubt the website will crush all of the detail out of that diagram but:

  • I noticed that the both coils of the stepper motor were permanently "on", one way or the other. So the voltage reverses across the coils as one end is pulled up to battery voltage and the other down to ground, then the other way around, but the coils are never off.
  • This means I only need to monitor the state of two of the four pins, one for each coil (the other pin for each coil will just have the inverse voltage applied).
  • In the diagram above the green voltage is Pin A, the yellow voltage is Pin B.
  • I've highlighted all the transitions in red. I can monitor both pins for transitions with interrupts on an Arduino.
  • At each transition I check the time since the previous transition.
  • If it's less than a threshold I just do nothing as the state that has just ended didn't last long enough to be "move" pulse, it will just be a cycle of the 3.91kHz holding signal.
  • If it's greater than the threshold, I know the stepper motor has been driven to a state consistent with the voltages just ending.
  • On the diagram above, I've labeled the four possible states as:​
    • Yellow = Low, Green = High, State = 0
    • Yellow = Low, Green = Low, State = 1
    • Yellow = High, Green = Low, State = 2
    • Yellow = High, Green = High, State = 3.

In the diagram above I caught the IACV doing its "power off re-index", where it sets itself to a known position ready for the next start. As the ECU doesn't get any feedback from the IACV it cannot know for sure where it is when powered on, so it forced it to fully closed by executing the maximum possible number of "close" steps to guarantee that it is follw closed, then opens it the required number of steps to start.

In the first part of the diagram highlighted in red at the bottom, the states go 3-2-1-0-3-2-1-0. It's counting down, closing.

Down.png.5a6e0e9b08bf977b88318895ba598203.png

In the second part of the diagram highlighted in green, the states go 0-1-2-3-0-1-2-3. It's counting up, opening.

Up.png.004fc93e225add758c551141ebfd24e1.png

And here in the middle it goes 1-0-3-2-3-0-1, that's where it changes direction.

Reversal.png.5574680439d96b68f154f5c01190e2a2.png

So any change from 0-1, 1-2, 2-3, 3-0 is a count UP.

Any change from 0-3, 1-0, 2-1, 3-2 is a count DOWN.

I can track those UP and DOWN counts, and maintain a step number. If I make sure that isn't allowed to go negative I can mimic the actual behaviour of the stepper motor when re-indexing; follow the DOWN pulses from the ECU until I hit 0 then stop, then start counting UP when the ECU starts opening the IACV.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...