M400 and Lotus Exige dash CANbus protocol.

Discussion and support for MoTeC's previous generation ECUs.

M400 and Lotus Exige dash CANbus protocol.

Postby Jaremi JKR on Sat Sep 17, 2011 6:42 am

Hello
I have installed M400 in Lotus ExigeS (2007).
Lotus original dash uses CANbus to recieve some parameters readings from ECU. Original ECU is not in the car anymore (M400 works as full SA). We tried to keep OEM ECU to drive dash only, but it triggers errors in M400 crank position reading and some spliced sensor readings.

I found some info about Lotus OEM CANbus protocol and tried to enter it into M400.
The result is like: "something is happening but it is far from working right".

The Lotus CAN address is 400h so I entered 1024 in CAN address field in M400.
This caused OEM dash to "move" and display some (not correct) readings.

Then I created "custom data set" including Speed, RPM, EngineTemp, FuelLevel, Error.

After this, when RPM is on second place, tacho moves in the right direction along with engine rpm but much slower than it should.
EngineTemp, fuel level and other readings seem random and not right.

The original Lotus CANbus protocol looks like this:

Address 400h

Message is transmitted 10x per second so resolution lokks like 10Hz (M400 software allows 33-200Hz - how to enter 10Hz?)

Frame is 8 bytes long and looks like this:

AA BB CC DD EE FF GG HH where:

AA - speed ~= d(XXh)-11d (61h-->97-11=86 mph)
BB - unused in Elise (always 00) in Exige may contain some data
CC DD - tach rpms [d(CCh)*256]+d(DDh) 06 D2 = 1746 rpm
EE - fuel level (00=empty, FF=full)
FF - engine temperature ~= d(XXh)-14d (D0-->208-14=194F)
GG - MIL 06-on, 04-crank, 00-running, 01-shift light
HH - unused in Elise (always 00) in Exige may contain some data

Question is how to enter this into M400 CAN communication?
How to create custom data set using this info?

Thanks in advance :)
Jaremi JKR
 
Posts: 3
Joined: Tue Jun 08, 2010 12:42 am

Re: M400 and Lotus Exige dash CANbus protocol.

Postby minibiker on Sat Sep 17, 2011 7:27 pm

Hi

All of the channels in the Mx00 ECUs are 16-bit so when you enter them into the CAN data sets they will take up 2 bytes each, which is why when you put the RPM as the second channel in the list it appears to work although at a slow rate.

Unfortunately it is not possible to enter transfer functions for the different channels, however it maybe possible to setup custom channel calibrations to achieve the correct values. You should be able to do this for the speed and engine temperature using User Channels to create the custom values. You will have to take into account the fact that the decimal point value is also transmitted so for an engine temp of 25.0degC 250 is sent on the CAN bus so you need to adjust the calibration. If you initially load the same calibration into the user channel that you are using for the engine temperature channel and then choose custom calibration you can edit the values to remove the decimal point and subtract the offset. You can use the same process for the speed channel.

When you create the custom data set you should only add the custom speed channel, RPM and then the custom engine temp channel. You need to transmit the data using the sequential format.

As you can't set 10Hz as the transmit rate I'd suggest using 40Hz and see how you get on.

Hope this helps.
minibiker
 
Posts: 15
Joined: Fri Oct 02, 2009 7:22 am

Re: M400 and Lotus Exige dash CANbus protocol.

Postby DarrenR on Mon Sep 19, 2011 6:25 pm

minibiker has answered you perfectly, well done!

What you are seeing is exactly what I would expect, randomness! The formatting is wrong.

The problems you will encounter are -
Engine RPM - You can't get engine RPM back into a user channel to rescale it, so the best you could do is setup the tacho output and loop it back into a dig input on the ECU, assuming you have a spare output and input. You can't use the existing crank or cam signals looped into a dig input as they will use unevenly spaced teeth. Receive the dig input into a user channel and scale it appropriately.

Speed – Rereceive the dig input into a user channel. You should be able to get it right but the calibration will be fairly crazy as you need to cal into the high byte of the 16 bit channel, meaning you need to multiply the scaling by 256. Then for resulting values over 32767, you need to subtract 65536 since it transmits a signed 16 bit value. You better be sure byte 'BB' is not used as it will see random values.

Fuel level and Engine temp - occupy the same 16bit channel space so you can have one of them. If you have ET, fuel level will read a static value. if you have fuel level, ET will read random values.

Status channels - you can't rescale these and since they are in the GG space they have to be scaled. If it was in HH you could have had the shift light.

So the custom data set would be -
Rescaled Speed 'AAAA'
Rescaled Engine Speed 'BBBB'
Rescaled ET or FL 'CCCC'
Nothing 'DDDD'

The can message will look like this - AA AA BB BB CC CC DD DD

Better than nothing, but it's just a fluke the lotus CAN format is vaguely similar to the m800 so lucky to get anything at all!

The best idea is to fit a Motec dash! This can interpret the CAN if you wanted to keep the original dash and have a dual display?
Darren Reynolds
MoTeC Research Centre - Melbourne, Australia.
DarrenR
MoTeC
 
Posts: 176
Joined: Thu May 01, 2008 2:15 pm
Location: Melbourne, Australia


Return to M400, M600, M800 and M880 ECUs

Who is online

Users browsing this forum: Bing [Bot] and 40 guests