資料介紹
描述
簡介
我更喜歡安靜和平靜的環境。這就是為什么我更喜歡從 BBC Radio 4 或 Classic FM 收聽更柔和的廣播。這就是為什么我喜歡 Elecraft 和 Ten-Tec 的 PIN 二極管裝置上的完全磨合 CW。這就是為什么我為 macOS 運行 Mac Mini 和為 Windows 運行無風扇工業 PC 的原因。
通常情況下,設備冷卻和設備噪音齊頭并進。需要的冷卻越多,需要的氣流就越多,產生的風扇噪音就越大。但是,風扇選擇和安裝選項將有助于減輕這種噪音。智能風扇冷卻系統也將控制風扇速度。
該項目是一個單元的分支,該單元的目的是在炎熱氣候下冷卻通信套件。需要監控和冷卻設備,同時將噪音水平保持在低水平。它適用于冷卻假負載、電源、計算機、照明……
計劃
尋找解決方案后發現,廉價的中國單板控制器僅提供了一種簡單的風扇曲線解決方案。這些控制器只是根據風扇速度跟蹤溫差。可以修改的參數不多。在天平的另一端,有復雜的冷卻控制器系統可用于游戲電腦,使用 PC 軟件。這些是完全可配置的系統,能夠平衡所需的冷卻性能與產生的聲級。
很難找到中間解決方案。介于簡單的獨立板和 PC 使用的復雜系統之間的一種。因此,設計了一個嵌入式系統來滿足我的要求。從簡單開始,然后根據特定需求構建設計。該項目很快就包含了一些易于定制的功能,這些功能可以根據個人溫度和風扇速度要求進行設置。
特點
兩個風扇控制器。
從 0% 到 100% PWM 的全風扇速度控制。
溫度感應范圍為 0 至 +120degC(32degF 至 248degF)。
風扇轉速計讀數為每分鐘 9999 轉。
顯示風扇和溫度信息的 OLED 顯示屏。
風扇 PWM 命令條形圖(10% 間隔)。
旋轉編碼器操縱配置菜單。
定義溫度范圍,從最小值到最大值。
定義風扇速度范圍,最小到最大。
三個輔助 Fan-B 工作選項:
a) 主風扇 A 與輔助風扇 B 串聯運行(對稱)。
b) 主風扇 A,次級風扇 B 在對面運行(不對稱)。
c) 主風扇 A 和輔助風扇 B 配置為熱備用。
聲音風扇 A 故障或停止警報。
夜光風扇-A 停機報警。
發光的 +12V 和 +5V 電源 LED。
配置設置保存在 EEPROM 中,用于斷電恢復。
用于設置溫度單位(攝氏度或華氏度)的配置標頭
用于設置對稱、非對稱或熱備用模式的配置標頭。
隔離的外部 P 輸入,用于啟用/禁用輔助設備的操作。
主風扇 A 故障檢測,用于在熱備模式下切換到風扇 B。
用于調試和固件上傳的串口。
KF2510 3+1P,風扇連接器插座。
易于訪問的板載復位開關。
兩個版本
設計了兩個版本。兩者功能相同。但是,每個版本的創建都是為了滿足個人需求和構建技能。
屏蔽版本:這是最容易構建的,因為 Arduino 板已經處理了一半的功能。防護罩就像任何標準防護罩一樣連接到 Uno R3 板上。它以驚人的緊湊封裝提供了運行所需的其余電路。構建屏蔽版本更簡單,但您仍然應該能夠處理它使用的 15 個 0805 SMD。代碼上傳更易于管理,并且像往常一樣通過 USB 串行端口使用 Arduino IDE 執行。
嵌入式版本:這是圍繞 Atmega 328P-AU 微控制器構建的,具有獨立獨立單元所需的所有電路。構建復雜性更大。您應該具備并精通SMD項目建設。請注意,您還需要熟悉 ICSP 端口。將代碼上傳到微控制器內存,至少在開始時,如果你愿意,直到你刻錄引導加載程序。
手術
此代碼是根據需要即時構建的。它從一個簡單的溫度跟蹤風扇速度實用程序迅速發展為這個可定制的版本。毫無疑問,還有其他編程方法可以實現所需的功能。就是這樣。無論如何,我的代碼可以很容易地糾正、修改和改進,以使每個人都滿意。
啟動順序
在通電或重置時,該裝置會等待幾秒鐘,讓仍在旋轉的風扇停下來。所需的延遲可能取決于風扇旋轉的難易程度及其動量。可以通過修改變量 spinDownDelay 在代碼中定義延遲。
然后代碼運行一個啟動序列,該序列將首先測試風扇以找到其最小速度值。這個會用在運行過程中的停機檢測fanJamCheck()函數中。此序列向風扇發送遞增的 PWM 值,比例高達 20:100 (20%)。到那時大多數粉絲都會開始。在最終啟動主代碼和其中一種工作模式之前,它的進度會顯示在 OLED 上。下面列出并解釋了這些可選擇的工作模式中的每一個。
兩種基本的風扇模式是可能的:
首先,被動上下掃描模式僅遵循由 Fan Minimum 和 Fan Maximum 定義的定義曲線斜率。可以配置此掃描的速率,但不使用溫度傳感器數據來控制風扇速度。
其次,主動觸發模式可激活風扇并根據溫度最小值、溫度最大值、風扇最小值和風扇最大值定義的曲線斜率控制其速度。有兩種類型的主動觸發模式。第一個子模式僅采用傳感器溫度輸入來控制冷卻風扇。第二種子模式采用傳感器溫度輸入,但也需要輸入電壓 (P-IN) 來啟用冷卻風扇。這可以與輔助設備一起使用,僅在輔助設備認為有必要時才觸發風扇控制器。
滾動瀏覽下面的圖形,例如配置的斜率:
1 / 5 ?三次掃描。每個被動地增加/減少風扇速度。不使用溫度讀數。
總之:
一種被動清掃模式:
此處,風扇速度將在之前由 Fan Minimum 和 Fan Maximum 定義的風扇速度斜率上上下掃動。不使用溫度讀數,但可以更改掃描速率。
兩種主動觸發模式:
此處風扇將在達到最低溫度時觸發,并且僅當啟用 P-IN 輸入時。
在最低溫度下觸發:
a) 從零風扇速度開始(風扇關閉直到被觸發)。
b) 從風扇最小速度開始(風扇以風扇最小速度旋轉直到被觸發)。
在最低溫度時觸發,但僅當 P-IN 輸入也啟用時才觸發。
a) 從零風扇速度開始。(風扇關閉直到觸發)。
b) 從風扇最小速度開始(風扇以風扇最小速度旋轉直到被觸發)。
通過滾動顯示的示例溫度/風扇速度圖表,可以最輕松地看到這些風扇模式以及它們與速度和溫度的關系。
配置
定義裝置的工作方式以及所需的冷卻斜率是在配置模式下完成的。本質上是通過在圖表上定義點來獲得我們想要的斜率。我們可以通過按下旋轉編碼器按鈕進入此模式。然后滾動瀏覽配置菜單,連續按下同一個按鈕。在每個參數處轉動旋轉編碼器以修改其值,從而定義新的操作模式或溫度斜率。
配置菜單:
FAN MIN
設置最小風扇速度值(5% 步幅)。
FAN MAX
設置最大風扇速度值(5% 步幅)。
TEMP MIN
設置最低溫度值,這將觸發風扇至 Fan Min。
TEMP MAX
設置最高溫度值,此時風扇將以 Fan Max 旋轉。
MODE
掃描或觸發
要設置一個被動的上下掃風扇速度。或者主動跟蹤來自 DS18B20 傳感器的溫度數據的觸發風扇速度。
SWEEP RATE
(如果之前選擇了 Sweeping 則可用)1/Slow 到 10/Fast。選擇風扇速度從風扇最小值掃到最大值的速度。
TRIGGER
(如果之前選擇了 Triggered 則可用)
1 溫度/零。溫度從零開始。將在 Temp Min 觸發并開始以 Fan Min 速度旋轉。未觸發時,風扇速度將等待為零。
2 溫度/F最小值。風扇最低溫度觸發。將在 Temp Min 觸發并開始以 Fan Min 速度旋轉。未觸發時,風扇速度將在風扇敏處等待。
3 針/零。溫度從零觸發,但需要外部 P 輸入啟用。將在 Temp Min 觸發并開始以 Fan Min 速度旋轉,但僅當由 P 輸入啟用時。未觸發時,風扇速度將等待為零。
4 針/F 最小值。最低風扇觸發溫度,但需要外部 P 輸入使能。將在 Temp Min 觸發并開始以 Fan Min 速度旋轉,但僅當由 P 輸入啟用時。未觸發時,風扇速度將在風扇敏處等待。
TEMP OFFSET
-9 至 +9 度。要校正 DS18B20 傳感器的任何溫度誤差,可以添加此補償值。默認為 0 度,表示不進行校正。
SAVE & EXIT
Yes/No.Yes,將退出配置模式并伴有相應的莫爾斯“R”音和簡短的“配置已保存”消息。您的設置將保存到 EEPROM。否,將再次循環配置選項。
由于 FAN MIN 和 FAN MAX 的值是相互依賴的。不可能將 FAN MAX 值設置為低于 FAN MIN 值或將 FAN MIN 值設置為高于 FAN MAX 值。同樣,TEMP MIN 和 TEMP MAX 的值是相互依賴的。無法將 TMP MAX 值設置為低于 TEMP MIN 值或將 TEMP MIN 值設置為高于 TEMP MAX 值。
該代碼限制了您可以設置的允許范圍。例如,如果您不能選擇較低的 FAN MAX 值,可能是因為您試圖將其設置為低于 FAN MIN 值。
初始設置
安裝單元后,以下選項應該很少需要更改。它們通過使用兩個插頭引腳跳線進行配置,其設置在打開或重置時讀取。
1. 使用跳線 J1/U2 的輔助 FAN-B 設置:
ASYMetric:輔助風扇 B 將以主風扇 A 的相反速度旋轉。因此,當風扇 A 處于最大速度時,風扇 B 將處于最小速度。這些風扇速度將動態地遵循 Fan Min 和 Fan Max 定義的溫度斜率。
SYMMetric:輔助風扇 B 將與主風扇 A 同步旋轉。因此,當風扇 A 處于最大速度時,風扇 B 也將處于最大速度。這些風扇速度將動態地遵循 Fan Min 和 Fan Max 定義的溫度斜率。
STandBY:輔助風扇 B 作為主風扇 A 的備用風扇,處于熱備用狀態。因此,風扇 B 通常會保持關閉狀態,直到風扇 A 卡住或發生故障。在 Fan-A 故障時,Fan-B 將接管。
2. 使用跳線 J2/U1 設置溫度單位:
degF:華氏溫度。在美國、利比里亞和開曼群島使用。
degC:攝氏溫度。與世界其他地方使用的一樣。
積木
單片機:
我們不需要 ESP8266 或 ESP32 中的處理能力或附加功能。Arduino 平臺及其 ATmega 328P 芯片具有足夠的速度、內存空間和 GPIO 引腳。
當然,和原來的Arduino UNO R3一樣,嵌入式電路中使用了一個ATmega328P微控制器。該微控制器提供32K的閃存、2K的SRAM和1K的EEPROM存儲。它的 16Mhz 時鐘速度足以運行我們的中等任務,并且它有足夠的輸入/輸出引腳來滿足我們的需要。
選擇了AU芯片封裝。與大型 PU DIP 版本相比,它更小、更便宜且更容易采購。它是小型嵌入式板應用的理想選擇。然而,在構建或測試時也不會太小而無法處理。在原型制作過程中,使用 QFP/TQFP32 芯片適配器將此 Atmega 328P 安裝在面包板上。無腿 MU 版本雖然更小,但更難處理。
溫度感應器:
Dallas Semiconductor DS18B20 可能不是最精確的溫度測量儀器,但足以滿足我們的使用需求。它測量的溫度范圍為 -55degC 至 +125degC(-67degF 至 +257degF),-10°C 至 +85°C 的精度為 +/-0.5degC。
出于我們的目的,代碼將溫度范圍限制在 0degC 到 120degC(32degF 到 248degF)。超出此范圍,它將在溫度值旁邊顯示一個超出范圍 (OOR)“感嘆號”圖標。該值將在 0degC 和 120degC(32degF 和 248degF)處觸底。
明智地使用熱風槍可用于測試較高的溫度,一些電子元件冷凍噴霧可用于測試較低的溫度。雖然我用的是迪卡儂運動員肌肉噴霧,這是我手頭上的東西。它同樣有效,而且聞起來更香。
1 / 2 ? DS18B20 引出線。
DS18B20 的三引腳 TO-92 版本可能是最容易使用的封裝類型。帶有 LED 的上拉電阻通過傳感器的數據線連接到 Vdd 可改善數據傳輸并提供傳感器與微控制器通信的一些視覺反饋。在這里,一個 2K 的電阻器可以很好地使 LED 閃爍。一些套件模塊在這里使用 4.7K 值。這取決于特定 LED 上的電壓降和所需的亮度。
有機發光顯示:
使用小型 0.91" OLED。它具有 128 x 64 像素的可用分辨率,當與 Bill Greiman 的 SSD1306 庫和“fixed_bold10x15”字體一起使用時,提供兩行,每行約 12 個文本字符。這些 OLED 顯示器有一個I2C 總線,完美適配我們的微控制器。所需的+5V 供電電壓與板的其余部分相同,很方便。一些 OLED 板指定+3.3V 供電電壓要求,這可以通過查看是否有來檢查或者還不是+3.3V穩壓器。我的板上有一個微型662K低壓差+3.3V穩壓器,確認它接受+5V,然后它自己轉換為+3.3V。至于I2C邏輯電平輸入,他們可以承受 +5V,我不需要電平轉換器。
SSD1306Ascii 是 Bill Greiman 編寫的用于小型單色 OLED 顯示器的無緩沖字符庫。我經常在使用帶有 fixed_bold10x15 字體的 OLED 的項目中使用它。它為我在這些小顯示器上疲憊的眼睛提供了可讀的字符大小。對于這個特定項目,FAN_fixed_bold10x15 文件是字體的修改版本,我在其中添加了一些用于風扇控制器的額外圖標。這個字體文件可以包含在同一個草圖目錄中,并添加到 Arduino IDE 中以便于編輯。
1 / 2 ? IDE 中的 FAN_fixed_bold10x15
FAN_fixed_bold10x15 是 fixed_bold10x15.h 字體,已通過添加風扇控制器的 OLED 顯示屏使用的額外字符進行了修改。對這種字體進行逆向工程以創建自定義字符和圖標將在后面詳細介紹。
光耦:
PC817C 是一種通用光耦合器,在許多電路中大量使用,以提供與輔助設備的電氣隔離。此組件存在幾個版本。這里使用了“C”后綴版本。不同的版本有不同的收獲。光耦合器的增益表示為電流傳輸比 (CTR),即輸出的集電極電流 (IC) 除以輸入的正向電流 (IF),然后乘以 100%。您可以通過計算和更改電阻器 R3 的值以適應不同的增益來使用其他版本和測試功能。
在此版本中,計算出的 1K 電阻值運行良好。一些測量測試證實了理論:5V、9V、12V 和 13.8V 的 P-IN 電壓分別產生 3.8mA、7.8mA、10.8mA 和 12.6mA 的電流。這些被認為是最有可能使用的輔助輸入電壓。由于該光耦合器的內部 LED 電壓下降約 1.2V,因此它們各自產生相應的功率值,約為 4.5mW、9.4mW、13mW 和 15mW。查看數據表,我們允許的最大輸入值為 If=50mA、Vr=6V 和 Pin=70mW。放置在輸入 LED 兩端的 1N4148 用于防止 Vr 高于 6V。允許的最大輸出值為 Vce=35V、Vec=6V、Ic=50mA 和 Pc=150mW。MCU 的內部上拉似乎是 50k 左右,因為這里測量了 0.1mA。對于此光耦合器,Ptot=200mW 最大值(輸入和輸出功率的總和不得超過 200mW)。
可以按照類似的數據表建議使用其他光隔離器。或者,您可以通過取消光耦合器隔離并僅將使能 P-IN 拉低來簡化電路。MCU 的端口 B0 在代碼中激活了其內部上拉電阻。
串行端口:
UNO R3 板上已經安裝了串行端口。這用于以經典的 Arduino 方式上傳和調試。
我還在獨立版本中包含了一個串行端口。這 6 個接頭引腳與大多數 FTDI FT232RL USB 轉串口適配器模塊完美對齊。如果有可用的引導加載程序,它還允許使用 Arduino IDE 進行調試,甚至可以上傳草圖。不要忘記將 FTDI USB 串行板切換為使用 +5V(而不是 +3.3V)。對于 USB 到串行編程和調試,風扇控制器當然應該打開。引導加載程序包含在 ATmega 數據表的第 26.6 節中。
安裝了 FTDI FT232RL USB 轉串口適配器。
ICSP 端口:
UNO R3 板上已經安裝了一個 ICSP 端口。這是直接將代碼直接燒錄到其微控制器內存所必需的,我們很少使用。這可能是制造商將 Arduino 引導加載程序燒錄到 UNO 的方式。
我還在嵌入式版本中包含了一個 ICSP 端口。這是最初將引導加載程序刻錄到獨立版本的唯一方法。這些 3x2 接頭引腳與大多數常見的 ICSP 編程器(如 USBasp)完美對齊。它允許直接加載 ATmega 328P。對于 ICSP USBasp 編程,風扇控制器應該斷電,因為像 USBasp 這樣的大多數編程器會為其目標本身供電。
安裝了 ICSP USBasp 編程器。
請注意,一些較舊的 ICSP 編程器需要來自其目標的電源才能運行,在這種情況下,風扇控制器單元應該通電。有些可能只需要查看 ICSP 引腳 2 上的電壓即可運行。你的旅費可能會改變。始終最好檢查您的特定程序員。
不要忘記將此板切換為使用 +5V(而不是 +3.3V)。ATmega 數據表的第 27.8 節介紹了芯片的在線串行編程。
轉速計噪聲濾波器:
來自風扇的 RPM 引腳 3 的轉速計線路上的任何噪音都可能是一個問題并給出錯誤的讀數。這種噪聲可能是像脈沖一樣的額外開關彈跳。盡管通常使用采用霍爾傳感器或光耦合器的轉速計電路而不是機械開關。
以低 RPM 運行且存在這些噪聲脈沖的風扇在評估實際 RPM 值時會產生更大的差異。
例如,在低速時,風扇可能會在 1 秒內發出大約 8 個脈沖。這 8 個脈沖等于 4 轉/秒,因為風扇每轉發送兩個脈沖。因此,4 轉/秒是每分鐘 240 轉(4 轉 x 60 秒)。由于反彈而產生的噪聲脈沖可能會產生額外的第 9 個脈沖,錯誤地等同于 270rpm(4.5revs x 60secs)。誤差約為總實際值的 12%。
在較高的轉速下,波形中的這些額外噪聲脈沖對計算正確的 RPM 值的影響較小。例如,在更高的速度下,我們可能會得到 266 個脈沖,這實際上意味著 133 轉/秒或每分鐘 7980 轉(133 轉 x 60 秒)。這里的額外噪聲脈沖總共提供 267 個脈沖,相當于 133.5 轉/秒或每分鐘 8010 轉(133.5 轉/秒 x 60 秒),這與總值的差異較小。誤差低于總實際值的 4%。這只是一個例子,因為大多數風扇以最高速度運行在該值以下。
為了減輕任何噪聲對風扇 RPM 輸出的影響,使用由 R2 和 C1(屏蔽電路)或 R7 和 C14(嵌入式版本)形成的積分器濾波器。通過一些計算和實驗,找到了合適的時間常數。1K 和 1nF 的值提供了一個合適的時間常數,以濾除風扇轉速計信號中出現的任何更高頻率的噪聲脈沖。
這已經構成了 Arduino 電源子系統的一部分。它提供穩定的 +5V,也用于為風扇控制器屏蔽供電。就其尺寸而言,它是久經考驗的堅固調節器。由不同的公司制造,很容易獲得。不同的制造商發布不同的數據表,最大輸入電壓和功耗標準略有不同。我也在獨立的嵌入式板上使用過它。
粉絲
我們需要四針、完全可控的 PWM 風扇。其他三個引腳承載電源、接地和 RPM 轉速計脈沖波形。我已經決定在包含此風扇控制器的項目中使用 Noctua 風扇。他們以沉默寡言著稱,但這并不是對他們有利的唯一特征。因為并非所有粉絲都是平等的。
當您將風扇命令為 0% PWM 時,它應該停止旋轉。并非所有粉絲都這樣做。即使在 0% PWM 下,很多也會繼續旋轉。為了完全阻止它們旋轉,需要額外的電路方法。
同樣,在 1% PWM 下,風扇應該剛好開始旋轉。事實上它不需要,因為大多數需要最小 PWM 才能開始旋轉。根據風扇型號,所測試的 Noctua 風扇開始以 6% 或 10% PWM 旋轉。下面的任何東西,它們都會完全停止。這是一個初始死區,其中風扇沒有響應并保持靜止。
不同制造商的不同風扇型號表現不同。沒有遵守的標準化。Noctua、Arctic、Xilence 和 Cooler Master 的粉絲表現各不相同。生活艱難。
在風扇 A 開始響應之前,風扇控制器將首先嘗試測量所需的最小 PMW。該代碼使用函數 findFanStopLimit() 中的變量 fanStopLimit 來在開機或重啟時查找此值。稍后它會在檢測主風扇 A 因堵塞或故障而異常停止時使用此信息。
當然,只要考慮到一些注意事項,也可以使用其他風扇品牌和型號。一些風扇永遠不會停止旋轉,即使在使用 0% PWM 信號發出命令時也是如此。有些會以 100RPM 或更高的速度旋轉,但永遠不會停止。因此,它們在啟動時檢測到的 fanStopLimit 值將始終為 0%。
我喜歡風扇在 PWM 接近 0% 時停止,所以堅持使用 Noctua。這些在我所在的地區很容易找到和訂購。可能存在其他品牌和型號,只要它們是完整的四針和 +12V 品種,它們就可以工作。
風扇有多種尺寸可供選擇。常用直徑有40mm、80mm、120mm、140mm。選擇適合您任務的風機。如果只需要一個風扇,只需將其作為主風扇 A 插入即可。
代碼
隨著時間的推移和我覺得有需要,這段代碼被構建并添加了特性和功能。我不是程序員,毫無疑問,程序流程中存在一些不必要的復雜性,類似于沙特爾的迷宮。整個代碼中散落的全局變量也必然會增加效率。就是這樣。它符合我的目的,并且不會明顯減慢操作速度。
#define DEBUG 1或0用于開啟或關閉串口輸出調試信息。您的選擇將在編譯時設置。啟用后,首先顯示的是串行端口調試 OK 消息。然后是帶有編譯日期和時間的草圖文件名。
#include "FAN_fixed_bold10x15.h"以允許使用我改編的 fixed_bold10x15.h 字體。它具有風扇控制器用來顯示模式和狀態的特殊圖標字符。它應該與風扇控制器草圖位于同一文件夾中。
需要使用 IDE 的庫管理器安裝的一些特定庫是:
OneWire.h和DallasTemperature.h用于與 Dallas Semiconductor DS18B20 溫度傳感器通信。
EEPROM.h有助于訪問微控制器的非易失性 EEPROM 存儲空間。
SSD1306Ascii.h和SSD1306AsciiWire.h使用 OLED 顯示器并訪問其 I2C 總線。
需要TimedAction.h才能在代碼中對不同的任務進行原型線程化。三個線程將偽同步運行。這些用于讀取旋轉編碼器、讀取 Fan-A 的 RPM 速度以及從傳感器讀取溫度信息。
職能:
writeConfig()和readConfig()將配置數據讀寫到芯片的 EEPROM 存儲器中。EEPROM 地址可以無限次讀取,但平均只能寫入約 100000 次。如果您每天更改配置 10 次,則相當于大約 27 年的寫入周期壽命。函數firstRunCheck()查找 key1 和 key2 的值 73 和 42。兩個任意數字。向各地的無線電愛好者和銀河系漫游指南致敬。如果未找到,則該芯片以前從未配置過,函數firstLoadOfEeprom()將使用有效的 EEPROM 值填充新的微控制器芯片。
開機或重啟時,函數findFanStopLimit()運行。這會找到主風扇 A 開始旋轉時的 PWM 值。它將此值作為 minLimit 返回給變量 fanStopLimit。此 PWM 百分比值稍后用于檢測主風扇 A 的停止或故障。
函數oneDit()和oneDah() 與oneRoger()一起使用以發出 Roger 確認“R”。它們還會產生 Fan-A 故障警報聲。這兩個函數從蜂鳴器中產生莫爾斯點和破折號的聲音。這是我直接通過位操作端口 C 寄存器完成的,無源蜂鳴器連接到 PC0 和 PC1。驅動每個輸出異相我們增加音量級別,因為我們實際上在無源蜂鳴器的壓電板上有 10V 的電位差。
這類似于出色的 ToneAC 庫的工作方式。但是,對于這個簡單的應用程序,通過直接編寫此函數的代碼,我避免了使用該庫。我們不需要它的音量和頻率控制選項,也不需要它的定時器要求。
函數encoderRead()是一個原線程,每 50 毫秒觸發一次以讀取旋轉編碼器。
使用功能menuClicked()我們檢測旋轉編碼器瞬時開關按鈕的按下。
函數valueChanged()和delimitValue()用于選擇每個配置參數的單獨值。
函數oledDisplay()用于使用自定義字體打印到 SSD1306 OLED 的兩行顯示屏。
當達到并觸發 TEMP MIN 的溫度時,函數showTempTrigIcon()會顯示一個溫度計類型的圖標。
函數tachCounter()是一個原線程,每 1 秒觸發一次以讀取來自主風扇 A 的 RPM 轉速計波形。
函數getTemperature()是一個原線程,每 3 秒觸發一次以查詢和讀取來自 DS18B20 傳感器的溫度數據。
函數triggerCheck()檢查溫度觸發器,并考慮我們是否使用 P 輸入模式以及 P-IN 接頭處是否有啟用信號。
函數fanBsetup()讀取相關跳線位置以設置次級 Fan-B 在 switch ON 時的非對稱、對稱或待機工作模式。
函數fanBconversion()計算風扇 B 相對于風扇 A 的運行速度,同時考慮非對稱、對稱或待機的當前運行模式。
函數percentToPWM()將百分比速度值轉換為適合直接饋送到定時器寄存器以進行 PWM 控制的值。這用于命令 Fan-A 的速度。
函數percentToBars()將向 Fan-A 命令的 PWM 顯示為 OLED 顯示屏上一行的移動條形圖。
函數fanJamCheck()檢查 Fan-A 的停止并在四次違規后發出信號。然后它會發出警報并閃爍紅色警告 LED。
函數stepedIncrement()和stepedDecrement()在被動清掃模式下增加和減少風扇的速度。
函數pwm25kHzSet()將 PWM 頻率設置為 25khz。需要進行此更改,因為風扇需要以 25KHz 運行的 PWM 信號,而可用的默認 Arduino PWM 頻率僅為 490Hz 或 980Hz,具體取決于所使用的引腳。
ATmega328P 有三個定時器,我們可以隨意使用。定時器是一個寄存器,它為每個時鐘脈沖遞增(或遞減)。328P 有三個,它們的使用在 delay()、millis()、micros()、Servo()、Tone() 和其他庫等函數之間兼顧。時鐘頻率取自 16MHz 晶振時鐘。該時鐘頻率可以在饋送到定時器之前由預分頻器分頻。當定時器遞增到其最大寄存器大小時,定時器將溢出。對于 8 位定時器的 timer0 和 timer2,這是 255(16 位定時器 1 為 65535)。也可以設置發生此溢出的值。我們不需要等到定時器寄存器達到 255(或 65535)時標記溢出。控制寄存器將定時器 1 配置為模式 10,無預分頻,計數為 320。我們的 16Mhz 晶體時鐘的值為 320 將為我們提供 25KHz PWM 信號。該代碼使用函數 percentToPWM() 從用戶友好的百分比風扇 PWM 值轉換它。
中斷服務程序encoderISR()用于讀取旋轉編碼器。
中斷服務程序tachISR()用于計算主風扇 A 發送的轉速計 RPM 波形發出的脈沖。
EEPROM存儲器
顯示首次開機時加載的默認值的詳細信息。
地址 0 key1 73d Dahdahdiddley...Diddleydahdah。
地址 1 key2 42d 生命、宇宙和一切。
地址 2 fanMin 10d 最小風扇速度 = 10%。
地址 3 fanMax 90d 最大風扇速度 = 90%。
地址 4 tempMin(°C) 40d 溫度最低 40degC。
地址 5 tempMax(°C) 70d 最高溫度 70degC。
地址 6 tempMin(°F) 100d 最低溫度 100degF。
地址 7 tempMax(°F) 160d 最高溫度 160degF。
地址 8 模式 1d 掃描。
地址 9 掃描速率 5d 5(中速)。
地址 10 從 0% 風扇速度開始按溫度觸發 1d。
地址11 tempOffset 0d 0度溫度校正。
地址 12 保存并退出 0d 0。
代碼的讀寫功能將跳過地址 4 和 5 或 6 和 7,具體取決于使用硬件跳線(屏蔽上的 U1 或獨立 PCB 上的 J2)選擇的溫度單位。
自定義角色
SSD1306Ascii 庫中包含的 fixed_bold10x15 字體是我的首選字體。它清晰易讀。然而,它只給我們兩行,每行大約 11 或 12 個字符來顯示任何信息。我使用自定義圖標字符在 0.91" OLED 小顯示屏上獲取更多信息。我修改了 SSD1306Ascii 庫中包含的原始 fixed_bold10x15 字體。此修改后的字體是 FAN_fixed_bold10x15。它由代碼調用,應該位于相同的位置草圖文件夾。
額外的字符會將風扇控制器代碼使用的特定圖標打印到 OLED 上。它們包括生成風扇速度條形圖、OOR 警告、攝氏度和華氏度符號、RPM 風扇旋轉符號、RPM 風扇堵塞警告、使用中的觸發模式、使用中的掃描速度和 P 輸入啟用圖標的字符。
滾動瀏覽一些顯示信息示例:
1 / 6 ? S5:以速度 5、28degC、210RPM、20%PWM 掃頻。
條形圖顯示我們命令主風扇 A 的速度,精確到 10%。這個 PWM 條形圖左邊的兩個字母顯示了我們的工作模式。底線以 RPM 為單位顯示溫度和風扇 A 轉速。超出范圍的 OOR 溫度會以“感嘆號”圖標表示。Fan-A 的任何長時間風扇停止也會在 RPM 圖標內以“感嘆號”表示。當風扇在達到最低溫度值時被觸發時,會顯示“溫度計”圖標。在 P 輸入模式下,“箭頭”圖標指示何時存在啟用信號。
1 / 3 ?風扇 A 停止:紅色警告 LED 閃爍。帶有警告圖標的零轉速。
這些都是用筆和紙設計的,然后對原始字體文件進行逆向工程和修改。每個新字符的十六進制值都是通過編輯添加到原始文件中的。
1 / 2
雙板版本盡管運行相同的代碼并且本質上相同,但下面描述的兩個板版本是完全不同的。
屏蔽上面的PCB。下面的嵌入式PCB。
屏蔽板版本
背負式防護罩版本:這款 Arduino 兼容防護罩搭載在 UNO R3 上,構成了一個非常緊湊的單元。它比嵌入式版本更容易構建和編程。如果您想輕松修改我的代碼并針對您的特定需求進行測試,這也是完美的選擇。它只有 15 個表面貼裝元件,如果您非常小心,只需用熱風槍或熱床和一些低溫焊料即可焊接。
Arduino 屏蔽板。
主要成分:
Arduino UNO R3(已有 ATmega 328P 微控制器、時鐘振蕩器、電源輸入和電壓管理、復位系統、USB 串行連接、ICSP 連接等元素)。
DS18B20溫度傳感器。
光耦PC817C。
OLED SSD1306 0、91" 顯示屏。
LED指示燈和無源蜂鳴器報警
用于菜單輸入的旋轉編碼器。
板載復位按鈕。
初始設置跳線頭。
屏蔽版電路原理:
該防護罩可整齊地連接到 Uno R3 板的頂部。它提供了一種將風扇控制器的特定電路連接到 Uno 板上已有的微控制器和子系統的簡單方法。參考屏蔽版原理圖。
Fan-A 和 Fan-B 具有獨立控制的 PWM 輸出信號,這些信號取自引腳 D9 和 D10。RPM 測速波形取自 Fan-A,通過 RC 噪聲濾波器并饋送到引腳 D2。用于計算和顯示主風扇-A 的旋轉速度。
引腳 D11 上的高電平將通過其 1K 限流電阻 R4 點亮紅色 LED4。當代碼確定主風扇 A 已卡住時,代碼會執行此操作,以發出異常信號。同樣,它將通過跨接在 A0 和 A1 上的無源蜂鳴器 SG3 發出警報。每個輸出彼此異相,從而增加了表觀音量水平。盡管如此,我還是有一個 220 歐姆的小電阻 R1 來將此處的電流降低到可接受的水平。此壓電蜂鳴器也會在開機時發出聲音,以確認配置設置已保存。
SSD1306 OLED 使用 I2C 總線。它的數據和時鐘線連接到 Uno 的引腳 A4/SDA 和 A5/SCL。可能需要也可能不需要兩個值為 5.1K 的上拉電阻 R5 和 R6。一些 OLED 板將在沒有這些的情況下運行,因為它們已經內置了這些。
旋轉編碼器 SW1 提供了一種滾動和設置我們所需配置的方法。DT 和 CLK 線由引腳輸入 D3 和 D4 讀取。按下時,瞬時開關接地。微控制器在引腳 D6 讀取該低電平以循環瀏覽菜單項。
PC817C 光耦合器 U3 在其引腳 4 上的輸出被輸入 D8。它用于將啟用信號與我們可能選擇連接到接頭 P-IN 的任何輔助設備進行光學隔離。如果光耦合器輸出側由其輸入端的內部 LED 照亮,則該值會很低。電阻器 R3 將通過輸入電平的電流限制在規格范圍內。1K 的值適用于我們期望在火腿小屋中擁有的最常見電壓。一個 1N4148 二極管可保護同一輸入二極管免受意外反極性連接的影響。如果沒有這個保護二極管,光耦合器的 LED 將無法承受超過 6V 的反向電壓。
請注意:P-IN 接頭連接與嵌入式版本不同。外部設備的使能電壓應連接到插頭的引腳 2。它的負極線,通常是輔助設備的地,連接到 P-IN 插頭的引腳 1。這在絲印上標有“1 G”。
P5 是我們連接 DS18B20 溫度傳感器的地方,確保我們尊重它的引出線。其數據線 DQ 接至引腳 D7,用作與傳感器通信的單線總線。當我們詢問和接收來自傳感器的溫度數據時,白色 LED2 將閃爍。我發現需要一個上拉電阻來確保良好的總線對話。
2K 的值給了我穩定的數據流以及我使用的 0805 表面貼裝 LED 的充足照明。可以使用更高的值,如 4.7K,但這最終取決于您選擇使用的 LED 上的壓降。這可能因制造商、型號和顏色而異。你的旅費可能會改變。
標頭 U1 在引腳 D5 的開關打開期間被讀取。如果此接頭的引腳 1 和 2 通過跳線橋接,則 D5 為低電平,代碼將使用華氏度。如果引腳 2 和 3 橋接,電路中實際上沒有任何東西。D5 的內部上拉電阻將保持高電平并使用攝氏度單位。
使用接頭 U2,我們可以選擇兩個風扇之間的工作模式。外部引腳連接到 Uno 引腳 A2 和 A3。讀取這些輸入的狀態將定義次級 Fan-B 如何與 Fan-A 一起工作。對稱(串聯)或不對稱(相反)。跳線會將一個或另一個引腳連接到中央接地引腳。如果未安裝跳線,則兩側均為高電平,輸入引腳 A2 和 A3 上均顯示為邏輯 1。然后Fan-B將在熱備模式下等待,以防Fan-A出現故障。
我在防護罩上包含了一個小型觸覺開關 SW2。這連接到 Uno 的 RESET 引腳。實際上,它與 Uno 自己的復位開關并聯,但現在被防護罩覆蓋,幾乎無法觸及。像這樣,仍然可以輕松執行重置。
為了給風扇供電,我們需要 +12V。在通過 AMS1117 將電壓調節到 +5V 為其他 UNO 電路供電之前,該電壓在桶形連接器處輸入。對于風扇,我們必須始終在這個桶形連接器上為 UNO 供電大約 +12V。風扇的直流輸入取自Vin,Vin是輸入電壓通過Arduino上標有M7的反向電壓保護二極管后恢復的引腳連接。這是一個標準的 1N4007 整流二極管,可將 12V 電壓降低約 0.7V。UNO 的 AMS7111 +5v LDO 穩壓器額定值為樂觀的 800mA。理想情況下,我們需要低于此值,因為我們已經處于他推薦的輸入電壓的頂端(盡管最大輸入更高)。因此,小型線性穩壓器需要從用于為風扇供電的 12V 主電源中轉儲約 6V。例如,兩個風扇均以 100% 轉速運轉時的總電流測得約為 270mA。每個風扇大約100mA(與風扇制造商指定的指定電流消耗一致)和Arduino板70mA。我們可以看到我們與引用的 800mA 相去甚遠,而且非常符合 AMS1117 功耗規格。
雖然我經常看到引用的最大 +20V,但 Arduino 建議不要超過 +12V 輸入為其 UNO 板供電。這完全取決于板載 LDO 穩壓器必須處理的電流量和功率。在桶形連接器輸入端使用 +12V,在二極管壓降后,我們仍然有大約 11.3V,這對于驅動風扇來說是可以接受的。這可以在風扇數據表上進行檢查。通常 12V 風扇可承受 10V 至 13.2V(有些甚至 7v 至 13.8V)。使用任何棚屋電源中常見的 13.8V,我們得到 13.1V。仍在風扇規格范圍內。這種輕微的增加不會給 AMS1117 +5V 穩壓器帶來更多的耗散負擔,因為我們沒有讓大電流流過它。
綠色 LED 1 和 3 讓我們放心,我們的電路板上有 +5V 和 +12V。LED1用1K限流電阻R7表示+5V,LED3用2K限流電阻R8表示+12V。電阻值差異是由于指示的電壓不同所致。像這樣,亮度水平將非常相似。
盾版建筑:
該板混合使用通孔和表面貼裝元件。緊要關頭,只要眼力好、神態冷靜、手穩,什么都可以用手焊。然而,理想情況下,回流焊爐、電爐或熱風站是最好的。我更喜歡使用 0805 封裝尺寸,因為它們很小但仍然相對容易看到和使用。十五個 SMD R1 到 R9、LED1 到 LED4、C1 和 D1 可以先回流。然后可以手工焊接通孔元件。無需配置微控制器保險絲或上傳引導加載程序,因為 UNO 已經解決了這些問題。這兩個 PCB 的成品堆疊提供了一個非常緊湊的單元,具有經典 Arduino 已經提供的所有便利設施。
提個醒:并非所有 Arduino UNO R3 都是平等的。一些使用 USB B 型連接器與 USB 進行串行通信。USB B 型插座高度可能會接觸并短路某些屏蔽連接。小心。一點絕緣膠帶在這里可能會有用。有時 ATmega 16U2 也用作 USB 轉串口轉換器。這實際上是一個單獨的微控制器,它被編程為 FTDI 角色。它通常在 Arduino UNO 板的左上角有自己的 ICSP 編程引腳。這些也可能會物理接觸某些屏蔽元件引腳的底部并造成破壞。我只能假設一些中國制造商只有在芯片已經在電路板上使用這些編程引腳后才使用 FTDI 固件燒錄 ATmega 16U2。其他供應商避免在焊接芯片之前通過預燒來安裝這些引腳,或者稍后在制造中使用 pogo pin 連接器。就個人而言,在使用屏蔽時,為了避免這些問題,我傾向于只使用 UNO 板,它們具有低調得多的微型 USB 連接器和專用 USB-UART 芯片,如 CH340。
嵌入式板版
獨立嵌入式版本:這是在使用嵌入式 ATmega328P-AU 的單板上,包括所有其他子系統。串行和 ICSP 端口連接接頭仍可用于調試和必要的芯片燒錄。自然這里有更多的表面貼裝元件需要焊接。這當然包括 328P-AU。其0.8mm間距的TQFP封裝將更具挑戰性。在初始草圖和/或引導加載程序中進行配置和加載也是如此。
嵌入式獨立板。
主要成分:
ATmega 328P-澳大利亞
晶體時鐘振蕩器。
DS18B20溫度傳感器。
光耦PC817C。
OLED SSD1306 0、91" 顯示屏。
AS1117 5V穩壓器。
LED指示燈和無源蜂鳴器報警
用于菜單輸入的旋轉編碼器。
板載電源開關。
板載復位按鈕。
USB 串行功能可通過外部 FTDI(Future Technology Devices International)板,通過“串行”端口接頭插針使用。
ICSP 功能可通過“ICSP”端口接頭引腳與外部 USBasp 板一起使用。
初始設置跳線頭。
嵌入式版本電路原理:
此版本為風扇控制器代碼提供單板平臺。它是風扇控制器的獨立變體,圍繞 ATmega 328P-AU 芯片構建。與許多 Arduino UNO R3 板使用的相同。參考嵌入式板原理圖。
該電路使用ATmega 328P。不是 328PB 版本,它有一些引出線差異。后綴AU指的是小型QFP32封裝類型,我在測試和構建過程中發現它仍然相對容易處理。
由于我們已經失去了內置 Arduino 引導加載程序的便利,我們將不得不使用 ICSP 上傳到微控制器的內存。還需要添加電源管理、時鐘、復位和串行調試端口、ICSP 端口等其他功能。
屏蔽和嵌入式電路都使用相同的代碼。這是因為所有電路功能和連接都設計為相互兼容。下面我已經說明了每個輸入或輸出的等效 Arduino Uno 連接是什么,因為這是草圖中引用的內容。
Fan-A 和 Fan-B 具有獨立控制的 PWM 輸出信號,這些信號取自微控制器的引腳 13 和 14。這些是端口引腳 PB1 和 PB2,相當于 Arduino 板上的 I/O 引腳 D9 和 D10。RPM 轉速計波形取自 Fan-A,通過 RC 噪聲濾波器并饋送到引腳 32,即端口引腳 PD2 (Arduino D2)。這用于計算和顯示主風扇 A 的速度。
當代碼檢測到風扇 A 停止時,引腳 15、端口引腳 PB3 (Arduino D11) 上的高電平將通過其 1K 限流電阻 R4 點亮紅色 LED4。同樣,它會通過無源蜂鳴器 SG3 發出警報,該蜂鳴器跨越引腳 23 和 24,端口引腳 PC0 和 PC1(Arduino A0 和 A1)。每個輸出彼此異相,從而增加了表觀音量水平。盡管如此,還是有一個 220 歐姆的小電阻 R1 可以將此處的電流降低到可接受的水平。此壓電蜂鳴器也會在開機時發出聲音,以確認配置設置已保存。
SSD1306 OLED 使用 I2C 總線。它的數據和時鐘線連接到引腳 27 和 28。它們分別是端口引腳 PC4/SDA 和 PC5/SCL(位于 Uno 的 A4/SDA 和 A5/SCL 上)。為了完整起見,包含兩個值為 5.1K 的上拉電阻器 R5 和 R6,盡管某些 OLED 板沒有這些電阻器也能正常工作,因為它們已經具有上拉電阻器。我的 OLED 已經有一個 +3.3V 穩壓器并且是 +5V 邏輯容限,所以不需要電平轉換器。
旋轉編碼器 SW1 線 DT 和 CLK 在微控制器的引腳 1 和 2 處讀取。這些是端口引腳 PD3 和 PD4(與 Uno 的 D3 和 D4 相同)。按下時,瞬時開關接地。這個低電平在引腳 10 讀取,它是微控制器上的端口引腳 PD6(Uno 的 D6),以循環瀏覽菜單項。
PC817C 光耦合器 U3 在其引腳 4 上的輸出被帶到微控制器引腳 12,即端口引腳 PB0(Arduino 上的 D8)。它用于將啟用信號與我們可能選擇連接到接頭 P-IN 的任何輔助設備進行光學隔離。如果光耦合器輸出側由其輸入端的內部 LED 照亮,則該值會很低。電阻器 R3 將通過輸入電平的電流限制在規格范圍內,1K 的值適用于我們預計火腿小屋中最常見的電壓。一個 1N4148 二極管可保護同一輸入二極管免受意外反極性連接的影響。如果沒有這個保護二極管,光耦合器的 LED 將無法承受超過 6V 的反向電壓。
請注意:此 P-IN 接頭連接器與屏蔽版本不同。連接外部觸發器時必須小心。外線的負極,通常是接地,應該連接到 P-IN 接頭的引腳 2。外部線路的正極應連接到引腳 1。這在接頭的絲印上標記為“+VE 1”。
P5 是我們連接 DS18B20 溫度傳感器的地方,確保我們遵循它的引出線。其數據線 DQ 接至引腳 11,或端口引腳 PD7(Uno 上的 D7)。這是與傳感器通信的單線總線。當我們詢問和接收來自傳感器的溫度數據時,白色 LED2 將閃爍。需要一個上拉電阻來確保良好的總線通信。
我發現 2K 的值可提供穩定的數據流以及我使用的 0805 表面貼裝 LED 的充足照明。可以使用更高的值,如 4.7K,但這最終取決于所用 LED 上的壓降。這可能因制造商、型號和顏色而異。你的旅費可能會改變。
通過接頭 J1,我們可以選擇兩個風扇之間的工作模式。這發生在開關打開時。引腳 1 和 3 分別連接到 ATmega 的引腳 26 和 25。這些是微控制器端口引腳 PC3 和 PC2(相當于 Uno 引腳 A3 和 A2)。讀取這些輸入的狀態將定義次級 Fan-B 如何與 Fan-A 一起工作。與主 Fan-A 對稱(串聯)或不對稱(相反)。跳線放置將使一個或另一個引腳在引腳 2 上接地。如果跳線跨接在引腳 3 和 4 之間,則實際上斷路了。由于已配置內部上拉電阻,輸入引腳 A2 和 A3 將出現邏輯 1。使用左側的跳線,設置非對稱操作。使用中間的跳線,設置對稱操作。使用右側的跳線,設置熱備。
雖然我們實際上不需要它在這里橋接引腳 3 和 4,但它只是一種方便的方式來存放小跳線并防止我們丟失它。
接頭 J2 在開關打開期間也被讀取并路由到引腳 9。這是端口引腳 PD5 (Uno D5)。如果此接頭的引腳 1 和引腳 2 通過跳線橋接,則引腳 9 變為低電平,代碼隨后將以華氏度為單位計算溫度。如果引腳 2 和 3 橋接,電路中實際上沒有任何東西。同樣,我們只是將跳線存放在引腳 2 和引腳 3 上,以免丟失。此處,引腳 9 的內部上拉將使它保持高電平,代碼將以攝氏溫度單位工作。
開關 SW18 連接到設備的復位電路,在 ATmega 328P 的引腳 29 上。采取低它迫使微控制器復位。在正常操作中,上拉電阻 R2 將其保持在高電平。二極管 D2 保護微控制器免受任何電壓尖峰的影響,這些電壓尖峰是由于串口 DTR 線上的電容器 C7 引起的。如果此 DTR 變高,我們的復位線上的電壓會短暫加倍。1N4148 安全地分流這個 10V。串口DTR線上需要電容C7,起微分作用。當連接到串口時,大多數USB轉串口芯片會將DTR設置為低電平并保持低電平。我們在這里只需要一個短脈沖來初始重啟微控制器。ATmega 的復位引腳也被任何 ICSP 編程器使用,因此也連接到 ICSP 接頭引腳 5。
綠色 LED 5 和 6 指示我們有 +12V 和 +5V 到達我們的電路板。LED5用2K限流電阻R10表示+12V,LED6用1K限流電阻R11表示+5V。電阻值的差異是由于指示的電壓不同所致。像這樣,它們的亮度水平將是相等的。
在直流桶形連接器和電源開關 SW2 之后,AMS1117 +5V 穩壓器 U36 為電路板提供 +5V。該穩壓器的版本被引用為具有從 15v 到 20V 的任何地方的最大輸入電壓。雖然推薦值較低。功耗和發熱將取決于它通過的電流量。它保持在功耗規格范圍內,因為通過它的總電流相對較低。盡管如此,因為我有足夠的電路板空間,所以我已經包含了一個臨時的 PCB 散熱器。穩壓器的 +5V 接頭連接到此,它也有通向底部 PCB 層的散熱孔。
跨接 AS1117 的 1N4007 二極管 U1 用于在使用 ICSP 端口時提供保護。通常,ICSP 程序員會將 +5V 置于 ICSP 端口的引腳 2 上。當我們燃燒 ATmega 芯片時,這可以保護 AMS1117 LDO 穩壓器免受反饋電壓的影響。
為了給風扇供電,我們需要 +12V。在通過 AMS1117 將電壓調節至 +5V 之前,該電壓在桶形連接器處輸入。在輸入電壓通過標有 M7 的反向電壓保護二極管后獲取風扇電壓。這是一個標準的 1N4007 整流二極管,它也會將 12V 電壓降低約 0.7V。
AMS7111 +5v LDO 穩壓器的額定電流高達 800mA。理想情況下,我們需要低于此值,因為我們已經處于他推薦的輸入電壓的頂端(盡管最大輸入要高得多)。小型線性穩壓器需要從用于為風扇供電的 12V 主電源中傾倒大約 6V。然而,總電流消耗遠低于這個 800mA 的最大值。因此,即使需要丟棄 6V,通過它的電流如此之低,我們也很好地低于 AMS1117 功耗規格。
正如剛才提到的,為風扇供電所需的 +12V 取自 U37 的陰極。這是 1N4007 二極管,它為我們提供一些簡單的反向電源保護,但會下降約 0.7V。即使有這種下降,仍然有足夠的電壓驅動大多數風扇在其指定的電壓容差范圍內。這可以在風扇的數據表上進行檢查。通常 12V 風扇可承受 10V 至 13.2V(有些甚至 7v 至 13.8V)。
在桶形連接器輸入端使用 +12V,在二極管電壓下降后我們仍然有大約 11.3V,這是可以接受的。使用 13.8V,這是任何棚屋電源的正常輸出,我們有 13.1V。仍在大多數風扇規格范圍內,但您可能會注意到 RPM 有所增加。這種小的輸入電壓增加不會給 AMS1117 +5V 穩壓器帶來更多負擔。
使用 16MHz 外部晶振 Q6。這個選項必須在 ATmega 的保險絲設置中配置。晶體 Q6 兩端的 1M 電阻器 R13 改善了各種晶體規格的振蕩的啟動和維持。一些微控制器內置了這個。它包括在內是為了完整性。
許多 Arduino 板使用陶瓷諧振器而不是晶體。雖然不如水晶那么精確,但它體積更小,而且似乎對于日常應用來說已經足夠精確了。我選擇晶體是因為 16MHz 晶體在我所在的地區更容易找到,而且比微型陶瓷諧振器更容易處理。我不確定內部 ATmega 的振蕩器是否足夠精確以滿足我們的需求,尤其是對于串行通信功能。
串口頭H7可用于調試。它也可以用于上傳新的草圖,前提是之前已經將引導加載程序燒錄到微控制器上。需要一個 FT232RL FTDI USB 轉 TTL 串行適配器模塊,設置為工作在 +5V。插頭引腳將與大多數可用的適配器模塊對齊。接地端在串口絲印上標記的引腳 1 上。Tx 和 Rx 線上的兩個 1K 電阻 R8 和 R12 限制電流。因此,如果適配器端變高,然后微控制器代碼將相應的輸出引腳發送到低電平,這將避免直接接地短路。串行接頭的 Vcc 引腳 3 未連接。風扇控制器由其自身的穩壓器供電,適配器板通過計算機的 USB 連接供電。兩者都有共同點。100nF 電容 C7 已經討論過了。它構成了復位電路的一部分,并確保僅來自串行端口 DTR 引腳的短暫低脈沖就會觸發復位。
要使用 ICSP 端口 J5,需要一個在線串行編程器來直接燒錄到微控制器的內存中。使用新的 ATmega 328P-AU,這將是將第一個代碼上傳到微控制器的唯一方法。如果您刻錄引導加載程序,您將能夠僅使用串行端口和 Arduino IDE 以經典方式上傳草圖。ICSP 接頭引出線遵循標準布局,就像在 Arduino Uno R3 板上一樣。對于 ICSP 編程,我使用便宜且易于使用的 USBasp 編程器。當然可以使用其他編程器,前提是引出線匹配。
編程時,風扇控制器板應斷電,因為它將從 ICSP 編程器獲取電源。然而,一些較舊的 ICSP 編程器需要在 ICSP 引腳 2 上有來自其目標的電壓才能運行。在這種情況下,設備應該通電。
ICSP 的 MISO 和 MOSI 線位于接頭的引腳 1 和 4,并連接到微控制器的 MISO 和 MOSI 引腳 16 和 15。接頭引腳 3 的時鐘線 SCK 連接到芯片的 17 引腳和復位線 RST插頭引腳 5 連接到芯片 29 處的復位引腳的復位電路。前面討論的紅色 LED4 用于在正常運行期間發出主風扇 A 停止的信號,現在將用于向我們顯示任何 ICSP 活動。端口引腳 PB3 也是 MOSI 引腳,因此當我們連接到芯片時 LED4 會閃爍。
嵌入式版本構建:
同樣,該電路板混合使用了通孔和表面貼裝組件。首選 0805 SMD 封裝,因為這種小尺寸仍然相對容易處理。如果您是第一次,在更簡單的項目甚至練習板上練習 SMD 焊接技術可能是明智的。嵌入式版本不是一個好的第一個 SMD 項目。在獲得可運行的嵌入式版本的過程中,已經有足夠多的陷阱需要提防。這可能會給新手帶來很大的挫敗感。表面貼裝或嵌入式微控制器新手最好從屏蔽版本開始。如果您有信心,我現在將介紹一個合乎邏輯的工作流程,這可能會避免家庭釀造的不滿。
- 對于 SMD,我使用小型回流焊爐和一些低溫含鉛焊膏。通過使用與所用焊料相匹配的特定溫度曲線,可以輕松控制熱量。當然,您也可以使用熱板和熱風返修臺,但要注意不要因過熱而熔化任何塑料外殼組件。例如,請注意電解電容器,其電介質可能會損壞。對于焊料,無鉛類型現在都是炒作,但請相信我,它并不那么寬容。
無鉛焊料容易成珠,不易流動或粘住。一家大型PCB工廠使用環保焊料是有道理的。對于我們的小型家庭愛好來說,它確實是海洋中的環境一滴。就健康而言,焊芯中助焊劑產生的煙霧實際上更有害,含鉛和無鉛焊料中都存在這種情況。在任何情況下,只要您的工作臺通風良好,一年焊接幾十塊電路板都不會把您推入早期棺材。
- 我建議先回流所有 SMD 組件,然后立即測試和 ICSP 燃燒 Atmega 328P-AU。也就是說,在安裝較大的通孔組件之前。這樣可以更容易地立即診斷任何編程問題。如果您需要拆焊和重新焊接組件,則無需整塊電路板的混亂。我的第一個完成的電路板有幾個問題,需要我拆卸和更換組件才能找到問題所在。雖然我解決了這些問題并且董事會工作了,但它看起來確實有點像最后的狗晚餐,而不是我們努力為每個完成的項目提供的米其林星級大餐。
首先,回流所有 SMD:U1、U36、U37、U25、Q6、SW18、D1、D2、LED2、LED4、LED5、LED6、C1、C2、C3、C4、C5、C6、C7、C8、C9 , C12, C13, C14, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13。完成后,目視檢查焊點是否良好且無焊橋。使用放大鏡或數碼顯微鏡。總是有一些 ATmega 328P-AU 引腳之間經常有橋接,應該使用一些拆焊編織帶將其吸起來。一旦我們滿意了,我們就可以通過 ICSP 接頭進入下一階段的微控制器編程。
女主播
檢查是否連接到您的 ATmega 328P。如果一切順利,至少你的 MISO、MOSI、RST、SCK 和你的 ICSP 到微控制器的電源引腳是好的。
檢查保險絲和鎖定位的當前狀態。這些保險絲的出廠默認值通常不是我們想要的。在這里,需要將它們設置為該項目的要求。小心地重新編程它們,因為錯誤的設置可能會使微控制器變磚,并使其難以再次輕松正常化。
將 ATmega 配置為使用 16MHz 的外部晶體振蕩器,預留引導加載程序空間、掉電檢測、啟動延遲、引導復位引腳等。參考參考書目部分,了解 ATmega 的數據表和配置四組熔絲的其他資源。
低熔絲:對于 CCKDIV8、CKOUT、SUT 和四個 CKSEL 位。
高熔斷器:用于帶 BOOTRST 的 RSTDISBL、DWEN、SPIEN、WDTON、EESAVE 和 BOOTSZ。
擴展保險絲:用于 BOD 級別。
鎖定位:限制對程序存儲器的訪問。
我使用類似于以下值的值為此項目設置保險絲:
大號F7h
溴化氫
EFH
磅FFh
因為新芯片的出廠默認值通常是:
長 62 小時
H D9h
EFFh
磅FFh
(除其他事項外,微控制器保險絲設置為使用其內部 RC 振蕩器、將時鐘除以 8、禁用掉電檢測等。)
警告:RSTDISBL、SPIEN、DWEN 保險絲和鎖定位有可能使 ATmega 芯片變磚,或者至少使芯片很難再次使用。因此,在單擊“寫入”按鈕之前,請務必仔細檢查您的保險絲設置值。
- 一旦建立了與微控制器及其保險絲組的通信,我們就可以加載草圖了。同樣,有多種方法可以做到這一點,盡管我發現在這里使用 Arduino IDE 與相同的 USBasp ICSP 編程器和出色的 MiniCore Arduino 內核是實用的。一旦在 IDE 的板管理器中配置,它就允許對許多 ATmega 微控制器進行編程(包括現在有時在 Arduino 板上使用的 ATmega 328PB 版本)。該內核使用自定義版本的 Optiboot,這是一種節省空間且比常規引導加載程序更高效的替代方案。
在 IDE 的板管理器中設置 MiniCore 后,我們可以在“工具”中選擇我們的 ATmega 328P 并檢查其選項。程序員當然應該設置為USBasp(MiniCore)。我可以選擇將引導加載程序上傳到內存,并激活 USB 端口,以便以后通過串行 USB-FTDI 端口更新草圖。這會在打開時產生 2 秒的延遲。在此期間,引導加載程序被調用并等待任何草圖上傳。該串口也用于在 115200 波特率下進行調試。我們也可以選擇不上傳引導加載程序并取消串行上傳草圖。不會有 2 秒的延遲,因為代碼會立即開始運行。任何草圖上傳都只能使用 ICSP 完成。
最初嘗試上傳 Blink 草圖。在 Arduino IDE 首選項部分啟用詳細模式是一個很好的策略。像這樣,可以看到編譯和上傳代碼期間發生的事情的詳細信息。Blink sketch 小巧、簡單并且可以快速上傳。微控制器端口 B3 上的 LED 可用于查看 Blink 草圖是否與電路板一起工作。這應該在您的 Blink 代碼中定義為數據引腳 11。它是位于 328P 微控制器引腳 15 上的紅色 Fan-A 警告 LED。順便說一下,這個 LED 也連接到 ICSP 端口的 MOSI 線上,因此可以向我們顯示在線串行編程活動何時發生。
現在項目的微控制器端已經配置和測試,PCB 可以通過手工焊接剩余的通孔組件來完成。
最后,可以將風扇控制器草圖上傳到板上并測試其所有功能。
示例使用
我在以下示例中使用了風扇控制器。我為每個應用程序調整了風扇速度溫度斜率。它確保足夠的冷卻和可接受的噪音水平。
天線假負載
隨著便宜的 50 歐姆陶瓷電阻器的出現,我找到了一些時間來構建一個高功率虛擬負載。它非常適合測試 HF 收發器。它使用 250N50F 氮化鋁 (AlN) 陶瓷電阻器。替代品包括氧化鈹 (BeO) 電阻器。這些都是以前使用過的組件。被中國一些有進取心的貿易商從報廢設備中救出。
警告:數據表規格有所不同,但它們可以通過正確的散熱和冷卻來消耗大量功率。有些據說高達 250W 或 100degC,以先到者為準。這些評級似乎過于慷慨。
1 / 7
您應該管理應用于負載的“功率時間:休息時間”比率。更多的功率在更多的時間意味著更高的溫度,因此需要更多的冷卻時間。
大型散熱器與雙風扇形式的智能冷卻解決方案相結合是理想的選擇。風扇控制器板安裝在該封裝的一端。陶瓷電阻器用螺栓固定在散熱器上,散熱器本身夾在兩個冷卻風扇之間。DS18B20 溫度傳感器被夾在與散熱器直接接觸的位置。您可以使用一些氧化鋅導熱膏作為很好的措施。我用的尿布霜基本上和我手邊的一樣。
整個高頻的 SWR
工業電腦
我討厭噪音。我使用裝有 macOS 的 Mac Mini 和裝有 Windows 的工業 PC。既不發出任何聲音,也完全保持沉默。然而,很快就會發現,運行 Windows 的無風扇工業 PC 可能會發熱很多。盡管被有效地安置在一個大的散熱器盒中,但缺乏氣流意味著它的溫度在執行某些任務時確實會大幅升高。這從來都不好。
我使用風扇控制器和兩個風扇來促進 PC 上方的氣流。配置溫度/風扇速度曲線,充分降低其溫度,但仍不會產生令人分心的風扇噪音。溫度傳感器安裝在與 PC 外殼直接接觸的位置。
1 / 7
線性電源單元
我的 Microset PT-135 35A 電源體積大、堅固且無風扇。它使用線性調節并且過度設計。它在 RF 和棚屋中都提供了美妙的靜音效果。它的后部有一個大散熱片用于散熱。我決定添加一些主動冷卻。并不是說它需要它。只需一點幫助即可幫助氣流。
1 / 4
這里使用了屏蔽版本。配置低風扇速度曲線可將任何風扇噪音保持在無法檢測到的水平。它緊貼在散熱器鰭片的背面。另一種解決方案是使用小磁鐵固定在外殼上。溫度傳感器安裝在電路板上方的空氣中,僅檢測環境溫度。它只會在炎熱的天氣激活風扇。
注意事項
不合規。不是商業的。對于工業應用,Arduino 硬件和代碼通常缺少保護控制器和相關設備所需的保護電路。商業和工業系統將考慮許多潛在的安全和環境因素。它們將具有許多安全功能。Arduino 實際上只是一個原型設計平臺,不應被視為兼容或商業化。盡管如此,許多初始項目在經過多次測試和重新設計后已獲得工業認可。
?
- 風扇控制器開源項目
- LTC1840:帶2線接口的雙風扇控制器產品手冊
- DN114-LTC1267雙開關穩壓器控制器在高輸入電壓下運行
- 雙輸出、多相降壓型 DC/DC 控制器可與 Power Block 及 DrMOS 器件運行
- 雙輸出、多相降壓型 DC/DC 控制器與 Power Block 和 DrMOS 器件運行
- 交流-交流電壓控制器的電路運行和仿真可控制視頻 5次下載
- 基于EMC2113下具有多個溫度區和硬件熱關斷功能 的基于 RPM 的風扇控制器
- 基于EMC2103下的具有硬件熱關斷功能的 風扇控制器
- 可編程風扇控制器 51次下載
- 無干擾電風扇自然風控制器 16次下載
- 采用FanSense TM技術的PWM風扇速度控制器
- 兩通道溫度監視器雙PWM自動風扇速度控制器和五GPIO集成器
- 家用風扇控制器的設計與實現
- 電風扇加裝陣風控制器電路及制作
- 開源硬件-TIDA-00525-具有無傳感器正弦控制的 12V BLDC 服務器風扇 PCB layout 設計
- 電機控制器的原理、類型及應用 933次閱讀
- IGBT在電機控制器中的應用 1009次閱讀
- 風扇速度控制器電路圖分享 3026次閱讀
- 無葉風扇控制器怎么調 無葉風扇控制器怎么接線 1416次閱讀
- 微型溫度監視器控制3速風扇 475次閱讀
- I2C雙風扇速度控制器提高效率并降低噪音 1313次閱讀
- 微型溫度監測器驅動3速風扇控制器 743次閱讀
- 如何使用GreenPAK為PC風扇構建PWM控制器 6574次閱讀
- 基于EM78247微處理器實現雙軸陽光隨動控制器的應用設計 4056次閱讀
- 基于微控制器的MicroPython模塊運行 2001次閱讀
- 水電雙控智能控制器的組成、特點及在農業灌溉中的應用 5638次閱讀
- 響度控制器電路圖 1.5w次閱讀
- 采用SMBus溫度傳感器實現風扇的三個速度控制設計 3751次閱讀
- MAX6620四通道、線性、風扇速度控制器 1713次閱讀
- 溫度控制器電路圖5 6089次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多