Been doing some work with forums members in this thread:
http://forums.bimmerforums.com/forum....php?t=1887229
This is for the Analog to Can solution. For an OBDII code to Can solution see here:http://forums.bimmerforums.com/forum...4#post26219044
I realize that "complete" is very relative. As those that have completed swaps are very aware. But thought we are at a point the progress deserves it's own thread for those not wanting to read through the pages of how the information and program was developed. Or had dismissed the other thread as a bunch of crack pot computer guys that'll never get anywhere
Here's the video
E46 instrument cluster running off can bus with "analog" inputs to Ardruino. Only 3 signals wires (plus 1 ground and 1 power) are fed into the Ardruino. Tach and injector pulse width are pulsed signals. The temp is a variable voltage. During the video I first turn it on. Then rotate a variable resistor that changes the pulse frequency coming from the "Leonardo" being fed into the Ardruino by the purple wire. Then I rotate the variable resistor that varies the voltage that is sent to the Ardruino on the light blue short wire. Then after removing the wire that is feeding pulses to the speedometer (required to make the MPG work). I press buttons which vary the frequency sent on the long blue wire to the ardruino (frequency generator is varied to provide 500 rpm increases every time I push the button which is why the tach is not fluid in the video. But is in real use).
Attached is a picture of the wiring coming into the can bus. Signals come in through the small wires and then go out on the can bus through the DB9 connector (black wire). The 12V in and a ground are on that connector too.
Also attached is a .zip file (named with .pdf for upload) which contains the exact software the Arduino is running during the video. It will need some calibration for the MPG values (different injectors and fuel pressures will consume differing amounts of fuel) So I didn't try to do calculations in injector pulse width vs fuel consumption. but I put in a nice MPG calibration variable for tweaking.
I'd like to see how it would work on an actual E46 with an LS1.....
Thaniel
11/19/2013 updated to v200
Last edited by Thaniel; 11-19-2013 at 03:35 PM.
Great work
Rob
Prior projects:
1998 540i with 6.6 LS2/T56 Chevy Power
- pictures and details
1992 325i with 6.6 LS2/T56 Chevy power - pictures and details
1995 M3 with 6.6 LS2/T56 Chevy power - pictures and details
Paging Terry Fair....
MAD SKILLS!!!!!!!!!!!!!!!
So, the arduino is the analog to canbus black box?
great job! definatly mad skillz!
2006 X5 L83 5.3 6l80 swapped in progress
1999 528i 5.7L 4l60e swapped w/ 31 spline 8.8 cobra diff
2007 ZX-10r - sold
1987 R-10 SWB L83 5.3L 6L80e swapped
How similar are the E46 to the E36's?
Mine is a '98 auto 328i
That's excellent work! Reminds me of my college days and avionics.
E
Thanks guys.
Yes. More or less. The arduino senses the analog signals, converts them to hex values, forms the appropriate can message then sends the message to the can shield. The can shield then transmits the message over the bus.
E36's don't require this type of thing as they dont run the instrument cluster off the can bus.
Last edited by Thaniel; 03-12-2013 at 01:56 PM. Reason: Automerged Doublepost
That is amazing work!
- 96 328is 6.0L. (LS1 to LS2 build thread: http://forums.bimmerforums.com/forum...ad.php?2098938)
- 96 328is 5.7L. (LS1 build thread: http://forums.bimmerforums.com/forum....php?t=1289987)
- 95 ///M3 6.0L. (LS2 build thread: http://forums.bimmerforums.com/forum....php?t=1619249)
- 97 ///M3. (e46 Fender Flares/track car build thread: http://forums.bimmerforums.com/forum....php?t=1727098)
- 96 328is (Dual Fuel Pump to Surge Tank thread: http://www.bimmerforums.com/forum/sh...ad.php?1964025)
Awesome work Thaniel.
2003 M5 LSx l 6 Spd Manual l 4.10 LSD
Build Thread
The chassis must always be regarded as a means to an end and never as an end itself
Seriously, You need a donation link (i.e. Paypal).
Might be putting the cart before the horse, but it would be awesome to see if this stuff worked on e60 5-series, X5 and E90 clusters.
So is Arduino the only thing between the analog inputs and the instrument cluster, or are you tapping into the system somewhere else....as in sending analog inputs to the ECM, or some other sort of BMW hoopla.
I've seen people do that. Often wondered if they ever got anything.
if someone wants to donate they can lookup, experiement and provide info to the board. Or maybe if they have parts laying around they could send some things to help on other projects . Ordering stuff for me in Sweden is a pain.
The newer cars use a different format. The concept would work the same but the messages would be different.
This solution needs the BMW ECM (DME) to be removed from the car. Or at very least from the can bus. Both devices on the bus at the same time will cause conflicting messages. Since the bus is a network other BMW things are on the bus but should not interfere.
The path for information is LS1 (or other engine) -> Arduino -> Can Shield -> Canbus -> Instrument cluster
As you can see from my test set up I don't have any other parts of the car The wave forms I'm feeding into the arduino are based on wave forms that should would be available off the LS1 ECU outputs. But would also work from other cars.
For my Electric BMW this is my Plan: RPM signal from a gear tooth sensor (already tested this and it works), MPG signal I'll use the number of amps signal output from my zilla (zilla sends a pulsed signal for display on a tach) and a temp sender.
Thaniel,
What would be your "wishlist" of items? I have a couple of wrecked e46s here at the yard.
Currently on my list are.
-The OBDII connector with a bit of wire. Edit:I finally found a car side connector from Asia and order it.
-Factory radio that has cd controls. (with the connectors)
Now that I think about it the steering wheel buttons and climate control module could be interesting to sort out the a/c and cruise signal. But probably not worth the bother at the moment.
The OBDII connector is so I can connect a obdii reader and or bmw code module more easily to the Instrument cluster. Factory radios that has cd controls is for some k bus work I want to try. I've seen a mp3 player made for an e46 out of a propeller chip. I would like to make an easier to build and use version using an Arduino.
Thaniel
Last edited by Thaniel; 03-12-2013 at 01:54 PM.
Hi Thaniel, long time no talk. Gerry from Canada. Anyway, I have read the post 2-3 times and don't understand a frigging thing. All I get is that you figured out how to run a e46 cluster off an analogue system or something like that. Cool.
Would a gps speedometer also help remove complexity, or is that too rude?
I have an electronic boost gauge from Speedhut, and they are a very awesome service, you can order it any way you want. I noticed they have a whole instrument cluster for the cobra crowds, with a gps $peedo.
hth.
Cheers
U don't need any of that GPS crap. If ur doing an e46 swap to use the cluster his solution is the solution. Don't reinvent the wheel especially if you don't understand a fregging thing
Last edited by modular93fox; 03-13-2013 at 03:17 PM.
2006 X5 L83 5.3 6l80 swapped in progress
1999 528i 5.7L 4l60e swapped w/ 31 spline 8.8 cobra diff
2007 ZX-10r - sold
1987 R-10 SWB L83 5.3L 6L80e swapped
Bravo!!!! <slow clap>
'99 BMW 540i6 L33 5.3, PRC Heads, E-force supercharged
http://forums.bimmerforums.com/forum....php?t=1674320
Yup that's pretty much the size of it. Trying to make the can bus not be so scary. It at least has removed my fear. It won't take all that much to have a digital to digital solution. Still working on that type of solution in my other thread.
Like th e36 the speedo isn't driven by the ECU. So nothing needed there when doing a swap.
are you guys removing the DME entirely? i thought it had to remain to have antilock and other systems work. if you must leave the DME, why not just use a converter to convert ls signals to bmw format, and hook into the harness pre-ecu. then let the ecu do its job and turn the signal into something canbus compliant. the ecu wont know that the signal is being generated by a box instead of an engine. doing it that way your working with just analog or digital pulses and you dont have to worry about can bus at all.
Yes that's the plan.
THe DME and ABS module are seperate modules. Feedback I have from one person driving a E46 with no DME said the ABS still works. The DSC does recieve input from the DME for throttle position. Most conversions keeping the DME don't connect the BMW throttle position sensor to their new motor so it's the same both ways. (when I do a digital to digital solution using the LS1 class 2 bus or LSx can bus it can include TPS data on the can).
That does work and it has been done. A bit more discussion in this thread: http://forums.bimmerforums.com/forum...ls-over-canbus
To get the check engine light to go out without hacking the IKE and get the MPG guage to work it is WAY more work to keep the DME than to implement a can bus solution. Can bus solution = put together the Arduino/canbus box, upload the program, and connect 5 wires to the LSx and the car. The hard part of reverse engineering the can bus is done already :-) Of course in car testing hasn't been done yet so there might be a few bugs still to work out but hey you get what you pay for :-)
Thaniel
nvm.. didnt read the whole post
Hi Thaniel,
now i have connected my e36 engine whith de body of e46.
i have the arduino uno and can shield from seedstudio ...
for rpm i take the TD signal conected to D2 ,and temp to A0. the original temp-sensor is connected whith gnd and the 2rd wire to instrument, now i have the gnd connect to 3,3v of the arduiono and the gauge show middle temp, but not the coorect yet.
the rpm counter shows to many rpm between the engine is in idle speed. so i have connect the D2 to TI signal of the engine (injection signal).
i have used the "listen and send version 009 rpm_temp"
i have adjusted the sketch:
//********************* sense RPM from pin 2 ***************
//Called from interupt command
void RPM_sense() //Capture RPM time from pin 2
{
timePULSE = micros(); //Captures current clock time
timeRPM = timePULSE - timePULSE2; //Captures pulse width time
timePULSE2 = timePULSE; //Save current clock time for next time
//60sec/#pulses for 1 rev * 1million (for micro seconds)/ time for 1 pulse
RPM = 80 / p_REV * 1000000 / timeRPM; //multiply for more than one pulse measured
rMSB = RPM/20; // MSB of RPM value
}
so the prm counter shows nearly the correct rpm. but the pointer sometimes jumps from 900rpm to 4000 , when the engine runs at ca 900 rpm.
what is the mistake in my connections ?
thx zweytec
Hi zweytec,
Where in Germany are you? I'm in Wolfschlugen just south of Stuttgart until Friday morning. Mention it just incase by chance you are close by.
in post one of this thread I insterted an updated program (V200). Download and change the .pdf to .zip then uncompress it. You will have to re calibrate it again like you did on the previous one. The same values might work. This program is more stable. Some of the jittery RPM could be due to the program. The new one has some improvements. See if that will work better.
Also be careful to not exceed 5V on the RPM input. I've not looked at what E36 engines put out for a tach signal.
Thaniel
Great stuff
Rob
Prior projects:
1998 540i with 6.6 LS2/T56 Chevy Power
- pictures and details
1992 325i with 6.6 LS2/T56 Chevy power - pictures and details
1995 M3 with 6.6 LS2/T56 Chevy power - pictures and details
Hi thaniel i have a 2001 330 cc whit and ls1 swap i just finished and i will love to use my original cluster im not a electronic or computer geek so i may not know how to do it all but you think you can help me whit it im in Mexico and im using and original gm pcm out from a 2001 silverado and and ls1 engine drive by wire any help is aprecciate thanks
Bookmarks