控DC-DC電源設(shè)計:從PWM控制到閉環(huán)反饋的工程實踐)
1. 項目概述為什么我們需要一臺MCU DC-DC數(shù)控電源如果你玩過電子制作手邊肯定少不了幾個開關(guān)電源模塊比如LM2596、XL4015這些。它們便宜、好用擰個電位器就能調(diào)壓看起來挺方便。但用久了痛點就來了輸出電壓漂移、帶載后電壓掉得厲害、想精確設(shè)定到3.321V對不起電位器的手感沒那么好。更別提你想做個自動化測試或者需要一個能按預(yù)設(shè)程序改變電壓的電源這些模塊就完全抓瞎了。這就是“MCU DC-DC數(shù)控電源”項目要解決的問題。它本質(zhì)上是一個用微控制器MCU來“智能”控制開關(guān)電源DC-DC的裝置。核心思想是把傳統(tǒng)靠人力擰的電位器換成由MCU控制的數(shù)字器件比如DAC或PWM同時讓MCU去讀取實際的輸出電壓電流形成一個閉環(huán)。這樣一來你就能通過按鍵、旋鈕編碼器甚至電腦串口來精確設(shè)定和鎖定電壓電流值電源的穩(wěn)定性、精度和可編程性都得到了質(zhì)的飛躍。這個項目聽起來有點硬核但它融合了電源技術(shù)、模擬電路和嵌入式編程是提升硬件功力的絕佳練手項目。無論是給實驗室添置一個趁手的可調(diào)電源還是深入理解開關(guān)電源的反饋與控制原理它都能帶來豐厚的回報。接下來我會拆解整個設(shè)計思路、關(guān)鍵電路、代碼框架并分享那些只有親手做過才會知道的“坑”。2. 核心方案選型與設(shè)計思路拆解做一個數(shù)控電源首先得確定骨架。市面上成熟的DC-DC芯片方案很多我們的核心任務(wù)是選一個適合被MCU“馴服”的。2.1 DC-DC主拓?fù)溥x擇Buck降壓是起點對于大多數(shù)電子愛好者輸入電壓通常來自12V、24V等適配器或鉛酸電池需要輸出一個更低且可調(diào)的電壓比如0-30V。因此降壓型Buck拓?fù)涫亲钭匀弧⒆畎踩氖走x。Boost或Buck-Boost拓?fù)湓O(shè)計更復(fù)雜涉及電感電流檢測、高壓側(cè)驅(qū)動等問題對初學(xué)者不友好。在Buck芯片的選擇上要重點關(guān)注其反饋Feedback控制方式固定輸出型反饋引腳內(nèi)部連接到固定分壓電阻輸出電壓由芯片內(nèi)部設(shè)定死。這種無法直接用于數(shù)控需要外加復(fù)雜電路去“欺騙”芯片不推薦??烧{(diào)輸出型反饋引腳FB直接引出。輸出電壓由連接在輸出端和FB引腳之間的外部電阻分壓網(wǎng)絡(luò)決定。這是我們需要的類型。通過改變這個分壓網(wǎng)絡(luò)的比例就能改變輸出電壓。常見的可調(diào)Buck芯片如LM2596-ADJ、MP2307、XL4015等它們的FB引腳通常需要一個固定的參考電壓例如1.23V。當(dāng)FB引腳電壓等于這個參考電壓時芯片認(rèn)為輸出達(dá)到了設(shè)定值。我們的MCU就是要通過某種方式動態(tài)地改變這個分壓比。2.2 數(shù)控核心如何讓MCU“擰動”電位器這是數(shù)控電源的“大腦”到“手”的接口。主要有三種主流方案方案一數(shù)字電位器DigiPot原理直接用數(shù)字電位器如MCP41xxx系列替代傳統(tǒng)機(jī)械電位器與FB引腳的分壓電阻串聯(lián)或并聯(lián)。優(yōu)點電路簡單最直觀地模擬了“擰電位器”的行為。缺點分辨率有限通常256級精度受數(shù)字電位器本身電阻精度和溫漂影響較大可承受的電壓和電流有限需注意其電壓范圍是否與電源輸出匹配。適用場景對精度和分辨率要求不高的入門級項目。方案二PWM RC濾波模擬DAC原理MCU產(chǎn)生一個占空比可調(diào)的PWM波經(jīng)過RC低通濾波器后得到一個平滑的直流電壓。將這個電壓通過一個電阻注入到FB引腳網(wǎng)絡(luò)來“抵消”或“疊加”反饋電壓從而改變芯片的平衡點。優(yōu)點成本極低任何帶PWM功能的MCU都能實現(xiàn)。通過提高PWM頻率和濾波器階數(shù)可以獲得不錯的精度。缺點輸出電壓的穩(wěn)定性和響應(yīng)速度受RC濾波器影響大。存在紋波需要精心設(shè)計濾波電路。線性度和溫度穩(wěn)定性一般。適用場景低成本、中等精度要求的項目是愛好者中最流行的方案之一。方案三專用數(shù)模轉(zhuǎn)換器DAC原理使用一個真正的DAC芯片如MCP4725I2C接口輸出一個高精度、高穩(wěn)定性的模擬電壓直接作為FB引腳的參考電壓或通過運放電路去控制反饋網(wǎng)絡(luò)。優(yōu)點精度高、分辨率高12位、16位、穩(wěn)定性好、輸出干凈、線性度極佳。缺點成本比前兩者高需要MCU具備相應(yīng)的通信接口如I2C、SPI。適用場景對輸出精度、穩(wěn)定性和噪聲有較高要求的項目是追求性能的首選。我的選擇與理由對于第一個項目我強(qiáng)烈推薦從方案二PWM入手。它硬件簡單能讓你把精力集中在理解“反饋控制”這個核心概念上。當(dāng)你吃透了PWM方案的優(yōu)缺點后再升級到方案三DAC會非常順暢。本篇文章的后續(xù)詳解也將以PWM方案為主線并在關(guān)鍵處指出升級到DAC方案的差異。2.3 MCU選型夠用就好留有余地MCU是整個系統(tǒng)的大腦負(fù)責(zé)產(chǎn)生PWM、讀取按鍵/編碼器、驅(qū)動顯示、計算電壓電流、管理通信等。核心需求至少1路高分辨率PWM10位以上頻率建議在1kHz-20kHz之間可調(diào)多路ADC用于測量輸出電壓和電流足夠的GPIO和定時器UART串口用于調(diào)試和上位機(jī)控制。常見選擇STM32F103C8T6藍(lán)橋杯/核心板資源豐富性價比高社區(qū)支持極好是首選。GD32系列國產(chǎn)替代性能相近價格有時更有優(yōu)勢。ESP32如果未來想增加Wi-Fi/藍(lán)牙遠(yuǎn)程控制功能這是絕佳選擇但其PWM和ADC性能需仔細(xì)評估是否符合電源精度要求。Arduino Uno (ATmega328P)對于絕對新手用它入門可以快速驗證邏輯但其ADC只有10位PWM分辨率也較低性能是瓶頸。實操心得別糾結(jié)于MCU的型號。J-Flash里沒有你的MCU型號怎么辦這太常見了尤其是使用國產(chǎn)或小眾MCU時。解決辦法1) 使用MCU廠商官方提供的編程/調(diào)試工具如GD的GD-Link華大的HC-Link。2) 使用OpenOCD這類開源工具自己編寫或?qū)ふ覍?yīng)的配置文件.cfg文件。3) 如果只是燒錄程序優(yōu)先使用廠商提供的ISP串口下載方式這通常不依賴具體型號。選型時確保有便捷的下載調(diào)試方式能節(jié)省大量時間。2.4 測量與顯示眼睛和嘴巴電源必須能告訴我們它現(xiàn)在輸出多少伏、多少安。電壓測量直接用MCU的ADC讀取輸出電壓通過電阻分壓網(wǎng)絡(luò)將高壓如30V衰減到MCU的ADC量程內(nèi)如3.3V。這是必須的閉環(huán)反饋依據(jù)。電流測量有兩種主流方案。高端檢流電阻差分放大在電源輸出的正極路徑串聯(lián)一個毫歐級的小電阻如0.05Ω用專用的電流檢測放大器如INA199或精密運放如AD620放大其兩端壓差。這種方式不影響地電位測量精度高是專業(yè)設(shè)計的選擇。低端檢流電阻單端放大在電源輸出的負(fù)極地線路徑串聯(lián)檢流電阻測量電阻對地的電壓。電路簡單成本低但會破壞系統(tǒng)的“地”的完整性可能導(dǎo)致測量誤差適用于要求不高的場合。顯示與交互OLED屏I2C/SPI顯示信息豐富顏值高功耗低強(qiáng)烈推薦。LCD1602/2004經(jīng)典但需要較多IO顯示內(nèi)容有限。輸入旋轉(zhuǎn)編碼器設(shè)定電壓/電流 獨立按鍵開關(guān)輸出、切換模式是最高效的交互組合。3. 硬件電路設(shè)計與核心細(xì)節(jié)解析紙上談兵結(jié)束我們開始畫原理圖。這里以“PWM控制LM2596-ADJ”為核心構(gòu)建一個基礎(chǔ)版本。3.1 DC-DC主功率電路以LM2596-ADJ為例其典型應(yīng)用電路如下圖示意圖Vin (12-24V) --- [LM2596-ADJ] --- Vout (可調(diào)) | | GND FBFB引腳通過兩個電阻R1上拉至Vout和R2下拉至GND連接到地。其輸出電壓公式為Vout Vref * (1 R1/R2)其中Vref是芯片內(nèi)部的參考電壓對于LM2596約為1.23V。我們的目標(biāo)是用MCU控制一個“可變電阻”來替代R1或R2。采用PWM方案時通常采用“注入電流”法。3.2 PWM控制接口電路設(shè)計這是最關(guān)鍵也最容易出問題的一環(huán)。我們不能簡單地把濾波后的PWM電壓接到FB引腳因為FB引腳非常敏感直接連接容性負(fù)載可能導(dǎo)致環(huán)路不穩(wěn)定。一個經(jīng)典且穩(wěn)定的設(shè)計是使用一個運放作為緩沖和求和節(jié)點Vout ---[R_fb1]--- | FB (LM2596) | ---[R_fb2]--- GND | ---[R_inj]--- V_pwm (來自MCU的濾波后PWM電壓) | [Virtual GND at FB due to op-amp]更實用的做法是使用一個運放構(gòu)成一個求和放大器電路?;鶞?zhǔn)獲取從DC-DC芯片的FB引腳即1.23V參考點引出。運放電路使用一顆精密運放如LM358注意其輸入輸出電壓范圍配置成反相求和電路。一路輸入是固定的、由電阻分壓得到的“初始電壓”另一路輸入就是我們的PWM濾波電壓??刂圃磉\放的輸出接回到FB引腳。當(dāng)PWM電壓變化時運放會調(diào)整其輸出電流迫使FB引腳電壓維持在1.23V從而改變Vout。這個電路實現(xiàn)了電氣隔離比直接連接穩(wěn)定得多。參數(shù)計算示例 假設(shè)我們希望用3.3V的MCU通過10位PWM0-1023控制輸出0-15V。PWM經(jīng)濾波后電壓范圍是0-3.3VV_pwm。我們需要設(shè)計運放周圍電阻使得當(dāng)V_pwm0V時Vout0V當(dāng)V_pwm3.3V時Vout15V。這涉及到運放增益的計算。假設(shè)我們選擇R_fb110k R_fb23.3k為LM2596提供約5V的初始輸出。那么需要計算求和電路中對應(yīng)V_pwm輸入的電阻R_inj使得其貢獻(xiàn)的電壓變化能覆蓋0-15V范圍。具體計算需要結(jié)合運放電路公式這里的關(guān)鍵是務(wù)必在仿真軟件如LTspice中先仿真這個環(huán)路確保其穩(wěn)定性和線性度。3.3 電壓電流采樣電路電壓采樣在Vout和GND之間連接一個電阻分壓器例如用100k和10k電阻將30V分壓到約2.73V3.3V。在分壓點與MCU的ADC引腳之間務(wù)必串聯(lián)一個100歐左右的電阻并添加一個0.1uF的電容到地組成低通濾波器濾除開關(guān)噪聲。注意分壓電阻的精度和溫漂直接影響測量精度。至少選擇1%精度的金屬膜電阻。電流采樣低端方案示例在輸出負(fù)極和系統(tǒng)地之間串聯(lián)一個檢流電阻R_sense例如0.1Ω1W功率。用一顆單電源供電的軌到軌運放如MCP6002搭建一個同相放大器。放大倍數(shù)A 1 Rf/Rg。假設(shè)R_sense0.1Ω在5A滿量程時壓降為0.5V。我們希望放大到3.3V滿量程則放大倍數(shù)約為6.6倍。運放輸出接RC濾波后送入MCU ADC。3.4 電源與保護(hù)電路MCU供電從輸入Vin或DC-DC的輸出Vout如果Vout5V取電通過一個LDO如AMS1117-3.3為MCU和運放提供干凈的3.3V。切忌直接用開關(guān)電源的輸出給模擬電路供電紋波會干擾ADC。輸出使能在DC-DC芯片的使能引腳ON/OFF連接一個MCU控制的MOS管實現(xiàn)軟件開關(guān)機(jī)。過流保護(hù)OCP在MCU代碼中實現(xiàn)。實時讀取電流ADC值一旦超過設(shè)定值立即拉低使能引腳關(guān)閉輸出并鎖定狀態(tài)需要手動復(fù)位。反接保護(hù)在輸入Vin端串聯(lián)一個肖特基二極管防止電源反接燒毀電路。4. 軟件架構(gòu)與核心代碼實現(xiàn)硬件是軀體軟件是靈魂。數(shù)控電源的軟件需要穩(wěn)定、實時且可靠。4.1 主程序邏輯與狀態(tài)機(jī)程序不宜用delay進(jìn)行阻塞應(yīng)采用基于定時器中斷的狀態(tài)機(jī)。// 偽代碼以STM32 HAL庫風(fēng)格示意 typedef enum { STATE_IDLE, // 待機(jī)顯示設(shè)定值 STATE_RUNNING, // 輸出開啟進(jìn)行閉環(huán)調(diào)節(jié) STATE_FAULT_OCP, // 過流保護(hù)鎖定 STATE_FAULT_OVP // 過壓保護(hù)鎖定 } PSU_State_t; volatile PSU_State_t g_psu_state STATE_IDLE; void main(void) { // 初始化時鐘、GPIO、ADC、PWMTIM、編碼器EXTI/TIM、OLEDI2C、UART Hardware_Init(); // 讀取EEPROM中的預(yù)設(shè)電壓電流值 Load_Preset_From_EEPROM(); while (1) { switch (g_psu_state) { case STATE_IDLE: // 1. 掃描編碼器和按鍵更新設(shè)定電壓/電流值 Update_Setpoint_From_UI(); // 2. 更新OLED顯示設(shè)定值、狀態(tài)“OFF” OLED_Display_Idle(); // 3. 如果按下“輸出”鍵切換到RUNNING狀態(tài) if (Output_Key_Pressed()) { Enable_DCDC_Output(); // 硬件使能 g_psu_state STATE_RUNNING; } break; case STATE_RUNNING: // 1. 關(guān)鍵在定時器中斷中進(jìn)行的閉環(huán)控制 // 控制邏輯實際在中斷服務(wù)程序里此處主循環(huán)只做監(jiān)控和UI // 2. 讀取ADC獲取實際電壓V_act、電流I_act Read_ADC_Values(V_act, I_act); // 3. 過流保護(hù)判斷 if (I_act I_set I_hysteresis) { Disable_DCDC_Output(); g_psu_state STATE_FAULT_OCP; break; } // 4. 更新OLED顯示設(shè)定值、實際值、狀態(tài)“ON” OLED_Display_Running(V_act, I_act); // 5. 掃描按鍵處理關(guān)閉輸出 if (Output_Key_Pressed()) { Disable_DCDC_Output(); g_psu_state STATE_IDLE; } break; case STATE_FAULT_OCP: // 顯示錯誤信息等待復(fù)位鍵 OLED_Display_Fault(OCP TRIPPED!); if (Reset_Key_Pressed()) { g_psu_state STATE_IDLE; } break; } // 處理串口命令非阻塞 UART_Command_Processor(); } }4.2 閉環(huán)控制算法PID的簡易實現(xiàn)核心控制目標(biāo)是讓實際輸出電壓V_act緊緊跟隨設(shè)定電壓V_set。我們通過調(diào)節(jié)PWM的占空比對應(yīng)控制電壓V_ctrl來實現(xiàn)。一個完整的PID比例-積分-微分對于電源來說可能過于復(fù)雜尤其是微分項容易引入噪聲。對于變化相對緩慢的直流輸出一個PI控制器比例-積分通常就足夠了甚至一個純P控制器比例加上一些技巧也能工作得很好。我們以一個簡單的位置式PI控制器為例在定時器中斷中執(zhí)行例如每1ms一次// 在定時器中斷服務(wù)函數(shù)中 void TIMx_IRQHandler(void) { if (g_psu_state ! STATE_RUNNING) return; float V_set Get_Setpoint_Voltage(); // 獲取設(shè)定電壓 float V_act Read_Voltage_ADC(); // 讀取實際電壓已做濾波和校準(zhǔn) // 計算誤差 float error V_set - V_act; // 比例項 float P_out Kp * error; // 積分項防止積分飽和 g_integral Ki * error; // 積分限幅防止系統(tǒng)啟動時過沖 if (g_integral INTEGRAL_MAX) g_integral INTEGRAL_MAX; if (g_integral INTEGRAL_MIN) g_integral INTEGRAL_MIN; float I_out g_integral; // 計算總控制量 float control P_out I_out; // 輸出限幅對應(yīng)PWM的最大最小占空比 if (control CTRL_MAX) control CTRL_MAX; if (control CTRL_MIN) control CTRL_MIN; // 更新PWM占空比 Update_PWM_Dutycycle((uint32_t)control); }參數(shù)整定技巧Kp, Ki先調(diào)Kp比例將Ki設(shè)為0。逐漸增大Kp直到系統(tǒng)對誤差有快速反應(yīng)。你會看到輸出電壓開始震蕩。此時的Kp值約為臨界值的60%-70%。再調(diào)Ki積分逐漸加入一個很小的Ki。積分項的作用是消除靜態(tài)誤差即最終穩(wěn)定后V_act與V_set的微小偏差。Ki太大會導(dǎo)致系統(tǒng)超調(diào)嚴(yán)重或持續(xù)低頻振蕩太小則消除靜差的速度很慢。測試在空載和帶不同負(fù)載如功率電阻、LED燈、電機(jī)的情況下測試觀察電壓的穩(wěn)定性和瞬態(tài)響應(yīng)比如突然加負(fù)載時電壓的跌落和恢復(fù)速度。4.3 關(guān)鍵外設(shè)驅(qū)動與數(shù)據(jù)處理ADC采樣與濾波電源噪聲大ADC讀數(shù)必須濾波。#define ADC_FILTER_DEPTH 16 uint32_t adc_voltage_buffer[ADC_FILTER_DEPTH] {0}; uint8_t buffer_index 0; // 在ADC轉(zhuǎn)換完成中斷中 void ADC_IRQHandler(void) { uint16_t raw_adc ADC1-DR; // 獲取原始值 adc_voltage_buffer[buffer_index] raw_adc; buffer_index (buffer_index 1) % ADC_FILTER_DEPTH; // 計算平均值 uint32_t sum 0; for(int i0; iADC_FILTER_DEPTH; i) { sum adc_voltage_buffer[i]; } g_filtered_adc_voltage sum / ADC_FILTER_DEPTH; }注意對于電流采樣由于可能存在高頻開關(guān)噪聲可能需要更復(fù)雜的濾波如取中值后再平均。旋轉(zhuǎn)編碼器處理推薦使用定時器的編碼器模式可以自動識別正反轉(zhuǎn)并計數(shù)非常穩(wěn)定高效不占用CPU中斷資源。OLED顯示使用現(xiàn)成的驅(qū)動庫如SSD1306在主循環(huán)中更新顯示避免在中斷中調(diào)用。5. 調(diào)試、校準(zhǔn)與性能優(yōu)化實錄電路焊好代碼寫完真正的挑戰(zhàn)才剛剛開始。5.1 上電前檢查與靜態(tài)測試目視與通斷檢查用萬用表蜂鳴檔檢查電源正負(fù)極是否短路特別是MCU的3.3V和GND。先不上主電只連接MCU的編程器/USB線測試MCU能否正常啟動OLED是否點亮按鍵編碼器是否有邏輯反應(yīng)。測試PWM輸出用示波器或邏輯分析儀查看PWM引腳確保頻率和初始占空比符合預(yù)期。調(diào)整占空比觀察濾波后的電壓是否平滑變化。斷開反饋將DC-DC模塊的FB引腳與我們的控制電路暫時斷開用兩個固定電阻讓其輸出一個中間電壓如5V確認(rèn)主功率電路工作正常。5.2 閉環(huán)調(diào)試示波器是你的眼睛這是最關(guān)鍵的步驟需要一臺示波器。開環(huán)測試控制電路PWM濾波電壓不接入FB用示波器同時測量控制電壓和FB引腳電壓。手動改變PWM看控制電壓變化是否線性、平滑。接入閉環(huán)空載調(diào)試將控制電路接入FB。設(shè)定一個低電壓如2V輕觸開關(guān)上電。觀察輸出電壓波形。如果出現(xiàn)劇烈振蕩比如上下幾百mV甚至幾V的震蕩說明環(huán)路不穩(wěn)定比例系數(shù)Kp太大了或者積分項Ki有問題。立即斷電減小Kp和Ki。如果輸出基本穩(wěn)定但有微小紋波或緩慢漂移可以微調(diào)PI參數(shù)。帶載測試接上一個功率電阻如10Ω/5W作為負(fù)載。觀察從空載切換到帶載瞬間輸出電壓的“跌落”幅度和恢復(fù)時間。這是衡量電源動態(tài)性能的關(guān)鍵?!暗洹贝?、恢復(fù)慢可以適當(dāng)增加比例項Kp讓系統(tǒng)對誤差反應(yīng)更迅猛或者增加積分項Ki加速消除負(fù)載變化帶來的靜差。恢復(fù)過程有振蕩說明Kp太大或Ki不合適需要回調(diào)。在不同負(fù)載輕載、半載、滿載下重復(fù)測試找到一組在所有工況下都相對穩(wěn)定的參數(shù)。沒有一組參數(shù)能完美覆蓋所有情況妥協(xié)是常態(tài)。5.3 校準(zhǔn)讓顯示值等于真實值由于電阻分壓精度、運放偏移、ADC參考電壓誤差的存在你屏幕上顯示的數(shù)字和萬用表測出來的值肯定有差距。必須進(jìn)行校準(zhǔn)。電壓校準(zhǔn)準(zhǔn)備一個高精度的數(shù)字萬用表作為基準(zhǔn)。讓電源輸出一個電壓比如5.000V通過編碼器設(shè)定。用萬用表測量實際的輸出電壓假設(shè)是5.12V。在代碼中建立一個校準(zhǔn)公式。通常采用兩點校準(zhǔn)法線性擬合// 假設(shè)ADC讀數(shù)與電壓是線性關(guān)系V_real scale * ADC_raw offset // 在代碼中記錄兩個點 // 點1: Set12.0V, ADC_read1adc1, DMM_read1real1 // 點2: Set210.0V, ADC_read2adc2, DMM_read2real2 // 計算 scale 和 offset: // scale (real2 - real1) / (adc2 - adc1); // offset real1 - scale * adc1; // 后續(xù)所有讀數(shù)V_real scale * ADC_raw offset;將scale和offset存入MCU的Flash或EEPROM。電流校準(zhǔn)需要一個精密負(fù)載如大功率可調(diào)電阻和一個高精度電流表或萬用表電流檔。方法與電壓校準(zhǔn)類似在0A和滿量程如3A附近取兩點計算校準(zhǔn)系數(shù)。注意電流采樣電路可能存在“零點漂移”即負(fù)載為0時ADC讀數(shù)不為0。需要在代碼中做“零偏校正”在輸出關(guān)閉時記錄一個零點值后續(xù)測量時減去它。5.4 常見問題與排查技巧問題上電后DC-DC模塊嘯叫或發(fā)燙無輸出。排查立即斷電檢查電感規(guī)格是否合適感量、飽和電流。用示波器看開關(guān)節(jié)點SW引腳波形是否異常振蕩。大概率是反饋環(huán)路不穩(wěn)定導(dǎo)致芯片持續(xù)開關(guān)。斷開控制環(huán)路用固定電阻測試模塊本身是否正常。問題輸出電壓有規(guī)律的高頻尖峰紋波如與開關(guān)頻率同頻。排查這是開關(guān)電源的固有特性。優(yōu)化手段在輸出端增加LC濾波器第二級濾波在反饋分壓電阻上并聯(lián)一個小電容如10-100pF提供高頻補(bǔ)償確保所有大電流路徑輸入電容、電感、輸出電容環(huán)路面積最小化在開關(guān)節(jié)點對地加一個RC吸收電路Snubber。問題輕載時輸出正常一帶重載電壓就暴跌。排查首先檢查輸入電源是否足夠輸入電容是否夠大輸入電壓是否被拉低其次檢查功率器件電感的飽和電流是否足夠MOSFET或二極管是否過熱最后檢查電流采樣和保護(hù)電路是否誤觸發(fā)了過流保護(hù)檢流電阻阻值是否過大導(dǎo)致過大的壓降損耗問題MCU偶爾死機(jī)或復(fù)位。排查開關(guān)電源是強(qiáng)烈的噪聲源。確保MCU的電源來自干凈的LDO且LDO輸入輸出端都有足夠的去耦電容10uF鉭電容0.1uF陶瓷電容。模擬地AGND和數(shù)字地DGND采用單點連接。在ADC采樣引腳加RC濾波。檢查程序是否有堆棧溢出、數(shù)組越界等問題。問題編碼器操作時輸出電壓有跳動或屏幕閃爍。排查編碼器中斷處理函數(shù)中不要做耗時操作如顯示刷新。確保中斷函數(shù)盡可能短只設(shè)置標(biāo)志位在主循環(huán)中處理邏輯。檢查編碼器引腳是否配置了上拉電阻并做好軟件消抖。6. 從基礎(chǔ)到進(jìn)階性能提升與功能擴(kuò)展當(dāng)你的基礎(chǔ)版電源能穩(wěn)定工作后就可以考慮升級了??刂品桨干墢腜WM到DAC將PWMRC濾波電路替換為I2C接口的DAC芯片如MCP4725。優(yōu)點立竿見影輸出控制電壓極其干凈穩(wěn)定分辨率高達(dá)12位4096級線性度完美。代碼上只需將原來寫PWM比較寄存器的函數(shù)改為通過I2C發(fā)送目標(biāo)電壓值給DAC。注意DAC的參考電壓源Vref要穩(wěn)定最好使用精密基準(zhǔn)源如REF3033而不是直接用MCU的3.3V。增加恒流CC模式這是可調(diào)電源的標(biāo)配。在軟件中除了電壓環(huán)控制電壓穩(wěn)定再增加一個電流環(huán)。邏輯設(shè)置一個電流設(shè)定值I_set。當(dāng)實際電流I_act低于I_set時電源工作在恒壓CV模式努力維持電壓穩(wěn)定。一旦I_act達(dá)到I_set就切換到恒流CC模式此時電壓環(huán)失效電流環(huán)開始工作通過降低輸出電壓來維持電流恒定。實現(xiàn)需要兩個PI控制器一個用于電壓一個用于電流并設(shè)計一個平滑的模式切換邏輯防止在CV/CC切換點振蕩。增加通信與上位機(jī)利用MCU的UART或USB實現(xiàn)與電腦通信。定義簡單的ASCII協(xié)議如SETV 12.34\r\nREAD?\r\n就可以用串口助手或自己寫一個Python/ LabVIEW上位機(jī)程序來控制電源、讀取數(shù)據(jù)、繪制曲線實現(xiàn)自動化測試。使用更先進(jìn)的拓?fù)浜涂刂破鲗W(xué)習(xí)使用同步整流Buck芯片如TPS54360效率更高。嘗試用MCU直接產(chǎn)生PWM波驅(qū)動MOSFET配合電流采樣實現(xiàn)數(shù)字電源Digital Power這需要對開關(guān)電源拓?fù)浜蛿?shù)字控制理論有更深的理解是電源技術(shù)的高階玩法。制作一臺MCU數(shù)控電源的過程是一個不斷遇到問題、分析問題、解決問題的循環(huán)。它強(qiáng)迫你去理解模擬電路、數(shù)字控制、嵌入式軟件和電磁兼容EMC的方方面面。最終當(dāng)你用自己做的電源為下一個項目供電時那種成就感和對“電”的掌控感是任何成品設(shè)備都無法給予的。從第一個不穩(wěn)定的版本開始不斷調(diào)試、改進(jìn)、升級這個過程本身就是最好的學(xué)習(xí)。