981 Boxster Electric Power Steering
-
- 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
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.
-
- 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
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.
Re: 981 Boxster Electric Power Steering
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
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
-
- 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
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.
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.
-
- 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
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.
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.
-
- 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
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.
-
- 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
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?
Re: 981 Boxster Electric Power Steering
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.
I can also send along some code to generate motor_03 if needed.
Re: 981 Boxster Electric Power Steering
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
In the below, you'll need to send on a 10ms interval; accumulate a 0-15 counter every 10ms,
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);
}
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);
-
- 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
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.