RX8 Electric Power Steering EPS CAN Control

Power steering comes in two flavors: hydraulic and electric. In a typical hydraulic system a pump is driven off of the engine belt. For an electric vehicle application this becomes quite complicated because there is no belt to drive auxiliary components. Luckily the RX8 has electric power steering (EPS).

Although the EPS simplifies the complicated belts and messy/heavy hydraulic system it brings a few more electrical challenges to the table. The EPS is constantly looking at the CAN bus to determine how much torque it should apply. At low speed it should apply a lot more assist torque than it should at higher speeds. The challenge here is how to trick the EPS into thinking that the car is actually driving down the road when the ICE engine has been removed and the module that supplies the vehicle speed is also gone.

Step 1: Figure out what its looking for
Step 2: Put those signals back on the bus

So for step 1, the RX8 service manual actually sites all of the signals in and out of the EPS. Golden! (I hope at least). It appears that the EPS is only looking for vehicle speed and engine RPM.

And for step 2, I know the signal name, but I have no idea what address that signal is or what is its scaling value. The manual calls it VSS, but I need a hex location and companies don’t really publish this data. Turns out someone a few years back tried to sniff things off of the CAN bus and manged to find quite a few of the signals that I need so hopefully I’m in luck!

Theoretically I should even be able to test the power steering without a drive-train and up on the dollies still. I just need to see what signals/power were going through the PCM and then find a robust way to supplement them. I’m thinking that 12V is already going directly to it and I only need to get it back on the CAN bus. Initially I thought I might get it to work just sending it fake rpm and vehicle speed, but after further research it seems like it may look for proper oil pressure and require some sort of startup sequence.

“PCM sends something to wake it up, but can’t find it specifically. Spamming random data to 0x200 and 0x202 appears to do it, but haven’t figured exactly what sequence does what yet. Until then, shoutAtEPS() created in intialise routine to do this (//FIXME!) – takes way longer than it should, but does actually work.”

Future Note: When I expand this to active steering control, the torque sensor is the easiest location to drive steering commands. Most likely 0-5V between A&C, B acts as wiper.