2017年9月28日 星期四

Install Tensorflow on Raspberry Pi 2

Reference https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi/

This is a record of installing Tensorflow on Raspberry Pi 2.
The OS is Raspbian. Login with username pi password raspberry.

pi@raspberrypi:~/tf $ mkdir -p tf/
pi@raspberrypi:~/tf $ cd tf/

pi@raspberrypi:~/tf $ sudo apt-get install libblas-dev liblapack-dev python-dev \
> libatlas-base-dev gfortran python-setuptools

pi@raspberrypi:~/tf $ pip2 install http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/output-artifacts/tensorflow-1.4.0-cp27-none-any.whl

Now the Tensorflow is installed.

pi@raspberrypi:~/tf $ python
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
[GCC 6.3.0 20170124] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>


2017年9月4日 星期一

BMW M62TU電子節溫器改裝 (Part 3)

電子節溫器控制專案 OpenBTD - Open BMW Thermostat Daemon

https://github.com/gigijoe/OpenBTD

該專案為開放原始碼專案包含硬體及軟體,專案授權為BSD 3-clause License.以上翻譯成中文就是任何人都可以免費使用,複製及修改該專案,而作者對使用該專案所帶來的各種損害均不負賠償責任.

Safety - 安全

1.轉速RPM為零時表示引擎未運轉則加熱器關
2.加熱器耗電流應該在1A左右,大於2A視為加熱器有短路狀況則加熱器關
3.硬體故障或軟體錯誤加熱器開,電子節溫器常開造成水溫低但無損壞引擎疑慮.
4.硬體故障或軟體錯誤加熱器關,電子節溫器直到105度C才會開啟,水溫仍維持在原廠設計範圍且無損壞引擎疑慮.

Hardware - 硬體



主IC是STM32F103C8T6.這是一顆32位元多功能CPU應用在自動控制及回授的場合.電路圖左下角部份是I-Bus訊號的讀取線路,這是從網路上找的線路再經過些許修改.電路圖右上角部份是加熱器開關以及電流量測的線路,加熱器開關是由CPU控制繼電器空接或接地.電路圖右邊中間部份是電子風扇PWM訊號的升壓線路,目前沒有用到.電路圖右下角部份是電壓測量線路.整個週邊的電子元件其實不多,也盡量使用一般市面上容易取得的零件.



Software - 軟體



1.讀取並顯示冷卻水溫.
2.測量並顯示電壓.
3.讀取戶外溫度,引擎轉速RPM及行駛速度.
4.調整及設定目標水溫.
5.依據目標水溫,冷卻水溫,戶外溫度,引擎轉速RPM及行駛速度開關加熱器.
6.測量並顯示加熱器耗電流.
7.強制開啟加熱器





Modification - 改裝

OpenBTD安裝於副駕駛座手套箱後方空間,共需要接4條線到OpenBTD



1.電源12V
2.接地
3.I-Bus - 白底,灰條,黃段
可由音響(中控台)或LCM(副駕駛座腳邊)並接出I-Bus線接到OpenBTD.



4.加熱器控制線路在X60003 - pin 31 (白色線).
加熱器控制線路就在副駕駛邊電腦盒.剪斷白色線,接到DME端的白色線串連1K/1W電阻後接12V,接到線組端的白色線接延長線並穿過防火牆組穿越孔至手套箱後方接到OpenBTD





Testing - 測試

預設目標水溫是95度C,戶外溫度是26度C.OpenBTD會依據戶外溫度,引擎轉速RPM提前開啟加熱器,這是為了補償加熱器需要時間才能完全開啟.所以目標水溫其實是我們希望不要超過的最高水溫.實際觀察發現
1.怠速或市區走走停停加熱器已開啟溫度會在93~100度C之間來回.
理論上熱器開啟水龜會全開溫度不應該會高到100度C,不過還有其他因素會影響溫度如離合器風扇風量,水龜是否劣化,主水箱是否暢通等.因此待日後有機會更換各個散熱零件再來觀察.

2.高速公路會在91~94度C之間來回,上坡高負載路段最高到97~98度C左右,下坡路段最低到88~87度C
有撞風後溫度基本上已經在想要的範圍內



影響水溫的條件實在太多了,冷卻系統各個零件都正常運作才能讓水溫保持在合適的狀態.水溫超過原廠設定的範圍,應該找出其中故障的零件,改裝電子節溫器並不是維修的方式.

2017年8月31日 星期四

BMW M62TU電子節溫器改裝 (Part 2)

## 電子節溫器漫談

老車最大的敵人就是高水溫.以我自己的經驗,日常使用的車輛"水龜"約兩三年就會有老化的跡象,就是溫度到達時"水龜"沒有完全開啟.此時水溫仍在正常範圍但稍微偏高,遇到較高負載或夏天塞車狀況時就會超出正常範圍.因此我都是兩年左右會換"水龜"順便也把水箱水換掉.電子節溫器一樣也是會有老化的狀況,所以時常注意水溫變化適時進行檢修才是長久之計.另外老車引擎的水道管壁都會堆積鐵鏽及各種沈澱物質,導致熱傳導速率降低.因此稍微降低水溫也可補償這個問題.

電子節溫器電熱器作用是使"水龜"提早開啟,控制電熱器就能控制水溫.

電熱器是一個發熱電阻,發熱期間節溫器因達到工作溫度而開啟.這個過程會花費一些時間且無法得知節溫器開度,所以要控制水溫固定在某個數值是不太可能的,只能依據引擎轉速,行車速度,進氣溫度及戶外氣溫等條件預先打開電熱器讓水溫在正常範圍內移動.

M62TU電子節溫器"水龜"在105度C開始動作108度C時全開.有了電熱器加熱"水龜"在水溫不到105度時就動作.由此可知"水龜"正常時就算沒有電熱器加熱水溫也都應該在108度C以下.若水溫時常超過108度C代表散熱系統是有問題,可能是冷排阻塞,風扇風量不足或電子節溫器故障等等.

電子節溫器故障有幾種情況
1. "水龜"卡阻,水溫到達108度C時"水龜"沒有全開,水溫時常超過108度C.
2. "水龜"卡阻,"水龜"卡在某個位置,卡在全開水溫會過低,卡在全關水溫很快就破表無法散熱.
3. 電熱器故障(斷路或發熱量不足),水溫時常維持在105~108度C之間.
4. 電熱器插頭漏水,國外有案例水延著線組跑到DME電腦端造成電腦燒毀.

電子節溫器上有個2 pin的插頭就是電熱器的正負極,實際以電錶量測電熱器的阻抗是13.7歐姆



依據歐姆定律 V/R=I 電熱器電流 14V / 13.7ohm ~= 1A
P=IV=V^2/R 電熱器功率 14V^2 / 13.7ohm ~= 14.3W

DME只能控制開啟或關閉電熱器



## 電子節溫器控制

了解電子節溫器的運作原理,接著就來規劃改裝的系統架構.上一篇文章提到電子節溫器有7種改裝方式各有優缺點.以工程的角度來看越簡單的方式越不容易出錯,但複雜的方式較能顧及全面的效果.身為一位軟體工程師當然要挑戰複雜的方式 - 以微電腦讀取水溫控制電子節溫器


以微電腦來控制電子節溫器可行的關鍵是IKE(就是儀表板電腦)每隔幾秒鐘就會在I-Bus上主動廣播戶外溫度及水溫(Out side temperature & coolant temperature),因此可以判斷什麼時候開關電子節溫器.另外IKE也會在I-Bus上主動廣播引擎轉速及時速,可以做為進一步的開關電子節溫器補償.

## I-Bus

E38 / E39 車系以 I-Bus 作為燈光/音響/導航/顯示等裝置間溝通的方式.

從硬體上來看,IBus只有一條電線上面跑12V電壓的訊號.所有連接IBus的設備只有一個是master其於都是Slave.(也就是只有一個主控設備).IBus master(主機)就是LCM(俗稱燈光模組).IBus上所有裝置都可接收或發送訊號,對設備而言這是一條可以雙向溝通的訊號線.

E38 / E39 車系還有 K-Bus 作為空調/防盜/座椅/行車監控等裝置間溝通的方式.

由駕駛邊的儀表板負責連接並轉發 I-Bus / K-Bus 間的訊息,在I-Bus上可讀到水溫等資訊就是由此轉接.

從軟體上來看 I-Bus 以 LIN Bus (ISO 9141) 訊號為基礎,資料傳輸速率 9600 8E1 (9600 bits/sec, 8bit date, Parity Even, 1 Stop bit). I-Bus只有一條線讓所有設備發送訊號因此設備在發送訊號之前必須偵測IBus上是否有其他設備正在傳輸資料,一直等到IBus上一段時間沒有資料才把資料傳輸出去.這個時間長度有不同的說法,大部分是說11個clock cycle.

I-Bus 只是用了與 LIN Bus 相同的硬體而資料傳送協議不同. I-Bus在發送資料前不需要傳送break及sync byte. 一個message最多可以有32 bytes長度的資料.



## DME 控制電子節溫器

電子節溫器加熱器一端接12V正電另一端接到DME,由DME控制接地(GND)來開關加熱器.切斷DME控制加熱器線路會使得DME認為加熱器故障斷路,因此產生 map cooling 故障碼.



已知加熱器阻抗是13.7歐姆,因此可以找一個相同的發熱電阻來取代騙過DME.但這樣會放出很多廢熱也很危險,萬一熔掉一旁的電線可是有火災的可能. 經過測試以1K歐姆一瓦的電阻就能騙過DME,而產生的熱量只有 14V^2 / 1000ohm = 0.196w. 這是加熱器14.3w的1/73左右,相對安全很多.另外騙過DME應該也會使DME覺得開心吧.



到這裡我們已經了解所需的相關知識,接著就要動手實作了.

2017年8月29日 星期二

BMW M62TU電子節溫器改裝 (Part 1)

M62TU引擎水溫原廠設定在105度C以上,儀表板的水溫指針從75~113度C都在中間適溫位置.原廠設計的工作溫度比傳統車輛高主要是為了減少油耗,增加燃燒效率減少排污以符合EU-2環保法規.



電子節溫器是由105度C開啟的傳統水龜以及電熱器所組成,電熱器是用來加熱水龜使其在水溫不到105度C就開啟,這樣就能控制水溫.在怠速及低負載時電熱器不動作,水溫維持高檔減少排污.高負載情況時電熱器動作降低水溫排除廢熱.電熱器由DME控制,依據引擎轉速,行車速度,進氣溫度及戶外氣溫等條件來決定.因此要降低引擎水溫要從電子節溫器下手.



http://www.meeknet.co.uk/e31/M62B44_Engine.pdf

http://www.meeknet.co.uk/e31/BMW_M60_M62_M62TU_Engine_Cooling_System.htm

M62TU電子節溫器改裝有以下幾種方式

1.節溫器檔片上打小孔

傳統的作法對降低水溫相當有效,缺點是冷車水溫上升慢,氣溫低或長時間低負載水溫會大幅低於正常工作溫度.

2.拆解電子節溫器取出"水龜"改用M60引擎節溫器

http://www.ebay.com/itm/80-C-Thermostat-kit-BMW-E39-540i-535i-E38-740i-735i-X5-M62-Reduce-temperature/172490810117?_trkparms=aid%3D111001%26algo%3DREC.SEED%26ao%3D1%26asc%3D41376%26meid%3Df5c10278a9b641e3b71ad81775df7cfa%26pid%3D100033%26rk%3D8%26rkt%3D8%26mehot%3Dpp%26sd%3D351763561239&_trksid=p2045573.c100033.m2042

需購買改裝套件及M60引擎節溫器,需要少許加工.缺點是價錢高

3.拆解電子節溫器取出"水龜"改用E31 850水龜(11531742964)

https://www.youtube.com/watch?v=0bz0vyrWYyA

http://www.ebay.com/itm/Original-BMW-Thermostat-85CEL-8er-E31-840Ci-EF71-EF81-M62-11531742964-OEM-/201793080929?epid=1314745000&hash=item2efbce0e61:g:3ZwAAOSw4DJYhz5y

E31 850節溫器料件不易取得是最大的問題.

4.將Water Pump總成連同節溫器皆改成M60引擎的零件

http://blog.xuite.net/sld1026/twblog/159936353-BMW+E38+M62+%E5%BC%95%E6%93%8E+%E9%9B%BB%E5%AD%90%E7%AF%80%E6%BA%AB%E5%99%A8+%E6%94%B9%E7%82%BA%E5%82%B3%E7%B5%B1%E5%9E%8B

需要切管鏜孔加工,一般保養廠應該無法完成.優點是未來更換節溫器很便宜.

5.以E38 740d節溫器替換BEHR TI 32 88(11512248542)

https://www.buycarparts.co.uk/oen/11512248542

該料件是傳統機械式88度節溫器,外觀與M62TU節溫器幾乎一模一樣但沒有加熱器插座.重點是直上完全不需修改加工.不過這個料件只能從歐洲取得,價格也比M62TU節溫器高一些.

6.以溫度開關取代DME控制電子節溫器



比打孔的方式好,冷車水溫上升不受影響,氣溫低或長時間低負載水溫只會略低於正常工作溫度.溫度開關為機械式無故障疑慮,工作穩定性極佳且改裝成本低.

7.以微電腦讀取水溫控制電子節溫器






https://modbmw.com/thermostat-mod-m62/

可達到完全控制目標溫度,缺點是系統架構較複雜且需要軟硬體開發測試.




2017年6月15日 星期四

BMW 供油適應數值


BMW 供油適應數值 Adaptation Mixture Additive & Multiplicative

一般外廠診斷電腦中文翻譯是
Adaptation Mixture Additive - 汽缸組(1/2)混合器加法自適應(怠速)
Adaptation Mixture Multiplicative - 汽缸組(1/2)混合器乘法自適應(部份負荷)



引擎運轉期間 DME 電腦會透過增加或減少噴油嘴噴油量來維持空燃比在14.7. 因此供油量一直隨著引擎的負載及時間在不停的變化. Adaptation Mixture Additive & Multiplicative 就代表著某個時間點供油的狀態.

Additive 數值代表 怠速 時噴油嘴 增加/減少 噴油的時間(毫秒)
Multiplicative 數值代表 運轉行駛中 噴油嘴 增加/減少 噴油的百分比

參考以下連結了解什麼是 Adaptation Mixture Additive & Multiplicative
http://bmwpapago.pixnet.net/blog/post/17816845-additive(ltft)-%26-multiplicative(stft)%E6%98%AF%E5%95%A5%E6%9D%B1%E6%9D%B1

M62TU引擎正常的 Additive & Multiplicative 數值範圍如下

Additive : -0.3 to 0.3 ms
Multiplicative : -20 to 20%

參考來源 :
http://www.farsightlive.com/blog/actual-dme-set-point-values-for-bmw-known-good-scan-tool-data-from-bmw

另一種說法是

Additive : -2 to 2 ms
Multiplicative : -10 to 10%

Additive adaptations are idle mixture and are expressed as a increase or decrease of injector pulse width. The tolerance is +-2ms.
Multiplicative adaptations are for cruising RPM and are expressed as a percentage of increase or decrease of the injection “TI” signal. The tolerance is +-10%

在數值範圍都算是正常, 超過DME限制的數值範圍則會產生故障碼.
另外原則上兩列汽缸的數值應該接近(例如1%內)

造成供油適應數值不正常的可能原因
1.進氣歧管漏氣
2.空氣流量計髒污或故障
3.進氣阻塞(空氣過濾網髒污)
4.含氧感知器老化或故障
5.燃油壓力不正常
6.噴油嘴阻塞或洩漏
7.觸媒破損或阻塞
8.排氣管頭段漏氣
9.水溫過低

Reference :
https://www.google.com.tw/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiapKvlvL_UAhVIfLwKHUHDDrUQFgghMAA&url=http%3A%2F%2Fthebimmerpub.com%2Fpdf%2F2012%2F10oct%2F1210-tbp.pdf&usg=AFQjCNFq3ati68IILWsnuljbkavIy1kZFw&sig2=BUr6S1MnfEUEel2mjSk8YA

關於供油適應數值的討論
http://forum.e46fanatics.com/showthread.php?t=913034&page=2

主要是說 Adaptation Mixture Multiplicative 數值超過 +/-3% 且小於 DME 限制的數值範圍, 對 DME 來說是在正常工作範圍沒錯但不是在最佳的狀態, 只是 DME 還能夠透過供油量修正讓空燃比維持在 14.7, 但這代表有潛在的問題.


2017年3月23日 星期四

DIY E38 座椅占駐故障維修

副駕駛座椅下有一組壓力感測器用來判斷是否有乘客坐在椅子上. 當車輛發生意外撞擊時電腦會據此來決定是否引爆安全氣囊,若無乘客時可減少不必要的安全氣囊損耗.另外當有孩童坐在副駕座椅上由於壓力不夠也可避免安全氣囊引爆造成兒童更大的傷害(20年前還沒有兒童不可坐前座的規定).車老了時間久了很多車輛上的壓力感測器都已經故障,在儀表板右下方會出現所謂的懷孕紅燈.



根據國外其他論壇的討論,在發生事故時壓力感測器故障則安全氣囊還是會被引爆但若因此造成傷害該責任不屬於BMW,這也是儀表板特別有個燈號來顯示該故障的原因,一切都是安全考量. 也有人認為這是over design (過度的設計). 當然還是要再次強調兒童及安全座椅都不該擺放於前座.


正確的維修方式是從車上拆下整張椅子並分解皮套與座椅泡綿然後取出壓力感測器並更新.




參考以下連結
http://www.bimmerfest.com/forums/showthread.php?p=6771057

不過這工程浩大,壓力感測器也不便宜,考量車輛價值及用車情境一般的作法就是以一個等效電路來取代這個壓力感測器.

參考以下連結
http://m3forum.net/m3forum/showthread.php?t=296845

材料需要兩個電阻及一個二極體
150歐姆 X 2
1N4001 X 1





一般會剪下壓力感測器端的接頭焊接這個等效電路, 我採取的方式是不剪線用一般的杜邦接頭直接插到電腦端再用束線帶固定.


電腦及接頭位於副駕駛座下方椅背下, 可由後座伸手觸及不需要拆副駕椅子.

參考以下連結中的圖片
https://www.bimmerforums.com/forum/showthread.php?1640751-D-I-Y-E38-Occupancy-Sensor-Bypass-Module

用手就可以拆開接頭,將等效電路插上電腦端接頭,注意藍線白線勿插反,接著用束線帶固定不拖陲即可.已無作用的壓力感測器的接頭也同樣用束線帶固定.





最後還需要插診斷電腦消除AIRBAG的故障碼,若再次讀取故障碼不再出現座椅占駐就成功囉