I purchased a leather wrapped Jeep WJ steering wheel which had audio controls that I wanted to get working. Unfortunately the TJ clock spring only has 1 wire for the cruise control signals and the WJ clock spring is not compatible in the TJ.
I learned a lot about how this system works so I am going to detail this all out. If you just want the solution you can skip to my next post.
The way these buttons work is called a resistance ladder. Each button is wired in parallel and each has a unique resistor to ground. The PCM puts out +5v and with each press the voltage drops by a unique amount that can be detected through the single wire. For cruise control there is also a 20.5k idle resistor so the PCM can detect any trouble conditions.
Here are the actual resistor values for each button resistor:
Idle 20.5kΩ
Cruise On/Off 470Ω
Cruise Cancel 1.25kΩ
Cruise Coast 2.94kΩ
Cruise Set 5.49kΩ
Cruise Resume/Accel 15.4kΩ
Left Audio Up 261Ω
Left Audio Down 681Ω
Left Audio Centre 162Ω
Right Audio Up 1.21kΩ
Right Audio Down 3.01kΩ
Right Audio Centre 51.1kΩ
*Since these are wired in parallel with the 20.5k idle resistor the measured resistance is slightly different.
My initial idea was to wire the audio buttons in parallel with the cruise buttons to send all the signals down the existing SWI (steering wheel interface) signal wire. I could then tap into the wire without cutting it and redirect the signal to something like a PAC SWI-RC. I discovered a few issues with this idea:
1. If you have cruise control turned on and the PCM sees any button it doesn’t recognize (eg. volume up) it will turn the cruise control off.
2. The idle circuit has a 20.5kΩ resistance value which the SWI-RC would detect as a button press. Most SWI are open circuits when no button has been pressed.
3. Both the PCM and the SWI-RC are putting out +5v on the SWI wire so this would cause issues.
4. Some of the resistance values are so close together (eg. Right Audio Up 1.21kΩ & Cruise Cancel 1.25kΩ) that it is hard to reliably detect which button was pressed.
So my idea was to install an Arduino Nano (small computer) in between the SWI signal wire and the PCM and SWI-RC. The Arduino would read the incoming voltage and based on the drop it would decide whether to pass the signal along to the PCM or the SWI-RC. I was also going to have to shift the audio resistance values by adding a resistor in series.
I learned a lot about how this system works so I am going to detail this all out. If you just want the solution you can skip to my next post.
The way these buttons work is called a resistance ladder. Each button is wired in parallel and each has a unique resistor to ground. The PCM puts out +5v and with each press the voltage drops by a unique amount that can be detected through the single wire. For cruise control there is also a 20.5k idle resistor so the PCM can detect any trouble conditions.
Here are the actual resistor values for each button resistor:
Idle 20.5kΩ
Cruise On/Off 470Ω
Cruise Cancel 1.25kΩ
Cruise Coast 2.94kΩ
Cruise Set 5.49kΩ
Cruise Resume/Accel 15.4kΩ
Left Audio Up 261Ω
Left Audio Down 681Ω
Left Audio Centre 162Ω
Right Audio Up 1.21kΩ
Right Audio Down 3.01kΩ
Right Audio Centre 51.1kΩ
*Since these are wired in parallel with the 20.5k idle resistor the measured resistance is slightly different.
My initial idea was to wire the audio buttons in parallel with the cruise buttons to send all the signals down the existing SWI (steering wheel interface) signal wire. I could then tap into the wire without cutting it and redirect the signal to something like a PAC SWI-RC. I discovered a few issues with this idea:
1. If you have cruise control turned on and the PCM sees any button it doesn’t recognize (eg. volume up) it will turn the cruise control off.
2. The idle circuit has a 20.5kΩ resistance value which the SWI-RC would detect as a button press. Most SWI are open circuits when no button has been pressed.
3. Both the PCM and the SWI-RC are putting out +5v on the SWI wire so this would cause issues.
4. Some of the resistance values are so close together (eg. Right Audio Up 1.21kΩ & Cruise Cancel 1.25kΩ) that it is hard to reliably detect which button was pressed.
So my idea was to install an Arduino Nano (small computer) in between the SWI signal wire and the PCM and SWI-RC. The Arduino would read the incoming voltage and based on the drop it would decide whether to pass the signal along to the PCM or the SWI-RC. I was also going to have to shift the audio resistance values by adding a resistor in series.