E46 M3 cluster swap

Collapse
X
 
  • Time
  • Show
Clear All
new posts

  • dude8383
    replied
    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!

    Leave a comment:


  • nando
    replied
    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:


  • RobertK
    replied
    Poop.. double post.

    Leave a comment:


  • RobertK
    replied
    Originally posted by golde30
    i just read this whole thread. my head hurts now, and i feel like English isn't my first language.
    I'm right there with you..

    Amazing work!

    Any chance you'd be willing to make (sell) more once you get it figured out?

    Leave a comment:


  • nando
    replied
    ahh, the fun part:

    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
    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).

    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:

    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
    converted to decimal:
    8
    4337
    8448
    18432
    39168
    59905
    15361
    34304
    1805
    5114
    72
    138
    200
    265
    307
    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.

    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.

    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
    values in bold are ones I've modified.

    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:
    k = (9*63360)/(pi*tire_diameter)
    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.

    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:


  • nando
    replied
    The output of the senders is pretty straight

    Leave a comment:


  • rede30
    replied
    I didn't think the e30 gauge was linear. Never seemed that way.

    Leave a comment:


  • nando
    replied
    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:


  • golde30
    replied
    i just read this whole thread. my head hurts now, and i feel like English isn't my first language.

    Leave a comment:


  • nando
    replied
    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:


  • george graves
    replied
    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:


  • nando
    replied
    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. :p

    Leave a comment:


  • george graves
    replied
    Originally posted by nando

    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:


  • FredK
    replied
    Yep, that is the connector.

    Leave a comment:


  • nando
    replied
    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:

Working...