_______ ( ___ ) | ( ) | | (___) | | ___ | | ( ) | | ) ( | |/ \|
## ## ###### ###### ## ## ## ##
## ## ## # ## ####### ##### ## ##
_______ ( ____ \ | ( \/ | | | | ____ | | \_ ) | (___) | (_______)
IMPORTANT: enter the case-INsensitive alphabetic (no numbers) code AND WRITE SOME SHORT summary of changes (below) if you are saving changes. (not required for previewing changes). Wiki-spamming is not tolerated, will be removed, so it does NOT even show up in history. Spammers go away now. Visit Preferences to set your user name Summary of change: '''IAC''' This is a 3-pin solenoid. I did some measurements to it: '''Resistance''' between pins: (1) - 20ohms - (2) - 20ohms - (3) (So there are 40 ohms between pin 1 and 3) Without connection there's no "default" position. '''Control it''' PWM switched ground to pin1 and pin3 moves the valve to opposite directions, if pin2 has stable 12V+ supply. Connecting pin1 to GND closes the valve. Changed the end of idle_solenoid() in iac.c so it sets 2 output channels instead of one: <code> cli(); digitalout(config.iac_sol_channel, output); sei_nop_cli(); digitalout(config.iac_sol_channel + 0x10, output ^ 0x80 ); sei(); </code> config.iac_sol_channel has been set to 0x36 (stepper channel A) This way 0x46 (stepper channel B) is inverted. Connections are according to GenBoard/Manual/DigitalOut/Table. IAC control seems working now, I can use mdh/mdi commands and idle changes. For warm engine value around mdi70 seems a good approximation for 900 rpm. I've found that small changes to value doesn't reflects in rpm immediately (or at all). Big changes (like mdiff :) are noticeable promptly. Idle controlled by GenBoard, but the '''idle controller''' (reference positions, ign-adv based control, iac-PID) is '''not yet tuned'''. Kindof instable now, see logs: * [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iac/20050728/config.txt config.txt] * [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iac/20050728/tables.txt tables.txt] * [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iac/20050728/megasquirt200507281017.msq Config and data saved in MegaSquirt] * [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iac/20050728/datalog200507281018.xls Datalog (XLS) from megasquirt. I've made a chart in it also] Definitely decrease P and D (start by cutting to half) and play with I-term as well. After PID is tuned, to get faster behaviour the proposal on bottom of GenBoard/UnderDevelopment/FirmWare/PowerRelated could be implemented. '''Driver selection''' 14V/20Ohms = 0.7A capability with flyback If the two coils have independent magnetic paths (which I expect), low voltage flyback is the best. Either: * 2 free FET (TO220 or DPAK) with flyback. The injector FETs have flyback applied already: on this 6 cyl machine that would use the two remaining high power FETs if you use the injector drivers, none to spare for other functions. * or '''2 stepper channels''' (free anyway, seems like a good choice) * or IGBTs. the IGBT-s have internal 400V clamping, but IMHO it's a bit rude to dump the coil energy in the IGBT. So I recommend to apply flyback diodes onboard if you choose this. (there are throughole pads for one end of the flyback diode at the IGBT) '''If the 2 solenoids have the same magnetic path''' ('''very unlikely''', only unipolar steppers have that), than high-voltage flyback (16V or above, 18..20V recommended) needed instead of low-voltage flyback: * FET is good, but with high voltage flyback. Throughole 18V transient suppression diodes are easy to mount for either the DPAK FETs or a free TO220 FET. ** if using the injector FETs with already applied low-voltage flyback, an SMB diode must be replaced with an SMB transient protection to get high-voltage flyback * SN754410 stepper chip is not sufficient, it has internal low-voltage flyback. L293 would work with external diodes, but we don't use it since v2 * IGBT is good, but high voltage flyback recommended. ---- '''Docs found''' Found some info in haltech docs: BAC Hi BAC high is a form of BAC idle control that is used for 3-wire BAC valves with two coils. These valves are sprung so that when no coils are energised, the BAC valve sits at 50% open. Two PWM signals are used to move the coils. One signal moves the valve from 0% to 50% open, while the other signal moves the valve from 50% to 100% open. The BAC Hi output moves the valve from 50% to 100%. When the target position for the valve is between 50% and 100%, this output will provide a signal from 0% to 100% duty. Sounds relatively simple. Some changes and things to-check required in idle_solenoid() : * 2 channels must be used instead of config.iac_sol_channel. However, I don't see a reason to add a config variable to make them independent. Eg. config.iac_sol_channel and config.iac_sol_channel+16 would work well (that means if mdh02/mdh82 is used for one solenoid, mdh12/mdh92 can be used for the other). * if one solenoid is powered, the other must be unpowered. This can be remembered or done dumbly every time (SRAM/cycles tradeoff). * iac_conf can be cleaned-up (while merging the unipolar-iac support) as on GenBoard/UnderDevelopment/FirmWare/PowerRelated to make space for the new bit that activates BAC-mode. All idle control tuning and setup is done with the BAC Hi output. Refer to section 3.13 for details on how to tune your idle control. BAC Low The BAC low output is used to control the BAC valve when the target opening is 0% to 50% open. When the valve target position is 0%, the output duty is 100%. When the target is 50% open, the output duty is zero to allow the spring to return the valve to its default position. BAC Inverted '''For 3-wire BAC valves that do not have a spring''' to return the valve to the centre position, use BAC and BAC Inverted to control the valve. Connect the BAC output to the coil that pulls the BAC valve open. Connect the BAC Inverted output to the coil that pulls the BAC valve closed. The BAC Inverted signal is a complementary signal to the BAC signal. If the BAC output is set to 70% duty, then the BAC Inverted signal is set to 30% duty. All idle control tuning and setup is done with the BAC output. pwm freq maybe in 200-1000hz range? [http://www.haltech.com.au/downloads/E11_Instruction_Manual_12.pdf original doc] ---- NOTE ! "Original" wiring ('0 280 140 509' valve (from E30 -89) is as follows... Pin 2 -> 12V supply. pin 1 -> to Motronic ECU pin 22 (white-green) Pin 3 -> to Motronic ECU pin 4 (white-yellow) wiring might be same with the '524' valve ? * Thanks Ben, I'm not sure where it came from, I think these are very similar ones. With motronic control it has some "Brrrrr" sound like the 50Hz on a transformator. ---- Picture of stock(?) idle air solenoid: http://quasar.dynaweb.hu/~lezsi/bmw/original/PICT0006-idle-solenoid.JPG ---- System had an '''EVAP purge canister valve''' (said 'auxiliary air control' earlier) also: http://quasar.dynaweb.hu/~lezsi/bmw/original/PICT0011-some-air-solenoid.JPG I'm not sure whether this is part of current motronic config or it comes from some jetronic system. Harness was connected however. '''options''' * leave it out and block its connection from throttle body. * or you can control it from GenBoard. A purge canister can trap significant amount of gases (useful in the engine, unwanted in the athmosphere unburnt) escaped from the tank on a hot summer day (such as today). ** resistance is 46 ohms. This might be a useful idea, but has low priority at the moment :) ** actually I used the drill in throttle body for [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iat.jpg IAT] Optional: Add document to category: Wiki formatting: * is Bullet list ** Bullet list subentry ... '''Bold''', ---- is horizontal ruler, <code> preformatted text... </code> See wiki editing HELP for tables and other formatting tips and tricks.