并聯(lián)Buck變換器仿真:Plecs平臺(tái)C語(yǔ)言雙閉環(huán)控制實(shí)現(xiàn))
在電力電子領(lǐng)域低壓大電流應(yīng)用場(chǎng)景日益增多例如服務(wù)器電源、GPU供電、通信基站等。傳統(tǒng)的單相Buck變換器在處理大電流時(shí)面臨著開(kāi)關(guān)器件應(yīng)力大、輸出紋波高、動(dòng)態(tài)響應(yīng)慢等挑戰(zhàn)。四相交錯(cuò)并聯(lián)Buck拓?fù)渫ㄟ^(guò)多相并聯(lián)、相位交錯(cuò)的方式有效降低了輸入和輸出電流紋波提升了功率密度和動(dòng)態(tài)性能。然而其控制算法遠(yuǎn)比單相復(fù)雜尤其是要實(shí)現(xiàn)穩(wěn)定、高效的平均電流模式雙閉環(huán)控制。本文將手把手帶你完成一個(gè)完整的工程仿真項(xiàng)目基于Plecs仿真平臺(tái)搭建一個(gè)四相交錯(cuò)并聯(lián)Buck變換器模型并使用C語(yǔ)言編寫(xiě)核心控制算法實(shí)現(xiàn)平均電流模式雙閉環(huán)控制、DCM斷續(xù)導(dǎo)通模式采樣補(bǔ)償和電壓軟起動(dòng)功能。無(wú)論你是電力電子專(zhuān)業(yè)的學(xué)生還是從事電源研發(fā)的工程師都能通過(guò)本文掌握從理論分析、模型搭建到算法實(shí)現(xiàn)的完整流程獲得可直接復(fù)用的仿真模型和C代碼。1. 項(xiàng)目背景與核心概念解析1.1 為什么需要交錯(cuò)并聯(lián)Buck在低壓大電流如1V/100A應(yīng)用中單相Buck的局限性非常明顯電流應(yīng)力大所有電流流經(jīng)單一電感對(duì)功率MOSFET和電感的電流處理能力要求極高。紋波大輸出電流紋波頻率等于開(kāi)關(guān)頻率需要極大的輸出電容來(lái)濾波。動(dòng)態(tài)響應(yīng)慢大電感值限制了電流變化率導(dǎo)致負(fù)載瞬態(tài)響應(yīng)遲緩。交錯(cuò)并聯(lián)技術(shù)將多個(gè)相同的Buck相位單元并聯(lián)并使各相位的開(kāi)關(guān)信號(hào)依次錯(cuò)開(kāi)一定相位對(duì)于N相通常錯(cuò)開(kāi)360°/N。以四相為例各相開(kāi)關(guān)信號(hào)依次延遲90°。這樣做的好處是輸入/輸出紋波抵消各相電流在輸入電容和輸出電容處疊加由于相位交錯(cuò)總電流紋波的幅值顯著減小頻率變?yōu)閱蜗嗟腘倍四相即為4倍開(kāi)關(guān)頻率。這允許使用更小、更便宜的電感和電容。均流與熱分布總電流被平均分配到各相降低了單個(gè)器件的電流應(yīng)力和熱應(yīng)力提高了系統(tǒng)可靠性。提升動(dòng)態(tài)響應(yīng)多相并聯(lián)等效降低了環(huán)路的總電感使得在負(fù)載突變時(shí)可以更快地改變總輸出電流。1.2 平均電流模式控制 vs 電壓模式/峰值電流模式控制模式的選擇對(duì)環(huán)路穩(wěn)定性和性能至關(guān)重要。電壓模式控制僅對(duì)輸出電壓進(jìn)行采樣和PI調(diào)節(jié)生成占空比。它對(duì)電感電流的變化不敏感抗擾性差動(dòng)態(tài)響應(yīng)慢。峰值電流模式控制采樣電感電流的峰值進(jìn)行逐周期限流。它自帶電感電流前饋動(dòng)態(tài)響應(yīng)快但有次諧波振蕩問(wèn)題占空比50%時(shí)需斜坡補(bǔ)償且對(duì)噪聲敏感。平均電流模式控制本項(xiàng)目采用同時(shí)采樣輸出電壓和電感電流的平均值。外環(huán)電壓PI調(diào)節(jié)器輸出一個(gè)電流指令內(nèi)環(huán)電流PI調(diào)節(jié)器控制電感平均電流跟蹤該指令。其優(yōu)點(diǎn)是精度高直接控制平均電流均流效果好。抗噪性強(qiáng)對(duì)電流采樣噪聲不敏感。穩(wěn)定性好無(wú)需斜坡補(bǔ)償適用于寬占空比范圍。特別適合多相交錯(cuò)并聯(lián)系統(tǒng)因?yàn)閮?nèi)環(huán)可以精確控制每一相的平均電流實(shí)現(xiàn)自然均流。1.3 DCM采樣補(bǔ)償?shù)谋匾訠uck變換器在輕載時(shí)可能進(jìn)入斷續(xù)導(dǎo)通模式。在DCM下電感電流波形是三角波的一部分其平均值與峰值的關(guān)系、以及電流采樣值通常是在開(kāi)關(guān)周期內(nèi)某個(gè)固定時(shí)刻采樣與真實(shí)平均值的關(guān)系都發(fā)生了非線(xiàn)性變化。如果仍沿用CCM連續(xù)導(dǎo)通模式下的控制算法會(huì)導(dǎo)致電流環(huán)失控輸出電壓異常。因此必須引入DCM采樣補(bǔ)償算法根據(jù)電路工作狀態(tài)CCM/DCM動(dòng)態(tài)調(diào)整電流采樣值的處理方式或PI調(diào)節(jié)器的參數(shù)確保在整個(gè)負(fù)載范圍內(nèi)都能穩(wěn)定控制。1.4 電壓軟起動(dòng)算法為防止上電瞬間產(chǎn)生巨大的浪涌電流沖擊功率器件和負(fù)載必須控制輸出電壓緩慢上升至目標(biāo)值。軟起動(dòng)算法通常通過(guò)線(xiàn)性或指數(shù)方式緩慢增加電壓環(huán)的參考值來(lái)實(shí)現(xiàn)而不是突然施加一個(gè)高占空比。1.5 Plecs與C語(yǔ)言協(xié)同仿真Plecs是一款強(qiáng)大的電力電子系統(tǒng)級(jí)仿真軟件特別擅長(zhǎng)于開(kāi)關(guān)變換器的快速仿真。其核心優(yōu)勢(shì)在于可以與MATLAB/Simulink無(wú)縫集成并支持通過(guò)C語(yǔ)言編寫(xiě)自定義的控制模塊Plecs C-Script。這允許我們將復(fù)雜的數(shù)字控制算法如PI調(diào)節(jié)、狀態(tài)機(jī)、補(bǔ)償算法用C語(yǔ)言實(shí)現(xiàn)嵌入到Plecs的電路仿真中從而構(gòu)建一個(gè)非常接近實(shí)際數(shù)字控制器如DSP、MCU行為的“硬件在環(huán)”仿真環(huán)境極大地提高了仿真模型的真實(shí)性和可信度。2. 仿真環(huán)境與項(xiàng)目結(jié)構(gòu)準(zhǔn)備2.1 環(huán)境與版本說(shuō)明仿真軟件Plecs Standalone 或 Plecs Blockset (for Simulink)。本文以Plecs Standalone 4.6.3為例但核心概念適用于其他版本。C語(yǔ)言編譯器Plecs內(nèi)置了C代碼編譯環(huán)境基于TCC無(wú)需額外配置。但編寫(xiě)代碼需要遵循其C-Script的特定語(yǔ)法和API。操作系統(tǒng)Windows 10/11 或 macOS。本文演示基于Windows。項(xiàng)目文件結(jié)構(gòu)建議在Plecs中創(chuàng)建一個(gè)新文件夾來(lái)管理本項(xiàng)目所有文件。Four_Phase_Interleaved_Buck/ ├── Main_Model.plecs # 主仿真電路圖 ├── Control_Algorithm.c # C語(yǔ)言控制算法源文件 ├── Parameters.m # MATLAB腳本定義系統(tǒng)參數(shù)可選 └── Simulation_Results/ # 存放仿真結(jié)果數(shù)據(jù)的文件夾2.2 系統(tǒng)主要參數(shù)設(shè)計(jì)在搭建模型前我們需要先確定變換器的規(guī)格和關(guān)鍵參數(shù)。以下為一組示例參數(shù)輸入電壓 Vin: 12 V輸出電壓 Vout: 1.2 V額定輸出電流 Iout_max: 100 A開(kāi)關(guān)頻率 fsw: 300 kHz (每相)相數(shù) N: 4交錯(cuò)相位: 0°, 90°, 180°, 270°目標(biāo)紋波:輸出電壓紋波 ΔVout 10 mV單相電感電流紋波 ΔIL_phase 25% of Iout_max/N (即 6.25A)電感 L: 基于紋波要求計(jì)算L (Vin - Vout) * D / (fsw * ΔIL_phase) 其中DVout/Vin≈0.1。計(jì)算得L ≈ 0.56 μH。可選擇標(biāo)準(zhǔn)值0.47 μH或0.68 μH進(jìn)行微調(diào)。輸出電容 Cout: 基于輸出電壓紋波和負(fù)載階躍響應(yīng)要求計(jì)算。為簡(jiǎn)化假設(shè)使用多個(gè)低ESR的MLCC并聯(lián)總?cè)葜导s500 μF。電流采樣使用串聯(lián)電阻或電感DCR采樣經(jīng)運(yùn)放放大。假設(shè)采樣增益Ks 0.1 V/A。電壓采樣使用電阻分壓假設(shè)分壓比Kv Vout / 3.3V (供ADC參考)。這些參數(shù)將在Plecs模型和C代碼中作為常量或可調(diào)參數(shù)使用。3. 在Plecs中搭建四相交錯(cuò)Buck主功率電路3.1 創(chuàng)建單相Buck單元首先我們搭建一個(gè)標(biāo)準(zhǔn)的同步Buck電路模塊后續(xù)將其復(fù)制為四相。在Plecs中新建一個(gè)Subsystem命名為Buck_Phase。在子系統(tǒng)內(nèi)放置以下元件并連接輸入電壓源Vin(DC, 12V)。上管和下管MOSFET(N_ch_MOSFET)。使用理想開(kāi)關(guān)模型或帶Ron的模型。PWM驅(qū)動(dòng)信號(hào)接口兩個(gè)Input端口分別命名為PWM_H和PWM_L連接到MOSFET的Gate。電感L和輸出電容Cout。注意在最終的四相模型中輸出電容是共享的但這里為了模塊化測(cè)試可以先包含一個(gè)。電流采樣在電感下端串聯(lián)一個(gè)Current Sensor其輸出端命名為I_L_sense。輸出添加Output端口命名為V_out和I_L連接電流傳感器。為該子系統(tǒng)設(shè)置Mask以便參數(shù)化電感值、MOSFET參數(shù)等。3.2 構(gòu)建四相交錯(cuò)并聯(lián)系統(tǒng)在主圖(Main_Model.plecs)中放置4個(gè)Buck_Phase子系統(tǒng)。將它們的輸入并聯(lián)到同一個(gè)Vin源。將它們的輸出V_out端口并聯(lián)在一起連接到一個(gè)共享的輸出電容Cout_total和負(fù)載R_load。負(fù)載可以設(shè)置為固定電阻或動(dòng)態(tài)負(fù)載如電流源。將它們的I_L輸出端口分別引出以便給控制器提供各相電流反饋。為四相分別創(chuàng)建PWM信號(hào)輸入端口PWM1_H,PWM1_L, ...,PWM4_H,PWM4_L。3.3 添加測(cè)量與觀測(cè)點(diǎn)為了便于調(diào)試和觀察波形添加以下測(cè)量總輸出電流在負(fù)載支路串聯(lián)一個(gè)電流傳感器。各相電感電流已從子系統(tǒng)引出。輸出電壓在輸出端并聯(lián)一個(gè)電壓傳感器。輸入電流在輸入電壓源后串聯(lián)一個(gè)電流傳感器觀察輸入紋波抵消效果。 使用Scope或Measured Value元件來(lái)顯示這些信號(hào)。至此主功率電路搭建完成。接下來(lái)是核心——控制器的實(shí)現(xiàn)。4. C語(yǔ)言控制算法設(shè)計(jì)與實(shí)現(xiàn)我們將使用Plecs的C-Script模塊來(lái)編寫(xiě)控制器。該模塊可以執(zhí)行離散時(shí)間的C代碼完美模擬數(shù)字控制器的行為。4.1 C-Script模塊接口與數(shù)據(jù)結(jié)構(gòu)首先在Plecs主圖中放置一個(gè)C-Script模塊。在其配置中我們需要定義輸入、輸出、參數(shù)和內(nèi)部狀態(tài)變量。輸入 (Inputs):V_out_fb: 采樣到的輸出電壓 (ADC值或?qū)嶋H電壓取決于建模精度)I_L1_fb,I_L2_fb,I_L3_fb,I_L4_fb: 四相電感電流采樣值V_ref: 輸出電壓目標(biāo)值 (可用于軟起動(dòng))輸出 (Outputs):PWM1_duty,PWM2_duty,PWM3_duty,PWM4_duty: 計(jì)算出的四相占空比范圍[0,1]可選Phase_State(指示各相CCM/DCM狀態(tài))Error_Code等調(diào)試信號(hào)。參數(shù) (Parameters):Ts: 控制周期通常等于開(kāi)關(guān)周期或其分頻Kp_v,Ki_v: 電壓外環(huán)PI參數(shù)Kp_i,Ki_i: 電流內(nèi)環(huán)PI參數(shù) (可以四相共用一套或分別設(shè)置)I_max: 單相最大電流限制Softstart_Time: 軟起動(dòng)時(shí)間V_out_nom: 額定輸出電壓DCM_threshold: 判斷DCM的電流閾值內(nèi)部狀態(tài)變量 (States):用于存儲(chǔ)PI調(diào)節(jié)器的積分項(xiàng)、上一拍誤差、軟起動(dòng)狀態(tài)等。4.2 雙閉環(huán)PI調(diào)節(jié)器實(shí)現(xiàn)PI調(diào)節(jié)器采用位置式或增量式實(shí)現(xiàn)。位置式更直觀。需注意抗積分飽和。// 文件Control_Algorithm.c (部分核心代碼) // 注意此為Plecs C-Script風(fēng)格代碼需在Plecs環(huán)境中運(yùn)行 #include “plecs.h” #include “math.h” // 定義控制器結(jié)構(gòu)體用于存儲(chǔ)狀態(tài) typedef struct { // 電壓環(huán)PI狀態(tài) double err_v_prev; double integral_v; double i_ref; // 電壓環(huán)輸出的電流指令 // 電流環(huán)PI狀態(tài) (四相) double err_i_prev[4]; double integral_i[4]; double duty[4]; // 計(jì)算出的占空比 // 軟起動(dòng)狀態(tài) double v_ref_ramp; // 軟起動(dòng)過(guò)程中逐漸增加的電壓參考 int softstart_complete; // DCM補(bǔ)償標(biāo)志 int dcm_flag[4]; } ControllerState; // PI計(jì)算函數(shù) (位置式帶抗飽和) double pi_controller(double error, double kp, double ki, double ts, double *integral, double *prev_error, double out_min, double out_max) { // 積分項(xiàng)更新 *integral ki * ts * error; // 比例項(xiàng) double proportional kp * error; // 計(jì)算輸出 double output proportional *integral; // 抗積分飽和如果輸出飽和則停止積分向飽和方向累積 if (output out_max) { output out_max; if (error 0) { // 誤差為正積分會(huì)使輸出更大應(yīng)停止積分 *integral - ki * ts * error; // 回退本次積分 } } else if (output out_min) { output out_min; if (error 0) { // 誤差為負(fù)積分會(huì)使輸出更小應(yīng)停止積分 *integral - ki * ts * error; } } *prev_error error; return output; } // C-Script的主計(jì)算函數(shù)在每個(gè)控制周期Ts被調(diào)用 void system(double t, double *input, double *output, double *state, void *block) { // 映射輸入指針 double V_out_fb input[0]; double I_L1_fb input[1]; double I_L2_fb input[2]; double I_L3_fb input[3]; double I_L4_fb input[4]; double V_ref_target input[5]; // 外部給定的目標(biāo)電壓可用于動(dòng)態(tài)調(diào)整 // 映射輸出指針 double *PWM_duty output; // output[0]~output[3] 對(duì)應(yīng)四相占空比 // 將state指針強(qiáng)制轉(zhuǎn)換為我們的控制器狀態(tài)結(jié)構(gòu)體 ControllerState *s (ControllerState *)state; // --- 第1步電壓軟起動(dòng) --- double V_ref_effective; if (!s-softstart_complete) { // 線(xiàn)性軟起動(dòng) s-v_ref_ramp (V_ref_target / SOFTSTART_TIME) * TS; if (s-v_ref_ramp V_ref_target) { s-v_ref_ramp V_ref_target; s-softstart_complete 1; } V_ref_effective s-v_ref_ramp; } else { V_ref_effective V_ref_target; } // --- 第2步電壓外環(huán) (產(chǎn)生總電流指令) --- double err_v V_ref_effective - V_out_fb; // 電壓環(huán)輸出為總電流指令。注意這里假設(shè)負(fù)載均衡電流指令平均分配。 s-i_ref pi_controller(err_v, Kp_v, Ki_v, Ts, (s-integral_v), (s-err_v_prev), -I_MAX_TOTAL, I_MAX_TOTAL); // I_MAX_TOTAL為總電流限幅 // 將總電流指令除以相數(shù)得到每相電流指令 (簡(jiǎn)單均流) double i_ref_per_phase s-i_ref / 4.0; // --- 第3步電流內(nèi)環(huán) DCM補(bǔ)償 --- double i_fb[4] {I_L1_fb, I_L2_fb, I_L3_fb, I_L4_fb}; for (int phase 0; phase 4; phase) { // DCM判斷如果電流采樣值接近零且在開(kāi)關(guān)周期的一部分時(shí)間內(nèi)為零則判為DCM // 簡(jiǎn)化判斷如果電流反饋絕對(duì)值小于某個(gè)閾值則認(rèn)為可能進(jìn)入DCM邊界 if (fabs(i_fb[phase]) DCM_THRESHOLD) { s-dcm_flag[phase] 1; // DCM補(bǔ)償策略1在DCM下電流環(huán)PI參數(shù)可能需要調(diào)整如減小積分系數(shù) // 策略2或?qū)Σ蓸与娏鬟M(jìn)行補(bǔ)償計(jì)算使其更接近真實(shí)平均值需要知道拓?fù)錉顟B(tài) // 本例采用一種簡(jiǎn)單策略在DCM時(shí)強(qiáng)制降低該相占空比至一個(gè)最小值或零避免振蕩。 // 更復(fù)雜的策略需要重構(gòu)。 double kp_i_adj Kp_i; double ki_i_adj Ki_i * 0.1; // DCM下大幅減小積分作用 double err_i i_ref_per_phase - i_fb[phase]; s-duty[phase] pi_controller(err_i, kp_i_adj, ki_i_adj, Ts, (s-integral_i[phase]), (s-err_i_prev[phase]), 0.0, DUTY_MAX); // 占空比限幅 0~DUTY_MAX // 附加限制DCM下占空比不能太小否則無(wú)法維持可直接置零或最小占空比 if (s-duty[phase] DUTY_MIN_DCM) { s-duty[phase] 0.0; s-integral_i[phase] 0.0; // 重置積分器防止飽和 } } else { s-dcm_flag[phase] 0; // CCM模式使用正常PI參數(shù) double err_i i_ref_per_phase - i_fb[phase]; s-duty[phase] pi_controller(err_i, Kp_i, Ki_i, Ts, (s-integral_i[phase]), (s-err_i_prev[phase]), 0.0, DUTY_MAX); } // 輸出占空比 PWM_duty[phase] s-duty[phase]; } // --- 第4步生成交錯(cuò)PWM信號(hào) (在Plecs中可用其他模塊實(shí)現(xiàn)) --- // C-Script通常只計(jì)算占空比PWM生成可由Plecs的“PWM”模塊完成。 // 我們需要設(shè)置4個(gè)PWM模塊載波相位分別偏移0, 90, 180, 270度。 // 占空比由本C模塊輸出的duty[0]~duty[3]提供。 }代碼關(guān)鍵點(diǎn)解釋結(jié)構(gòu)體封裝將所有控制器狀態(tài)變量封裝在一個(gè)結(jié)構(gòu)體中使代碼更清晰狀態(tài)保持更安全。通用PI函數(shù)編寫(xiě)了一個(gè)帶抗積分飽和和輸出限幅的通用PI函數(shù)電壓環(huán)和電流環(huán)都可調(diào)用。軟起動(dòng)通過(guò)線(xiàn)性增加電壓參考V_ref_effective實(shí)現(xiàn)避免啟動(dòng)沖擊。DCM補(bǔ)償提供了一個(gè)簡(jiǎn)單的DCM處理框架。通過(guò)判斷電流采樣值是否低于閾值DCM_THRESHOLD來(lái)標(biāo)志DCM狀態(tài)。在DCM狀態(tài)下采取了降低積分系數(shù)、限制最小占空比的策略。這是一種簡(jiǎn)化方法更精確的補(bǔ)償需要根據(jù)DCM下的電流波形公式進(jìn)行實(shí)時(shí)計(jì)算。均流策略本例采用了最簡(jiǎn)單的“電流指令平均分配”。在實(shí)際中可能需要加入均流環(huán)來(lái)修正各相電流指令以應(yīng)對(duì)參數(shù)不一致。4.3 在Plecs中集成C-Script并生成PWM將上述C代碼或其主要邏輯寫(xiě)入C-Script模塊的編輯窗口。正確設(shè)置輸入/輸出端口數(shù)量和名稱(chēng)與代碼中的input[]、output[]數(shù)組順序?qū)?yīng)。在Parameters欄定義Kp_v,Ki_v,Kp_i,Ki_i,Ts,DCM_THRESHOLD等變量。在States欄定義狀態(tài)變量的大小即sizeof(ControllerState)并在Initialization代碼區(qū)對(duì)狀態(tài)結(jié)構(gòu)體進(jìn)行初始化。生成交錯(cuò)PWM在Plecs庫(kù)中找到Signal Blocks - PWM - PWM (Carrier-Based)。放置4個(gè)PWM模塊。設(shè)置相同的Switching frequency(300kHz) 和Carrier type(通常為三角波)。設(shè)置不同的Phase delay0,1/(4*fsw),2/(4*fsw),3/(4*fsw)秒以實(shí)現(xiàn)90°交錯(cuò)。將C-Script模塊輸出的duty[0]~duty[3]分別連接到4個(gè)PWM模塊的duty輸入端口。將PWM模塊的PWM輸出信號(hào)連接到主功率電路中對(duì)應(yīng)相的PWMx_H其反相信號(hào)或通過(guò)非門(mén)連接到PWMx_L對(duì)于同步Buck需防止上下管直通可插入死區(qū)時(shí)間模塊。5. 仿真運(yùn)行、調(diào)試與結(jié)果分析5.1 仿真配置仿真時(shí)間設(shè)置為幾個(gè)毫秒足以觀察啟動(dòng)、穩(wěn)態(tài)和負(fù)載瞬態(tài)。求解器選擇適合開(kāi)關(guān)電路的求解器如Tustin/Backward Euler并設(shè)置合適的最大步長(zhǎng)如開(kāi)關(guān)周期的1/50。初始狀態(tài)確保電容電壓、電感電流從零開(kāi)始。5.2 關(guān)鍵波形觀察與調(diào)試運(yùn)行仿真在Scope中觀察以下關(guān)鍵波形啟動(dòng)過(guò)程輸出電壓V_out應(yīng)平滑地從0V斜坡上升至1.2V無(wú)過(guò)沖或振蕩。驗(yàn)證軟起動(dòng)算法。四相電感電流I_L1~I_L4在啟動(dòng)初期電流應(yīng)受控上升各相電流形狀相似相位交錯(cuò)。總輸入電流I_in紋波應(yīng)顯著小于單相情況。穩(wěn)態(tài)性能輸出電壓紋波測(cè)量峰峰值應(yīng)小于10mV。觀察紋波頻率是否為4*fsw1.2MHz。各相電感電流檢查平均值是否相等均流效果。紋波相位應(yīng)正確交錯(cuò)。開(kāi)關(guān)節(jié)點(diǎn)電壓觀察是否有振鈴評(píng)估MOSFET開(kāi)關(guān)行為。動(dòng)態(tài)性能負(fù)載階躍響應(yīng)在仿真中途將負(fù)載電阻突然減小或增加一個(gè)階躍負(fù)載電流。觀察輸出電壓的跌落/過(guò)沖和恢復(fù)時(shí)間。良好的雙閉環(huán)控制應(yīng)能快速恢復(fù)。參考電壓階躍改變V_ref觀察輸出電壓的跟蹤速度和超調(diào)量。DCM模式驗(yàn)證將負(fù)載設(shè)置得非常輕如額定負(fù)載的1%。觀察是否有一相或多相電感電流進(jìn)入斷續(xù)狀態(tài)。檢查控制器輸出的占空比和DCM標(biāo)志位s-dcm_flag看補(bǔ)償算法是否生效輸出電壓是否仍能保持穩(wěn)定。5.3 控制器參數(shù)整定調(diào)試PI參數(shù)雙閉環(huán)PI參數(shù)的整定是調(diào)試的關(guān)鍵。通常采用“由內(nèi)到外”的整定順序內(nèi)環(huán)電流環(huán)先斷開(kāi)電壓環(huán)直接給一個(gè)固定的電流指令i_ref_per_phase。將Kp_v和Ki_v設(shè)為0Kp_i和Ki_i從較小值開(kāi)始。給一個(gè)電流階躍指令如從0到5A觀察電感電流的跟蹤波形。調(diào)整Kp_i以改變響應(yīng)速度調(diào)整Ki_i以消除靜差。目標(biāo)是電流能快速、無(wú)超調(diào)地跟蹤指令。電流環(huán)帶寬通常設(shè)為開(kāi)關(guān)頻率的1/10 ~ 1/5。外環(huán)電壓環(huán)接上電壓環(huán)給定目標(biāo)電壓。恢復(fù)Kp_v和Ki_v從較小值開(kāi)始。觀察啟動(dòng)波形或負(fù)載階躍響應(yīng)。電壓環(huán)的帶寬應(yīng)遠(yuǎn)低于電流環(huán)通常為電流環(huán)的1/5 ~ 1/10以確保穩(wěn)定性。Kp_v影響動(dòng)態(tài)響應(yīng)速度Ki_v影響穩(wěn)態(tài)精度和恢復(fù)速度。6. 常見(jiàn)問(wèn)題與排查思路在仿真和實(shí)際實(shí)現(xiàn)中你可能會(huì)遇到以下問(wèn)題問(wèn)題現(xiàn)象可能原因排查思路與解決方案仿真不收斂或報(bào)錯(cuò)1. 仿真步長(zhǎng)太大。2. 電路中有瞬間開(kāi)路/短路。3. C-Script代碼有運(yùn)行時(shí)錯(cuò)誤除零、數(shù)組越界。4. PI輸出占空比超出[0,1]范圍。1. 減小最大仿真步長(zhǎng)使用更嚴(yán)格的求解器設(shè)置。2. 檢查PWM驅(qū)動(dòng)邏輯確保上下管有死區(qū)防止直通。3. 在C代碼中加入邊界檢查和初始化。使用Plecs的調(diào)試功能單步執(zhí)行C代碼。4. 在PI函數(shù)和最終輸出前嚴(yán)格限幅。啟動(dòng)時(shí)電感電流過(guò)大1. 軟起動(dòng)速度過(guò)快或未生效。2. 電壓環(huán)積分器初始值或飽和值設(shè)置不當(dāng)。3. 負(fù)載過(guò)重。1. 加長(zhǎng)軟起動(dòng)時(shí)間Softstart_Time。2. 初始化時(shí)將所有積分器清零并設(shè)置合理的輸出限幅如I_max。3. 檢查負(fù)載是否在變換器能力范圍內(nèi)。穩(wěn)態(tài)時(shí)輸出電壓誤差大1. 電壓環(huán)PI參數(shù)不當(dāng)尤其是Ki_v太小。2. 電流采樣或電壓采樣增益設(shè)置錯(cuò)誤。3. 占空比計(jì)算達(dá)到限幅飽和。1. 增大Ki_v但注意可能影響穩(wěn)定性需重新整定。2. 校準(zhǔn)采樣電路的增益參數(shù)Ks和Kv。3. 檢查PI調(diào)節(jié)器的輸出是否飽和增大電流限幅或檢查負(fù)載。各相電流不均流1. 電感值、MOSFET導(dǎo)通電阻等參數(shù)存在微小差異。2. 電流采樣通道增益不一致。3. 簡(jiǎn)單的“指令平均分配”策略無(wú)法克服參數(shù)差異。1. 在仿真中可故意設(shè)置參數(shù)微差來(lái)測(cè)試。2. 校準(zhǔn)各相電流采樣增益。3.實(shí)現(xiàn)均流環(huán)在電流內(nèi)環(huán)的指令上加入一個(gè)修正量該修正量由該相電流-平均電流經(jīng)過(guò)一個(gè)小的PI調(diào)節(jié)器產(chǎn)生。輕載DCM時(shí)輸出電壓震蕩1. DCM補(bǔ)償算法未生效或參數(shù)不當(dāng)。2. DCM閾值DCM_THRESHOLD設(shè)置不合理。3. DCM下PI參數(shù)過(guò)于激進(jìn)。1. 確認(rèn)dcm_flag能在輕載時(shí)正確置位。2. 調(diào)整DCM_THRESHOLD通常設(shè)為單相額定電流的5%~10%。3. DCM下大幅降低電流環(huán)的積分系數(shù)Ki_i甚至可以將控制模式切換為電壓模式或滯環(huán)控制。負(fù)載瞬態(tài)響應(yīng)差電壓跌落大1. 電壓環(huán)帶寬太低。2. 輸出電容不夠大。3. 電流環(huán)限幅I_max太小無(wú)法提供足夠的瞬態(tài)電流。1. 在穩(wěn)定前提下適當(dāng)提高電壓環(huán)的Kp_v和Ki_v。2. 增加輸出電容或使用更低ESR的電容。3. 根據(jù)負(fù)載階躍要求合理設(shè)置電流限幅值。PWM信號(hào)不同步或相位錯(cuò)誤1. Plecs中PWM模塊的Phase delay設(shè)置錯(cuò)誤。2. 多個(gè)PWM模塊的載波未同步。1. 仔細(xì)計(jì)算相位延遲時(shí)間第n相延遲(n-1)/(N*fsw)秒。2. 確保所有PWM模塊使用相同的載波頻率和類(lèi)型。在Plecs中它們通常是獨(dú)立的但頻率設(shè)置一致即可。7. 最佳實(shí)踐與工程建議模塊化與參數(shù)化將Buck相位、控制器、PWM生成器等封裝成子系統(tǒng)或自定義模塊。所有電路參數(shù)L, C, R, fsw和控制參數(shù)Kp, Ki, 限幅值都定義為變量集中在模型開(kāi)頭或一個(gè)單獨(dú)的初始化腳本如Parameters.m中設(shè)置。這樣便于參數(shù)掃描和優(yōu)化。控制器代碼健壯性初始化務(wù)必在C-Script的Initialization部分將所有狀態(tài)變量特別是積分項(xiàng)和標(biāo)志位清零或設(shè)為安全初始值。限幅保護(hù)對(duì)PI調(diào)節(jié)器的輸出、占空比指令進(jìn)行嚴(yán)格的上下限幅防止產(chǎn)生非法的控制信號(hào)。抗積分飽和必須實(shí)現(xiàn)如示例代碼所示這是防止“windup”現(xiàn)象、改善動(dòng)態(tài)性能的關(guān)鍵。浮點(diǎn)處理注意C語(yǔ)言中的浮點(diǎn)數(shù)精度和除零問(wèn)題。仿真到實(shí)際的考量采樣與計(jì)算延遲在實(shí)際數(shù)字控制器中從采樣到PWM更新會(huì)存在至少一個(gè)控制周期的延遲。在Plecs C-Script中可以通過(guò)在計(jì)算占空比后將其保持一個(gè)Ts再輸出來(lái)模擬此延遲使模型更真實(shí)。量化效應(yīng)實(shí)際ADC對(duì)電壓和電流采樣存在量化誤差。可以在C代碼中對(duì)輸入信號(hào)加入一個(gè)量化函數(shù)來(lái)模擬。死區(qū)時(shí)間在實(shí)際驅(qū)動(dòng)同步Buck的上下管時(shí)必須插入死區(qū)時(shí)間以防止直通。在Plecs中可以使用Signal Blocks - PWM - Dead Time模塊來(lái)生成帶死區(qū)的互補(bǔ)PWM信號(hào)。擴(kuò)展性與高級(jí)功能均流環(huán)對(duì)于高精度或大功率應(yīng)用建議實(shí)現(xiàn)獨(dú)立的均流環(huán)以補(bǔ)償各相參數(shù)的不一致性。高級(jí)DCM補(bǔ)償本文的DCM補(bǔ)償是簡(jiǎn)化版。更精確的方法是在DCM下根據(jù)輸入輸出電壓和電感參數(shù)計(jì)算出維持輸出電壓所需的最小平均電流和對(duì)應(yīng)的占空比直接給定一個(gè)占空比或動(dòng)態(tài)修改電流指令。故障保護(hù)在C代碼中集成過(guò)壓保護(hù)OVP、過(guò)流保護(hù)OCP、過(guò)溫保護(hù)OTP的邏輯并能在故障時(shí)安全關(guān)斷PWM。效率評(píng)估在Plecs模型中可以測(cè)量輸入功率和輸出功率計(jì)算變換器在不同負(fù)載下的效率曲線(xiàn)。通過(guò)本文的詳細(xì)步驟你應(yīng)該已經(jīng)成功在Plecs中搭建了一個(gè)功能完整的四相交錯(cuò)并聯(lián)Buck變換器仿真模型并實(shí)現(xiàn)了基于C語(yǔ)言的平均電流雙閉環(huán)控制。這個(gè)模型不僅是一個(gè)學(xué)習(xí)工具更可以作為實(shí)際電源產(chǎn)品開(kāi)發(fā)前期的強(qiáng)大驗(yàn)證平臺(tái)。你可以在此基礎(chǔ)上修改參數(shù)、測(cè)試不同的控制算法、模擬各種故障工況從而在投入硬件成本之前就深入理解系統(tǒng)特性并優(yōu)化設(shè)計(jì)。下一步可以嘗試將控制算法移植到真實(shí)的DSP如TI C2000系列或MCU上完成從仿真到硬件的跨越。