Really happy you bumped this thread!
Awesome project man, I bought an E46 M3 parts car not long ago with my partner and I'd love to do this with my car!!
I'd love to pick your brain a bit when/if I do get around to this!
E46 M3 cluster swap
Collapse
X
-
Making the adapter boards and programming the clusters is the easy part (for me). the difficult part is making it fit inside the E30's dash/cluster housing, which I haven't begun to tackle yet.
the PCB's cost about $21 each, the components are maybe $20. I paid $120 for the cluster. I've added a digital oil pressure and wideband gauge. the countless hours of time, R&D, trial and error, testing.. I don't even know :)
I think I could probably make more but it wouldn't be cheap. but maybe people doing swaps would be interested? I think the E39 M5 cluster is basically the same thing, if somebody was doing an S62 swap. You also need a DME to run the tachometer, oil temp, and coolant, which wouldn't make sense if all you wanted was the cluster.
anyway, I want to finish this one and have everything working before I even begin to think about making more.
FWIW, people think that the cluster will throw a checksum error if the LCM is missing or the VIN doesn't match between the cluster/dme etc. They're wrong. :)Leave a comment:
-
-
ahh, the fun part:
this is the curve(s) for the fuel gauge. there are two ADCs, but I have them wired together (E30 only has one sender anyway).PARZUWEISUNG_FSW : {} 000000C4 001E 0596 {} (FF,FF) {h} {} // TANK_KENNLINIE
PARZUWEISUNG_PSW1 : 0207 (00,08,11,19,21,00,48,00,99,00,EA,01,3C,01,86,00,0 7,0D,14,18,00,48,00,88,00,C8,01,09,01,33) // 60_l_literskala
the first line basically defines what it is you're calibrating and the format for the data, the second line is the variable & data. in the first line (FF,FF) tells you the data is grouped into 2 byte chunks. so it breaks down like this:
converted to decimal:00,08
11,19
21,00
48,00
99,00
EA,01
3C,01
86,00
07,0D
14,18
00,48
00,88
00,C8
01,09
01,33
the tough part is figuring out what these values mean. the last 5 pars of hex values control ADC1. 2-6 I'm not sure about, but when I changed them ADC2 went totally flat. 7-10 seem to control the endpoints of ADC1. I haven't tried changing the first value (00,08) yet.8
4337
8448
18432
39168
59905
15361
34304
1805
5114
72
138
200
265
307
what I need to do: with the E30 gauge set to 1/2 (about 4.5v) the E46 cluster reads about 1/4. empty and full read correctly because they are controlled by the op-amp.
some interesting bits: inside the cluster, the liters at "full" actually max out at 57. ADC1 reads 0-24l, ADC2 reads 0-33l. the tank actually takes ~64l with the reserve (coincidentally the same as an E30). Using the values above I should be able to make it read however I want, but I haven't got it figured out yet. I'm basically at the stage of trial and error.
I know there is a pattern there and they definitely look like curves but it's got me pretty stumped.
on the other hand, setting up the speedometer/odometer was easy.
values in bold are ones I've modified.CODIERDATENBLOCK : {} 0000007E 000A "KM_Werte"
PARZUWEISUNG_FSW : {} 0000007F 0001 019E {} (FF) {h} {} // OFFSET_GESAMTWEGSTRECKE
PARZUWEISUNG_PSW1 : 0007 (5A) // wert_01
PARZUWEISUNG_PSW1 : 0502 (09) // 7595_imp/mile
PARZUWEISUNG_PSW1 : 0032 (00) // grundcode_var
PARZUWEISUNG_FSW : {} 00000080 0002 0559 {} (FF,FF) {h} {} // K_ZAHL_WEG
PARZUWEISUNG_PSW1 : 00BB (13,30) // 4912_imp/km
PARZUWEISUNG_PSW1 : 00BD (11,09) // 4797_imp/km
PARZUWEISUNG_FSW : {} 00000082 0002 055A {} (FF,FF) {h} {} // K_ZAHL_WEG_KOMPL
PARZUWEISUNG_PSW1 : 00BB (EC,CF) // 4912_imp/km
PARZUWEISUNG_PSW1 : 00BD (EE,F6) // 4797_imp/km
PARZUWEISUNG_FSW : {} 00000084 0002 0557 {} (FF,FF) {h} {} // K_ZAHL_TACHO
PARZUWEISUNG_PSW1 : 0007 (11,09) // wert_01
PARZUWEISUNG_PSW1 : 00BA (13,61) // 4961_imp/km
PARZUWEISUNG_PSW1 : 00BD (12,BD) // 4797_imp/km
PARZUWEISUNG_PSW1 : 00BC (12,EE) // 4846_imp/km
PARZUWEISUNG_FSW : {} 00000086 0002 0558 {} (FF,FF) {h} {} // K_ZAHL_TACHO_KOMPL
PARZUWEISUNG_PSW1 : 0007 (EE,F6) // wert_01
PARZUWEISUNG_PSW1 : 00BA (EC,9E) // 4961_imp/km
PARZUWEISUNG_PSW1 : 00BD (12,BD) // 4797_imp/km
PARZUWEISUNG_PSW1 : 00BC (ED,11) // 4846_imp/km
these are pulses/km. I believe the DSC computer sends 10 pulses per revolution (BMW used 9 pulses for many years, but it was a physical wheel pattern rather than a computer signal). using this formula:
then converting to KM (multiply by ~.62), and then figuring for a 10 tooth signal where the E30 is sending a 9 tooth signal, I came up with a K factor of approximately 4361 pulses/km.k = (9*63360)/(pi*tire_diameter)
Calibrating the odometer and speedometer is merely a matter of convering 4361 to hex. There is one complication, the speedo and odometer settings have a normal and an "inverse" value. I have no idea of the reason for this but it's pretty easy to do.
K_ZAHL_WEG isthe "normal" k-factor for the odometer.
K_ZAHL_WEG_KOMPL is the "inverse" k-factor.
K_ZAHL_TACHO is the "normal" k-factor for the speedometer.
K_ZAHL_TACHO_KOMPL is the "inverse"
11,09 is hex for 4361 (ignore the "4797_imp/km on the right, it's very difficult to create your own variables and I decided it's not worth it). basically to "invert" it you just swap 0's for F'ss, 1's for E's, 2's for d's, etc. so the inverse of 11,09 is EE,F6.
I haven't tested this in a car, obviously, but it appears to work fine on the bench. Fortunately I can change it to pretty much anything I like, so even if my assumptions are wrong I can adjust it later.
there's one other value:
OFFSET_GESAMTWEGSTRECKE
it's supposed to be "total distance offset"; supposedly the "added" value to make the speedo read purposely higher. well, as far as I can tell, that's not true, and it doesn't seem to affect the speedo at all. in fact, the speedo's K factor already has a 5% adder built into it (over the equivalent odometer K-factor). I tried making this value very large and very small and it made no difference, so I'm leaving it as default and working with the K-factors instead.
there are tons of other variables you can change or modify in the cluster but most of them are simply selecting a different value or turning something on or off, rather than creating custom settings.
I turned of the (very annoying) beeper/warning, many of the error lights, the SMG display, etc. etc. you can also change the SI indicator interval (either to predefined values or create anything you want). fun stuff.
it's actually funny how customizeable the cluster is in comparison to the DME.. too bad MSS54 isn't as "simple".Leave a comment:
-
lol, I didn't think it was that bad :p
I haven't even posted any of the coding stuff, which wouldn't even be possible without software like NCS Dummy.Leave a comment:
-
i just read this whole thread. my head hurts now, and i feel like English isn't my first language.Leave a comment:
-
it's not dead yet :)
V1.5... the op amp didn't work to power the backlights, it couldn't provide enough current (it worked but they were very dim). I didn't want to deal with it anymore, and I run my lights at full brightness anyway, so I'm going with switching it off the E30 lights with a transistor. I also realized I could max out the # of holes in one board (350) and create a pretty large area for protytpe circuits, in case I want to add something later.
gas gauge is working, still hacking the calibration of the cluster, but I'm close. the end points are easy but the E46's fuel curve is non-linear, so I have to make it linear like the E30's fuel gauge (basically get 1/2 to equal 1/2).
speedo/odometer calibration is done. turns out to be pretty easy, I can make it whatever I want. I believe the E46 uses 10 pulses per revolution instead of 9 like traditional BMWs, but that's easily taken care of with the K-factor.
once the board is done and the fuel gauge is calibrated I can wire it up and work on the faceplate..Last edited by nando; 07-13-2012, 08:24 AM.Leave a comment:
-
10,000 - lol. Yea - right. At $5 a pop. Good luck with that at buying them in the real world. If you have a souce, I'll give you a handy.
Here ya go - the smallest foot print trimmer for the least $. Mouser number: 81-PV36Y502C01B00 - $1 each. Took a long time and lots of orders to finally find someone that recommended it. Decent PPM.Last edited by george graves; 04-10-2012, 05:22 AM.Leave a comment:
-
sure, that'd be nice. I pretty much went with what was in my PCB software. :p
I haven't really found that to be true, at least not all of the time. I get lots of my "BMW" connectors off mouser, digikey, or other sites. It's just finding the part #s that's difficult (especially for tiny little pins that all look the same). I've switched over to getting most of my connectors off generic sites if I can get a PN. $1 or less, and pennies per pin, vs $1 per pin and $5 for a stupid plastic plug.
Sometimes, they won't sell them in quantities less than like 10,000, which sucks, but you *could* get them. :pLeave a comment:
-
Nice work! PM me and I'll give you a part number to a much cheaper and smaller 10 turn trim pot that I use. They are really nice, and cheap, and always in stock at mouser/digikey.
BTW - good luck finding connectors - BMW usually hires someone like AMP/tyco to make a connector. They'll take an off the self connector, and then modify it so that nothing the "public" can buy will work with it.Last edited by george graves; 04-10-2012, 01:46 AM.Leave a comment:
-
No luck with that part # you gave me (sorry for the trouble!).
But, I did find the BMW # (pretty sure)
12521433915 (connector)
12520007170 (pins, pretty sure I already have a bunch)
12521732634 (rubber boot)
cliffs: cross reference oil level sensor PN (12617508003) on real OEM. Click on random models (it's used on almost everything) because sometimes BMW will show you a part # for something electrical, and sometimes they don't. I found it on a diagram for the E53 X5 3.0:
http://www.realoem.com/bmw/showparts...12&fg=05&hl=14
WHY BMW does this I don't know. I've had to do the same thing to find other electrical stuff. Same damn part, but only certain models will give you a #.
now to make another blunt order.. sigh. yeah, just buy a damn harness. :p
edit: yep, pretty sure it's right. here's a pic of #12521433917, which is in the same part family:
Leave a comment:


Leave a comment: