Alfa Romeo 147 Instrument Cluster

From revRE Wiki

Introduction

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


380: xx 00 00 00 00 00 00 00

xx = 02 - Interior lighting

xx = 20 - Hand Brake

xx = 08 - Amaturenbeleuchtung


380 xx 00 00 00 00 00 00 xx

xx = 05 - city a (steering)


380: 00 00 xx 00 00 00 00 00 reverse

xx = 4c - course inserted (76DEZ)


380: 00 xx 00 00 00 00 00 00 open door:  

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 +


388: 00 xx 00 00 00 00 right window

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)


281 00 00 00 00 00 00 00 xx

xx = 40 = airco a


286 8 00 00 00 00 00 00 0x xx  

x xx = vehicle speed 13 bits (the last bit of 5. nul also use!)

        factor = 0.0625 0-512 km / hour (10 ms)


286 00 00 00 00 00 00 00 xx

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


565 7 : ss ss ss ss ss ss 00

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