2018年11月9日 星期五

BMW M62引擎水溫漫談

BMW M62 V8引擎水溫一直是令人擔心的問題, 原廠設計為了燃燒效率及排放環保的因素將正常的水溫設定在攝氏105度, 因此只要散熱系統中有某項零件發生問題水溫很快就會失控.

@ 首先介紹一下幾個與水溫相關重要的零件
1.冷卻水: 由水及水箱精組成, 用來帶走引擎產生的廢熱
2.水箱: 將冷卻水中的廢熱釋放至大氣中
3.水泵浦: 帶動冷卻水在引擎及水箱之間循環
4.水龜: 控制從引擎出來的冷卻水是否流向水箱, 保持冷卻水溫度不至於過低.
5.水箱風扇: 鼓動空氣流過水箱散熱鰭片帶走冷卻水的廢熱
6.風扇離合器: 以熱耦合方式連接引擎轉軸及水箱風扇, 常溫時風扇轉速慢風量小, 風扇離合器本體溫度超過攝氏98度則完全接合引擎轉軸及水箱風扇風量大.
7.水箱蓋: 負責在冷卻水壓力超過200psi(約13個大氣壓力)釋放部份冷卻水減少壓力.

意示圖如下
http://up.autotitre.com/66e018058e.png

@ 冷卻水原理與工作狀況
1.水的沸點在一個大氣壓時是攝氏100度, 壓力越高沸點越高, 引擎的冷卻循環系統是封閉系統當溫度上升時壓力也跟著上升. 200psi時水的沸點約攝氏192度.
2.水箱精主要成份是乙二醇, 其沸點在一個大氣壓時是攝氏196度, 主要功能用於與水混合提高沸點及防鏽.
3.水的沸點在壓力下已經遠超過105度, 為什麼還需要加水箱精? 在引擎內部冷卻水與引擎的接觸面溫度遠超過攝氏105度, 在這個位置會產生許多氣泡, 尤其是細小的雜質多時, 如同用火煮水在水壺底部會看到許多氣泡. 這些氣泡的熱傳導效果遠比水差, 會造成引擎的廢熱在特定的小範圍過度累積. 因此還是需要水箱精防止氣泡的產生.
4. 水箱精防鏽的功能也極為重要, 防止零件生鏽腐蝕, 例如水泵浦輪葉就是鐵製品, 還有汽缸床墊片等.
5. 水箱精的熱傳導速率比水差, 因此過多的水箱精並不利於散熱.

由以上可知, 正確的水箱精與水比例混合極為重要, 也有必要一段時間更換冷卻水, 避免雜質的累積(例如自來水中的礦物質結晶及鐵鏽)減少氣泡產生的機會以及防止阻塞水箱鰭片間細小水道的狀況發生.

@水箱工原理與工作狀況
1.水箱外部有許多鰭片用以增加面積達到快速散熱的效果, 鰭片很脆弱所以要注意不要受到外力撞擊, 也不要有異物阻擋(如樹葉紙片等),會減少散熱速度.
2.水箱是消耗品, 用久了內部表面會沈積雜質, 甚至會造成其中的小水道阻塞, 散熱效率會降低.
3.可在更換冷卻水的同時清洗水箱, 更徹底去除雜質.

@水泵浦原理與工作狀況
1.水泵浦由皮帶驅動內部水輪葉, M62 V8水泵浦並不耐用, 通常軸承會先損壞造成漏水, 並且軸心偏移使得水輪葉摩擦到引擎本體.
2.正確使用水箱精防鏽, 避免水輪葉腐蝕鏽光,造成冷卻水循環不良無法散熱.

@水龜原理與工作狀況
1. M62 V8的水龜是電子水龜, 其實就是傳統的熱臘式水龜加上一組加熱器, DME電腦控制加熱器使得水龜在水溫低於攝氏105度就開啟, 例如在DME偵測到大腳油門引擎負載增加時提前降低水溫以應付突然增加的廢熱.
2.加熱器通電也需要一小段時間水龜才會真正開啟.
3.引擎故障碼map cooling就表示水龜的加熱器已經斷路故障, 但即便如此水龜還是會在攝氏105度開啟,只是引擎重負載時水溫會下降得比較慢或著高溫會達到110度以上才下降.
4.水龜通常很耐用,最糟的狀況是卡阻無法開啟或熱臘老化開啟溫度提高.



@風扇離合器原理與工作狀況
1.風扇離合器內部使用矽油作為耦合界面, 本體接在水泵浦輸入軸上, 溫度高於攝氏98度以上才會完全接合, 此設計使得風扇風量得以隨水溫及負載變化.
2.M62 V8風扇離合器與M52外觀形式相同但耦合係數並不相同.
3.水溫高時踩油門應該能聽見明顯的風扇運轉聲, 表示風扇離合器有正確接合.
4.風扇離合器老化矽油洩漏會造成風扇離合器無法鎖定, 產生的風量不足, 怠速水溫過高.



@水箱蓋原理與工作狀況
1.水箱蓋會釋放過高的壓力. 水箱水加超過副水箱指示的最高水位, 甚至是加滿會使得冷卻水在溫度上升時體積膨脹壓力超過200psi, 水箱蓋就會釋放部份冷卻水直到壓力下降至設定值.
2.水箱蓋老化會造成冷卻水異常減少.



@水溫設定
1.M62 V8水溫設定在攝氏105度, 我個人目前改裝設定在92~95度之間. 改裝方式前篇有敘述.
2.工作水溫比原廠設定低是希望能降低引擎內部蓄積的廢熱, 畢竟台灣的氣候高溫溼熱不比歐陸乾燥涼爽, 期待能有效延長內部橡膠類耗材壽命, 另外引擎內部水道表層長年下來蓄積了許多沈積物, 降低水溫也能補償熱傳導效率下降的問題.
3.駕駛行為也會影響水溫,長時間高負載水溫自然處在高檔,當車輛減速時適時降檔提高引擎轉速能使得風扇產生更多風量加快散熱


@定期保養檢查
1.每一到兩年更換冷卻水並清潔水箱
2.定期巡視冷卻水水位, 若有減少的狀況應特別注意並找出洩漏點
3.副水桶水位加到指示浮標的高水位即可,多加了只會造成冷卻系統壓力過高然後由水箱蓋洩出.
4.換水後應打開副水箱旁的洩氣螺絲將管路內的空氣排放乾淨.
5.水泵浦應定時檢查, 尤其水泵浦軸心是否搖晃, 葉片是否鏽蝕
6.M62 V8冷卻系統水管是塑膠接頭快拆式設計,經過多次拆裝會有毀損的狀況,應更換新品.
7.除水溫外還可以電腦讀取水箱出水口溫度觀察系統散熱的情況.
8.M62 V8正常水溫範圍從85~110度間都算正常範圍. 長期觀察水溫變化就能察覺系統是否有異常.





2018年5月15日 星期二

STM32F10x code size optimization




I have been using ARM embedded gcc with STM32F103 for a long time. recentlly, I found the binary size is much smaller compiled by Keil than gcc. It's huge different, lets say 10k bytes with Keil and 40k bytes with gcc. After some research there's solution.

1. Optimization level to code size

CFLAGS += -Os

2.Remove debug

#CFLAGS += -g

3.Add garbage collection flag

CFLAGS += -Wl,--gc-sections 

4. Using nano-newlib instead of newlib

CFLAGS += --specs=nano.specs

5.Other flags

CFLAGS += -fno-common -mfloat-abi=soft -fsingle-precision-constant -fomit-frame-pointer -ffunction-sections -fdata-sections

6.Below are the results, the red text is code size in bytes

CFLAGS += -Os

arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
  99652    2332    4560 106544   1a030 main.elf

CFLAGS += -Os
CFLAGS += -Wl,--gc-sections

arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
  88712    2260    3748   94720   17200 main.elf

CFLAGS += -Os
CFLAGS += -Wl,--gc-sections
CFLAGS += --specs=nano.specs

arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
  31716    1156    1620   34492    86bc main.elf

CFLAGS += -Os
CFLAGS += -Wl,--gc-sections
CFLAGS += --specs=nano.specs
CFLAGS += -fno-common -mfloat-abi=soft -fsingle-precision-constant -fomit-frame-pointer -ffunction-sections -fdata-sections

arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
  22572    1136    1612   25320    62e8 main.elf





2018年4月26日 星期四

BMW E38 Enhanced IKE


Enhanced IKE - DME/EGS data stream displayed in the instrument cluster





Supports

DME : Bosch Motronic v7.2 (M62TU) 
EGS : Automatic Transmission ZF5HP24 v8.60.2 (E38/E39/E53)

Functions

@ Display the following information

1.Coolant temperature.
2.Coolant outlet temperature.
3.Transmission temperature.
4.Intake air temperature.
5.Intake air mass flow.
6.Battery voltage.
7.Engine RPM.
8.Engine load.
9.Fuel trim additive.
10.Fuel trum multiplicative.

@ Display switch by steering wheel buttons NEXT / PREV or RT_TELEPHONE.

@ Data request interval 2 secs.

@ Automatic external scanner collision detection.

Principle

Basiclly, the project is a small OBDII scanner that requesting information from DME and EGS.
It reads data from D-Bus then write display string to I-Bus. There are 4 wires needed to connect to wire harness of IKE (12V / GND / D-BUS / I-BUS)

Hardware/Software

Base on STM32F103C8T6 (20k RAM / 64k FLASH)

Enhanced IKE released as free, open source hardware/software, licensed under the GNU General Public License (GPL)

https://github.com/gigijoe/E-IKE

All bugs are made by my self @@

Installation

Before doing anything, make sure the ACC key off and know what you are doing...



There are 4 pins need to branch out - D-Bus / I-Bus / 12V / GND

Find connector X10113 on the back of Instrument Cluster. Mark the following wires.
D-Bus : Pin 1 (White / Purple)


 GND : Pin 9 / 10 (Brown / Green)


I-Bus : Pin 8 (White / Gray / Yellow)


12V : Pin 12 (Purple / Green)


Soldering 4 wires of MPX connector to the X10113 wire harness

PIN          X10113                                      MPX 

D-Bus      Pin 1 (White / Purple)                D-Bus (Brown)
I-Bus       Pin 8 (White / Gray / Yellow)     I-Bus (White)
12V         Pin 12 (Purple / Green)               12V (Red)
GND       Pin 9 / 10 (Brown / Green)         GND (Black)



The E-IKE box is located in the space below to instrument cluster as shown. Then plug in the MPX connector.

Modification of under hood 20 pins connector cap. The cap is needed in order to make connection between TXD and TXDII of D-Bus


Remove the PCB from the cap.
Wired two pins and cut two wires as below then put it back to the cap.

Operation

ACC Key on, press steering wheel button NEXT / PREV / RT_TELEPHONE to switch between items.


2018年4月8日 星期日

BMW IKE ASCII Code

This is a demo to display ASCII code after 0x7f. It may be useful to making some special function on IKE screen :)


BMW M62TU Enhanced IKE

延續之前對D-Bus / I-Bus的研究,現在要以此來製作 儀表板顯示擴充.



E38/E39/E53車系能透過儀表板顯示水溫,電壓等資訊但要經過繁複按鍵多次才能顯示,而且熄火再開又要再重頭按一次相當不方便.另外變速箱油溫無法由儀表板顯示也是個遺憾.因此我想要能夠很容易的在儀表板上看到水溫,油溫,氣溫等資訊.

規格

0.支援 M62TU DME7.2 / ZF5HP24 v8.60.2
1.在儀表板LCD顯示資訊.
2.顯示 冷卻水溫度, 水箱出口溫度, 變速箱油溫, 進氣溫度, 進氣量, 電壓, 引擎負載.
3.方向盤按鍵 R/T 控制切換顯示.
4.方向盤按鍵 Next / Prev 控制切換顯示(音響關閉時).
5.點火開關偵測, 紅火才動作.
6.D-Bus 忙碌偵測, 避免與外掛診斷電腦衝突.
7.I-Bus 忙碌偵測, 避免與內部電腦衝突.

架構

E38/E39/E53車系儀表板是車上I-Bus/D-Bus/K-Bus訊號的收發中心,所有與引擎及傳動相關的電腦都串接在D-Bus上提供故障碼診斷及數據流.實作原理是透過D-Bus取得DME/EGS電腦的數據流再透過I-Bus顯示在儀表板LCD.相當於是自製診斷電腦再過濾出想要的資訊並顯示.

硬體

一樣是以STM32F103做處理運算.D-Bus與I-Bus讀寫線路是相同的,除了D-Bus上需要外部pull high.
Usart1 - K-Bus - 9600 8E1
Usart2 - Console - 115200 8N1
Usart3 - I-Bus - 9600 8E1



軟體

以之前I-Bus實做作為基礎增加D-Bus支援.
D-Bus資料傳輸速率是9600 bits/秒, 但發送命令給DME/EGS等電腦必須要每個byte間隔5ms, 而收到DME/EGS等電腦的回應則是連續的.

逆向工程

D-Bus上該送什麼命令?以及收到的回應該如何解析?沒有官方文件只能以逆向工程的方式解決.利用前篇提到的方式解析電腦協議.

1.C310+診斷電腦與K+Dcan傳輸線用OBDII Y型線並接,這樣就可以從PC看到C310+如何與DME/EGS溝通.
2.解碼數據流,透過網路上的資訊及從INPA / EDIABAS的檔案 *.PRG 中分離出編碼的解譯表.
3.建立一個車外獨立實驗環境,一顆IKE儀表,OBDII Y型線,K+Dcan傳輸線,在PC上模擬DME/EGS在收到命令時會產生數據流.有了獨立實驗環境就可以在桌上完成所有的工作,省去每次都要上車測試的困擾.


安裝


總共要接4條線 I-Bus / D-Bus / Terminal R - 12V / GND, 這幾根線都在儀表板排線X10113. 依據顏色找出正確的線.


四條線全部接出來


電路板安放至正鴐邊手套箱旁的空間



最後修改引擎室內20pin診斷頭蓋子,將pin 17 - TXDII 及 pin 20 - TXD 連接在一起並切斷  pin 17 / pin 2 及 pin 20 / pin 15, 這樣才能同時與DME/EGS通訊. 診斷頭蓋子蓋上整個系統才能正確運作.




到此整個實做完成



體驗

上路後實際觀察各項數據
1.水溫,上下水管溫差在水龜未開啟時可達到50~60度的差距,塞車時則會差距20度以內.


2.變速箱油溫,這是我主要的觀測項目,最高溫在100度左右


3.進氣流量,打P檔及關閉空調壓縮機,數值約在15~16kg/h,開空調數值約在18~19kg/h,再採煞車進D檔數值約在24~25kg/h


4.電壓13.7V附近



2018年4月7日 星期六

BMW M62TU 含氧感知器

本篇為英文翻譯
 http://p38arover.com/rover/p38a/Engine_Management/BOSCH_ME72_Systems.pdf

p.18 ~ p.21 (第18至21頁)

Engine Control Module (ECM) - 引擎控制模組

Heated Oxygen Sensors (HO2S) - 具有加熱能力的含氧感知器

HO2S 回應訊號給 ECM 使其能夠進入封閉迴路的油氣混合比控制. 總共有四個HO2S被安裝在每列汽缸的觸媒前後各一個 (V8有兩列汽缸在觸媒前後各一個,所以總共四個).每個HO2S會輸出與廢氣含氧量成反比的電壓輸出.HO2S由鋯金屬感測元件以及具有氣體可穿透性的陶瓷包覆在外部表面.外部表面直接暴露在廢氣當中而內部表面則與大氣相通(參考圖片).內外部表面含氧量的差異在感測器產生電位差.電壓的產生則依靠前後兩個HO2S2的訊號差異.當AFR(油氣混合比)比例參數Lambda為1時(例如空氣及汽油質量比為14.7比1)輸出電壓為約為450mV.當Lambda為1.2的較稀混合比,廢氣中的含氧量增加而輸出電壓約為100mV.叫濃的混合比Lambda 0.8造成廢氣含氧量降低而輸出電壓約為900mV.

ECM經由兩個HO2S提供的資訊來監控噴油嘴脈衝寬度改變的效果.噴油嘴脈衝寬度是噴油嘴作動噴油的時間長度也就是決定有多少油量噴出.反應時間則依據不同的駕駛情況而定,ECM可以得知每個汽缸對總排氣量的貢獻度.這讓ECM可以對每個汽缸變動噴油的策略,例如在任何時間點精確控制每個汽缸的噴油量.

ECM持續不停檢查HO2S的輸出訊號是否正確可信.若檢查出不合理的訊號,ECM會儲存相關的故障碼以及引擎轉速,負載及HO2S的輸出電壓.ECM需要HO2S的訊號來設定大部分的調適值.某個HO2S錯誤失效會造成這些調適值重置為預設值.接著造成引擎失去最佳化設定.引擎怠速可能變糟以及排氣像是腐爛雞蛋的氣味(起因於氧化硫的增加).

HO2S的功效會隨著使用時間持續惡化而需要週期性的更換(目前是每120000英哩,但還是要參考保養計畫表最新的更換週期).ECM可以從HO2S的訊號偵測到持續穩定的劣化.若HO2S的劣化程度超過預定的水準,ECM會儲存相關的故障碼以及引擎轉速,負載及電池電壓.

HO2S需要高溫才能有效率工作.為了保證能快速達到工作溫度,每個HO2S感測器都有加熱元件在陶瓷頂端內.加熱器會將HO2S感測器加熱到超過350度C(662F).加熱速率(溫度上升的速度)由ECM小心的控制以免造成陶瓷材料的溫度衝擊.ECM輸出PWM訊號給加熱器來控制HO2S溫度上升速率.HO2S在引擎暖機及一段時間的怠速後會被加熱.

ECM以計算有多少電流供給來監測每個工作中的HO2S感測器的加熱器狀況.若ECM辨識出加熱器阻抗太高或太低,ECM會儲存相關的故障碼以及引擎轉速,冷卻水溫及電池電壓.

HO2S感測器是非常靈敏的裝置,必須要一直小心的操作.沒有正確的操作將會導致非常短的使用壽命或無法操作.安裝HO2S感測器時會塗覆一些抗鎖死合成劑.要小心不可塗抹感測器的頂端.若感測器需要拆卸並重新安裝,應該要塗覆少量的抗鎖死合成劑

2018年2月1日 星期四

BMW E38 深入行車電腦協議

由上一篇了解 BMW E38 電腦診斷接頭規格後接著上車實際驗證. OBDII / D-Bus 是以半雙工的方式傳送資料, 由診斷電腦送出命令到OBDII / D-Bus上, 命令中所呼叫的電腦(DME / EGS等)再回應. 以下實際來看看OBDII / D-Bus上的命令與回應.

偷窺D-Bus


作法很簡單就是攔截C310診斷電腦在D-Bus上發送與接收的資料 Baudrate 9600 8E1.
硬體需求 : OBDII 一公二母 Y 線, K+DCan 線組, C310診斷電腦, PC Notebook
                    
                    PC Notebook
                           +
                            |
                            |
 C310 +-----+----+ K+Dcan
                    |
                    |
                   +
       OBDII / K-Line



軟體需求 : PC Notebook上需要一支程式讀取顯示K+DCan線組上的資料

OS Ubuntu 16.04 執行以下程式

sudo stty -F /dev/ttyUSB0 raw
sudo stty -F /dev/ttyUSB0 -echo -echoe -echo
sudo stty -F /dev/ttyUSB0 9600 cs8 parenb -parodd -cstopb
sudo cat /dev/ttyUSB0 | hexdump -C

操作 C310 進入引擎系統DME, 在PC Notebook上可看到類似以下的輸出

...
00000190  00 3a b8 f1 12 2d 62 40  00 00 00 80 00 80 00 00  |.:...-b@........|
000001a0  00 00 4a 00 00 00 00 6d  6a 00 05 00 00 a8 d1 7f  |..J....mj.......|
000001b0  00 94 64 0c 80 0c 80 0c  80 0c 80 0c 80 0c 80 0c  |..d.............|
000001c0  40 0c 80 2a 

DME資料解析


這些資料經過整理以後16進位數值如下

12 04 94 82
12 04 94 82
12 04 94 82
12 04 00 16
12 04 00 16
12 04 00 16
12 04 94 82
12 04 94 82
12 04 94 82
12 04 00 16
12 04 00 16
12 04 00 16
b8 12 f1 01 a2 f8
b8 f1 12 2b e2 37 35 30 36 33 36 36 30 46 30 31 41 38  36 30 30 38 30 30 30 30 31 30 32 31 33 35 31 30  ff ff ff ff 30 30 30 30 38 33 38 32 38 99 
...

先看第一筆 12 04 94 82
12 : DME, 04 : 4 bytes, 94 : data, 82 checksum 剛好符合DS2的格式
後面跟著多筆 12 04 XX XX 而且看起來 DME 似乎沒有回應. 最後還兩筆b8 開頭的資料完全不符合DS2. 這是怎麼回事呢?

b8 開頭的資料其實是KWP2000的格式,結構如下
[ header ] [ target ][ source ][ size of data ][ data ] ... [ check sum ]

原來是 M62TU 的 DME 電腦 Bosch ME7.2 只支援 KWP2000

C310診斷電腦進入DME診斷時會先發送DS2格式的命令讀取DME的型號, 在發送幾次後沒有得到回應便改發送KWP2000格式的命令.

以下是DME回應的資料解讀, 透過與C310診斷電腦畫面比對可了解部份的內容

b8 f1 12 2b  
e2 
37 35 30 36 33 36 36 # 料號 7506366 
30 46 # 0F 硬體編號
30 31 # 01 編碼索引
41 38 # A8 診斷編號
36 30 # 60 匯流排索引
30 38 # 08 製造時間 星期
30 30 # 00 製造時間 年
30 30 31 30 32 31 # 供應商編號 001031 
33 35 31 30 
ff ff #
ff ff 30 30 30 30 38 33 38 32 38 99




BMW並沒有公開這些編碼的解讀方式, 只能透過比對來解碼. 網路上也有部份的資訊但很不完整.

https://github.com/inferiorhumanorgans/DS2PlusPlus/blob/master/dpp-json/dme/me-7.2/dme_me7_2.json

不過經過一番搜尋及研究發現還是有方法可以從INPA / EDIABAS的檔案 *.PRG 中分離出編碼的解譯表, 參考以下連結

http://eurokclub.bike/index.php?topic=2734.0

最後轉成excel的表格, 可以清楚看到哪個參數資料在第幾個byte,長度多少,轉換的乘數值,偏移值,單位.


與DME / EGS對話


知道資料格式就可以自己與DME溝通取的所需要的資訊, 例如轉速,水溫,空氣流量等.
以PC Notebook作為平台, python語言來寫軟體, 一樣透過K+DCan線組連接車身. 
原始碼如下


執行結果



除了DME之外EGS(變速箱)電腦也用同樣的方式成功取的資料. 值得注意的是EGS是走DS2協議, 同一條D-Bus上可走不同的協議.


目前可讀取的參數
DME : 轉速, 時速, 水溫, 水箱出水口溫度, 進氣溫度, 進氣流量, 節氣門開啟百分比等
EGS : 轉速, 變速箱油溫, 水溫, 檔位等

至此我們已經把手伸進DME / EGS電腦裡面, 下一步要脫離PC由獨立的硬體來整合上車.


2018年1月26日 星期五

BMW E38 診斷接頭規格

BMW E38車型配備兩個OBDII診斷接頭, 這是為了符合法規所產生的過渡時期設計.一個是 20 pin 圓頭位在引擎室, 另一個在車室內中控台杯架旁 16 pin OBD接頭.

2001年之前生產的BMW E38接專用電腦診斷如GT1/INPA要插20 pin圓頭,同時也支援標準OBDII, 而車室內OBD接頭則只支援標準OBDII.

2001年之後(含)生產的E38車型兩個接頭都可以接專用電腦診斷及支援標準OBDII.

 


16 pin OBDII 接頭


車室內OBDII接頭可讀取引擎的資訊及故障碼, 其通訊協定是 iso 9141-2 標準, 因此只要一般OBDII診斷電腦就可以讀取. 但車輛上其他設備如空調/循跡系統等則無法透過OBDII讀取.

Pin   Signal
1      +12V (Ignition(in run or start))
4      CGND (chassis ground)
5      SGND (Signal ground)
7      ISO 9141-2 K-LINE (engine (ISO-9141 and ISO-14230), automatic transmission diagnostic (in some models) AKA TXDII)
8      ISO 9141-2 K-LINE (IKE/KOMBI, ABS, ABS/ASR, ABS/ABD, ESP, DSC, Airbag and other electronic equipment AKA TXD II)  2001後的車型才有這根pin
9     TD/RPM (Engine rotation speed)
16   +12v (Battery power)

OBDII詳細規格參考
https://learn.sparkfun.com/tutorials/getting-started-with-obd-ii

2001年前生產的E38 資料傳輸腳位是 pin 7 K-line, 2001年之後(含)生產的則支援 pin 7 K-line  / pin 8 L-line

OBDII 規格定義許多車輛資訊的代碼, 涵蓋引擎, 傳動系統等, 也即時的行車資訊如轉速,水溫等. 但是在 OBDII 剛開始出現時(1996年左右), 各車廠往往沒有實做完整, 大部分都只針對法規要求關於引擎故障及廢氣排放監測做實現.


20 pin 圓頭


引擎室 20 pin 圓頭支援完整BMW診斷功能, GT1 / INPA 透過BMW自定義的 DS2 通訊協定與車輛上所有的電腦通訊. 使用 20 pin轉16 pin轉接線 接專用診斷電腦GT1 / INPA / C310等.

Pin  Signal
1     Engine rotation speed
2     OBD-II diagnostic
7     Oil service and Inspection reset
11   External starter turn on
14   Battery power
15   ISO 9141-2 L Line (RXD- Diagnostic Data link)
16   Ignition +12V
17   ISO 9141-2 K Line (TXD II - ODB2)
8     PGSP (Programming line)
19   GND
20   ISO 9141-2 K Line (TXD - Diagnostic data link)

資料傳輸腳位 pin 17 是標準 OBDII, pin 20 TXD / pin 15 RXD 則是走DS2通訊協定

ISO 9141-2 / DS2 的差異


 iso 9141-2 資料格式
3 bytes header + Up to 7 bytes data + 1 byte check sum

DS2 資料格式
1 byte address + 1 byte length +  N bytes data + 1 byte check sum

兩個協議是完全不相容的,市面上大宗的OBDII晶片ELM327就不支援DS2.

GT1 / INPA 用 K+DCAN 傳輸線來支援DS2

 


16 pin OBDII 接頭改裝


改裝使得車室內 16 pin OBDII 接頭可以有完整功能

參考以下
http://blog.obdexpress.co.uk/2015/10/22/update-bwm-e38-obd-ii-port-to-d-bus-diagnostic-port/

最簡單的改裝方式
https://sites.google.com/site/carsfunandtechnologies/bmw-z3/bmw-odb2-before-2001---enable-ike-and-ews-on-a-z3