99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用微控制器實現(xiàn)風扇冷卻系統(tǒng)的設(shè)計

科技觀察員 ? 來源:hackster.io ? 作者:hackster.io ? 2022-05-11 17:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

我更喜歡安靜祥和的環(huán)境。這就是為什么我更喜歡收聽來自 BBC Radio 4 或 Classic FM 的更柔和的廣播。這就是為什么我喜歡 Elecraft 和 Ten-Tec 的 PIN 二極管設(shè)備上的全磨合 CW。這就是我為 macOS 運行 Mac Mini 和為 Windows 運行無風扇工業(yè) PC 的原因。

設(shè)備冷卻和設(shè)備噪音通常是齊頭并進的。需要的冷卻越多,需要的氣流就越多,并且會產(chǎn)生更多的風扇噪音。但是,風扇選擇和安裝選項將有助于減輕這種噪音。智能風扇冷卻系統(tǒng)也將控制風扇速度。

該項目是一個單元的一個分支,該單元的目標是在炎熱氣候下冷卻通信套件。需要監(jiān)控和冷卻設(shè)備,同時將聽覺滋擾水平保持在謹慎的水平。它可以適用于冷卻假負載、電源、計算機、照明。

計劃

尋找解決方案,發(fā)現(xiàn)便宜的單板控制器只提供了一個簡單的風扇曲線解決方案。這些控制器只是根據(jù)風扇速度跟蹤溫度差異??梢孕薷牡膮?shù)不多。在規(guī)模的另一端,有用于游戲計算機的復(fù)雜冷卻控制器系統(tǒng),使用 PC 軟件。這些是完全可配置的系統(tǒng),能夠平衡所需的冷卻性能與產(chǎn)生的聲級。

很難找到中間解決方案。介于簡單的獨立板和 PC 使用的復(fù)雜系統(tǒng)之間的一種。因此,設(shè)計了一個嵌入式系統(tǒng)來滿足我的要求。從簡單開始,然后根據(jù)特定需求構(gòu)建設(shè)計。該項目很快就包含了一些易于定制的功能,可以根據(jù)個人溫度和風扇速度要求進行設(shè)置。

特征

兩個風扇控制器。

從 0% 到 100% PWM 的全風扇速度控制。

溫度感應(yīng)范圍為 0 至 +120degC(32degF 至 248degF)。

風扇轉(zhuǎn)速計讀數(shù)為每分鐘 9999 轉(zhuǎn)。

OLED 顯示屏顯示風扇和溫度信息。

風扇 PWM 指令條形圖(10% 間隔)。

用于操作配置菜單的旋轉(zhuǎn)編碼器

定義溫度范圍,從最小值到最大值。

定義風扇速度范圍,從最小值到最大值。

三個輔助 Fan-B 工作選項:

a) 主風扇 A 與輔助風扇 B 串聯(lián)運行(對稱)。

b) 主風扇 A 與輔助風扇 B 反向運行(不對稱)。

c) 主風扇 A 和輔助風扇 B 配置為熱備。

聲音風扇-A 故障或停機警報。

發(fā)光風扇-A 停機報警。

發(fā)光的 DS18B20S 傳感器總線指示燈 LED。

發(fā)光的 +12V 和 +5V 電源 LED。

配置設(shè)置保存在 EEPROM 中,用于斷電恢復(fù)。

用于設(shè)置溫度單位(degC 或 degF)的配置標題

用于設(shè)置對稱、不對稱或熱備模式的配置頭。

隔離的外部 P 輸入,用于啟用/禁用輔助設(shè)備的操作。

主風扇 A 故障檢測,用于在熱備模式下切換到風扇 B。

用于調(diào)試和固件上傳的串行端口

用于直接燒錄到內(nèi)存的電路串行編程端口。

KF2510 3+1P,風扇連接器插座。

易于使用的板載重置開關(guān)。

兩個版本

設(shè)計了兩個版本。兩者功能相同。但是,每個版本的創(chuàng)建都是為了適應(yīng)個人需求和構(gòu)建技能。

Shield 版本:這是最容易構(gòu)建的,因為 Arduino 板已經(jīng)處理了一半的功能。屏蔽就像任何標準屏蔽一樣連接到 Uno R3 板的頂部。它以驚人的緊湊封裝提供了運行所需的其余電路。構(gòu)建屏蔽版本更簡單,盡管您仍然應(yīng)該能夠處理它使用的 15 個 0805 SMD。代碼上傳更易于管理,并且像往常一樣通過 USB 串行端口使用 Arduino IDE 執(zhí)行。

嵌入式版本:這是圍繞 Atmega 328P-AU 微控制器構(gòu)建的,具有獨立的獨立單元所需的所有電路。構(gòu)建復(fù)雜性更大。您應(yīng)該具備并精通SMD項目建設(shè)。請注意,您還需要熟悉 ICSP 端口。至少在最初將代碼上傳到微控制器內(nèi)存,直到您根據(jù)需要燒錄引導(dǎo)加載程序。

操作

此代碼是根據(jù)需要動態(tài)構(gòu)建的。從一個簡單的溫度跟蹤風扇速度實用程序,它迅速雪崩成這個可定制的版本。毫無疑問,還有其他編程方法可以實現(xiàn)所期望的。就是這樣。無論如何,我的代碼可以很容易地更正、修改和改進,讓每個人都滿意。

啟動順序

在通電或重置時,設(shè)備會等待幾秒鐘,讓任何仍在旋轉(zhuǎn)的風扇停止。所需的延遲取決于風扇旋轉(zhuǎn)的難易程度及其動量??梢酝ㄟ^修改變量 spinDownDelay 在代碼中定義延遲。

然后代碼運行一個啟動序列,該序列將首先測試風扇以找到其最小速度值。這將用于運行期間的停止檢測 fanJamCheck() 函數(shù)。此序列將遞增的 PWM 值發(fā)送到風扇,最高比率為 20:100 (20%)。到那時,大多數(shù)粉絲都已經(jīng)開始了。在最終啟動主代碼和其中一種工作模式之前,它的進度顯示在 OLED 上。下面列出并解釋了這些可選擇的工作模式中的每一個。

兩種基本的風扇模式是可能的:

首先,被動上下掃描模式僅遵循由風扇最小值和風扇最大值定義的定義曲線斜率。可以配置此掃描的速率,但不使用溫度傳感器數(shù)據(jù)來控制風扇速度。

其次,主動觸發(fā)模式可激活風扇并根據(jù)溫度最小值、溫度最大值、風扇最小值和風扇最大值定義的曲線斜率控制其速度。有兩種類型的主動觸發(fā)模式。第一個子模式僅采用傳感器溫度輸入來控制冷卻風扇。第二個子模式采用傳感器溫度輸入,但也需要輸入電壓 (P-IN) 來啟用冷卻風扇。這可以與輔助設(shè)備一起使用,僅在輔助設(shè)備認為有必要時觸發(fā)風扇控制器。

滾動瀏覽下圖,例如配置的坡度:

poYBAGJ7gYSAYZ7zAAIZdD0ldEw767.png

一種被動清掃模式:

在這里,風扇速度將在風扇速度斜率上上下掃描,如先前由風扇最小值和風扇最大值定義的那樣。不使用溫度讀數(shù),但可以更改掃描速率。

兩種主動觸發(fā)模式:

此處風扇將在達到最低溫度且僅當啟用 P-IN 輸入時觸發(fā)。

在最低溫度觸發(fā):

a) 從零風扇速度(風扇關(guān)閉直到觸發(fā))。

b) 從風扇最低速度開始(風扇以最低風扇旋轉(zhuǎn)直到觸發(fā))。

在最低溫度時觸發(fā),但僅當 P-IN 輸入也啟用時。

a) 從零風扇速度開始。(風扇關(guān)閉,直到觸發(fā))。

b) 從風扇最低速度開始(風扇以最低風扇旋轉(zhuǎn)直到觸發(fā))。

通過滾動顯示的示例溫度/風扇速度圖表,可以最輕松地查看這些風扇模式以及它們與速度和溫度的關(guān)系。

配置

在配置模式中定義單元的操作方式以及所需的冷卻斜率。本質(zhì)上是通過在圖表上定義點來獲得我們想要的斜率。我們可以通過按下旋轉(zhuǎn)編碼器按鈕進入此模式。然后滾動配置菜單,連續(xù)按下相同的按鈕。在每個參數(shù)處轉(zhuǎn)動旋轉(zhuǎn)編碼器以修改其值,從而定義新的操作模式或溫度斜率。

配置菜單:

FAN MIN

設(shè)置最小風扇速度值(5% 步長)。

FAN MAX

設(shè)置最大風扇速度值(5% 步進)。

TEMP MIN

設(shè)置最低溫度值,這將觸發(fā)風扇到 Fan Min。

TEMP MAX

設(shè)置最高溫度值,此時風扇將以 Fan Max 旋轉(zhuǎn)。

模式

掃描或觸發(fā)

設(shè)置被動上下掃風速度?;蛴|發(fā)風扇速度,主動跟蹤來自 DS18B20 傳感器的溫度數(shù)據(jù)。

掃描速率

(如果之前選擇了掃描,則可用)1/慢到 10/快。選擇風扇速度從風扇最小值掃描到最大值的速度。

TRIGGER

(如果之前選擇了 Triggered,則可用)

1 溫度/零。溫度從零觸發(fā)。將在 Temp Min 觸發(fā)并開始以 Fan Min 速度旋轉(zhuǎn)。未觸發(fā)時,風扇速度將等待為零。

2 溫度/Fmin。溫度從風扇最小值觸發(fā)。將在 Temp Min 觸發(fā)并開始以 Fan Min 速度旋轉(zhuǎn)。未觸發(fā)時,風扇速度將在 Fan Min 處等待。

3 針/零。溫度從零觸發(fā),但需要外部 P 輸入啟用。將在 Temp Min 觸發(fā)并開始以 Fan Min 速度旋轉(zhuǎn),但僅在由 P 輸入啟用時。未觸發(fā)時,風扇速度將等待為零。

4 針/Fmin。溫度從風扇最小值觸發(fā),但需要外部 P 輸入啟用。將在 Temp Min 觸發(fā)并開始以 Fan Min 速度旋轉(zhuǎn),但僅在由 P 輸入啟用時。未觸發(fā)時,風扇速度將在 Fan Min 處等待。

TEMP OFFSET

-9 到 +9 度。要糾正 DS18B20 傳感器的任何溫度誤差,可以添加此補償值。默認為 0 度,不進行校正。

SAVE & EXIT

Yes/No.Yes,將退出配置模式,并發(fā)出相應(yīng)的莫爾斯“R”音和簡短的“配置已保存”消息。您的設(shè)置將保存到 EEPROM。不,將再次循環(huán)通過配置選項。

因為 FAN MIN 和 FAN MAX 的值是相互依賴的。無法將 FAN MAX 值設(shè)置為低于 FAN MIN 值或?qū)?FAN MIN 值設(shè)置為高于 FAN MAX 值。類似地,TEMP MIN 和 TEMP MAX 的值是相互依賴的。不可能將 TMP MAX 值設(shè)置為低于 TEMP MIN 值或?qū)?TEMP MIN 值設(shè)置為高于 TEMP MAX 值。

該代碼限制了您可以設(shè)置的允許范圍。例如,如果您無法選擇較低的 FAN MAX 值,可能是因為您試圖將其設(shè)置為低于 FAN MIN 值。

初始設(shè)置

安裝單元后,以下選項很少需要更改。它們通過使用兩個插頭引腳跳線進行配置,其設(shè)置在開關(guān)打開或復(fù)位時讀取。

1. 使用跳線 J1/U2 的輔助 FAN-B 設(shè)置:

ASYMetric:輔助風扇 B 將以與主風扇 A 相反的速度旋轉(zhuǎn)。因此,當風扇 A 處于最大速度時,風扇 B 將處于最小速度。這些風扇速度將動態(tài)遵循由 Fan Min 和 Fan Max 定義的溫度斜率。

SYMMetric:輔助風扇 B 將與主風扇 A 同步旋轉(zhuǎn)。因此,當風扇 A 處于最大速度時,風扇 B 也將處于最大速度。這些風扇速度將動態(tài)遵循由 Fan Min 和 Fan Max 定義的溫度斜率。

STandBY:輔助 Fan-B 充當熱備用角色的主 Fan-A 的備份。因此,F(xiàn)an-B 通常會一直關(guān)閉,直到 Fan-A 卡住或出現(xiàn)故障。風扇 A 發(fā)生故障時,風扇 B 將接管。

2. 跳線 J2/U1 的溫度設(shè)置單位:

degF:華氏溫度。在美國、利比里亞和開曼群島使用。

degC:攝氏溫度。在世界其他地方使用。

積木

單片機

我們不需要 ESP8266ESP32 中的處理能力或花里胡哨。帶有 ATmega 328P 芯片的 Arduino 平臺具有足夠的速度、內(nèi)存空間和 GPIO 引腳。

當然,和原來的 Arduino UNO R3 一樣,在嵌入式電路中使用了一個 ATmega328P 微控制器。該微控制器提供 32K 閃存、2K SRAM 和 1K EEPROM 存儲。它的 16Mhz 時鐘速度足以運行我們的中等任務(wù),并且它有足夠的輸入/輸出引腳來滿足我們的需要。

選擇了AU芯片封裝。它比大型 PU DIP 版本更小、更便宜且更容易采購。它是小型嵌入式板應(yīng)用的理想選擇。然而,在構(gòu)建或?qū)嶋H測試時不會太小而無法處理。在原型制作過程中,使用 QFP/TQFP32 芯片適配器將此 Atmega 328P 安裝在面包板上。無腿 MU 版本雖然更小,但更難處理。

溫度感應(yīng)器:

Dallas Semiconductor DS18B20 可能不是最精確的溫度測量儀器,但足以滿足我們的使用需求。它測量的溫度范圍為 -55°C 至 +125°C(-67°F 至 +257°F),精度為 -10°C 至 +85°C +/-0.5°C。

出于我們的目的,代碼將溫度范圍限制在 0degC 到 120degC(32degF 到 248degF)之間。在此范圍之外,它將在溫度值旁邊顯示一個超出范圍 (OOR) 的“感嘆號”圖標。該值將在 0degC 和 120degC(32degF 和 248degF)時觸底。

pYYBAGJ7gXuARtPnAAC8Aw473uU937.png

DS18B20 的三針 TO-92 版本可能是最容易使用的封裝類型。傳感器數(shù)據(jù)線上到 Vdd 的 LED 上拉電阻改善了數(shù)據(jù)傳輸,并提供了傳感器與微控制器通信的一些視覺反饋。在這里,一個 2K 電阻可以很好地閃爍 LED。一些套件模塊在這里使用 4.7K 值。這取決于特定 LED 上的電壓降和所需的亮度。

OLED顯示屏:

使用了一個小的 0.91“ OLED。它具有 128 x 64 像素的分辨率,當與 Bill Greiman 的 SSD1306 庫和“fixed_bold10x15”字體一起使用時,提供兩行大約 12 個文本字符。這些 OLED 顯示器有一個I2C總線,完美適配我們的微控制器。所需的+5V電源電壓很方便,因為它與板子的其余部分相同。一些OLED板指定了+3.3V的電源電壓要求,這可以通過查看是否有來檢查或者還不是+3.3V穩(wěn)壓器。我的板上有一個微型662K低壓差+3.3V穩(wěn)壓器,確認它接受+5V,然后它自己轉(zhuǎn)換為+3.3V。關(guān)于I2C邏輯電平輸入,它們可以承受 +5V,我不需要電平轉(zhuǎn)換器。

SSD1306Ascii 是由 Bill Greiman 編寫的用于小型單色 OLED 顯示器的無緩沖字符庫。我經(jīng)常在使用帶有 fixed_bold10x15 字體的 OLED 的項目中使用它。它為我在這些小型顯示器上疲憊的眼睛提供了可讀的字符大小。對于這個特定的項目,F(xiàn)AN_fixed_bold10x15 文件是字體的修改版本,我在其中添加了一些與風扇控制器一起使用的額外圖標。該字體文件可以包含在同一個草圖目錄中,并添加到 Arduino IDE 中以便于編輯。

pYYBAGJ7gXiAaGMVAAHmxmNVIvM775.png

FAN_fixed_bold10x15 是 fixed_bold10x15.h 字體,已通過添加風扇控制器的 OLED 顯示屏使用的額外字符進行修改。逆向工程此字體以創(chuàng)建自定義字符和圖標將在后面詳細介紹。

光耦

PC817C 是一種通用光耦合器,廣泛用于許多電路中,以提供與輔助設(shè)備的電氣隔離。這個組件有幾個版本。這里使用了“C”后綴的版本。不同的版本有不同的收獲。光耦合器的增益表示為電流傳輸比 (CTR),即輸出的集電極電流 (IC) 除以輸入的正向電流 (IF),然后乘以 100%。您可以通過計算和更改電阻器 R3 的值以適應(yīng)不同的增益來使用其他版本和測試功能。

在這個版本中,計算得到的 1K 電阻值可以很好地發(fā)揮作用。一些實測測試證實了這一理論:5V、9V、12V 和 13.8V 的 P-IN 電壓分別產(chǎn)生 3.8mA、7.8mA、10.8mA 和 12.6mA 的電流。這些被認為是最有可能使用的輔助輸入電壓。由于該光耦合器的內(nèi)部 LED 下降約 1.2V,它們各自產(chǎn)生約 4.5mW、9.4mW、13mW 和 15mW 的相應(yīng)功率值。查看數(shù)據(jù)表,我們允許的最大輸入值為 If=50mA、Vr=6V 和 Pin=70mW??巛斎?LED 放置的 1N4148 是為了防止高于 6V 的 Vr。允許的最大輸出值為 Vce=35V、Vec=6V、Ic=50mA 和 Pc=150mW。MCU 的內(nèi)部上拉似乎約為 50k,因為這里測量的是 0.1mA。對于此光耦合器,Ptot = 200mW 最大值(輸入和輸出總功率不得超過 200mW)。

可以按照類似的數(shù)據(jù)表建議使用其他光隔離器?;蛘?,您可以通過取消光耦合器隔離來簡化電路,只需將啟用 P-IN 拉低即可。MCU 的端口 B0 在代碼中激活了其內(nèi)部上拉電阻。

串行端口:

UNO R3 板上已經(jīng)安裝了一個串行端口。這用于以經(jīng)典的 Arduino 方式進行上傳和調(diào)試。

我還在獨立版本中包含了一個串行端口。這 6 個插頭引腳與大多數(shù) FTDI FT232RL USB 轉(zhuǎn)串行適配器模塊完美對齊。如果有可用的引導(dǎo)加載程序,它還允許使用 Arduino IDE 進行調(diào)試,并且確實可以上傳草圖。不要忘記將 FTDI USB 串行板切換為使用 +5V(不是 +3.3V)。對于 USB 到串行編程和調(diào)試,風扇控制器當然應(yīng)該通電。

pYYBAGJ7gXKAUATMAAbe2JaHDDc613.png

ICSP 端口:

UNO R3 板上已經(jīng)安裝了 ICSP 端口。這是將代碼直接刻錄到其微控制器內(nèi)存所必需的,我們很少使用。這可能是制造商將 Arduino 引導(dǎo)加載程序燒錄到 UNO 的方式。

我還在嵌入式版本中包含了一個 ICSP 端口。這是最初將引導(dǎo)加載程序刻錄到獨立版本的唯一方法。這些 3x2 插頭引腳與大多數(shù)常見的 ICSP 編程器(如 USBasp)完美對齊。它允許直接裝載 ATmega 328P。對于 ICSP USBasp 編程,風扇控制器應(yīng)斷電,因為大多數(shù)像 USBasp 這樣的編程器都會為其目標本身供電。

poYBAGJ7gW-AfgYhAAXFpgwW4p0341.png

請注意,一些較舊的 ICSP 編程器需要來自其目標的電源才能運行,在這種情況下,風扇控制器單元應(yīng)通電。有些人可能只需要查看 ICSP 引腳 2 上的電壓即可運行。你的旅費可能會改變。始終最好檢查您的特定程序員

不要忘記將此板切換為使用+5V(不是+3.3V)。ATmega 數(shù)據(jù)表的第 27.8 節(jié)介紹了芯片的在線串行編程。

轉(zhuǎn)速計噪聲濾波器

來自風扇 RPM 引腳 3 的轉(zhuǎn)速計線路上的任何噪音都可能是一個問題,并給出錯誤的讀數(shù)。這種噪音可能是額外的開關(guān)彈跳,如脈沖。盡管通常使用采用霍爾傳感器或光耦合器的轉(zhuǎn)速計電路而不是機械開關(guān)。

以低 RPM 運行的風扇存在這些噪聲脈沖,在評估實際 RPM 值時會產(chǎn)生更大的差異。

例如,在低速時,風扇可能會在 1 秒內(nèi)發(fā)出大約 8 個脈沖。這 8 個脈沖相當于 4 轉(zhuǎn)/秒,因為風扇每轉(zhuǎn)發(fā)送兩個脈沖。因此,4 轉(zhuǎn)/秒是每分鐘 240 轉(zhuǎn)(4 轉(zhuǎn) x 60 秒)。由于反彈而產(chǎn)生的噪聲脈沖可能會產(chǎn)生額外的第 9 個脈沖,該脈沖錯誤地等同于 270rpm(4.5 轉(zhuǎn) x 60 秒)??倢嶋H價值的 12% 左右的誤差。

在較高的轉(zhuǎn)速下,波形中的這些額外噪聲脈沖對計算正確的 RPM 值的影響較小。例如,在更高的速度下,我們可能會得到 266 個脈沖,這實際上意味著 133 轉(zhuǎn)/秒或 7980 轉(zhuǎn)/分鐘(133 轉(zhuǎn) x 60 秒)。此處的額外噪聲脈沖總共產(chǎn)生 267 個脈沖,相當于 133.5 轉(zhuǎn)/秒或 8010 轉(zhuǎn)/分鐘(133.5 轉(zhuǎn)/秒 x 60 秒),與總值的差異較小。誤差低于總實際價值的 4%。這只是一個示例,因為大多數(shù)風扇以最高速度運行在此以下。

為了減輕任何噪聲對風扇 RPM 輸出的影響,使用了由 R2 和 C1(屏蔽電路)或 R7 和 C14(嵌入式版本)組成的積分濾波器。通過一些計算和實驗,找到了足夠的時間常數(shù)。1K 和 1nF 的值給出了一個合適的時間常數(shù),以濾除風扇轉(zhuǎn)速計信號上出現(xiàn)的任何更高頻率的噪聲脈沖。

AMS1117 LDO 穩(wěn)壓器:

這已經(jīng)構(gòu)成了 Arduino 電源子系統(tǒng)的一部分。它提供一個穩(wěn)定的 +5V,也用于為風扇控制器屏蔽供電。就其尺寸而言,它是一款久經(jīng)考驗的耐用調(diào)節(jié)器。由不同的公司制造并且容易獲得。不同的制造商發(fā)布不同的數(shù)據(jù)表,最大輸入電壓和功耗標準略有不同。我也在獨立的嵌入式板上使用過它。

代碼

隨著時間的推移和我的需要,這段代碼被構(gòu)建并添加了特性和功能。我不是程序員,毫無疑問,程序流程中有一些不必要的復(fù)雜性,類似于沙特爾的迷宮。在整個代碼中散布全局變量也必須增加效率。就是這樣。它符合我的目的,并且不會明顯減慢操作速度。

#define DEBUG 1 或 0用于啟用或禁用在串口上輸出調(diào)試信息。您的選擇將在編譯時設(shè)置。啟用后,首先顯示串行端口調(diào)試 OK 消息。然后是帶有編譯日期和時間的草圖文件名。

#include ”FAN_fixed_bold10x15.h“以允許使用我改編的 fixed_bold10x15.h 字體。這具有風扇控制器用來顯示模式和狀態(tài)的特殊圖標字符。它應(yīng)該與風扇控制器草圖位于同一文件夾中。

需要使用 IDE 的庫管理器安裝的一些特定庫是:

OneWire.h和DallasTemperature.h用于與 Dallas Semiconductor DS18B20 溫度傳感器進行通信。

EEPROM.h便于訪問微控制器的非易失性 EEPROM 存儲空間。

SSD1306Ascii.h和SSD1306AsciiWire.h使用 OLED 顯示器并訪問其 I2C 總線。

TimedAction.h需要能夠在代碼中對不同的任務(wù)進行原型處理。三個線程將偽一致地運行。這些用于讀取旋轉(zhuǎn)編碼器、讀取風扇 A 的 RPM 速度以及從傳感器讀取溫度信息。

職能:

writeConfig()和readConfig()將讀寫配置數(shù)據(jù)到芯片的 EEPROM 存儲器。EEPROM 地址可以無限次讀取,但平均只能寫入約 100000 次。如果您每天更改配置 10 次,則相當于大約 27 年的寫入周期壽命。函數(shù)firstRunCheck()查找 key1 和 key2 的值 73 和 42。兩個任意數(shù)字。向無處不在的廣播電臺和《銀河系漫游指南》致敬。如果未找到該芯片之前從未配置過,函數(shù)firstLoadOfEeprom()將使用有效的 EEPROM 值填充新的微控制器芯片。

在開機或重新啟動時,函數(shù)findFanStopLimit()運行。這會找到主風扇 A 開始旋轉(zhuǎn)的 PWM 值。它將這個值作為 minLimit 返回給變量 fanStopLimit。此 PWM 百分比值稍后用于檢測主風扇 A 的停止或故障。

功能oneDit()和oneDah()與使用oneRoger()到聽起來羅杰確認‘R’。它們還會產(chǎn)生 Fan-A 故障警報聲。這兩個功能通過蜂鳴器產(chǎn)生莫爾斯點和破折號聲音。這是我通過位操作端口 C 寄存器直接完成的,其中無源蜂鳴器連接到 PC0 和 PC1。驅(qū)動每個輸出異相,我們會增加音量,因為我們實際上在無源蜂鳴器的壓電板上有 10V 的電位差。

這類似于優(yōu)秀的 ToneAC 庫的工作方式。然而,對于這個簡單的應(yīng)用程序,通過直接編碼這個函數(shù),我避免了使用這個庫。我們不需要它的音量和頻率控制選項,也不需要它的定時器要求。

函數(shù)encoderRead()是一個原型線程,它每 50 毫秒觸發(fā)一次以讀取旋轉(zhuǎn)編碼器。

使用功能menuClicked()我們檢測旋轉(zhuǎn)編碼器瞬時開關(guān)按鈕的按下。

函數(shù)valueChanged()和delimitValue()用于選擇每個配置參數(shù)的單獨值。

函數(shù)oledDisplay()用于使用自定義字體打印到 SSD1306 OLED 的兩行顯示。

當達到并觸發(fā) TEMP MIN 的溫度時,函數(shù)showTempTrigIcon()顯示溫度計類型圖標。

函數(shù)tachCounter()是一個原型線程,它每 1 秒觸發(fā)一次以讀取來自主風扇 A 的 RPM 轉(zhuǎn)速計波形。

函數(shù)getTemperature()是一個原型線程,它每 3 秒觸發(fā)一次,以查詢和讀取來自 DS18B20 傳感器的溫度數(shù)據(jù)。

函數(shù)triggerCheck()檢查溫度觸發(fā)器,并考慮我們是否使用 P 輸入模式并在 P-IN 接頭處具有啟用信號。

函數(shù)fanBsetup()讀取相關(guān)的跳線位置以設(shè)置輔助風扇 B 的工作模式為非對稱、對稱或在開關(guān) ON 時待機。

函數(shù)fanBconversion()計算與風扇 A 相比風扇 B 的運行速度,同時考慮到非對稱、對稱或待機的當前操作模式。

函數(shù)percentToPWM()將百分比速度值轉(zhuǎn)換為適合直接饋送到定時器寄存器以進行 PWM 控制的值。這用于控制 Fan-A 的速度。

函數(shù)percentToBars()將命令到風扇 A 的 PWM 顯示為 OLED 顯示屏上一行的移動條形圖。

函數(shù)fanJamCheck()檢查風扇 A 的停止并在四次違規(guī)后發(fā)出信號。然后它會發(fā)出警報并閃爍紅色警告 LED。

stepIncrement()和steppedDecrement()函數(shù)在被動清掃模式下增加和減少風扇的速度。

函數(shù)pwm25kHzSet()將 PWM 頻率設(shè)置為25khz 。之所以需要此更改,是因為風扇需要以 25KHz 運行的 PWM 信號,并且可用的默認 Arduino PWM 頻率僅為 490Hz 或 980Hz,具體取決于所使用的引腳。

ATmega328P 有三個定時器,我們可以同時使用它們。定時器是為每個時鐘脈沖遞增(或遞減)的寄存器。328P 有三個,它們的使用在 delay()、millis()、micros()、Servo()、Tone() 和其他庫等函數(shù)之間進行切換。時鐘頻率取自 16MHz 晶振時鐘。該時鐘頻率可以在饋送到定時器之前由預(yù)分頻器分頻。當定時器增加到它們的最大寄存器大小時,它們將溢出。對于 8 位定時器的 timer0 和 timer2,這是 255(16 位 timer1 為 65535)。也可以設(shè)置發(fā)生此溢出的值。我們不需要等到定時器寄存器達到 255(或 65535)才能標記溢出。控制寄存器將 timer1 配置為模式 10,無預(yù)分頻,計數(shù)為 320。我們的晶體時鐘為 16Mhz 的值為 320 將為我們提供 25KHz 的 PWM 信號。該代碼使用函數(shù) percentToPWM() 將其從用戶友好的百分比風扇 PWM 值轉(zhuǎn)換。

中斷服務(wù)程序encoderISR()用于讀取旋轉(zhuǎn)編碼器。

中斷服務(wù)程序tachISR()用于對主風扇 A 發(fā)送的轉(zhuǎn)速計 RPM 波形發(fā)出的脈沖進行計數(shù)。

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 觸發(fā)器 1d 由 0% 風扇速度的溫度。

地址 11 tempOffset 0d 0 度的溫度校正。

地址 12 保存并退出 0d 0。

代碼的讀取和寫入功能將跳過地址 4 和 5 或 6 和 7,具體取決于使用硬件跳線(屏蔽上的 U1 或獨立 PCB 上的 J2)選擇了哪些溫度單位。

自定義字符

SSD1306Ascii 庫中包含的 fixed_bold10x15 字體是我的首選字體。它清晰易讀。然而,它只給了我們兩行大約 11 或 12 個字符的行來顯示任何信息。我求助于使用自定義圖標字符來獲取更多關(guān)于小型 0.91” OLED 顯示屏的信息。我修改了 SSD1306Ascii 庫中包含的原始 fixed_bold10x15 字體。這個修改后的字體是 FAN_fixed_bold10x15。它由代碼調(diào)用并且應(yīng)該駐留在同一個草圖文件夾。

額外的字符會將風扇控制器代碼使用的特定圖標打印到 OLED。它們包括生成風扇速度條形圖、OOR 警告、攝氏度和華氏度符號、RPM 風扇旋轉(zhuǎn)符號、RPM 風扇卡住警告、使用中的觸發(fā)模式、使用中的掃描速度和 P 輸入啟用圖標的字符。

滾動瀏覽顯示信息示例:

poYBAGJ7gWaALOfKAAWBfWbIX4M907.png

條形圖顯示了我們對主風扇 A 的控制速度,精確到 10%。該 PWM 條形圖左側(cè)的兩個字母表示我們的工作模式。底線以 RPM 顯示溫度和 Fan-A 轉(zhuǎn)速計速度。超出范圍的 OOR 溫度用“感嘆號”圖標表示。風扇 A 的任何長時間風扇停止也會在 RPM 圖標內(nèi)以“感嘆號”表示。當風扇在達到溫度最小值時被觸發(fā)時,會顯示一個“溫度計”圖標。在 P 輸入模式下,“箭頭”圖標指示何時存在啟用信號。

pYYBAGJ7gWGAHov9AAW-6qfFV-0358.png

這些都是用筆和紙設(shè)計的,然后對原始字體文件進行逆向工程和修改。每個新字符的十六進制值通過編輯添加到原始文件中。

poYBAGJ7gV2AOqR_AAXuMU6xGx4129.png

主要組件:

Arduino UNO R3(已經(jīng)具備 ATmega 328P 微控制器、時鐘振蕩器、電源輸入和電壓管理、復(fù)位系統(tǒng)、USB-串行連接、ICSP 連接等元素)。

DS18B20 溫度傳感器。

光耦PC817C。

OLED SSD1306 0、91“ 顯示屏。

LED 指示燈和無源蜂鳴器報警

用于菜單輸入的旋轉(zhuǎn)編碼器。

板載重置按鈕。

初始設(shè)置跳線接頭。

屏蔽版電路原理

防護罩為 Uno R3 板的頂部提供了一個整潔的附件。它提供了一種將風扇控制器的特定電路連接到 Uno 板上已有的微控制器和子系統(tǒng)的簡單方法。參考屏蔽版原理圖。

Fan-A 和 Fan-B 具有獨立控制的 PWM 輸出信號,這些信號來自引腳 D9 和 D10。RPM 轉(zhuǎn)速計波形從風扇 A 獲取,通過 RC 噪聲濾波器并饋送到引腳 D2。這用于計算和顯示主風扇 A 的旋轉(zhuǎn)速度。

引腳 D11 上的高電平將通過其 1K 限流電阻 R4 點亮紅色 LED4。代碼在確定主風扇 A 卡住時執(zhí)行此操作,以發(fā)出異常信號。同樣,它會通過橫跨 A0 和 A1 的無源蜂鳴器 SG3 發(fā)出警報。每個輸出彼此異相,從而增加了明顯的音量水平。盡管如此,我還是有一個 220 歐姆的小電阻 R1 來將這里的電流降低到可接受的水平。該壓電蜂鳴器在開關(guān)打開時也會響起,并確認配置設(shè)置已保存。

SSD1306 OLED 使用 I2C 總線。它的數(shù)據(jù)和時鐘線連接到 Uno 的引腳 A4/SDA 和 A5/SCL??赡苄枰部赡懿恍枰獌蓚€值為 5.1K 的上拉電阻 R5 和 R6。一些 OLED 板將在沒有這些的情況下運行,因為它們已經(jīng)內(nèi)置了這些。

旋轉(zhuǎn)編碼器 SW1 提供了一種滾動和設(shè)置所需配置的方式。DT 和 CLK 線由引腳輸入 D3 和 D4 讀取。按下時瞬時開關(guān)接地。微控制器在引腳 D6 處讀取此低電平,以循環(huán)瀏覽菜單項。

PC817C 光耦合器 U3 的輸出在其引腳 4 上被帶到輸入 D8。它用于將啟用信號與我們可能選擇連接到接頭 P-IN 的任何輔助設(shè)備進行光學隔離。如果光耦合器輸出側(cè)由其輸入端的內(nèi)部 LED 照亮,則該值將很低。電阻器 R3 將通過輸入電平的電流限制在規(guī)范范圍內(nèi)。1K 的值適用于我們期望在火腿小屋中擁有的最常見電壓。一個 1N4148 二極管可保護同一個輸入二極管免受意外的反極性連接。如果沒有這個保護二極管,光耦合器的 LED 將無法承受超過 6V 的反向電壓。

請注意:P-IN 標頭連接與嵌入式版本不同。外部設(shè)備的使能電壓應(yīng)連接到接頭的引腳 2。它的負極線,通常是輔助設(shè)備的地,連接到 P-IN 接頭的引腳 1。這在絲網(wǎng)上標有“1 G”。

P5 是我們連接 DS18B20 溫度傳感器的位置,以確保我們尊重其引腳排列。其數(shù)據(jù)線 DQ 接至引腳 D7,用作與傳感器通信的單線總線。當我們詢問和接收來自傳感器的溫度數(shù)據(jù)時,白色 LED2 將閃爍。我發(fā)現(xiàn)需要一個上拉電阻來確保良好的總線對話。

2K 的值給了我穩(wěn)定的數(shù)據(jù)流以及我使用的 0805 表面貼裝 LED 的充足照明??梢允褂酶叩闹?,例如 4.7K,但它最終取決于您選擇使用的 LED 兩端的電壓降。這可能因制造商、型號和顏色而異。您的里程可能會有所不同。

在引腳 D5 處打開期間讀取標題 U1。如果此接頭的引腳 1 和 2 由跳線橋接,則 D5 為低電平,代碼將使用華氏度。如果引腳 2 和 3 被橋接,則實際上電路中沒有任何內(nèi)容。D5 的內(nèi)部上拉將使其保持在高位,并且將使用攝氏度單位。

使用標頭 U2,我們可以選擇兩個風扇之間的工作模式。外部引腳連接到 Uno 引腳 A2 和 A3。讀取這些輸入的狀態(tài)將定義輔助風扇 B 如何與風扇 A 一起工作。對稱(串聯(lián))或不對稱(相反)。跳線將一個或另一個引腳連接到中央接地引腳。如果未安裝跳線,則兩側(cè)均為高電平,并且輸入引腳 A2 和 A3 上都將出現(xiàn)邏輯 1。然后,如果 Fan-A 發(fā)生故障,F(xiàn)an-B 將在熱備模式下等待。

我在防護罩上添加了一個小型觸覺開關(guān) SW2。這連接到 Uno 的 RESET 引腳。實際上,它與 Uno 自己的重置開關(guān)平行,但是現(xiàn)在被防護罩覆蓋并且?guī)缀鯚o法訪問。像這樣,仍然可以輕松執(zhí)行重置。

為了給風扇供電,我們需要+12V。該電壓來自桶形連接器,然后通過 AMS1117 將電壓調(diào)節(jié)至 +5V,為其他 UNO 電路供電。對于粉絲來說,我們必須始終在此桶形連接器上為 UNO 提供大約 +12V 的電源。風扇的直流輸入取自 Vin,這是輸入電壓通過 Arduino 上標記為 M7 的反向電壓保護二極管后恢復(fù)的引腳連接。這是一個標準的 1N4007 整流二極管,它將 12V 降低約 0.7V。UNO 的 AMS7111 +5v LDO 穩(wěn)壓器的額定電流為 800mA。理想情況下,我們需要低于這個值,因為我們已經(jīng)處于他推薦的輸入電壓的頂端(盡管最大輸入更高)。因此,小型線性穩(wěn)壓器需要從用于為風扇供電的主要 12V 電壓中釋放約 6V 電壓。作為一個例子,兩個風扇都以 100% 轉(zhuǎn)動時的總電流被測量為大約 270mA。每個風扇大約 100mA(與風扇制造商指定的指定電流消耗一致)和 Arduino 板 70mA。我們可以看到我們與引用的 800mA 相差甚遠,并且非常符合 AMS1117 功耗規(guī)格。

雖然我經(jīng)??吹阶罡?+20V 被引用,但 Arduino 建議不超過 +12V 輸入為其 UNO 板供電。這完全取決于板載 LDO 穩(wěn)壓器必須處理的電流和功率。在桶形連接器輸入端使用 +12V,在二極管壓降之后,我們?nèi)匀挥写蠹s 11.3V 的電壓,這對于驅(qū)動風扇來說是可以接受的。這可以在風扇數(shù)據(jù)表上進行檢查。通常 12V 風扇可承受 10V 至 13.2V(有些甚至 7v 至 13.8V)。使用任何小屋電源中常見的 13.8V,我們有 13.1V。仍在風扇規(guī)格范圍內(nèi)。這種輕微的增加不會給 AMS1117 +5V 穩(wěn)壓器帶來更多的耗散負擔,因為我們沒有通過它運行高電流。

綠色 LED 1 和 3 從總體上向我們保證,我們的板上有 +5V 和 +12V。LED1采用1K限流電阻R7表示+5V,LED3采用2K限流電阻R8表示+12V。電阻值差異是由于指示的電壓不同。像這樣,亮度水平將非常相似。

獨立嵌入式版本:

這是在使用嵌入式 ATmega328P-AU 的單板上,包括所有其他子系統(tǒng)。串行和 ICSP 端口連接頭仍可用于調(diào)試和必要的芯片燒錄。自然,這里有更多的表面貼裝元件需要焊接。這當然包括 328P-AU。它的 0.8mm 間距 TQFP 封裝將更具挑戰(zhàn)性。在初始草圖和/或引導(dǎo)加載程序中配置和加載也是如此。

poYBAGJ7gVaAdoCeAAevPf9Pe68834.png

主要組件:

ATmega 328P-AU

晶體時鐘振蕩器。

DS18B20 溫度傳感器。

光耦PC817C。

OLED SSD1306 0、91” 顯示屏。

AS1117 5V穩(wěn)壓器。

LED 指示燈和無源蜂鳴器報警

用于菜單輸入的旋轉(zhuǎn)編碼器。

板載電源開關(guān)。

板載復(fù)位按鈕。

USB 串行功能可通過外部 FTDI(未來技術(shù)設(shè)備國際)板使用,通過“串行”端口接頭引腳。

外部 USBasp 板通過“ICSP”端口接頭引腳提供 ICSP 功能。

初始設(shè)置跳線接頭。

嵌入式版電路原理:

該版本為風扇控制器代碼提供了一個單板平臺。它是風扇控制器的獨立變體,圍繞 ATmega 328P-AU 芯片構(gòu)建。與許多 Arduino UNO R3 板使用的相同。參考嵌入式板原理圖。

該電路使用 ATmega 328P。不是 328PB 版本,它有一些引腳分配差異。后綴 AU 指的是小型 QFP32 封裝類型,我發(fā)現(xiàn)它在測試和構(gòu)建期間仍然相對容易處理。

由于我們已經(jīng)失去了內(nèi)置 Arduino 引導(dǎo)加載程序的便利性,我們將不得不使用 ICSP 上傳到微控制器的內(nèi)存。還需要添加其他功能,如電源管理、時鐘、復(fù)位和串行調(diào)試端口、ICSP 端口。

屏蔽電路和嵌入式電路都使用相同的代碼。這是因為所有電路功能和連接都設(shè)計為相互兼容。下面我已經(jīng)說明了每個輸入或輸出的等效 Arduino Uno 連接是什么,因為這是草圖中引用的內(nèi)容。

Fan-A 和 Fan-B 具有獨立控制的 PWM 輸出信號,這些信號取自微控制器的引腳 13 和 14。這些是端口引腳 PB1 和 PB2,相當于 Arduino 板上的 I/O 引腳 D9 和 D10。RPM 轉(zhuǎn)速計波形取自風扇 A,通過 RC 噪聲濾波器并饋送到引腳 32,即端口引腳 PD2 (Arduino D2)。這用于計算和顯示主 Fan-A 的速度。

當代碼檢測到風扇 A 停止時,引腳 15、端口引腳 PB3 (Arduino D11) 上的高電平將通過其 1K 限流電阻 R4 點亮紅色 LED4。同樣,它會通過跨越引腳 23 和 24、端口引腳 PC0 和 PC1(Arduino A0 和 A1)的無源蜂鳴器 SG3 發(fā)出警報。每個輸出彼此異相,從而增加了明顯的音量水平。盡管如此,還是有一個小的 220 歐姆電阻器 R1 可以將這里的電流降低到可接受的水平。該壓電蜂鳴器在開關(guān)打開時也會響起,并確認配置設(shè)置已保存。

SSD1306 OLED 使用 I2C 總線。它的數(shù)據(jù)和時鐘線連接到引腳 27 和 28。它們分別是端口引腳 PC4/SDA 和 PC5/SCL(位于 Uno 的 A4/SDA 和 A5/SCL 上)。為了完整起見,包括兩個值為 5.1K 的上拉電阻器 R5 和 R6,盡管一些 OLED 板在沒有這些的情況下也可以工作,因為它們已經(jīng)具有上拉電阻。我的 OLED 已經(jīng)有一個 +3.3V 穩(wěn)壓器,并且可以承受 +5V 邏輯,因此不需要電平轉(zhuǎn)換器。

旋轉(zhuǎn)編碼器 SW1 線 DT 和 CLK 在微控制器的引腳 1 和 2 上讀取。這些是端口引腳 PD3 和 PD4(與 Uno 的 D3 和 D4 相同)。按下時瞬時開關(guān)接地。該低電平在引腳 10 處讀取,該引腳是微控制器上的端口引腳 PD6(Uno 的 D6),以循環(huán)瀏覽菜單項。

PC817C 光耦合器 U3 在其引腳 4 上的輸出被帶到微控制器引腳 12,即端口引腳 PB0(Arduino 上的 D8)。它用于將啟用信號與我們可能選擇連接到接頭 P-IN 的任何輔助設(shè)備進行光學隔離。如果光耦合器輸出側(cè)由其輸入端的內(nèi)部 LED 照亮,則該值將很低。電阻器 R3 將通過輸入電平的電流限制在規(guī)范范圍內(nèi),1K 值適用于我們期望在火腿小屋中擁有的最常見電壓。一個 1N4148 二極管可保護同一個輸入二極管免受意外的反極性連接。如果沒有這個保護二極管,光耦合器的 LED 將無法承受超過 6V 的反向電壓。

請注意:此 P-IN 接頭與屏蔽版本不同。連接外部觸發(fā)器時必須小心。外部線路的負極,通常是接地,應(yīng)該連接到 P-IN 接頭的引腳 2。外部線路的正極應(yīng)連接到引腳 1。這在接頭的絲印上標記為“+VE 1”。

P5 是我們連接 DS18B20 溫度傳感器的位置,確保我們遵循其引腳排列。它的數(shù)據(jù)線 DQ 接至引腳 11,或端口引腳 PD7(Uno 上的 D7)。這是與傳感器通信的單線總線。當我們詢問和接收來自傳感器的溫度數(shù)據(jù)時,白色 LED2 將閃爍。需要一個上拉電阻來確保良好的總線通信。

我發(fā)現(xiàn) 2K 的值可以提供穩(wěn)定的數(shù)據(jù)流以及我使用的 0805 表面貼裝 LED 的充足照明。可以使用 4.7K 等更高的值,但最終取決于所使用的 LED 上的電壓降。這可能因制造商、型號和顏色而異。您的里程可能會有所不同。

使用標頭 J1,我們可以選擇兩個風扇之間的工作模式。這發(fā)生在開關(guān) ON 時。引腳 1 和 3 分別連接到 ATmega 的引腳 26 和 25。這些是微控制器端口引腳 PC3 和 PC2(相當于 Uno 引腳 A3 和 A2)。讀取這些輸入的狀態(tài)將定義輔助風扇 B 如何與風扇 A 一起工作。與主風扇 A 對稱(串聯(lián))或不對稱(相反)。跳線放置將使引腳 2 上的一個或另一個引腳接地。如果跳線跨引腳 3 和 4,則實際上是斷路。邏輯 1 將出現(xiàn)在兩個輸入引腳 A2 和 A3 上,因為它們的內(nèi)部上拉電阻已被配置。使用左側(cè)的跳線,設(shè)置非對稱操作。通過中間的跳線,設(shè)置對稱操作。使用右側(cè)的跳線,設(shè)置熱備。

雖然我們實際上不需要它來橋接 3 號和 4 號引腳,但這只是一種方便的方式來存放小跳線并防止我們丟失它。

頭 J2 在開關(guān)打開期間也被讀取并路由到引腳 9。這是端口引腳 PD5 (Uno D5)。如果此接頭的引腳 1 和 2 由跳線橋接,則引腳 9 被拉低,代碼隨后將以華氏度計算溫度。如果引腳 2 和 3 被橋接,則實際上電路中沒有任何內(nèi)容。同樣,我們只是將跳線存放在引腳 2 和 3 上以避免丟失。在這里,引腳 9 的內(nèi)部上拉將保持高電平,代碼將以攝氏度溫度單位工作。

開關(guān) SW18 在 ATmega 328P 的引腳 29 上連接到設(shè)備的復(fù)位電路。拉低它會強制微控制器復(fù)位。在正常操作中,上拉電阻 R2 將其保持為高電平。二極管 D2 保護微控制器免受由于我們串行端口的 DTR 線上的電容器 C7 而發(fā)生的任何電壓尖峰的影響。如果這個 DTR 變高,我們的復(fù)位線上的電壓會短暫加倍。1N4148 安全地分流這個 10V。串口的 DTR 線上需要電容 C7,作為微分器。當連接到串口時,大多數(shù) USB 轉(zhuǎn)串口芯片會將 DTR 設(shè)置為低并保持低。我們只需要一個短脈沖來初始重啟微控制器。ATmega 的復(fù)位引腳也被任何 ICSP 編程器使用,因此還連接到 ICSP 接頭引腳 5。

綠色 LED 5 和 6 概括地表明我們有 +12V 和 +5V 到達我們的電路板。LED5采用2K限流電阻R10表示+12V,LED6采用1K限流電阻R11表示+5V。電阻值差異是由于指示的電壓不同。像這樣,它們的亮度水平將相等。

DC 桶形連接器和通電開關(guān) SW2 之后,AMS1117 +5V 穩(wěn)壓器 U36 為電路板提供 +5V。該穩(wěn)壓器的版本被引用為具有 15V 至 20V 的最大輸入電壓。雖然推薦值較低。功耗和發(fā)熱將取決于它將通過多少電流。它保持在功耗規(guī)格范圍內(nèi),因為通過它的總電流相對較低。盡管如此,我還是包含了一個臨時 PCB 散熱器,因為我有電路板空間。穩(wěn)壓器的 +5V 選項卡連接到此,它也有通往底部 PCB 層的熱通孔。

AS1117 兩端的 1N4007 二極管 U1,用于在使用 ICSP 端口時進行保護。通常,ICSP 編程器會在 ICSP 端口的引腳 2 上放置 +5V。當我們燒掉 ATmega 芯片時,這可以保護 AMS1117 LDO 穩(wěn)壓器免受反饋電壓的影響。

為了給風扇供電,我們需要+12V。在通過 AMS1117 將電壓調(diào)節(jié)至 +5V 之前,此電壓來自桶形連接器。在輸入電壓通過標有 M7 的反向電壓保護二極管后獲取風扇電壓。這是一個標準的 1N4007 整流二極管,它也會將 12V 電壓降低約 0.7V。

AMS7111 +5v LDO 穩(wěn)壓器的額定電流為 800mA。理想情況下,我們需要低于這個值,因為我們已經(jīng)處于他推薦的輸入電壓的頂端(盡管最大輸入要高得多)。小型線性穩(wěn)壓器需要從用于為風扇供電的主 12V 中釋放大約 6V 的電壓。然而,總電流消耗遠低于這個 800mA 的最大值。因此,即使需要丟棄 6V,但通過它的電流如此之低,我們?nèi)赃h低于 AMS1117 的功耗規(guī)格。

如前所述,為風扇供電所需的 +12V 取自 U37 的陰極。這是 1N4007 二極管,它為我們提供了一些簡單的反向功率保護,但會下降約 0.7V。即使有這種下降,仍然有足夠的電壓在其指定的電壓容差范圍內(nèi)驅(qū)動大多數(shù)風扇。這可以在風扇的數(shù)據(jù)表上進行檢查。通常 12V 風扇可承受 10V 至 13.2V(有些甚至 7v 至 13.8V)。

在桶形連接器輸入端使用 +12V,在二極管的壓降之后,我們?nèi)匀挥写蠹s 11.3V,這是可以接受的。使用13.8V,這是任何小屋電源的正常輸出,我們有13.1V。仍在大多數(shù)風扇規(guī)格范圍內(nèi),但您可能會注意到 RPM 有所增加。這種小的輸入電壓增加不會給 AMS1117 +5V 穩(wěn)壓器帶來更多負擔。

使用 16MHz 外部晶振 Q6。此選項必須在 ATmega 的保險絲設(shè)置中進行配置。晶體 Q6 上的 1M 電阻器 R13 改善了各種晶體規(guī)格的振蕩的啟動和維持。一些微控制器內(nèi)置了此功能。為了完整起見,將其包含在內(nèi)。

許多 Arduino 板使用陶瓷諧振器而不是晶體。雖然不如水晶準確,但它更小,似乎對于日常應(yīng)用來說足夠準確。我選擇了晶體,因為 16MHz 晶體在我所在的地區(qū)更容易找到,并且比微型陶瓷諧振器更容易處理。我不確定內(nèi)部 ATmega 的振蕩器是否足以滿足我們的需求,尤其是對于串行通信功能。

串口頭H7可用于調(diào)試。如果引導(dǎo)加載程序先前已燒錄到微控制器,它也可用于上傳新草圖。需要一個 FT232RL FTDI USB 到 TTL 串行適配器模塊,設(shè)置為在 +5V 下工作。插頭引腳將與大多數(shù)可用的適配器模塊對齊。接地側(cè)在串口絲印上標記的引腳 1 上。Tx 和 Rx 線上的兩個 1K 電阻器 R8 和 R12 限制電流。因此,如果適配器端變高,然后微控制器代碼將相應(yīng)的輸出引腳發(fā)送到低電平,這將避免直接對地短路。串行接頭的 Vcc 引腳 3 未連接。風扇控制器由其自身的穩(wěn)壓器供電,而轉(zhuǎn)接板則通過計算機的 USB 連接供電。兩者都有共同點。100nF 電容 C7 已經(jīng)討論過了。它構(gòu)成了復(fù)位電路的一部分,確保來自串行端口 DTR 引腳的短暫低脈沖觸發(fā)復(fù)位。

要使用 ICSP 端口 J5,需要一個在線串行編程器來直接燒錄到微控制器的內(nèi)存。使用新的 ATmega 328P-AU,這將是將第一個代碼上傳到微控制器的唯一方法。如果您刻錄引導(dǎo)加載程序,您將能夠僅使用串行端口和 Arduino IDE 以經(jīng)典方式上傳草圖。ICSP 接頭引腳排列遵循標準布局,與 Arduino Uno R3 板上一樣。對于 ICSP 編程,我使用便宜且易于使用的 USBasp 編程器。如果引腳匹配,當然可以使用其他程序員。

編程時,風扇控制器板應(yīng)斷電,因為它將從 ICSP 編程器獲取電源。然而,一些較舊的 ICSP 編程器需要在 ICSP 引腳 2 處從其目標獲得電壓才能正常工作。在這種情況下,應(yīng)打開設(shè)備電源。

ICSP 的 MISO 和 MOSI 線位于插頭的引腳 1 和 4,并連接到微控制器 MISO 和 MOSI 引腳 16 和 15。插頭引腳 3 的時鐘線 SCK 在 17 處連接到芯片的 SCK 引腳,復(fù)位線 RST 在頭針 5 加入復(fù)位電路,連接到芯片 29 處的復(fù)位針。前面討論的紅色 LED4 用于在正常運行期間發(fā)出主風扇 A 停止的信號,現(xiàn)在將用于向我們顯示任何 ICSP 活動。端口引腳 PB3 也是 MOSI 引腳,所以 LED4 會在我們連接芯片時閃爍。

嵌入式版本構(gòu)建:

同樣,該板混合使用了通孔和表面貼裝元件。0805 SMD 封裝是首選,因為這種小尺寸仍然相對容易處理。如果您是第一次在更簡單的項目甚至練習板上練習 SMD 焊接技術(shù),可能會很合理。嵌入式版本不是一個好的第一個 SMD 項目。在獲得有效的嵌入式版本的過程中,已經(jīng)有足夠多的陷阱需要提防。這可能會給新手帶來很大的挫敗感。表面貼裝或嵌入式微控制器新手最好從屏蔽版本開始。如果你有信心,我現(xiàn)在將通過一個合乎邏輯的工作流程,這可能會避免自制的不滿。

- 對于 SMD,我使用小型回流焊爐和一些低溫含鉛焊膏。通過使用與所用焊料相匹配的特定溫度曲線,可以輕松控制熱量。當然,您也可以使用熱板和熱風返修站,但請注意因過熱而熔化任何塑料外殼組件。例如,注意電解電容器周圍的電介質(zhì)可能會損壞。對于焊料,無鉛類型現(xiàn)在都是炒作,但相信我,它沒有那么寬容。無鉛焊料容易成珠,不易流動或粘連。大型 PCB 工廠使用環(huán)保焊料是合理的。對于我們的小型家庭愛好來說,它真的是海洋中的一個環(huán)境下降。健康方面,焊芯中助焊劑產(chǎn)生的煙霧實際上更有害,含鉛和無鉛焊料中都存在這種情況。

- 我建議先回流所有 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。完成此操作后,目視檢查焊點是否良好且無焊橋。使用放大鏡或數(shù)碼顯微鏡。在一些 ATmega 328P-AU 引腳上經(jīng)常有橋接,應(yīng)該使用一些拆焊編織物將它們吸起來。一旦我們感到滿意,我們就可以通過 ICSP 接頭進入對微控制器進行編程的下一階段。

poYBAGJ7gU6AYRZOAAJItMKFSjA314.png

檢查您的 ATmega 328P 是否有連接。如果一切順利,至少你的 MISO、MOSI、RST、SCK 和 ICSP 到微控制器的電源引腳是好的。

檢查保險絲和鎖定位的當前狀態(tài)。這些保險絲的出廠默認設(shè)置通常不是我們想要的。在這里,他們需要設(shè)置為該項目的要求。重新編程時要小心,因為錯誤的設(shè)置可能會使微控制器變磚并使其難以再次輕松正?;?/p>

將 ATmega 配置為使用 16MHz 的外部晶振,保留引導(dǎo)加載程序空間、掉電檢測、啟動延遲、引導(dǎo)復(fù)位引腳等。有關(guān)配置四組保險絲的 ATmega 數(shù)據(jù)表和其他資源,請參閱參考書目部分。

低保險絲:對于 CCKDIV8、CKOUT、SUT 和四個 CKSEL 位。

高保險絲:適用于帶 BOOTRST 的 RSTDISBL、DWEN、SPIEN、WDTON、EESAVE 和 BOOTSZ。

擴展保險絲:用于 BOD 級別。

鎖定位:限制對程序存儲器的訪問。

我使用類似于以下值的值設(shè)置該項目的保險絲:

L F7h

H DEh

E FDh

LB FFh

因為新芯片的出廠默認設(shè)置通常是:

長 62 小時

高 D9h

E FFh

LB FFh

(除其他外,微控制器保險絲設(shè)置為使用其內(nèi)部 RC 振蕩器、時鐘除以 8、掉電檢測禁用等)

警告:RSTDISBL、SPIEN、DWEN 保險絲和鎖定位有可能使 ATmega 芯片變磚,或者至少使芯片很難再次使用。因此,在單擊“寫入”按鈕之前,請務(wù)必仔細檢查您的保險絲設(shè)置值。

- 一旦建立了與微控制器及其保險絲的通信,我們就可以加載草圖了。同樣有多種方法可以做到這一點,盡管我發(fā)現(xiàn)在這里使用 Arduino IDE 與相同的 USBasp ICSP 編程器和出色的 MiniCore Arduino 內(nèi)核是實用的。一旦在 IDE 的板管理器中配置,它就允許對許多 ATmega 微控制器(包括現(xiàn)在有時在 Arduino 板上使用的 ATmega 328PB 版本)進行編程。此內(nèi)核使用自定義版本的 Optiboot,它是常規(guī)引導(dǎo)加載程序的一種節(jié)省空間且更高效的替代方案。

在 IDE 的板管理器中設(shè)置 MiniCore 后,我們可以在“工具”中選擇我們的 ATmega 328P 并檢查其選項。編程器當然應(yīng)該設(shè)置為 USBasp(MiniCore)。我可以選擇將引導(dǎo)加載程序上傳到內(nèi)存并激活 USB 端口,以便以后通過串行 USB-FTDI 端口更新草圖。這會在打開時產(chǎn)生 2 秒的延遲。在此期間,引導(dǎo)加載程序被調(diào)用并等待任何草圖上傳。該串口也用于 115200 波特的調(diào)試。我們也可以選擇不上傳引導(dǎo)加載程序并取消串行上傳草圖。由于代碼將立即開始運行,因此不會有 2 秒的延遲。任何草圖上傳都只能使用 ICSP 完成。

最初嘗試上傳 Blink 草圖。在 Arduino IDE 首選項部分啟用詳細模式是一個很好的策略。像這樣,可以看到在編譯和上傳代碼期間發(fā)生的事情的詳細信息。Blink 草圖很小、很簡單并且可以快速上傳。微控制器端口 B3 上的 LED 可用于查看 Blink 草圖是否與電路板配合使用。這應(yīng)該在您的 Blink 代碼中定義為數(shù)據(jù)引腳 11。它是 328P 微控制器引腳 15 上的紅色風扇 A 警告 LED。順便說一句,這個 LED 也連接到 ICSP 端口的 MOSI 線,因此可以在發(fā)生在線串行編程活動時向我們顯示。

既然項目的微控制器端已經(jīng)配置和測試過了,PCB 可以通過手工焊接剩余的通孔元件來完成。

最后,風扇控制器草圖可以上傳到板上并測試其所有功能。

示例用途

我在以下示例中使用風扇控制器。我為每個應(yīng)用程序調(diào)整風扇速度溫度斜率。它確保在可接受的噪音水平下充分冷卻。

天線假負載

隨著價格低廉的 50 歐姆陶瓷電阻器的出現(xiàn),我找到了一些時間來構(gòu)建高功率虛擬負載。它非常適合測試 HF 收發(fā)器。它使用 250N50F 氮化鋁 (AlN) 陶瓷電阻器。替代品包括氧化鈹 (BeO) 電阻器。這些都是以前使用過的組件。被一些有進取心的貿(mào)易商從報廢的設(shè)備中拯救出來。

您應(yīng)該管理應(yīng)用于負載的“電源時間:休息時間”比率。在更長的時間內(nèi)更多的功率意味著更高的溫度,因此需要更多的冷卻時間。

大型散熱器加上這些雙風扇形式的智能冷卻解決方案是理想的選擇。風扇控制器板安裝在此封裝的一端。陶瓷電阻用螺栓固定在散熱器上,它本身夾在兩個冷卻風扇之間。DS18B20 溫度傳感器被夾在與散熱器直接接觸的位置。您可以使用一些氧化鋅導(dǎo)熱膏進行良好測量。我用的尿布膏和我手頭的東西基本一樣。

pYYBAGJ7gUeALW2BAAM8NuoHpxk153.png

工業(yè)電腦

我討厭噪音。我使用帶有 macOS 的 Mac Mini 和帶有 Windows 的工業(yè) PC。既不發(fā)出任何聲音,也完全保持沉默。然而,很快就發(fā)現(xiàn)運行 Windows 的無風扇工業(yè) PC 可能會發(fā)熱很多。盡管被有效地安置在一個大的散熱器盒中,但缺乏氣流意味著它的溫度在執(zhí)行某些任務(wù)時確實會顯著升高。這從來都不是好事。

我使用風扇控制器和兩個風扇來促進 PC 上方的氣流。配置溫度/風扇速度曲線,充分降低其溫度,但仍不會產(chǎn)生分散注意力的風扇噪音。溫度傳感器安裝在與 PC 外殼直接接觸的位置。

poYBAGJ7gUOAEG03AAYyg6s0arw401.png

線性電源單元

我的 Microset PT-135 35A 電源大、堅固且無風扇。它使用線性調(diào)節(jié)并且過度設(shè)計。它在射頻和小屋中都提供了美妙的沉默。它的后部有一個大散熱器,用于散熱。我決定添加一些主動冷卻。并不是它需要它。只是一點幫助,以幫助氣流。

poYBAGJ7gT-AdVQmAAZjMrE9JAw277.png

這里使用了屏蔽版本。配置低風扇速度曲線可將任何風扇噪音保持在無法察覺的水平。它緊緊地夾在散熱片的背面。另一種解決方案可能是使用小磁鐵將其固定在外殼上。溫度傳感器安裝在電路板上方,僅檢測環(huán)境溫度。它只在炎熱的日子里激活風扇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7953

    瀏覽量

    155082
  • 冷卻系統(tǒng)
    +關(guān)注

    關(guān)注

    5

    文章

    124

    瀏覽量

    18140
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    電機冷卻系統(tǒng)設(shè)計

    今天跟大家分享一些電機的冷卻系統(tǒng)設(shè)計思路和案例 電機的功率極限能力往往受電機的溫升極限限制,因此提高電機冷卻散熱能力能立竿見影的提高功率密度。 目前永磁電機占電動汽車裝機量的90%以上,但“永磁
    發(fā)表于 04-01 14:33

    如何利用MSP430微控制器實現(xiàn)數(shù)字風扇控制系統(tǒng)的設(shè)計

    本文主要描述如何利用 MSP430 系列微控制器實現(xiàn)數(shù)字風扇控制系統(tǒng)的設(shè)計。1. 概述風扇常用于
    發(fā)表于 09-08 08:04

    變頻電源的冷卻系統(tǒng)組成部分

    中港揚盛變頻電源的冷卻系統(tǒng)主要包括散熱片和冷卻風扇,冷卻風扇是工作壽命比較短壽的零件,臨近工作壽命時,
    發(fā)表于 11-15 09:18

    使用LM35的冷卻風扇控制器

    描述使用 LM35 的冷卻風扇控制器功率元件的高溫是電子學中的一個已知現(xiàn)象。為了克服這一挑戰(zhàn),設(shè)計人員在組件上安裝散熱以散熱,然而,在許多商用和家用電器設(shè)備中,嵌入式散熱
    發(fā)表于 06-30 07:21

    使用LM35溫度傳感和ATTiny13微控制器控制風扇的教程

    影響設(shè)備的壽命和性能。因此,嵌入一個緊湊的自動冷卻風扇控制器板會很有用。此外,它還可用于保護您自己設(shè)計的電路及其功率元件,例如穩(wěn)壓、MOSFET、功率晶體管等。 之前,我已經(jīng)介紹了一
    發(fā)表于 07-21 06:19

    層流冷卻系統(tǒng)自尋優(yōu)模糊控制研究

    熱軋帶鋼層流冷卻系統(tǒng)將帶鋼由較高的終軋溫度迅速冷卻到卷取溫度,是軋制過程的重要環(huán)節(jié)。由于帶鋼溫度受到各種錯綜復(fù)雜因素的影響,精確的數(shù)學描述無法建立,常規(guī)控制
    發(fā)表于 12-19 12:06 ?7次下載

    一祌新型變壓冷卻系統(tǒng)智能監(jiān)控裝置的研究

     目前,國內(nèi)2201^及以上變壓一般采用強迫 油循環(huán)風冷卻方式。冷卻系統(tǒng)由數(shù)組冷卻器控制裝置組成,每組
    發(fā)表于 06-28 08:38 ?28次下載

    單芯冷卻風扇方案設(shè)計

     冷卻系統(tǒng)中,冷卻風扇的使用率非常高。然而傳統(tǒng)的冷卻風扇系統(tǒng)需要較多的外圍器件,設(shè)計比較復(fù)雜。為
    發(fā)表于 07-04 09:24 ?2374次閱讀

    車輛冷卻系統(tǒng)測控軟件設(shè)計

    數(shù)據(jù)采集卡和傳感等硬件設(shè)計開發(fā)了車輛冷卻系統(tǒng)的測控軟件。詳細介紹了三層架構(gòu)的數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層、表示層在測控程序中的具體實現(xiàn)過程,完成了對測控數(shù)據(jù)的實時采集、存儲與處理,繪制了測控數(shù)據(jù)實時曲線和歷史曲線,以及
    發(fā)表于 03-15 15:16 ?0次下載
    車輛<b class='flag-5'>冷卻系統(tǒng)</b>測控軟件設(shè)計

    汽車冷卻系統(tǒng)如何來實現(xiàn)電氣控制

    在檢所謂“溫度調(diào)節(jié)執(zhí)行元件”,就是指發(fā)動機冷卻系統(tǒng)中的“節(jié)溫”。節(jié)溫實質(zhì)上就是一個“調(diào)溫”,作用是按冷卻水溫度的高低,來改變發(fā)動機
    發(fā)表于 07-09 17:06 ?1383次閱讀

    新能源汽車技術(shù)11--驅(qū)動電動機冷卻系統(tǒng)

    電動汽車驅(qū)動電動機與控制器冷卻系統(tǒng)主要依靠冷卻水泵帶動冷卻液在冷卻管道中循環(huán)流動,通過在散熱
    的頭像 發(fā)表于 12-26 17:51 ?2897次閱讀

    變頻電源的冷卻系統(tǒng)

    中港揚盛變頻電源的冷卻系統(tǒng)主要包括散熱片和冷卻風扇,冷卻風扇是工作壽命比較短壽的零件,臨近工作壽命時,
    發(fā)表于 11-08 17:51 ?11次下載
    變頻電源的<b class='flag-5'>冷卻系統(tǒng)</b>

    使用LM35的冷卻風扇控制器

    電子發(fā)燒友網(wǎng)站提供《使用LM35的冷卻風扇控制器.zip》資料免費下載
    發(fā)表于 07-06 10:56 ?4次下載
    使用LM35的<b class='flag-5'>冷卻</b><b class='flag-5'>風扇</b><b class='flag-5'>控制器</b>

    示波器測量汽車發(fā)動機冷卻風扇信號及分析

    汽車發(fā)動機的冷卻風扇是車輛冷卻系統(tǒng)的重要組成部分,若風扇出現(xiàn)故障,則會導(dǎo)致發(fā)動機冷卻不足或冷卻
    的頭像 發(fā)表于 12-27 14:01 ?1537次閱讀
    示波器測量汽車發(fā)動機<b class='flag-5'>冷卻</b><b class='flag-5'>風扇</b>信號及分析

    冷卻系統(tǒng)各組件及控制作用

    。 一、冷卻系統(tǒng)的組成 冷卻系統(tǒng)通常由以下幾個主要部分組成: 散熱 :用于散發(fā)熱量。 水泵 :用于循環(huán)冷卻液。 風扇 :用于增加空氣流動,
    的頭像 發(fā)表于 09-30 10:59 ?1441次閱讀