SBC好燙!加個風扇吧!

一開始用 Banana Pi 架設 WordPress 的時候,因為散熱的考量,所以沒有使用手上效能較好的 banana pi m2 plus (cortex A7 quad core 1.34GHz),先使用了就算夏天35度高溫 CPU 也只有40多度的 banana pi (cortex A7 dual core 1GHz),而且不用加散熱片!但用了一陣子覺得速度實在太慢了,上傳圖片或是儲存文章都等很久,於是把目標轉移到火熱的 m2 plus。

雖然之前我把它當 android 機上盒,但他跑 android 也蠻頓,算然有放散熱片,還是很容易熱當,於是讓他退役。現在又燃起讓他回歸之心。

首先一樣用 Armbian 裝 docker 讓他起 WordPress 和 MySQL container。在安裝的時候 cpu 溫度不斷飆升,有時還被限制只能使用一核心,最後待機溫度落在65 ~70附近,那時候室溫約莫27、28度。

想說讓他先跑一段時間看看,結果才沒一個小時就熱當,穩定性超差!研究 Armbian 論壇發現,banana pi m2 plus 其實是抄 Orange pi,但不知道是為了 cost down 還是什麼原因,沒有使用 programmable voltage regulator,導致 CPU 降頻的時候電壓依然在 1.3v,沒有跟著往下調,所以待機溫度才降不下來。

SBC好燙!加個風扇吧!
怎麼可以不降電壓啦!出處

為了能夠使用,勢必要為他加裝風扇做主動散熱。於是我特地到以前唸研究所時最常跑的今華電子材料行,尋找改裝零件。

最後帶回一個 7cm 12v 風扇,一個風扇鐵網,和兩長一短的銅柱,總共101 元,還在預算範圍內。立刻回家進行改裝!

SBC好燙!加個風扇吧!

我的想法是,利用之前購買的外殼。去掉上方的透明壓克力片,找螺絲孔間距接近主板上銅柱距離的風扇,先用小銅柱延長原來的高度,避免風扇葉片打到散熱片,然後再用螺絲直接鎖入。

由於主板另一側為了避開網路孔等接頭,所以銅柱開孔位置不一樣,我打算使用一根較長的銅柱直接撐在右下角的電源孔上面,另一頭與風扇鎖住,這樣就有三個支撐點可以讓風扇架上去。

SBC好燙!加個風扇吧!
最上面兩個孔剛好對到 7cm 風扇,下面兩個就對不到了

先試裝看看,看起來頗 ok。

SBC好燙!加個風扇吧!
長銅柱直接撐在電源孔上
SBC好燙!加個風扇吧!
從另一個角度看,左邊就是直接稱在電源孔的銅柱,右邊是利用原來的銅柱,再接上短銅柱延長高度,讓風扇與散熱片有足夠的距離

風扇電源的部分,主板上的 20 pin 有 5V 和 GND 可以使用,雖然購買的風扇是 12V,但硬接也只是轉速較慢而已,沒差。

試著直接把風扇插頭插上去,可以插,但是 3 pin 風扇的針腳定義依序是 5V (red)、轉速信號 (yellow)、GND (black)。20 pin 的部分從右上角開始為 2、4、6、8 pin ,分別是 5V、5V、GND、GPIO15。

SBC好燙!加個風扇吧!
banana pi m2 plus 的 40 pin connector 定義和 raspberry pi 一樣

如果直接從 2 pin 開始嘟上去的話,轉速訊號會對到 4 pin 也就是 5V,我上網查了一下,一般轉速訊號風扇端是 open drain 設計,如果導通的話會拉到 GND,這樣一定會 short。

SBC好燙!加個風扇吧!

所以我想從 4 pin 開始嘟,調換原來插頭的轉速信號和 GND 的位置,讓轉速訊號去對接 8 pin,反正沒有使用沒差。

SBC好燙!加個風扇吧!

風扇插頭一面有小孔,用一字起頂一下,電線就可以拔出來,掉換位置後再插回插頭,就完成調換,可以完美接上主板了!

SBC好燙!加個風扇吧!
插頭一面會看到三個金屬點,用一字起壓下去,就可以把整條電線拔出來
SBC好燙!加個風扇吧!
接頭改造完直接插上去主板

啟動後測一下待機溫度,在室溫 25 度下平均落在 34 度左右,降溫非常多!

SBC好燙!加個風扇吧!

上網找了這個 python script stress 一下 CPU,最高溫來到 57 度,完全落在可接受範圍內。

Banana Pi 好燙!加個風扇吧!
#!/usr/bin/env python
"""
Produces load on all available CPU cores

Updated with suggestion to prevent Zombie processes
Linted for Python 3
Source: 
insaner @ https://danielflannery.ie/simulate-cpu-load-with-python/#comment-34130
"""
from multiprocessing import Pool
from multiprocessing import cpu_count

import signal

stop_loop = 0


def exit_chld(x, y):
    global stop_loop
    stop_loop = 1


def f(x):
    global stop_loop
    while not stop_loop:
        x*x


signal.signal(signal.SIGINT, exit_chld)

if __name__ == '__main__':
    processes = cpu_count()
    print('-' * 20)
    print('Running load on CPU(s)')
    print('Utilizing %d cores' % processes)
    print('-' * 20)
    pool = Pool(processes)
    pool.map(f, range(processes))

因為只用 5V 去推 12V 的風扇,所以他沒有全速運轉,幾乎聽不到風扇聲,整體改裝結果還不錯!只需要定期清理一下灰塵就可以了!

SBC好燙!加個風扇吧!
附送的螺絲太短了,沒辦法同時鎖住風扇鐵網,只好用膠帶土炮黏一下

延伸閱讀:
Raspberry Pi 當機自救!為他開啟 Watchdog 吧!
十分鐘架設自己的 VPN server

參考資料

Simulate CPU load with Python
Quick review of Banana Pi M2+

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。