Buck 電路是嵌入式 / 硬件設計中最常用的非隔離型 DC-DC 降壓轉換器,核心功能是將輸入高壓直流(Vin)轉換為更低的穩定直流輸出(Vout < Vin),廣泛應用於 STM32、MCU、傳感器、電源模塊等硬件設備中(如 5V 轉 3.3V 給單片機供電、12V 轉 5V 給 USB 設備供電)。

DC-DC Buck 電路(降壓轉換器)全面解析_低功耗

一、核心原理(通俗版 + 專業版)

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)

三、關鍵參數與性能指標(硬件測試重點關注)

  1. 輸出電壓精度穩定負載下 Vout 與標稱值的偏差(如 ±2%),嵌入式場景需滿足 MCU 供電要求(如 3.3V±0.1V);
  2. 效率(η)輸出功率 Pout 與輸入功率 Pin 的比值(η=Pout/Pin×100%),同步整流型 Buck(如 MP2307)效率可達 90%+,非同步(如 LM2596)約 75%~85%,低功耗場景優先選同步型;
  3. 輸出紋波(Vripple)輸出電壓的交流波動(通常 mV 級),嵌入式場景需控制在 50mV 以下(避免干擾 ADC、傳感器);
  4. 最大輸出電流(Iout_max)芯片 / 電路能穩定供電的最大電流(如 LM2596 最大 3A,超過會觸發過流保護);
  5. 開關頻率(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 高效低功耗),搭配匹配的電感、電容、二極管,並通過硬件測試和軟件適配確保電源可靠性。