Buck 電路是嵌入式 / 硬件設計中最常用的非隔離型 DC-DC 降壓轉換器,核心功能是將輸入高壓直流(Vin)轉換為更低的穩定直流輸出(Vout < Vin),廣泛應用於 STM32、MCU、傳感器、電源模塊等硬件設備中(如 5V 轉 3.3V 給單片機供電、12V 轉 5V 給 USB 設備供電)。
一、核心原理(通俗版 + 專業版)
1.Buck 電路類似 “高速開關 + 儲能濾波” 的組合:
- 開關(MOS 管)快速通斷(頻率通常 10kHz~1MHz),將輸入電壓 “切” 成脈衝信號;
- 電感(L)和電容(C)組成低通濾波器,將脈衝信號 “抹平” 為平穩的直流電壓;
- 反饋電路實時監測輸出電壓,調整開關通斷時間(佔空比),保證輸出穩定。
2. 專業原理(理想狀態)
- 導通階段(開關閉合)Vin 通過 MOS 管給電感 L 充電,電感儲存磁能,同時給電容 C 充電和負載供電,電流 IL 線性上升;
- 關斷階段(開關斷開)電感釋放磁能,通過續流二極管(或同步整流 MOS 管)繼續給負載和電容供電,電流 IL 線性下降;
- 穩定輸出條件導通時間內電感儲存的能量 = 關斷時間內釋放的能量,輸出電壓公式(理想):
Vout = Vin × D (D為佔空比,0 < D < 1,D = 導通時間T_on / 開關週期T)
例:Vin=12V,D=0.4,理想 Vout=4.8V。
二、核心組成部分(嵌入式硬件常用選型)
|
組件 |
作用 |
嵌入式場景選型建議 |
|
輸入電源(Vin) |
提供高壓直流(如電池、適配器) |
需預留紋波餘量(如 Vin=12V±10%) |
|
開關管(Q1) |
控制電路通斷(核心開關) |
選用 MOS 管(如 N 溝道增強型,導通電阻 Rdson 小),如 AO3400(小電流)、IRF3205(大電流) |
|
續流二極管(D1) |
開關斷開時為電感電流提供迴路 |
肖特基二極管(正向壓降小、開關速度快),如 SS34(3A/40V) |
|
電感(L) |
儲能、濾波,抑制電流突變 |
功率電感(磁屏蔽型,避免干擾),值需計算(通常 1μH~100μH),如 CDRH127(10μH/3A) |
|
輸出電容(Cout) |
濾除輸出紋波,穩定輸出電壓 |
電解電容 + 陶瓷電容組合(電解電容儲能,陶瓷電容濾高頻紋波),如 100μF/16V + 0.1μF |
|
反饋與控制 IC |
調節佔空比,實現輸出穩壓 |
集成芯片(簡化設計),如 LM2596(經典非同步,3A 輸出)、MP2307(同步整流,2A,效率高)、TPS5430(工業級,3A) |
|
負載(RL) |
接收穩定輸出電壓的設備(如 MCU、傳感器) |
需明確額定電壓、額定電流(如 STM32F103 需 3.3V/500mA) |
三、關鍵參數與性能指標(硬件測試重點關注)
- 輸出電壓精度穩定負載下 Vout 與標稱值的偏差(如 ±2%),嵌入式場景需滿足 MCU 供電要求(如 3.3V±0.1V);
- 效率(η)輸出功率 Pout 與輸入功率 Pin 的比值(η=Pout/Pin×100%),同步整流型 Buck(如 MP2307)效率可達 90%+,非同步(如 LM2596)約 75%~85%,低功耗場景優先選同步型;
- 輸出紋波(Vripple)輸出電壓的交流波動(通常 mV 級),嵌入式場景需控制在 50mV 以下(避免干擾 ADC、傳感器);
- 最大輸出電流(Iout_max)芯片 / 電路能穩定供電的最大電流(如 LM2596 最大 3A,超過會觸發過流保護);
- 開關頻率(f_switch)影響電感電容選型(頻率越高,電感電容體積越小,但開關損耗越大),常用 100kHz~500kHz。
四、工作模式(嵌入式場景常見類型)
1. 連續導通模式(CCM)
- 電感電流始終大於 0(導通 + 關斷階段電流不中斷);
- 適用於大負載電流(Iout ≥ 最小連續電流 Iout_min),輸出紋波小、響應速度快;
- 嵌入式場景(如 MCU、電機驅動)主流模式。
2. 斷續導通模式(DCM)
- 關斷階段電感電流降至 0 後,開關才再次導通;
- 適用於小負載電流(Iout < Iout_min),效率較低,紋波較大;
- 低功耗場景(如傳感器休眠供電)需注意模式切換。
五、嵌入式硬件設計實戰(以 3.3V 輸出為例)
1. 經典方案:LM2596 非同步 Buck 電路(5V/12V 轉 3.3V)
關鍵元件選型
- 輸入:Vin=5V 或 12V(如 USB 5V、12V 適配器);
- 芯片:LM2596-3.3(固定 3.3V 輸出,無需分壓電阻,簡化設計);
- 電感:10μH/3A(磁屏蔽功率電感);
- 二極管:SS34(3A/40V 肖特基);
- 電容:Cin=100μF 電解 + 0.1μF 陶瓷,Cout=100μF 電解 + 0.1μF 陶瓷。
硬件測試要點(嵌入式工程師必測項)
輸出電壓測量:空載 / 滿載(如 500mA 負載)時,Vout 應在 3.23V~3.37V(±2% 精度);
- 紋波測試:用示波器測 Vout(探頭接地夾就近接地),紋波應 < 50mVpp;
- 效率測試:測量 Vin、Iin、Vout、Iout,計算 η=(Vout×Iout)/(Vin×Iin)×100%(滿載時應≥75%);
- 過流保護:短路 Vout,芯片應自動關斷,解除短路後恢復正常。
2. 高效方案:MP2307 同步 Buck 電路(12V 轉 3.3V,低功耗)
- 同步整流設計(無續流二極管,用 MOS 管替代),效率可達 95%,適合電池供電的嵌入式設備(如便攜傳感器);
- 輸出電流最大 2A,紋波更小(<30mVpp);
- 電路設計與 LM2596 類似,核心區別是無需續流二極管,芯片集成同步 MOS 管。
六、嵌入式軟件適配(電源管理相關代碼示例)
Buck 電路輸出穩定後,需通過 MCU 軟件實現電源監測、保護等功能(以 STM32 為例):
1. 輸出電壓監測(ADC 採集)
#include "stm32f10x.h"
// ADC初始化(採集Vout分壓後電壓)
void ADC_Init_Vout(void) {
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
// 使能GPIOA和ADC1時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
// PA0配置為模擬輸入(採集分壓後的Vout)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStruct);
// ADC配置(單通道、單次轉換、12位分辨率)
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStruct);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// ADC校準
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
// 讀取Vout實際電壓(分壓比:R1=2.2kΩ,R2=10kΩ,Vout = ADC_Value × 3.3V × (R1+R2)/(R2×4096))
float Get_Vout(void) {
uint16_t adc_val;
float vout;
// 選擇ADC通道0,採樣時間55.5週期
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
// 啓動ADC轉換
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// 等待轉換完成
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 讀取ADC值
adc_val = ADC_GetConversionValue(ADC1);
// 計算實際Vout(3.3V為STM32參考電壓)
vout = adc_val * 3.3f * (12.2f / 10.0f) / 4096.0f;
return vout;
}
// 主函數中使用
int main(void) {
float vout;
ADC_Init_Vout();
while(1) {
vout = Get_Vout();
// 若Vout超出3.0V~3.6V範圍,觸發報警(如點亮LED)
if(vout < 3.0f || vout > 3.6f) {
GPIO_SetBits(GPIOC, GPIO_Pin_13); // PC13點亮報警
} else {
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
delay_ms(500); // 每隔500ms監測一次
}
}
2. 低功耗場景:Buck 電路休眠控制
// 當MCU進入休眠模式時,關閉Buck電路(通過GPIO控制芯片使能引腳)
void Buck_Power_Control(uint8_t enable) {
GPIO_InitTypeDef GPIO_InitStruct;
// 配置PB0為推輓輸出(控制LM2596的SHDN引腳)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
if(enable) {
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 使能Buck電路(SHDN高電平)
} else {
GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 關閉Buck電路(SHDN低電平)
}
}
// MCU休眠函數
void MCU_Sleep(void) {
Buck_Power_Control(0); // 關閉Buck電路
// 配置MCU進入深度休眠模式
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}
七、常見問題與排查(硬件測試避坑指南)
|
問題現象 |
可能原因 |
排查方法 |
|
輸出電壓為 0V |
芯片未供電、使能引腳(SHDN)未拉高、保險絲熔斷 |
測量 Vin 是否正常、SHDN 引腳電壓(應≥2V)、更換保險絲 |
|
輸出電壓偏高 / 偏低 |
分壓電阻選型錯誤、電感電容未焊接、芯片損壞 |
核對分壓電阻值、檢查電感電容焊接、更換芯片 |
|
輸出紋波過大(>100mV) |
電容容量不足、電感選型不當、接地不良 |
增加輸出電容(如並聯 220μF 電解)、更換更大電感、優化接地(單點接地) |
|
芯片發熱嚴重 |
輸出電流超過額定值、散熱不良、開關頻率過低 |
降低負載電流、增加散熱片、調整芯片開關頻率 |
|
電路干擾 MCU / 傳感器 |
電感未屏蔽、佈線不合理 |
選用磁屏蔽電感、縮短開關管 - 電感 - 輸出電容的佈線長度 |
八、總結
Buck 電路是嵌入式硬件的 “電源基石”,核心優勢是結構簡單、效率高、輸出穩定,適配從低功耗傳感器到中功率 MCU 的各類供電需求。嵌入式工程師在設計時,需根據輸入電壓、輸出電壓、最大電流、效率要求選擇合適的芯片(如 LM2596 經典通用、MP2307 高效低功耗),搭配匹配的電感、電容、二極管,並通過硬件測試和軟件適配確保電源可靠性。