View Single Post
Old 07-09-2014, 03:18 AM
RDCX5 RDCX5 is offline
Join Date: Jul 2012
Location: Va
Posts: 12
RDCX5 is on a distinguished road
Seat Module, my $5.90 'fix'

Hey all,

I don't personally own an X5, so apologies for the long winded post, but this info is pretty useless just about anywhere else. I have friends with a 2002, 3.0i and when something is wrong with it I typically get a phone call about it and head over to check it out. I've already been thru a lot of the 'typical' X5 issues with it, and now the seat module is the latest to crop up.

The seat module died on them a little over a month ago, and while looking around a bit I've seen this is a get a new expensive part and replace it to fix the problem kind of thing. Well a new seat module was a bit too expensive for their liking with the way things are at the moment, and I had no clue at all how it worked, so I decided to open her up and see what was going on in there.

I couldn't find any info on the guts of this thing, at most was talk about the Relays in it going bad (from info 5+ years ago) and while I knew they weren't the issue, they were the very first thing that I did remove and check out, and they were all fine.

The real culprit is the Motorola CPU in the thing, or more specifically the fact that they just wear out after years and years of use as they only have so many read/write cycles in them to save information. So every time the seat is moved, even if the Memory feature isn't used, that position data of where the seat/wheel is changes, and has to be saved in case the Memory feature were to be used on that data. After so many years, or from a lot of adjusting, the CPU just wears out and you get parts of the thing that don't work, or it just dies all together.

With them heading out for vacation in another month, and an 8 hour drive there and then back, they would have liked this to have not happened so they could trade off on the drive down/back, but what ever breaks when you really have the time/money to deal with it?

So after looking inside it a bit and reversing the entire thing to make up a schematic..

PDF of schematic -

I've figured out most of what is doing what in there. I pulled the Motorola CPU (MC68HC711E20CFN2) off the PCB and coded up a PIC (16F1519) to deal with just the 'basics' of the seat.

The seat movement is done with 3 Relays (Tyco V23084-C2001-A303 ++023411E Portugal) that are actually dual SPDT relays, so there are technically 6 SPDT Relays used in there.

One of them (2 SPDT) is used to invert the power/ground polarity of the common motor line and the common line for the other Relays, so that the motors can run forward/backward, then the other 2 Relays (4 SPDT) are for turning on/off the 4 different motors, Incline, Slide, Height and Backrest.

Now getting the seat to move again wasn't too difficult. It's just a matter of reading which button is pressed, and then turning on the Relays in the correct order, ie; set the power/ground polarity for the switch direction that is pressed, then turn on the Relay for that motor. The 8 seat switches are connected to an 8 channel data selector (MC14512) so that only 4 IO of the CPU need to be used instead of 8 IO. This is a code snip of how one of the switches is read and then the Relays for it turned on/off.

  A = 0; B = 0; C = 0;                     // Select switch 0, Seat Forward

 if (Z == 0)                              // If the switch is pressed
    // Set RLY_1 and RLY_2 for polarity, 10 or 01 depending
    RLY_1 = 0;
    RLY_2 = 1;
    delay_ms(10);                         // Wait for Relay to turn on
      while (Z == 0)                      // While the switch is pressed
        RLY_4 = 1;                        // Turn on RLY_x for that switch

    RLY_4 = 0;                            // Turn off RL_x for that switch

    // Set RLY_1 and RLY_2 to Neutral (polarity ground/ground)
    RLY_1 = 0;
    RLY_2 = 0;
That was all I had intended to do, as they could then switch off during the long trip and be able to at least adjust the seat to their liking, but that left the Steering Column dead and stuck in the highest position. So I still had some time before they left and I dug into that some and found out it was far more of a mess than it needs to be.

This is one of the Column motors, the other being pretty much the exact same thing except the gearbox is mirrored..

Now, where the Seat motors are controlled by Relays, the Column motors have that little black box on them that contains an H-bridge so that it's able to change direction, and that H-bridge is controlled by an Elmos 10017 chip.

This chip has no data available on it, so like the seat module it was taken apart and a schematic made up to get a better idea of what's going on in there.

PDF of schematic -

From what I've been able to tell it's some type of 1 wire motor controller, possibly with position and current feedback. So the control for the 2 Steering Column motors is all done over 2 wires (1 per motor) back to the seat module, which is also where the switch for the Column is connected at, from Column switch to Seat back to Column, brilliant.

I was lucky enough that this thing still somewhat worked when I tried it out on the bench, despite it being pretty much dead in the X5, so I was able to get some Logic Analyzer grabs of what commands where being sent to these Column motors to tell them to move. These were taken from the CPU pins, 28 Send, 34 Receive, as it's setup to deal with the different logic levels (5v CPU and 12v Column motor controller) and it's also in a multiplex layout so these pins can be used to control multiple motors.

There seems to be a 10bit command sent to the motor, then it sends back a 16bit reply. There is also a certain number of times these commands are sent, and in a certain order, to get the thing to make the motor run. This is what that looks like on the Logic Analyzer, running the motor in just one direction for a little bit.

Then the start of the above Logic Analyzer image zoomed in.

So as of now I can move the Seat and Column motors, though it does have it's short comings.

What does work..

- The Seat can be moved, Incline, Slide, Height and Backrest all work.
- The Column can be moved in all 4 directions.

What does not work..

- K-bus integration, so there is no automatic wheel out of the way movement.
- Current detection, to tell if something is obstructing the seat while it's moving.
- Feedback for reporting position.
- Memory settings. (all of the current/feedback needs figured out first)

Now what does work to me far outweighs the issues of what does not, as none of that fluff was on power seats back when power seats were all new and fancy anyway, you had a circuit breaker and that was it.

The Memory positions they never used, and the auto wheel option wasn't paid much attention to. Then if you can't tell the seat motor is at the end of it's travel or something is jamming it up then you probably shouldn't be using it.

Now having said that, I am tinkering with trying to get most everything working. The way the current draw for the Seat motors work I have figured out already, just not implemented it yet. The feedback for the Column motor's position is a bit more technical and is mostly figured out now as well. The only part I haven't looked into is the feedback for position sensing for the seat, so that the Memory function can at least be implemented there, but since I don't have access to the car 24/7 these are things that may never really get done. I also have no real desire to reintegrate it with the K-bus either.

Here is the PIC mounted on a PCB I designed to just replace the Motorola CPU, and still have access to all of the original pads for later testing. The wires there run off to a programming header so I can reflash the PIC if needed.

So far this has been in the X5 for a few days now and there have been no issues with moving the seat/wheel to wherever they want.

Last edited by RDCX5; 02-28-2019 at 01:47 PM.
Reply With Quote

Sponsored Links