The First Half of the Final Piece

    Since I'm at home with more free time than usual, I'm finally getting around to the last piece of a project that I haven't touched in a year. I completed the custom stereo in my Tesla Model 3 back in March of 2019, but there was one feature I never got around to implementing. I wanted to be able to control the aftermarket equipment using the car's built-in controls. Primarily that means using the steering wheel knobs and buttons to control volume and subwoofer levels and eliminating the aftermarket system's remote control box. And I'm finally making that happen.

    This isn't all that difficult of a project, but it will take a bit of time. I can't read the Tesla audio system's levels directly as those are contained entirely within the ICE computer, but I can read the steering wheel control hardware states from one of the car's CANBUSes. Then the aftermarket DSP is controlled via a small remote control box with two knobs on the front. A microcontroller can read the CANBUS traffic, find the steering wheel control states, and convert those into the equivalent signals that would be generated by the aftermarket remote.

    I didn't want to spend a lot of time decrypting the car's CANBUS traffic, and luckily I won't have to. A wonderful group of enthusiasts over at TeslaOwnersOnline have already done most of that for me. All I have to do is build a system that can parse that traffic.

    The second part, generating control signals for the aftermarket system, is even easier. The remote control box contains two knobs and a button. The box receives 3.3VDC from the DSP and the two knobs are potentiometers that divide that power supply into two analog voltages representing volume and bass levels. The 3.3V line can power a microcontroller and that can generate two PWMs
 which will pass through RC filters to create analog voltages. Pretty straight forward.

    So far I've finished the second half. I put together a PCB to go on top of a TM4C board that has buttons for manual level control and RC circuits for filtering, and then I wrote up code to make it all work. This little device connects to the same RJ45 connector that would go into the aftermarket remote and allows me to control volume and subwoofer levels, with buttons instead of knobs.

 New vs Old

    Next up, I'll need to put together a CANBUS interface, hook that into the car's OBD2 connector, and find the packets containing steering wheel control data. Then I'll connect the two systems together on one board and hide that somewhere in the car.

    I'm planning on programming my interface to set levels at predetermined initialization values every time it boots up, which should be every time the car boots up. The car, of course, will remember levels from the last time it was running but I can't access those. They're stored entirely within the ICE computer and I have no way to get to those. But actually I'd prefer to have volume reset to a medium-low value every time I start the car. It's more convenient. I don't have to remember to turn it down when I get out. I'll have to create a new physical control of some sort for bass level. I'm thinking probably three buttons, up, down, and reset. I'll have to mount that on my dashboard somewhere unobtrusive. But I almost never touch the bass level so honestly I probably won't put much thought into it, as long as it's conveniently close but also not in the way. The volume, which I adjust constantly every time I drive the car, will be invisible and that's what really matters. Hopefully I'll finish up the CAN half soon.