_ __ | |/ / | ' / | < | . \ |_|\_\
#### # # # # # # ####
___ ( _`\ | ( (_) | |___ | (_, ) (____/'
______ |___ / / / / / / /__ /_____|
## ## ## ## ## ## #### ##
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 Firmware changes''' 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. Control 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. 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 is somewhat working this way, 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 reflect 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 relative heavy actuator couldn't cope with such a high PWMming (2kHz), decreasing control frequency was reasonable. MembersPage/BengtR measured frequency from couple of 'similar' (but different part ie. Bosch part number vice) valves, they all were controlled with 50 to 150 hz signals. I've modified the firmware to call the idle solenoid code with 100Hz frequency (20 times slower, than original solenoid freq in GenBoard). It seems to be working now, changes like 1-2 (hex) iac values reflected quickly in rpm. *I've got strange behavior which might be firmware related (IAC setting). Every time I switch the ignition ON idle setting is OK according to iac_*_start_pos. Right before cranking it's jumping to 100% and then (while cranking) jumps back to the preset value. After it jumps again to 100% and slowly falling back to the right value. (Takes seconds, and engine is revving up to 2200 rpm). Engine status bits are suspicious to me but don't see the reason why this 100% IacDC occurs. Please check my [http://quasar.dynaweb.hu/~lezsi/bmw/conversion/iac/datalog200508281822.xls XLS] logfile if interested. I think that IAC behaviour (description above) happens quite normally when PID target rpm is not reached. However when cranking and immediately after the engine has started this causes bit high rpm. Note - that this is somewhat the kind of behaviour that original ECU's (Bosch, Weber, Siemens etc.) also has. Adjusting gain and/or pid integrator values, rpm falling time to regulated idle rpm could be adjusted. * It seemed to me that this is not related to PID. According to the XLS above, I have iac value series like(in %): 40, 40, 40....40, 100, 100, 40, 40, 40, 100, 100, 99, 98, 97.. 42, 41, 40, 40.... It's only during start, and after that PID is correcting values slightly. 2200 rpm is actually my overrun fuelcut limit, I guess it'd be much higher (@iac 100%) without that. *I've got a new idea about fluctuating idle, it might be related to the fact that I use 6 banks alternating inj config but no cam sync. Maybe it'd be better to fire them all at once while no camsync? 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.