A xenon retrofit to an E46 car that came standard with halogens normally results in quite a few problems:
- Fault lights on the instrument display, showing faulty headlights even though the xenons might actually work fine,
- Flickering or inoperative xenon low beams, especially with engine running,
- No high beams on the inner halogens, or no high beams from the outer xenons (internal shutter does not open).
These issues are mostly dealt with by fitting additional hardware, such as aftermarket wiring harnesses, capacitors and resistors. However, since xenon headlights were an OEM option on these cars, the light control module in the car can be coded to fix all of the abovementioned issues without hardware solutions, with the exception of the bi-xenon feature (controlling the internal flap on the xenon projectors to enable the high beam function). Cars with halogen low beams do not have the wiring harness for the bixenon socket on the light housing, so this has to be retrofitted as well.
The coding of the light control module (LCM or LSZ in German) can most easily be done with NCS Expert. I will not give a tutorial of NCS Expert here, there is plenty to read on the interwebs about it and I will assume a working knowledge of NCS Expert.
Step 1
Firstly, the xenon headlight option (option code $522) must be added to the car's vehicle order (VO) to the AKMB (instrument display) and ALSZ (light control) modules, by using the FA_Read and FA_Write functions. This will cancel the false error lights on the instrument display.
Step 2
Code the LCM for the various xenon functions by changing the following parameters in the ALZS module:
PWM_ANSTEUERUNG_AL (pulse-width modulation control low beams to stop the xenons from flickering)
wert_02 (wert_01 = halogens, wert_02 = xenons)
XENON_TEST
aktiv (aktiv = enabled, nicht_aktiv = disabled)
XENON_TIMEOUT
wert_01
XENON_TIME
wert_01
BI_XENON
aktiv
Step 3
Other options that you can change according to personal preference:
AL_KL_50 (low beams on when starting engine
nicht_aktiv (aktiv = low beams turn off when cranking engine, nicht_aktiv = low beams stay on)
This option is useful to avoid cycling the low beam xenons on/off when starting the engine with the lights turned on, or if your car has auto lights with a light sensor.
BIXENON_EIN_BEI_LICHTHUPE (Bixenon lights on when flashing high beams)
nicht_aktiv (aktiv = bixenons flash together with inner halogens when flash-to-pass (pulling the stalk), nicht_aktiv = only halogens flash)
This option avoids the xenons turning on when pulling the light stalk to flash the high beams with the light switch turned off.
HEIMLEUCHTEN_AL (Follow-me-home lights with low beams)
nicht_aktiv
This option avoids the follow-me-home lights (pulling the light stalk after turning off the car) from using the xenons. You could code the function to use the halogen high beams or even the foglights instead of the low beams by changing the appropriate line HEIMLEUCHTEN_FL (fernlicht or high beams) or HEIMLEUCHTEN_NSW (nebelscheinwerfer of foglights) to "aktiv".