前情提要

能用程式讀取 CPU 及 SSD 溫度後,再來我需要一個可控制的外部冷卻裝置。依我的技能樹ESP 開發板(延伸閱讀:也來玩物聯網:窮人的原子彈 - ESP 開發板)自然是控制單元的首選,至於冷卻裝置,翻箱倒櫃找到我第一代工作機 XPC 留下的風扇,廢物利用先。

thumbnail

散熱風扇有兩種,右邊的插頭有三條線,分別是接地、12V、轉速偵測;左邊插頭有四條線這種比較高級,多出的藍線支援 PWM 訊號控制轉速。前者只能用電壓控制轉速,PWM 風扇則能細部調節不同轉速,差不多是傳統馬達跟直流變頻馬達的差別吧。

題外話,現代主機板很多有提供 PWM 風扇插座,還能在 BIOS 指定不同溫度下的風扇轉速(如下圖),在降溫效果與噪音間取得平衡(這也是我本次要達成的目標),想用溫控風扇但不想 DIY 的同學可以玩看看。


圖片來源

回到自己控制 PWM 風扇這件事。我研究了一下,要控制轉速調節風力強弱,ESP 開發板需要產生一個 25KHz 的 PWM 訊號送到風扇的 PWM 控制線,依升降波形中高電位跟地電位的比例控制轉速。用示波器觀察到的 PWM 訊號會像這樣:

共有三個重點,頻率為 25KHz (每秒 25000 次上升再下降),高電位狀態與低電位狀態所佔的比例決定轉速(高電位低電位各 50%,轉速降一半)。另外,雖然我查到風扇規格說 PWM 訊號高電位只需 3V ~ 5.5V (頻率 18KHz ~ 30KHz 均可,但一般慣用 25KHz),我實測用 ESP 輸出的 3.3V 無法控制轉速,最後加了一個 NPN 電晶體將 3.3V 訊號放大成 5V 才成功。

以下影片示範用 ESP32 開發板產生定高低電位不同比例的 PWM 訊號:

示範 ESP32 產生 25KHz PWM 訊號

除了,PWM 訊號,我順手也做了偵測轉速功能。它的原理是風扇每轉動一圈,轉速訊號線(Tachometer Output Signal)會出現兩次電位升降,將其接到 ESP32 指定的 PIN 腳,Arduino API 有個 attachInterrupt() 可在 PIN 腳每次電位上升或下降時執行指定的程式(計數器加一),透過每秒觸發次數推算 RPM (每分鐘轉幾圈)。一開始我直接訊號線接 ESP PIN 腳沒效,找到某風扇廠商給的佛心文件,詳細解釋 PWM 控制跟轉速偵測做法,看了文件才知要電阻串接 Vcc,並確保流入的電流小於 5mA,我串接電阻後便順利讀到值。後來想到,其實將接訊號 PIN 腳 pinMode 設成 PULLUP 用內建的上拉電阻應該也成(ESP32 開發板上並不是每個 PIN 都支援 PULLUP,眉角很多呀),但不知是否內建上拉電阻的阻值 50K 參考 不合,測試數字偏高(示波器觀察到方波有雜訊,可能因此誤觸發增加計數),我的電子知識不足以排除問題,乖乖自己接 10K 或 1K 上拉電阻解決。

另外,我手上這款風扇有最低轉速,即使 PWM 佔比為 0%,轉速降到 1250 RPM 就不會再下降(全速運轉時為 3800 RPM,風力超強),而沒送 PWM 訊號時全速運轉,因此 ESP32 斷電或開機期間會開全速爆吵。我決定加了一個 MOS 開關,ESP32 開機正常執行時才供電 12V,而當 PWM 調為 0 時也切斷 供電讓風扇完全停止。

ESP32 控制 PWM 風扇

PoC 完成後,用麵包板先拼裝了一個暫用手動控制版本把原本有點吵的手持小風扇換掉。發現 1% 1300RPM 以下,溫度就能壓在 35 度以下,這樣的話,可能久久動一下風扇就能應付日常使用的需求。

thumbnail

順手斜槓一下,用 Fritzing 把配線圖畫出來,網路上可以找到網友分享的零件檔,連 MOS 開關模組跟 PWM 風扇都找得到,很酷! 感覺又是另一個瀚浩的世界。

再來的進度是在 ESP32 上架個小網站,接受 PC 端程式送來的 SSD 跟 CPU 溫度訊號,決定風扇轉速。再來要買個 12V 轉 5V 的降壓模組,從 12V 對 ESP32 供電才不用多出一條線要插到電腦。而要長期使用,應該把 ESP32 跟零件焊在萬用板再 3D 列印外殼整合到風扇本體,做成一個插 12V 供電,內建 WiFi 控制 API 的智慧型散熱風扇,感覺會很有趣,呵。


Comments

# by 宇信

其實,建議黑大 可以開始考慮打樣成電路板了 這樣也比較穩定,我個人是建議用開源的 Kicad,再找工廠打樣

# by Jeffrey

to 宇信,印電路板感覺又是另個深不見底的坑,遲遲不想跨出第一步,哈

Post a comment