目錄
一、系統概述
二、5V直流風扇模塊簡介
2.1? 基本概述
2.2? 關鍵特性
2.3? 接口定義
2.4? 典型驅動電路
2.4.1? 繼電器驅動方案(開關控制)
2.4.2? 三極管驅動方案(調速控制)
2.5? 常見問題解決
三、繼電器模塊控制風扇啟停?
3.1? 硬件準備
3.2? 硬件連接
3.3? 軟件實現
3.3.1? 初始化代碼
3.3.2? 風扇控制函數
3.3.3? 主程序
3.4? 常見問題解決
3.5? 系統特點
四、PWM控制風扇轉速
4.1? 硬件準備
4.2? 硬件連接
4.3? 軟件實現
4.3.1? PWM初始化
4.3.2? 調速控制函數
4.3.3? 主程序邏輯
4.4? 系統優化
4.4.1? 轉速顯示
4.2.2? 按鍵調速
4.5? 系統特點
五、總結
一、系統概述
????????本系統使用STM32F103C8T6單片機通過繼電器模塊控制小風扇的開啟和關閉,實現簡單的開關控制功能。同時使用STM32F103C8T6的PWM功能通過NPN三極管控制5直流風扇轉速,實現低成本的無級調速方案。系統包含PWM生成、轉速顯示和過流保護功能,適用于需要經濟型風扇調速的場合。
二、5V直流風扇模塊簡介
2.1? 基本概述
? ? ? ? 5V兩線直流風扇是最簡單的散熱風扇類型,僅包含電源正極(VCC)和地線(GND)兩根線,通過電壓調節實現調速。其核心部件是直流有刷電機或簡易無刷電機驅動電路,具有結構簡單、成本低廉的特點。
2.2? 關鍵特性
參數 | 典型值/描述 |
---|---|
工作電壓 | 5V ±10% (4.5V-5.5V) |
空載電流 | 50-150mA(取決于尺寸) |
負載電流 | 100-300mA(堵轉時可能更高) |
轉速范圍 | 2000-5000 RPM(電壓線性調節) |
噪音水平 | 25-35 dB(全速時) |
啟動電壓 | 通常≥3V(部分型號需4V以上) |
壽命 | 10,000-20,000小時(有刷電機) |
2.3? 接口定義
線色/引腳 | 功能 | 說明 |
---|---|---|
紅色 | VCC (+5V) | 接5V電源正極 |
黑色 | GND | 接電源負極 |
2.4? 典型驅動電路
2.4.1? 繼電器驅動方案(開關控制)
原理圖設計:
電源部分:
????????圖中標有“+5V”的線路為整個電路提供5伏特的直流電源,這是電路工作的能量來源。
繼電器(U17):
- 作用:繼電器是一種電控制器件,它可以用較小的電流去控制較大電流的通斷,在這里用于控制風扇電源的通斷。
- 工作原理:繼電器內部包含一個線圈和一個開關。當線圈中有電流通過時,會產生磁場,吸引開關動作,從而接通或斷開外部電路。圖中繼電器的引腳1和2連接到控制信號和電源,引腳3和5是常閉和常開觸點,用于連接風扇電源。
晶體管(Q5):
- 作用:晶體管在這里作為開關使用,用于控制繼電器線圈中的電流。
- 工作原理:當晶體管的基極有足夠的電流輸入時,晶體管導通,允許電流從集電極流向發射極,進而使繼電器線圈中有電流通過。圖中基極通過電阻R12連接到“FAN”控制信號,當“FAN”信號為高電平時,晶體管導通。
二極管(D7):
- 作用:二極管在這里起到續流保護的作用。
- 工作原理:當晶體管突然關斷時,繼電器線圈中的電流會突然中斷,由于電感的特性,線圈會產生一個反向電動勢,這個反向電動勢可能會損壞晶體管。二極管D7為這個反向電動勢提供了一個泄放回路,保護晶體管不受損壞。
電阻(R12):
- 作用:電阻R12用于限制流入晶體管基極的電流,防止因電流過大而損壞晶體管。它起到分壓和限流的作用,確保晶體管工作在安全的工作區域內。
控制信號(FAN):
????????“FAN”是外部控制信號輸入,當該信號為高電平時,晶體管導通,繼電器線圈得電,觸點閉合,風扇運轉;當“FAN”信號為低電平時,晶體管截止,繼電器線圈失電,觸點斷開,風扇停止。
2.4.2? 三極管驅動方案(調速控制)
原理圖設計:
電源部分:
????????圖中“+5V”表示該電路的電源輸入為5伏特直流電,為整個電路提供工作電壓,“GND”代表接地,是電路的參考零電位點。
控制信號輸入:
????????“PA11”是外部控制信號的輸入引腳。這個信號通常由單片機的某個引腳輸出,用來控制風扇或電機的啟動與停止。
電阻部分:
- R24(10KΩ):這是一個上拉電阻。當PA11引腳沒有外部信號輸入時,上拉電阻將該引腳的電位拉高到+5V,確保晶體管Q10處于截止狀態,風扇或電機不工作。當PA11引腳接收到有效的控制信號時,會改變晶體管基極的電位。
- R26(1KΩ):它是基極電阻,作用是限制流入晶體管Q10基極的電流,防止因電流過大而損壞晶體管。通過合理選擇R26的阻值,可以確保晶體管工作在合適的放大或開關狀態。
晶體管部分:
Q10(S8050)是一個NPN型晶體管,在這里作為開關使用。
- 當PA11引腳輸入的信號使晶體管基極電壓達到一定閾值時,晶體管導通,電流可以從集電極流向發射極。
- 當基極電壓低于閾值時,晶體管截止,集電極和發射極之間相當于斷開。
保護二極管部分:
????????D1是一個二極管,它與風扇或電機M2并聯,起到續流保護的作用。風扇或電機屬于感性負載,當晶體管突然截止時,感性負載中的電流不能突變,會產生一個反向電動勢。這個反向電動勢可能會損壞晶體管,而二極管D1為反向電動勢提供了一個泄放回路,保護晶體管不受損壞。
負載部分:
????????M2代表風扇或電機,是電路的負載。當晶體管Q10導通時,電流從+5V電源流出,經過風扇或電機M2、導通的晶體管Q10,最終流向GND,形成回路,風扇或電機開始運轉;當晶體管Q10截止時,回路斷開,風扇或電機停止運轉。
2.5? 常見問題解決
風扇不轉: ?
? ?- 檢查啟動電壓是否足夠 ?
? ?- 測量PWM信號是否到達驅動管 ?
異常噪音: ?
? ?- 嘗試調整PWM頻率(1kHz→25kHz測試) ?
電流過大: ?
? ?- 檢查是否堵轉 ?
? ?- 更換更大電流的驅動管 ?
????????通過合理選擇驅動方案和參數,5V兩線直流風扇可滿足大多數低成本的散熱需求,特別適合STM32等嵌入式系統的溫控應用。
三、繼電器模塊控制風扇啟停?
3.1? 硬件準備
- STM32F103C8T6最小系統板
- 5V繼電器模塊
- 5V直流風扇
5V繼電器模塊詳細介紹參考文章:STM32之繼電器模塊
3.2? 硬件連接
控制部分連接:
STM32引腳 | 連接元件 | 說明 |
---|---|---|
PB9 | 繼電器信號端 | 控制繼電器線圈吸合 |
PC13 | LED指示燈 | 風扇狀態指示 |
5V | 繼電器VCC | 模塊供電 |
GND | 繼電器GND | 共地 |
負載部分連接:
5V? ? ? ? ? ? ? ? ? ? ?→???????? 繼電器COM端
GND? ? ? ? ? ? ? ? ?→???????? 風扇地線(黑線)
繼電器NO端? ?? → ????????風扇電源線(紅線)
接線示意圖:
3.3? 軟件實現
3.3.1? 初始化代碼
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"void GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 使能GPIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);// 配置PB9為推挽輸出(繼電器控制)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);// 配置PC13為推挽輸出(LED指示)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_Init(GPIOC, &GPIO_InitStructure);// 初始狀態關閉GPIO_ResetBits(GPIOB, GPIO_Pin_9);GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
GPIO配置 (GPIO_Init
):
- 推挽輸出確保20mA驅動能力(繼電器模塊需70-100mA,通過三極管放大)
- 高速模式優化信號邊沿質量
- 初始狀態置低,防止上電誤動作
3.3.2? 風扇控制函數
void Fan_On(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_9); ?// 繼電器吸合GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED亮
}void Fan_Off(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_9); ?// 繼電器斷開GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED滅
}
硬件響應過程(打開風扇):
- PB9輸出3.3V高電平
- 三極管飽和導通(Vce≈0.3V)
- 繼電器線圈得電(4.7V=5V-0.3V)
- 機械觸點吸合,風扇通電
3.3.3? 主程序
int main(void)
{// 硬件初始化SystemInit();GPIO_Init();while(1){// 開啟風扇5秒Fan_On();Delay_ms(5000);// 關閉風扇5秒Fan_Off();Delay_ms(5000);}
}
- 開啟風扇5秒和關閉風扇5秒循環交替執行。
3.4? 常見問題解決
繼電器不動作:
? ?- 檢查三極管是否損壞
? ?- 測量線圈兩端電壓(應≈5V)
? ?- 測試GPIO輸出是否正常
風扇不轉:
? ?- 檢查5V電源
? ?- 測試繼電器觸點導通情況
? ?- 確認風扇本身正常
3.5? 系統特點
本系統實現了風扇的基本開關控制,具有以下特點:
1. 電路簡單可靠
2. 高低壓完全隔離
3. 狀態指示明確
4. 易于功能擴展
四、PWM控制風扇轉速
4.1? 硬件準備
- STM32F103C8T6最小系統板
- 5V直流風扇
- S8050 NPN三極管(可直接使用電機驅動模塊)
4.2? 硬件連接
STM32引腳 | 連接元件 | 說明 |
---|---|---|
PA6 | 三極管基極(PWM信號輸入端) | TIM3_CH1 PWM輸出 |
PC13 | LED指示燈 | 運行狀態指示 |
5V | 風扇正極 | 電源輸入 |
GND | 公共地 | 三極管發射極 |
4.3? 軟件實現
4.3.1? PWM初始化
void PWM_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;TIM_TimeBaseInitTypeDef TIM_BaseStruct;TIM_OCInitTypeDef TIM_OCStruct;// 使能時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 配置PA6為復用推挽輸出GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);// 定時器基礎配置TIM_BaseStruct.TIM_Prescaler = 72-1; // 1MHz計數頻率TIM_BaseStruct.TIM_Period = 100-1; ? // 10kHz PWM頻率TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_BaseStruct);// PWM通道配置TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCStruct.TIM_Pulse = 0; // 初始占空比0%TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM3, &TIM_OCStruct);// 使能預裝載TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM3, ENABLE);// 啟動定時器TIM_Cmd(TIM3, ENABLE);
}
定時器配置 (PWM_Init
)頻率計算:
- 系統時鐘72MHz經72分頻→1MHz時基
- 每100個計數周期產生1個PWM周期 → 1MHz/100=10kHz
4.3.2? 調速控制函數
void Set_Fan_Speed(uint8_t percent) // percent: 0-100%
{// 限制最小啟動占空比(防止三極管未飽和)if(percent > 0 && percent < 20) percent = 20;?if(percent > 100) percent = 100;TIM3->CCR1 = percent; // 修改捕獲比較值GPIO_WriteBit(GPIOC, GPIO_Pin_13, (percent > 0) ? Bit_SET : Bit_RESET);
}
轉速設置函數 (Set_Fan_Speed
):
- 最小20%占空比確保三極管飽和導通
- 直接寄存器操作提高響應速度
- LED狀態同步指示
4.3.3? 主程序邏輯
int main(void)
{uint8_t speed;// 初始化SystemInit();PWM_Init();ADC1_Init();LED_Init();while(1){float temp = DS18B20_GetTemp();if(temp < 30.0) speed = 0;else if(temp < 50.0) speed = 20 + (temp-30)*4;else speed = 100;Set_Fan_Speed(speed);Delay_ms(50); // 控制周期50ms}
}
? ? ? ? 這里以溫度控制為例,實際速度根據自身系統需求修改speed變量即可。
????????通過溫度傳感器(DS18B20)讀取當前環境溫度,根據預設的溫度-轉速映射關系自動調節風扇轉速,實現溫度自適應的智能散熱控制。
調用DS18B20驅動函數獲取當前溫度值temp(單位:℃)。
(1)溫度低于30℃時關閉風扇(speed = 0
)。
(2)溫度在30℃~50℃之間時根據溫度調速(spped =?20 + (temp-30)*4)。
- 溫度30℃時:
speed = 20 + 0 = 20%
(最小啟動轉速) - 溫度40℃時:
speed = 20 + 10*4 = 60%
- 溫度50℃時:
speed = 20 + 20*4 = 100%
(3)溫度≥50℃時風扇全速運行(speed = 100
)
4.4? 系統優化
4.4.1? 轉速顯示
void Show_Speed(uint8_t percent)
{char buf[16];sprintf(buf, "Speed:%3d%%", percent);LCD_DisplayString(0, 0, buf);
}
將speed傳入函數中,格式化數組后通過顯示屏顯示速度。
4.2.2? 按鍵調速
void Key_Control(void)
{if(KEY_Pressed()) {static uint8_t speed = 0;speed = (speed + 25) % 125; // 0%,25%,50%,75%,100%Set_Fan_Speed(speed);}
}
每次按下按鍵速度增加25%.?
4.5? 系統特點
本系統實現了經濟高效的PWM風扇調速,具有以下特點:
1. 硬件成本極低
2. 調速范圍寬(20%-100%)
3. 電路簡單可靠
實際應用時需根據風扇規格調整:
- 最小啟動占空比
- PWM頻率
五、總結
繼電器控制風扇優缺點:
優點 | 缺點 |
---|---|
控制高壓/大電流負載 | 只能開關控制,無法調速 |
電氣隔離安全可靠 | 機械觸點壽命有限(約10萬次) |
電路簡單,成本低 | 切換時有機械噪音 |
PWM控制風扇優缺點:
優點 | 缺點 |
---|---|
無級調速,控制精細 | 僅適用于直流風扇 |
無機械損耗,壽命長 | 需額外驅動電路(三極管等) |
可結合溫度反饋實現閉環控制 | 低速時可能停轉(需最小占空比) |
方案決策指南:
控制需求 | 推薦方案 | 理由 |
---|---|---|
簡單開關控制 | 繼電器 | 安全隔離高壓 |
直流風扇調速 | PWM | 精準控制轉速 |
低成本、無需調速 | 繼電器+交流風扇 | 電路簡單 |
靜音/節能需求 | PWM+直流風扇 | 可動態降低轉速 |
????????通過合理選擇控制方式,可平衡成本、性能和安全需求。建議在原型階段測試實際負載特性,再確定最終方案。