Electronic Controlled Automatic Choke Control
Moderators: JeffC, rdoherty, stieg, brentp
-
- Posts: 133
- Joined: Tue Jun 08, 2010 7:06 pm
You could cut out the anomaly of RPM by using one of the programmable outputs on MJ. Choose your RPM, set it in there with a high or low output, that will trigger that particular input. Let's face it, once you've set it, you're hardly going to be changing it regularly.
In terms of losing sensor outputs... one option could be to have a sensor repeater, basically replicating two outputs from each sensor to the required circuitry.
e.g. temperature sensor > repeater (arduino based?) > two outputs - one to MJLJ one to Choke Control
In terms of losing sensor outputs... one option could be to have a sensor repeater, basically replicating two outputs from each sensor to the required circuitry.
e.g. temperature sensor > repeater (arduino based?) > two outputs - one to MJLJ one to Choke Control
-
- Posts: 704
- Joined: Sun Sep 07, 2008 1:54 pm
- Location: Fareham, GB
Yes you could but what if you didn't have an MJLJ (God knows why ) then this unit could be run without one. Also i was going to use the RJ11 as a bus to supply the idle control with all relevant info e.g. rpm, engine temp, tps/map making it easy to hook up.
I think your over complicating things with a seperate repeater. With the megajolt type units, you could run many units in parallel with each other off one sensor and in future have an output from such a unit to power a smiths type gauge, making it simpler to install and keeping all your gauges.
I think your over complicating things with a seperate repeater. With the megajolt type units, you could run many units in parallel with each other off one sensor and in future have an output from such a unit to power a smiths type gauge, making it simpler to install and keeping all your gauges.
1310 A-series Mini, lightened and built myself. V4 board and loving it
Rasputin22 - The Mini Forum
Rasputin22 - MK1 Golf Forum
Megajolt repair for the UK available
Rasputin22 - The Mini Forum
Rasputin22 - MK1 Golf Forum
Megajolt repair for the UK available
-
- Posts: 704
- Joined: Sun Sep 07, 2008 1:54 pm
- Location: Fareham, GB
Right. tried my hand at some simple programming. This basically uses the arduino to control the servo from the input of the CTS (Resistance range 100(hot) - 300(cold) Ohms). The CTS will be in a voltage divider with a 2K2 Ohm resistor (strangely enough what the megajolt uses so it can be run in parallel) so voltages across the CTS varies from 0.6 - 0.2v (I believe) Vout = ((R1/R1+R2)*Vtotal (300/2500)*5=0.6Vmax (100/2500)*5=0.2Vmin
//Project idle valve - Option 1 Servo control
//Servo PWM frequency = 50Hz, 1000us left, 1500us centre, 2000us right, pulse length. CTS voltage between (approx) 0.6v (123) and 0.2v (41)
int idleservo = 11; //pin connect to servo
int cts = 0; //pin connect to coolant temperature sensor
int ctsvalue = 0; //value returned from cts
void setup()
{
pinMode(idleservo, OUTPUT); //digital output
pinMode(cts, INPUT); //analog input
}
void loop()
{
ctsvalue = analogRead((cts * 12) + 500); //read value from cts, multiply by 12, then add 500 (972us-1976us)
digitalWrite(idleservo, HIGH); //start pulse
delayMicroseconds(ctsvalue); //pulse width
digitalWrite(idleservo, LOW); //pulse end
delayMicroseconds(20000-ctsvalue); //time til next pulse, total = 50Hz
What do people in the know think.
Ryan
//Project idle valve - Option 1 Servo control
//Servo PWM frequency = 50Hz, 1000us left, 1500us centre, 2000us right, pulse length. CTS voltage between (approx) 0.6v (123) and 0.2v (41)
int idleservo = 11; //pin connect to servo
int cts = 0; //pin connect to coolant temperature sensor
int ctsvalue = 0; //value returned from cts
void setup()
{
pinMode(idleservo, OUTPUT); //digital output
pinMode(cts, INPUT); //analog input
}
void loop()
{
ctsvalue = analogRead((cts * 12) + 500); //read value from cts, multiply by 12, then add 500 (972us-1976us)
digitalWrite(idleservo, HIGH); //start pulse
delayMicroseconds(ctsvalue); //pulse width
digitalWrite(idleservo, LOW); //pulse end
delayMicroseconds(20000-ctsvalue); //time til next pulse, total = 50Hz
What do people in the know think.
Ryan
Last edited by NITROPIXIE on Mon Aug 30, 2010 12:43 am, edited 1 time in total.
1310 A-series Mini, lightened and built myself. V4 board and loving it
Rasputin22 - The Mini Forum
Rasputin22 - MK1 Golf Forum
Megajolt repair for the UK available
Rasputin22 - The Mini Forum
Rasputin22 - MK1 Golf Forum
Megajolt repair for the UK available
Looks like it would work!
Next step would be to make it run via interrupt so that your code can do other stuff and not be constantly servicing this loop. Or; if you could program a 50Hz PWM with the duty cycle being the servo wiper position (1-2ms pulse width). Then, to change the servo position you just calculate & set the appropriate duty cycle.
Next step would be to make it run via interrupt so that your code can do other stuff and not be constantly servicing this loop. Or; if you could program a 50Hz PWM with the duty cycle being the servo wiper position (1-2ms pulse width). Then, to change the servo position you just calculate & set the appropriate duty cycle.
-
- Posts: 133
- Joined: Tue Jun 08, 2010 7:06 pm
Here's that guys Mega Stick
http://www.royalephoenix.com/pe_shop/index.php
Might help, programming is the same as Arduino, just more inputs / outputs and versatility
http://www.royalephoenix.com/pe_shop/index.php
Might help, programming is the same as Arduino, just more inputs / outputs and versatility
-
- Posts: 133
- Joined: Tue Jun 08, 2010 7:06 pm
Hiya Ryan,
I've stumbled across this while having a nosey round the site. Any updates?
I've been doing similar (only really got as far as installing some hardware), I opted for a servo to operate an SU choke in place of the cable because it will do idle speed & mixture together. It also retains the mechanical control so the servo could be positioned by hand if I managed another fry up of my electronics. Austin Rover did actually put stepper motor controlled chokes on Montegos & Maestros. Sophisticated for their day, but they developed a bad reputation, falling short of the injection systems others were introducing and being more complex than the mechanical autochokes of competitors.
My intention was to control my servo from a look up table, like MJ does, with the table also providing the auxiliary input for the MJ. My thinking is that this would allow me to find the engine's requirements by simply using a pot in place of the temperature sensor and fine tune the advance and enrichment which must be dependent on each other. I'm also looking at Arduino, as there's a huge user base who've created a path for an electronics ignoramus like me to follow.
I take your point about using serial comms - using the MJ's existing aux in seems easier if you want to alter it on the fly dependent on what your choke is up to. How about a power off hardware bypass (i.e. a crossover) of the choke controller to reroute the signal direct to the MJ?
Other refinements you could bring to a mechanical fuel system:
Overrun fuel cut, to improve mpg when decelerating through engine braking. MJ could already achieve this through users outputs to tell a valve the rpm is above idle speed and the throttle is shut (TPS or low MAP). Again, The HifE (and Kif) SU's have been here first with the Monty/Maestro ECU switching a valve on their float chamber vents to put a vacuum, equal to that in the venturi, over the fuel: so none is pushed through the jet.
AFR control, this could be much more complex but could also be implemented through float chamber pressure control, or with an air bypass valve, as used to control idle speed on injection systems. You'd obviously need a lambda sensor input, the trick will be making what it reads, which is history, relevant to the current mix going into the inlet. It'd be great if just opening a valve on the command of a narrowband signal did the job, but I doubt it will. I suspect it would spend its time "seesawing" the AFR from too high to too low. I reckon looking at a wideband signal (as a reference voltage?) along with rpm and "nudging" the afr in right direction would be more fruitful; you could set rpm rate of change parameters to avoid tinkering with acceleration enrichment and also use minor rpm changes to indicate engine efficiency, as well as control the sampling intervals between nudge adjustment decisions for the AFR valve. You need an interval long enough to allow the lambda sensor to report the effect of the last nudge in order to decide if the amount of bypass needs to be nudged again.
Anti run on should be a doddle to chuck in as an extra benefit.
I think you're selling your project short by suggesting it only replaces a choke cable, it should improve the efficiency, and health, of your engine the same as fitting MJ - ever more worthwhile with rising fuel prices.
Have you seen the MPGuino, or Ecomodder's site?
Howard
I've stumbled across this while having a nosey round the site. Any updates?
I've been doing similar (only really got as far as installing some hardware), I opted for a servo to operate an SU choke in place of the cable because it will do idle speed & mixture together. It also retains the mechanical control so the servo could be positioned by hand if I managed another fry up of my electronics. Austin Rover did actually put stepper motor controlled chokes on Montegos & Maestros. Sophisticated for their day, but they developed a bad reputation, falling short of the injection systems others were introducing and being more complex than the mechanical autochokes of competitors.
My intention was to control my servo from a look up table, like MJ does, with the table also providing the auxiliary input for the MJ. My thinking is that this would allow me to find the engine's requirements by simply using a pot in place of the temperature sensor and fine tune the advance and enrichment which must be dependent on each other. I'm also looking at Arduino, as there's a huge user base who've created a path for an electronics ignoramus like me to follow.
I take your point about using serial comms - using the MJ's existing aux in seems easier if you want to alter it on the fly dependent on what your choke is up to. How about a power off hardware bypass (i.e. a crossover) of the choke controller to reroute the signal direct to the MJ?
Other refinements you could bring to a mechanical fuel system:
Overrun fuel cut, to improve mpg when decelerating through engine braking. MJ could already achieve this through users outputs to tell a valve the rpm is above idle speed and the throttle is shut (TPS or low MAP). Again, The HifE (and Kif) SU's have been here first with the Monty/Maestro ECU switching a valve on their float chamber vents to put a vacuum, equal to that in the venturi, over the fuel: so none is pushed through the jet.
AFR control, this could be much more complex but could also be implemented through float chamber pressure control, or with an air bypass valve, as used to control idle speed on injection systems. You'd obviously need a lambda sensor input, the trick will be making what it reads, which is history, relevant to the current mix going into the inlet. It'd be great if just opening a valve on the command of a narrowband signal did the job, but I doubt it will. I suspect it would spend its time "seesawing" the AFR from too high to too low. I reckon looking at a wideband signal (as a reference voltage?) along with rpm and "nudging" the afr in right direction would be more fruitful; you could set rpm rate of change parameters to avoid tinkering with acceleration enrichment and also use minor rpm changes to indicate engine efficiency, as well as control the sampling intervals between nudge adjustment decisions for the AFR valve. You need an interval long enough to allow the lambda sensor to report the effect of the last nudge in order to decide if the amount of bypass needs to be nudged again.
Anti run on should be a doddle to chuck in as an extra benefit.
I think you're selling your project short by suggesting it only replaces a choke cable, it should improve the efficiency, and health, of your engine the same as fitting MJ - ever more worthwhile with rising fuel prices.
Have you seen the MPGuino, or Ecomodder's site?
Howard
If someone is interested, I designed and build arduino schield for idle control and DRL (daytime running lights).
I tried to control idle position of the carburetor throttle plate with little step motor that is used in FI systems for idle control but as a valve controlling how much air is bypassing throttle plate.
But it turned up that the stepper motor is to week for the job.
So I decided to use small DC motor from the BOSCH throttle body injection unit, like this one here:
But I now have different problem. When stepper motor hits the limit (can not turn any more) it does not draw more current than normally, but when DC motor is stopped it can draw ten times more current than in normal operation. That heats up my driver IC, and I am afraid to put it in the car.
If you are interested (and it is not against forum policies) I can post the image of my circuit design, and arduino sketch here.
I tried to control idle position of the carburetor throttle plate with little step motor that is used in FI systems for idle control but as a valve controlling how much air is bypassing throttle plate.
But it turned up that the stepper motor is to week for the job.
So I decided to use small DC motor from the BOSCH throttle body injection unit, like this one here:
But I now have different problem. When stepper motor hits the limit (can not turn any more) it does not draw more current than normally, but when DC motor is stopped it can draw ten times more current than in normal operation. That heats up my driver IC, and I am afraid to put it in the car.
If you are interested (and it is not against forum policies) I can post the image of my circuit design, and arduino sketch here.
'87 BMW 316 E30
1600cc M10B16
petrol + LPG, MJLJ
1600cc M10B16
petrol + LPG, MJLJ
-
- Posts: 152
- Joined: Wed Jan 02, 2008 12:52 pm
- Location: Melbourne, Australia
A few possibiilties..
Add a low value current-sense resistor inline with the motor, amplify the signal with an op-amp and feed it into an analog input on the arduino. Measure the voltage while moving, if it reads too high, you know you have hit the motors limit (or have a mech problem), so stop moving.
Hack in the circuitry out of a RC servo and mount the position feedback pot so the board knows if its at the limit. you would need to take the H-Bridge drive signals off the servo board and feed them into whatever you are using to drive your DC motor, since the little servoboard H-Bridge wont be able to drive a motor that big.
Replace the DC motor with an RC-servo altogether for accurate position control. RC Servos are available in many sizes from tiny $10 cheapies up to huge, high torque monsters.. Probably use one with metal gears would be a good idea.
Any of those thoughts help ?
Add a low value current-sense resistor inline with the motor, amplify the signal with an op-amp and feed it into an analog input on the arduino. Measure the voltage while moving, if it reads too high, you know you have hit the motors limit (or have a mech problem), so stop moving.
Hack in the circuitry out of a RC servo and mount the position feedback pot so the board knows if its at the limit. you would need to take the H-Bridge drive signals off the servo board and feed them into whatever you are using to drive your DC motor, since the little servoboard H-Bridge wont be able to drive a motor that big.
Replace the DC motor with an RC-servo altogether for accurate position control. RC Servos are available in many sizes from tiny $10 cheapies up to huge, high torque monsters.. Probably use one with metal gears would be a good idea.
Any of those thoughts help ?
I already did this, but DC motor at startup / direction change draws enough current to activate stop sequence. I am still working on this but so far it has not been very reliable way of sensing motor limit.Spockie-Tech wrote:Add a low value current-sense resistor inline with the motor, amplify the signal with an op-amp and feed it into an analog input on the arduino. Measure the voltage while moving, if it reads too high, you know you have hit the motors limit (or have a mech problem), so stop moving.
These are not easy to find / cheap where I am.Spockie-Tech wrote:Hack in the circuitry out of a RC servo...
'87 BMW 316 E30
1600cc M10B16
petrol + LPG, MJLJ
1600cc M10B16
petrol + LPG, MJLJ
-
- Posts: 152
- Joined: Wed Jan 02, 2008 12:52 pm
- Location: Melbourne, Australia
You just need some timing software.. if High-Current continuously for >x sec then stop type stuff.
for a huge range of servos and related mechanisms that ships anywhere
http://www.servocity.com/index.html
for a huge range of servos and related mechanisms that ships anywhere
http://www.servocity.com/index.html
Yes I am going that way, but I need to solve few questions:Spockie-Tech wrote:You just need some timing software.. if High-Current continuously for >x sec then stop type stuff.l
- how long do I let current to be high without burning L293B IC
- when I stop the motor I can not control idle
- for how long do I stop the motor and how - do I use delay()
- say I stop it after 1 sec of high current, for a 1 sec. Now L293 is already hot, if I wait another 1 sec it might burn.
I did not find anything that I can use, and that can survive at the engine bay.Spockie-Tech wrote:for a huge range of servos and related mechanisms that ships anywhere
http://www.servocity.com/index.html
'87 BMW 316 E30
1600cc M10B16
petrol + LPG, MJLJ
1600cc M10B16
petrol + LPG, MJLJ