981 Boxster Electric Power Steering

Forum on Volkswagen related hardware, so VW, Audi, Seat, Skoda etc.
Post Reply
Steve16
Posts: 39
Joined: Wed Apr 10, 2024 12:32 am
Location: United States
Has thanked: 7 times
Been thanked: 4 times

981 Boxster Electric Power Steering

Post by Steve16 »

I'm wanting to use a 2013 Boxster electric steering rack, p/n 001.347.005.09 in a conversion. I have been able to power it up and see communication on the can bus, but have not been able to get beyond failsafe mode. I have tried playing back logs from the MQB and Mini Cooper power steering posts on the board without success. Can anyone provide or point me to logs to replay? Does anyone know what commands are needed to wake it up and provide speed based assistance? Thanks.
Jacobsmess
Posts: 759
Joined: Thu Mar 02, 2023 1:30 pm
Location: Uk
Has thanked: 424 times
Been thanked: 122 times

Re: 981 Boxster Electric Power Steering

Post by Jacobsmess »

You'd be best sourcing a canlog from a vehicle that uses this rack or at least one using the same platform. Then reduce the messages down until you loose speed level assist to work out what can messages are required.
Mitchy
Posts: 128
Joined: Sun Nov 14, 2021 12:16 pm
Has thanked: 5 times
Been thanked: 72 times

Re: 981 Boxster Electric Power Steering

Post by Mitchy »

I should be able to send along a log from a 981 during my next outing, But it may be a few weeks until I can get a log while moving.
I can forward one while stopped/parked pretty quickly though.

Do you have any micro controller to allow sending custom CAN messages?
May be easier if I guide you thru spoofing some messages to see if the amount of assistance changes.
Do you have a list of CAN addresses that it sends out? likely you see:
LH_EPS_01 0x32A
LH_EPS_02 0x11D
LH_EPS_03 0x09F

I haven't really had a chance to see if there's much difference with assistance when at speed vs when stopped; but I can say that the rack definitely does assist.

Jacob did an awesome job on the MQB rack, so I'd imagine that the 981 rack is pretty much identical, you may need to send a idle RPM; as I seem to recall even if coding everything to a hybrid powertrain, the Electronic Parking Brake and the Rack (I believe) needed to see RPM to activate; so it may be a result of a old software revision not having hybrid mode.

I'd hazard a guess and say that you'll need:
Motor_03 - 0x105
ESP_21 - 0x0FD
Klemmen_Status_01 - 0x3C0
Jacobsmess
Posts: 759
Joined: Thu Mar 02, 2023 1:30 pm
Location: Uk
Has thanked: 424 times
Been thanked: 122 times

Re: 981 Boxster Electric Power Steering

Post by Jacobsmess »

Apologies I didnt realise that this part is an MQB rack also,
This is my efforts to understanding the rack.
viewtopic.php?t=6153
I'm fairly certain to get speed assist my rack (from a VW Transporter T6.1) only required ESP_21 to be played back which contained the speed as well as some other bits. I've fallen behind this part of the conversion due to life but will be carrying on sooin so will be interested to see if you make any progress.
Steve16
Posts: 39
Joined: Wed Apr 10, 2024 12:32 am
Location: United States
Has thanked: 7 times
Been thanked: 4 times

Re: 981 Boxster Electric Power Steering

Post by Steve16 »

The Can addresses it sends out are:
0x09F
0x11D
0x32A
0x6C9

I have tried playing the full driving and 0x0FD logs from the MQB Reverse Engineering topic without success. I will try them again.
Steve16
Posts: 39
Joined: Wed Apr 10, 2024 12:32 am
Location: United States
Has thanked: 7 times
Been thanked: 4 times

Re: 981 Boxster Electric Power Steering

Post by Steve16 »

Mitchy wrote: Thu Jul 03, 2025 11:53 am Do you have any micro controller to allow sending custom CAN messages?
Yes, I have the ability to send custom can messages. I'm happy to try any suggestions. None of the logs from the MQB Reverse Engineering topic seem to have any effect.
Steve16
Posts: 39
Joined: Wed Apr 10, 2024 12:32 am
Location: United States
Has thanked: 7 times
Been thanked: 4 times

Re: 981 Boxster Electric Power Steering

Post by Steve16 »

The MQB steering rack logs have ESP_21 and Klemmen_Status_01 but not Motor_03. I plan to add it to an MQB log to see if it will work. From what I can find, Motor_03 needs to be transmitted every 10ms but I don't understand how to create data for it. What would be valid data to try for Motor_03?
Mitchy
Posts: 128
Joined: Sun Nov 14, 2021 12:16 pm
Has thanked: 5 times
Been thanked: 72 times

Re: 981 Boxster Electric Power Steering

Post by Mitchy »

I should be able to get some logs for you today. Weather is cooperating for a run around the block.
I can also send along some code to generate motor_03 if needed.
Mitchy
Posts: 128
Joined: Sun Nov 14, 2021 12:16 pm
Has thanked: 5 times
Been thanked: 72 times

Re: 981 Boxster Electric Power Steering

Post by Mitchy »

Had some example code on the forum already:
dMO_Speed_01 = motor RPM (Value is RPM*4) - if you send a value of 4000 it should spoof a 1000 rpm idle.
may also be worthwhile setting bMO_Motor_runs to 1

Code: Select all

  //-------------Motor_03---------------//
  uint8_t iMotor_03_Checksum = 0;
  uint8_t iMotor_03_Counter = 0;
  bool bMO_QBit_AccPedal_01 = 0; // Quality bit indicating that Accel Peddle Position value is bad
  bool bMO_QBit_Motortorque = 0; // Quality bit indicating that Motor Torque value is bad
  bool bMO_QBit_driverbrakes = 0; // Quality bit indicating that Driver Brake value is bad
  bool bMO_QBit_Speed_01 = 0; // Quality bit indicating that RPM value is bad
  uint16_t dMO_Speed_01 = 0; // RPM (Value is RPM*4)
  bool bMO_in_idle = 0; // Idle Bit
  bool bMO_Interlock = 0; // Clutch/Interlock Switch Pressed
  bool bMO_BLS = 0; // Brake Light Status Signal
  bool bMO_driver_brakes = 0; // Bit indicating braking by Driver 
  bool bMO_Consistency_Brakeped = 0; // Brake Peddle Consistancy fault
  bool bMO_clutch_switch = 0; // Clutch Switch Pressed
  bool bMO_Timeout_ESP = 0; // ESP CAN Timeout alarm
  bool bMO_Motor_runs = 0; // Motor Run Status
  uint8_t iMO_set_speed_idle = 0; // Target Idle Speed
  uint8_t iMO_Accelpedal_raw_01 = 0; // Accel Peddle % Value
  bool bMO_first_inaccuratelim = 0; // Engine Torque Inaccuracy bit 1="> 8%"
  bool bMO_QBit_stressfactor = 0; // Quality bit indicating that Stressfactor value is bad
  uint8_t iMO_stressfactor = 62; // Current motor Reserve 0="No Torque Remaining" 100="Full Torque Available"

Code: Select all

void Motor3_Msg()
{
Motor3[0] = (0x00 & (0x0FU)) | ((bMO_QBit_AccPedal_01 & (0x01U)) << 4) | ((bMO_QBit_Motortorque & (0x01U)) << 5) | ((bMO_QBit_driverbrakes & (0x01U)) << 6) | ((bMO_QBit_Speed_01 & (0x01U)) << 7);
Motor3[1] = (dMO_Speed_01 & (0xFFU));
Motor3[2] = ((dMO_Speed_01 >> 8) & (0xFFU));
Motor3[3] = (bMO_in_idle & (0x01U)) | ((bMO_Interlock & (0x01U)) << 1) | ((bMO_BLS & (0x01U)) << 2) | ((bMO_driver_brakes & (0x01U)) << 3) | ((bMO_Consistency_Brakeped & (0x01U)) << 4) | ((bMO_clutch_switch & (0x01U)) << 5) | ((bMO_Timeout_ESP & (0x01U)) << 6) | ((bMO_Motor_runs & (0x01U)) << 7);
Motor3[4] = (iMO_set_speed_idle & (0xFFU));
Motor3[5] = (iMO_Accelpedal_raw_01 & (0xFFU));
Motor3[6] = (bMO_first_inaccuratelim & (0x01U)) | ((bMO_QBit_stressfactor & (0x01U)) << 1) | ((iMO_stressfactor & (0x3FU)) << 2);
}
In the below, you'll need to send on a 10ms interval; accumulate a 0-15 counter every 10ms,

Code: Select all

    msg.id = 0x105;
    msg.len = 8;
    msg.buf[0] = 0;
    msg.buf[1] = t10msAccum | (Motor3[0] );
    msg.buf[2] = Motor3[1];
    msg.buf[3] = Motor3[2];
    msg.buf[4] = Motor3[3];
    msg.buf[5] = Motor3[4];
    msg.buf[6] = Motor3[5];
    msg.buf[7] = Motor3[6];
    msg.buf[0] = 0x04 ^ msg.buf[7];
    msg.buf[0] = msg.buf[0] ^ msg.buf[6];
    msg.buf[0] = msg.buf[0] ^ msg.buf[5];
    msg.buf[0] = msg.buf[0] ^ msg.buf[4];
    msg.buf[0] = msg.buf[0] ^ msg.buf[3];
    msg.buf[0] = msg.buf[0] ^ msg.buf[2];
    msg.buf[0] = msg.buf[0] ^ msg.buf[1];

    Can1.write(msg);
Steve16
Posts: 39
Joined: Wed Apr 10, 2024 12:32 am
Location: United States
Has thanked: 7 times
Been thanked: 4 times

Re: 981 Boxster Electric Power Steering

Post by Steve16 »

Mitchy wrote: Wed Jul 09, 2025 1:37 pm I should be able to get some logs for you today. Weather is cooperating for a run around the block.
I can also send along some code to generate motor_03 if needed.
Thanks. Even a log sitting at idle would be a good start. Thanks also for the code, i I did see the earlier example. I'm just beginning to learn to code so this will be a good challenge to understand it.
Post Reply