revilla Posted June 2, 2020 Share Posted June 2, 2020 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):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: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 More sharing options...
revilla Posted June 2, 2020 Author Share Posted June 2, 2020 Actually decoding the stepper motor signal and tracking the position of the stepper motor shouldn't be too difficult.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 = 0Yellow = Low, Green = Low, State = 1Yellow = High, Green = Low, State = 2Yellow = 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.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.And here in the middle it goes 1-0-3-2-3-0-1, that's where it changes direction.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 More sharing options...
rj Posted June 3, 2020 Share Posted June 3, 2020 Andrew, This is pretty much how you control stepper motors :-p Sometimes you do "micro stepping" as well. Probably easier to google it than listening to my rubbish :-o Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now