Alfa Romeo 147 Instrument Cluster
This is going to be a long two part series as the aim was to create a real-as-possible driving simulator for a Christmas present. Theres only one realistic driving simulator despite there are plenty racing simulators and that is City-Car-Driving[LINK]. I decided that I would connect off-the-shelf Automotive parts to add realistic-as-possible in-the-car feeling rather than design my own instrument cluster as it would look more authentic and save a great deal of time.
As it turns out Automotive Instrument clusters and the car-area-network are closed systems the manufacturers would rather you don’t know the details of. So depending on what sensor / instrument cluster you choose there may be no time saved versus making your own. However. like any closed system, there are people dedicated to extending and enhancing their cars after market – fortunately unlike the electronics world I don’t see the Automotive version of the MPAA/RIAA suing them into silence so by picking the right sensor / instrument clusters you can get a good head start.
For this project we are going to use the Alfa Romeo 147 Instrument Cluster circa 2009 (FACT CHECK) but beware as the Alfa Romeo 147 has been in production for over a decade and there are a wide variety of these in circulation.
GENERAL DESCRIPTION OF ALFA ROMEO CAN-NETWORK
he Alfa Romeo, similar to most automotive CAN networks and in particular other Fiat car systems, has a central Engine Control Unit (ECU) that takes all the sensor data from the engines, input from the driver from various switches and pedals, and outputs to various motors, electronic valves and displays.
Often these networks are split into high and low speed networks with the ECU normally as the central controller.
The Alfa Romeo 147 was part of the FIAT company design so it is based on V.E.N.I.C.E. (Vehicle Network Integration Component Electronics). One would think they tried hard to find an Italian acronym. It’s a ring topology as shown below with several nodes connected into it for the Navi, Audio Center, ECU, and so on.
Basically a network is split into three types of speeds
A: Upto 10Kbps, for ???
B: From 50Kbps to 125Kbps for climate control, instruments, etc
C: 125Kbps to 1MHz for motor related control ( gas flow, ABS, etc )
<<IMATE>>
For the Alfa Romeo 147 Instrument Cluster the network looks somewhat like this;
<<<CAN IMAGE>>>
Because Alfa Romeo was designed by Italians the terms are also in Italian so the following names might help if you are googling:
NBC is “Nodo Body Computer” : ???
NCM is “Nodo Controllo Motore” : Engine Control Unit ???
NQS is “Nodo Quadro Strumenti” : VDO/Instrument Cluster,
NGE is “Nodo Guida Elettrica” : Navigation Guidance System ???
NRR is “Nodo Radio – Radionavigatore” : Audio/Radio/Navi system
NSD is “Nodo strumento Diagnostico” : Diagnostic system
<From Forum>
Since rpm information from the engine control unit node (NCM) travels on the C-CAN network (high transmission speed) to reach the instrument panel node (NQS), which is connected to the B-CAN network (low transmission speed) it must be processed by the Body Computer (NBC) via the gateway function. Only after reprocessing does the body computer transfer the required information to the instrument panel node via the B-CAN network. (rev counter management)
CAN BUS Introduction
We wont waste too much time on the CAN BUS here as there is a mountain of other really good places on the internet to learn about this. [LINK TO WIKI] https://en.wikipedia.org/wiki/CAN_bus
The CAN BUS is a differential pair signaling network that is very reminiscent of I2C, SPI or a lot of other similar CSDMA type networks. Normally, and in the case of Alfa Romeo 147, it operates at 5v and has a High wire and a Low wire (CAN-H, and CAN-L).
<<IMAGE>>
When a device transmits a 1 (one) then CAN-H drops low, and CAN-L goes high – this state is called recessive as the CAN-H becomes recessed.
When a device transmits a 0 (zero) then CAN-H stays high, and CAN-L stays low – this state is called dominant as the … [ CHECK THIS ]
<< GRAPH of WIRES INDIVIDUALLY >>
When combined in the 120Ohm terminated multi-drop as above then you will get the following output.
<<IMAGE>>
In this scenario two devices transmitting wont see each other until the first 1 (one) is transmitted – the device to do this has ownership and continues to send its packet, the other device must back off and try again. [ CHECK THIS FACT ]
If there are problems transmitting, for example with poor termination or noise, then you will likely see RECESSIVE/DOMINANT frames being sent BLAH BLAH [ CHECK THIS FACT ]
<general packet structure by CAN>
In order to help synchronize the clock data is sent with Manchester encoding so every 5 bits of the same data results in 1 bit of the opposite type of data being inserted. When you reach the EOF this insertion-stuffing stops
ALFA ROMEO CAN-BUS
The first thing you will want to do is find out what speed of bus you have.
Some sensors will need to be enabled before they transmit anything, so you will need the rest of the car and you will need to sniff on the wire.
For the Alfa Romeo 147 Instrument Cluster there will be a heart-beat and instrument data immediately upon power up. Below you can see the measured area for what was obviously a 1-bit transmission and you can see it is 20us ( 50kbps )
<< \\SERVERProjects\CityCarDriving\CityCarDriving.2\Alfa Romeo 147\CAR RELATED\Scope\IMG_0001.jpg>>
<< DISCUSS ABOUT CAN-H and CAN-L here, YELLOW being the REAL transmission – this is an unterminated bus >>
The next is to confirm you have a valid CAN bus transmission which for the Alfa Romeo 147 Instrument Cluster is the heart-beat 0x703 0x2 0x00 0x1C transmission.
<< IMAGE >..... of more data >>
<< OVERLAY the 1/01//1 stuff here??>>
Seen on the wire above:
0/111/00000/10/11/00000/11/00000/1/00000/1/00/111/00/11/0/1/0/11/00/11111/0/<<35x1>>
Stuffing Identified:
0/111/00000/S10/11/00000/S11/00000/S1/00000/S1/00/111/00/11/0/1/0/11/00/11111/S0/<<35x1>>
Stuffing Removed:
0/111/00000/0/11/00000/1/00000//00000//00/111/00/11/0/1/0/11/00/11111/<<35x1>>
decipher this into the CAN frame:
0/ | Start Of Frame (SOF) |
111/00000/0/11 | ID ( 11-bit = 0x703 ) |
/0 | RTR ( 0=no, 1=yes ) |
0 | IDE |
0 | r0 (Reserved, SBZ) |
00/1/0 | DLC (Data Length) = 2byte |
0000//0000 | Data0: 0x00 |
0//00/111/00/ | Data1: 0x1C |
11/0/1/0/11/00/11111/ | CRC |
1 | CRC bit ??? |
1 | CRC Delimiter |
1 | ACK |
1 | ACK Slot |
1111111 | EOF |
1111111 | IFS |
CAN PACKETS FOR Alfa Romeo 147 Instrument Cluster
Since I don’t have the rest of the car the following packets are deduced from other forums, sniffing the bus, experimentation via trial and error as well as automated sweeping.
As with can here I will report packets as “device ID”, packet length, and then data for the packet.
PACKETS SENT BY INSTRUMENT CLUSTER
703 2 00 1C
703 2 00 1E
6E3 1 10
3C3 3 00 00 090
<then>
3C3 3 A20090
683 8 01270101
6A3 8 00 00 00 00 00 00 00 07 ?????
6C3 8 00 00 00 7C 00 00 00 00 ?????
6D3 8 00 00 00 00 00 00 90 00 ?? ?? – average fuel consumption xx,x
683 6 xx xx xx xx xx xx
xx xx xx xx xx xx = time + date (hh mm dd mm yyyy)
6D3 8 xx xx x0 00 00 00 00 00
xx xx x = total odometer: 0 to 999999 km
6D3 8 00 00 00 00 00 00 xx xx
xx xx = km's to service (bit 25 to 40 - bit not last from 5 bytes to use!) from 0 to 20000 km
6D3 8 00 00 00 00 00 xx 00 00
xx = days to service (9 bits - first bit of 7 bytes and use!)
0-366 days
6D3 8 00 00 00 00 00 00 0x xx
x xx = average fuel consumption (direct playback in hex xx, x)
700 6 00 00 xx xx xx xx
xx xx xx xx = active nodes (nodes biniar reproduction 32-0)
(0 = not active 1 = active)
703 2 : 00 1c – Heart beat, every xx ms
PACKETS RECOGNIZED BY INSTRUMENT CLUSTER
Can this be sent all together, or is it mutually exclusive?
180 6: 00 xx 00 00 00 00 status lights in dashboard
xx = 60 - parking light + illumination in the dashboard
xx = 08 – Headlamp in small LCD
xx = 10 – main beam, all other illumination off, LCD double bright
xx = 70 – main, plus both
xx = 78 – 70 plus small LCD
xx = 00 – illumination off
180 6: 00 00 xx 00 00 00 status lights in the dashboard
xx = 60 - both indicators
xx = 40 - Left indicator
xx = 20 - Right indicator
xx = 4 – roger beep
180 6: 00 00 00 xx 00 00
xx = 20 = break light fuse failure
xx = 10 = break light failure
xx = 02 = rear fog light bulb failure
180 6: 00 00 00 00 xx 00
xx = 8 = number plate light failure
xx = 40 = left side light failure
xx = 80 = right side light failure
281 8 : 00 00 00 tt ff ff rr 00
tt – Engine Water Temperature ; -40 to 215oC ( 0 – 0xff )
ffff – Fuel Consumption factor ; 0 – 132Liter/hour ( 0.0022 factor )
rr – Engine RPM speed ; 0 – 8000rpm ( 32 factor )
281 8 : 00 xx 00 00 00 00 00 00
xx = 80 = cruise control from
xx = 2 is green cruise control logo in LCD
4 – water in diesel fuel filter
8 – error glow plug
10 – glow plug icon
20 – water in diesel fuel filter + icon
286 8 : 00 xx yy 00 00 00 00 00
xx = 00 = abs/vdc/breaklight all off
xx = 04 = VDC sysem failure error ( once sent, LCD wont show message again)
xx = 08 = same
xx = 10 = EBD system failure
xx = 20 = ABS system failure
yy = 00 = ASR ON, 80 == ASR OFF
28B 8: 00 zz xx yy
Zz = 80 = City Mode
Xx = 01 00 = Selespeed system failure
XX = 2 = 1
Xx = 4 = 2
Xx = 6 = 3
Xx = 8 = 4
Xx = a = 5
XX = 1C = R
XX = 1e = N
Yy = 0c = display
YY = 1C = display with continuous beep
YY = 8F = gear blinks
…
2A0: xx xx 00 00 speed (80 00 = 0 km / h)
2A0 4 0x xx 00 00
x xx = vehicle speed as above but more slowly: 100 ms
2A0: 00 00 yy 00 speed
Yy = 00 then ff we get a trip counter increase
3A8 00 00 00 00 xx
xx = 10 = li. doorknob lock to xx = 08 = “ditto” auf
xx = 02 - Interior lighting xx = 20 - Hand Brake xx = 08 - Amaturenbeleuchtung
xx = 05 - city a (steering)
xx = 4c - course inserted (76DEZ)
xx = 04 - driver's door xx = 08 - passenger door xx = 40 - Tailgate xx = 0C - both doors xx = 4C - Rear + both doors xx = 44 - Heck + driver xx = 48 - rear passenger +
xx = 05 not to xx = 04 short too xx = 02 short on xx = 03 all on
3C2: 00 00 xx xx = brightness of fixtures 00-70 The line in the MFD (since its date or radio name and frequency is)
xx = 40 = airco a
x xx = vehicle speed 13 bits (the last bit of 5. nul also use!) factor = 0.0625 0-512 km / hour (10 ms)
xx = 00 = asr from xx = 80 = asr a |
380 8 00 00 00 00 00 00 00 xx
xx = battery voltage 7 bits (first) Do not use factor 0:16
0 to 18 V
380 8 : ww zz 00 00 00 yy xx 00
xx = fuel level 0- 100%
yy = 2 = beep, and solid fuel meter
zz = 4 = left front door open
zz = 8 = right front door open
zz = 10 = left rear door open
zz = 20 = right rear door open
zz = 40 = rear hatch door open
ww = 4 = blank small LCD for 0.5s
ww = 40 = low break fluid level
ww = 80 = replace front break pad
388 6 xx yy zz 00 00 00
xx = external temp. factor 0.5 offset -40 -39.5 to 87.5 GRC
yy = 80 then nothing displays?
Zz = 1 then beep
545: xx yy yy zz ww 00 – NO CD?
xx = 80/82 = Tape A, Tape B
Xx = 40/44/48 = FM1, FM2, FM3 and yy/yy is MHz/KHz
Xx = 4c = LW
Xx = 50 = MW
Xx = 41,43,45,47, 49..4d.. 51,53= Custom Message via 565
Xx = 20 (YY=00 00) zz=00 No CD, ww=8 then back to DATE display
XX = 20 (YY= 00 00) zz = CD Track ZZ
565 7 : ss ss ss ss ss ss 00
ss – 6bit value representing a STRING ; see table
545: xx yy yy zz ww 00 – NO CD?
xx = 80/82 = Tape A, Tape B Xx = 40/44/48 = FM1, FM2, FM3 and yy/yy is MHz/KHz Xx = 4c = LW Xx = 50 = MW Xx = 41,43,45,47, 49..4d.. 51,53= Custom Message via 565 Xx = 20 (YY=00 00) zz=00 No CD, ww=8 then back to DATE display XX = 20 (YY= 00 00) zz = CD Track ZZ
ss – 6bit value representing a STRING ; see table |
|
don’t have the “gear” packet, and the driving mode packet. There may well be other informational packets which I have not yet seen.
PART NUMBERS SEEN SO FAR:
ddd
Part Number | VDO Number | Years Seen | Notes |
---|---|---|---|
735290180 | 110008953006 | 2002/09 | |
735290186 | 110008953016 | 2002/?? | |
735292040 | 110008953020 | 2001/1,
2002/12, 2003/?? |
|
735292040 | 110008953020 | 2003/1 | |
735308749 | 110008953030 | 2002/01,04,06 | |
795337494? | 110008953035 | 2003/12 | |
735374408 | 110008953048 | 2004/?? | |
735374420 | 110008953061 | 2004/??, 2005/?? | |
156056623 | 110080304012 | 2005/12, 2006/03 | SW 3.66 |
156071223 | 110080304072 | SW 3.88 | |
156071298 | 110080304079 | 2010/03 |
ddd
DISASSEMBLY
After unclipping the outer shroud you should be looking directly at the dials and glass LCD screens.
To remove the dials you should turn them back past their zero point, and pull up gently. Pushing them beyond their maximum limit will break them, and pulling them directly off will also break them. To put them back also push on at any point beyond zero and force them back to zero.
<< DIALS IMAGE >>
The LCD screen can also be removed by pushing the glass forward then pulling up.
The smaller LCD is harder to remove so detaching the ribbon from the PCB is easier. To do this, carefully lift the push-down fastener from the top at both sides of the socket.
<< IMAGE >>
The next step is to remove the two screws below the large LCD, and the one from behind the upper dials. You can then lift off the plastic cover which covers the two small dials and LCD back lighting.
<< IMAGE >>
Then flip up the PCB with the dial-motors and LCD backlighting
<< IMAGE >>
And finally remove the screw from the upper plastic housing and remove the plastic housing too, this will expose the complete main-board instrument cluster PCB.
<< IMAGE >>
Below you can see the instrument cluster main-board PCB. It’s a two-layer PCB which is centered around a Fujitsu Automotive focused MCU ???. Odometer data is held in the EEPROM 9CXXX The MCU P0 – P27 directly drive the main LCD, whilst Pxx-yy drive the indicator lights, and Pxx-yy drive an I2C bus to the smaller multi-7-seg LCD via a XYZ chip. The PWM channels feed to the four stepper motors on the board as well.
<TABBED TABLED FOR EACH COLOR AREA :: COLOR>
If anyone is interested in further PCB details or positions of test pads please contact me.
INDICATOR LIGHTS
Seatbelt (analog single input Pin XX ), Engine ECU (analog single input Pin XX), ABS/../.. via CAN, headlights (analog single input Pin XX), fog light, ?? and SRB airbag via CAN??
<<IMAGE>>
Upper PCB Illumination, gas (red, and yellow), left/right indicator, temp. Main information LCD with warning ICON area (green, yellow illumination in small square bottom right)
<<IMAGE>>
SOCKET PINOUTS
dd
Pin # | Color | Description | Pin # | Color | Description | |
1 | BL/BK | +V | 10 | Gn/BL | ||
2 | RE/GN | +V | 11 | Gn/Br | ||
3 | WH/Pi | B CAN-H | 12 | Gy/Bk | ||
4 | BL/Pi | B CAN-L | 13 | BL/Wh | ||
5 | Wh/Gn | Headlam | 14 | Pu/BL | ||
6 | Gy/Bk | Dipped | 15 | Or/Wh | ||
7 | Pu/Bk | GND/Earth | 16 | Pu/Pi | ||
8 | Wh/Gy | Neg sig trip | 17 | xx | ||
9 | Pi/Gn | Mode - | 18 | xx |
Gn=Green, BL=Blue, Bk=Black, Wh=White,
Gy=Grey, Br=Brown, Pu=Purple, Or=Orange,
Re = Red, Pi=Pink