整定)
做儲能系統(tǒng)的都知道雙向DC-DC變換器是整個(gè)電池充放電控制的核心環(huán)節(jié)。我調(diào)過不少臺架最深的體會是控制邏輯如果有問題在功率實(shí)驗(yàn)臺上付出的學(xué)費(fèi)不低與其直接上硬件不如先在Simulink里做一輪SOC充電放電雙模式仿真把模式切換、電流環(huán)、電壓環(huán)的邏輯全部驗(yàn)證清楚。這篇文章我想用一次實(shí)際搭建的5kW儲能電池仿真模型為例把從拓?fù)溥x型到參數(shù)整定的完整過程講透。內(nèi)容包括非對稱半橋拓?fù)涞倪x擇理由、SOC估算和滯環(huán)切換邏輯、Simulink建模的具體操作以及我在調(diào)試過程中反復(fù)踩過的幾個(gè)坑。不管你是剛開始接觸電力電子仿真的研究生還是正在驗(yàn)證儲能變流器方案的工程師應(yīng)該都能從這里拿走一套可以直接落地的思路。1. 雙向DC-DC拓?fù)溥x型為什么重點(diǎn)放在非對稱半橋1.1 幾種雙向拓?fù)涞膶Ρ扰c取舍很多人一上來就問為什么不直接做隔離型答案很簡單這個(gè)場景不要求安全隔離非隔離方案在相同功率等級下效率更高、器件更少、動(dòng)態(tài)響應(yīng)更快。雙有源全橋DAB現(xiàn)在是寫論文的熱門方向但移相控制復(fù)雜度高、變壓器漏感設(shè)計(jì)也講究對于單臺5kW、電池側(cè)48V、母線側(cè)400V這種電壓等級屬于大材小用。我對比過的方案有下面幾個(gè)拓?fù)溟_關(guān)管數(shù)量控制復(fù)雜度典型功率范圍隔離能力儲能場景適用性非對稱半橋雙向Buck-Boost2個(gè)低幾十kW無非常合適器件少效率高雙向Cuk4個(gè)中小功率無能量傳輸效率偏低很少用雙有源全橋DAB8個(gè)高幾十kW以上有大功率或需要隔離時(shí)才值得上最終選了非對稱半橋還有一個(gè)實(shí)際原因控制它只需要一路PWM和一路互補(bǔ)PWM占空比直接決定能量流向和大小邏輯清晰出了問題也好排查。1.2 非對稱半橋工作在Buck和Boost兩條路徑這個(gè)拓?fù)涞慕Y(jié)構(gòu)不復(fù)雜高壓側(cè)母線正端接上管Q1Q1下端接Q2上端Q2下端接母線負(fù)端上下管中點(diǎn)通過電感L接到電池正端電池負(fù)端與母線負(fù)端共地。兩側(cè)各并聯(lián)電容。電壓關(guān)系是母線400V、電池48V所以上管路徑天然承擔(dān)高壓側(cè)斬波降壓下管路徑天然承擔(dān)低壓側(cè)斬波升壓。充電模式就是Buck降壓。Q1作為主開關(guān)管高頻斬波Q2在Q1關(guān)斷期間作為同步整流管導(dǎo)通續(xù)流能量從母線經(jīng)LC濾波送進(jìn)電池。穩(wěn)態(tài)下電池電壓等于母線電壓乘以占空比U_bat D × U_bus。按我給的參數(shù)算D 48 ÷ 400 0.12。別看占空比小這恰恰說明從400V降到48V的工作占空比本來就不大。放電模式則是Boost升壓。Q2變成主開關(guān)管Q1轉(zhuǎn)為同步整流管電池能量先給電感儲能再抬升到母線側(cè)。穩(wěn)態(tài)關(guān)系是U_bus U_bat ÷ (1 ? D)反推出來D 1 ? 48 ÷ 400 0.88。同一個(gè)拓?fù)渫粋€(gè)中點(diǎn)能量方向一變主導(dǎo)開關(guān)管就跟著變這也是雙向這個(gè)名字的由來。1.3 同步整流的地位和模式切換本質(zhì)為什么強(qiáng)調(diào)同步整流因?yàn)殡姵貍?cè)是低壓大電流。5kW在48V側(cè)額定電流超過100A如果用二極管續(xù)流一個(gè)PN結(jié)壓降就損失0.7V對應(yīng)損耗超過70W熱量和效率都難看。換成同步整流管之后導(dǎo)通壓降變成導(dǎo)通電阻 × 電流比如2毫歐 × 100A 0.2V損耗直接降一個(gè)量級。模式切換的本質(zhì)其實(shí)就是把主導(dǎo)PWM從Q1換到Q2同時(shí)把另一只管從開關(guān)管切換到同步整流管。這句話聽起來簡單真放到仿真里切換瞬間的電流尖峰、PI飽和、占空比突變都是問題后面的章節(jié)我會專門講。提示建模階段先把兩個(gè)模式的穩(wěn)態(tài)電壓關(guān)系寫清楚后面調(diào)PI和驗(yàn)波形的底氣就足很多。很多仿真發(fā)散問題追根溯源都是占空比工作點(diǎn)一開始就沒算對。2. SOC估算與雙模式切換邏輯的設(shè)計(jì)要點(diǎn)2.1 安時(shí)積分法在Simulink里的建模方式SOC也就是荷電狀態(tài)是決定這個(gè)SOC充電放電雙模式能不能自動(dòng)運(yùn)行的核心變量。實(shí)用系統(tǒng)里SOC估算方法很多我用的最直接的方法是安時(shí)積分也叫庫侖計(jì)法已知初始SOC然后對電池電流做時(shí)間積分充電電流為正、放電電流為負(fù)與額定容量相除得到SOC變化量。公式寫出來是這樣的SOC(t) SOC(0) ∫(I_bat ÷ (3600 × Q_Ah)) dt注意一定要除以3600因?yàn)槿萘繂挝皇茿h時(shí)間單位是秒不做換算的話SOC漲得飛快波形根本不對。我在Simulink里的實(shí)現(xiàn)方式很簡單一個(gè)Integrator模塊初始值設(shè)為SOC0輸入是經(jīng)過3600×Q_Ah歸一化后的電流輸出接一個(gè)Saturation模塊限制在0到1之間。安時(shí)積分的短板是誤差累積。電流采樣有偏置就會慢慢漂移仿真里還好實(shí)物上通常要定期用開路電壓OCV查表來校準(zhǔn)。在Simulink里你可以預(yù)留一個(gè)校準(zhǔn)接口當(dāng)系統(tǒng)進(jìn)入待機(jī)且電流為零時(shí)用開路電壓值修正SOC初始值再重新初始化積分器。2.2 用滯環(huán)代替單閾值的模式切換狀態(tài)機(jī)模式切換最忌諱的是用單一閾值。假設(shè)SOC在79.9%和80.1%之間抖動(dòng)一個(gè)80%的臨界點(diǎn)就會讓系統(tǒng)在充電和待機(jī)之間來回橫跳開關(guān)管被反復(fù)折磨仿真波形也是一團(tuán)鋸齒。我的做法是引入滯環(huán)帶讓切換動(dòng)作需要越過一個(gè)區(qū)間而不是越過一個(gè)點(diǎn)。當(dāng)前模式切換條件動(dòng)作待機(jī)SOC ≤ 20%強(qiáng)制進(jìn)入充電充電SOC ≥ 90%停止充電回到待機(jī)放電SOC ≤ 30%禁止繼續(xù)放電切回充電任意模式外部指令且SOC在允許區(qū)間按外部指令切換這樣20%到30%之間就是充電優(yōu)先級區(qū)域90%以上才認(rèn)為電量充足中間區(qū)間交給外部能量管理指令。在Simulink里可以直接用邏輯模塊搭也可以用Stateflow做狀態(tài)機(jī)。我個(gè)人建議用邏輯模塊搭因?yàn)殡p模式狀態(tài)少邏輯模塊的可讀性和代碼移植性都更好。2.3 充電與放電的控制目標(biāo)差異充電和放電不僅電流方向相反控制目標(biāo)也完全不同。充電模式下我采用經(jīng)典的恒流-恒壓兩階段策略CC-CV。恒流階段給定恒定充電電流電流內(nèi)環(huán)跟蹤即可當(dāng)電池端電壓達(dá)到目標(biāo)電壓比如磷酸鐵鋰的3.65V×串?dāng)?shù)之后切換到恒壓階段此時(shí)PI輸出被電壓環(huán)鉗位充電電流自然衰減。Simulink里實(shí)現(xiàn)CC-CV很經(jīng)典的做法是電流環(huán)和電壓環(huán)各有一個(gè)PI兩者的輸出經(jīng)過一個(gè)min函數(shù)取小值去驅(qū)動(dòng)PWM誰的限制更嚴(yán)格誰就生效。放電模式則要分場景。如果只是驗(yàn)證電池放到負(fù)載做恒功率放電或恒流放電就夠了但如果電池側(cè)能量要支撐直流母線電壓那就必須做電壓外環(huán)電流內(nèi)環(huán)的雙閉環(huán)讓母線電壓穩(wěn)定在400V。我在模型里兩種都搭了默認(rèn)走雙閉環(huán)這樣以后延伸到并網(wǎng)或帶載場景不用推翻重來。3. Simulink建模實(shí)操主電路、控制環(huán)與求解器配置3.1 主電路建模電池模型、開關(guān)管與磁性元件主電路我用的Simscape Electrical庫不是基礎(chǔ)的Simulink庫?;A(chǔ)庫里的理想開關(guān)模型適合演示原理但看不到導(dǎo)通損耗和緩沖效果離工程可復(fù)現(xiàn)還差一步。具體模塊選擇電池推薦用BatteryTable-Based模塊它支持設(shè)定額定容量、初始SOC、內(nèi)阻和OCV-SOC查表比單純的可控電壓源真實(shí)得多。設(shè)置界面里有個(gè)關(guān)鍵參數(shù)叫Battery capacity或Nominal capacity單位是Ah我建議直接填100Ah然后初始SOC填0.8仿真起點(diǎn)是80%電量。開關(guān)管我用的MOSFET模塊5kW、400V母線這個(gè)量級用MOSFET靠譜。要注意給MOSFET模塊設(shè)置合理的Ron導(dǎo)通電阻和反并聯(lián)二極管參數(shù)否則開關(guān)過程的尖峰電壓會失真。電感用Series RLC Branch除了電感量L還要設(shè)幾毫歐的串聯(lián)電阻純理想電感在仿真里容易產(chǎn)生數(shù)值振蕩。母線電容取100μF電池側(cè)濾波電容取470μF。搭建順序上有講究先把電池—變換器—母線—負(fù)載按開環(huán)方式連起來給一個(gè)固定的占空比確認(rèn)電壓關(guān)系符合第一節(jié)算出來的0.12和0.88再往下加閉環(huán)控制。開環(huán)跑不通就上閉環(huán)最后一定分不清是主電路參數(shù)錯(cuò)還是控制參數(shù)錯(cuò)。3.2 控制子系統(tǒng)PI、PWM、死區(qū)與模式仲裁控制子系統(tǒng)是這套模型的靈魂。電流采樣信號進(jìn)來后經(jīng)過增益換算成實(shí)際安培值與電流給定做差送入PI控制器PI輸出再經(jīng)Saturation限幅到[0, 1]作為調(diào)制波。調(diào)制波與三角載波比較生成PWM。三角載波用Repeating Sequence模塊生成幅值1頻率取20kHz。有兩點(diǎn)必須提醒。第一互補(bǔ)PWM要加死區(qū)不然上下管直通。Simulink里可以直接用Dead Time Generator模塊或者對互補(bǔ)信號做一個(gè)Transport Delay。我用的死區(qū)時(shí)間是2μs跟開關(guān)管數(shù)據(jù)手冊的開關(guān)時(shí)間匹配。第二PI控制器建議直接用Discrete PID Controller采樣周期跟控制周期保持一致不要用連續(xù)PI模塊再接離散化那樣很容易出現(xiàn)參數(shù)換算錯(cuò)誤。模式仲裁邏輯放在控制子系統(tǒng)的最上層外部指令、SOC滯環(huán)判斷、當(dāng)前模式三者共同決定最終輸出的是充電PWM還是放電PWM。內(nèi)部用Multiport Switch切換兩套PI參數(shù)和PWM通道。千萬不要把兩個(gè)模式的PI輸出直接相加——這是我在早期模型里犯過的錯(cuò)誤兩個(gè)模式同時(shí)生效電流直接失控。3.3 仿真求解器設(shè)置步長、離散化的實(shí)際權(quán)衡求解器配置直接決定仿真能不能跑完。電力電子硬開關(guān)模型在高頻開關(guān)瞬態(tài)下變步長求解器比如默認(rèn)的ode45會頻繁縮小步長去追開關(guān)跳變仿真速度非常慢甚至報(bào)收斂錯(cuò)誤。我的建議是直接用固定步長求解器用ode3或ode4步長取開關(guān)周期的百分之一左右。開關(guān)頻率開關(guān)周期推薦固定步長一個(gè)周期內(nèi)采樣點(diǎn)數(shù)10kHz100μs1μs10020kHz50μs0.5μs~1μs50~10050kHz20μs0.2μs100以20kHz為例我常用1μs固定步長。仿真0.5秒就是50萬步在普通電腦上跑幾分鐘能出結(jié)果可以接受。別盲目把步長壓到0.1μs精度提升有限計(jì)算量卻翻五倍。Simscape Electrical里的物理模型還要注意把Simulink-PS Converter的采樣時(shí)間設(shè)置成和求解器步長一致不然信號線上會多一重插值延遲。4. 參數(shù)整定與波形解讀把參數(shù)算到能直接跑通4.1 主電路參數(shù)的工程計(jì)算實(shí)例參數(shù)不能靠猜。我給一個(gè)完整的計(jì)算實(shí)例大家可以直接替換自己的電壓電流等級來算。系統(tǒng)條件電池額定電壓48V、額定容量100Ah母線電壓400V額定功率5kW開關(guān)頻率20kHz電感0.5mH。參數(shù)計(jì)算依據(jù)結(jié)果充電占空比U_bat ÷ U_bus 48 ÷ 4000.12放電占空比1 ? U_bat ÷ U_bus0.88電池側(cè)額定電流P ÷ U_bat 5000 ÷ 48104A電感紋波電流(U_bus ? U_bat) × D × T_sw ÷ L約4.2A電感紋波4.2A相對于104A的直流分量只有4%這個(gè)紋波水平對電池友好。如果算出來的紋波超過額定電流的15%就說明電感量偏小需要加大L。這個(gè)計(jì)算在穩(wěn)壓、電壓紋波和成本之間做了個(gè)平衡。4.2 PI控制器從設(shè)計(jì)到試湊的完整過程PI參數(shù)我分兩步來先給一個(gè)可用的初值再按調(diào)試效果微調(diào)。電流內(nèi)環(huán)是整個(gè)系統(tǒng)最快的一環(huán)帶寬可以取開關(guān)頻率的十分之一也就是2kHz。被控對象近似成電感L那么比例系數(shù)初值約等于L × 2π × 帶寬0.5mH × 12566 ≈ 6.3。聽起來不大但注意這個(gè)值的含義是每流過100A誤差需要輸出630V的調(diào)制電壓配合占空比換算成0到1的調(diào)制波時(shí)實(shí)際要在后面再乘一個(gè)比例系數(shù)。在Simulink模型里電流反饋和給定都用實(shí)際安培值PI輸出限幅在0到1之間所以比例系數(shù)初值大概在0.005到0.02這個(gè)量級需要根據(jù)模型具體情況折算。真正的調(diào)試順序是先把積分項(xiàng)設(shè)為0只留比例項(xiàng)從很小的值開始加大觀察電流階躍響應(yīng)的快速性等電流能快速跟蹤且不振蕩后再加積分項(xiàng)消除穩(wěn)態(tài)誤差。電壓外環(huán)帶寬取電流環(huán)的十分之一左右我按200Hz來設(shè)計(jì)初值然后同樣是先P后I的試湊順序。4.3 從仿真波形反推系統(tǒng)是否正常模型跑起來之后我習(xí)慣看三個(gè)波形判斷系統(tǒng)狀態(tài)。第一看電感電流。正常的穩(wěn)態(tài)波形是連續(xù)的三角波平均值隨負(fù)荷變化紋波頻率等于開關(guān)頻率。如果電感電流出現(xiàn)單向尖峰或者反復(fù)歸零說明進(jìn)入了斷續(xù)模式或者電感參數(shù)不合適。第二看模式切換瞬間的母線電壓。理想情況下從充電切到放電母線電壓會有一個(gè)暫態(tài)跌落或過沖但應(yīng)該控制在5%以內(nèi)也就是400V±20V并在幾個(gè)毫秒內(nèi)恢復(fù)。如果跌掉10%以上多半是母線電容偏小或者電流指令切換太陡。第三看SOC曲線。充電時(shí)SOC單調(diào)上升放電時(shí)單調(diào)下降曲線斜率與電流大小成正比并受到容量歸一化的正確性制約。看著SOC曲線就能直觀判斷整個(gè)系統(tǒng)充進(jìn)去多少、放出來多少這是雙模式仿真最有說服力的輸出。5. 踩坑實(shí)錄模式切換震蕩、SOC跳變與仿真發(fā)散5.1 切換瞬間的電流尖峰與指令斜坡方案我調(diào)試過程中第一個(gè)遇到的硬骨頭是充電切放電瞬間的電感電流尖峰很大?,F(xiàn)象很典型切換前電感電流穩(wěn)定在50A左右切換瞬間直接沖到200A以上直接把PI輸出打到飽和母線電壓劇烈振蕩。根因并不復(fù)雜——兩種模式下主導(dǎo)開關(guān)管不同電流給定量階躍變化PI來不及平滑過渡占空比瞬間拉到邊界。解決辦法是給電流給定信號加一個(gè)Rate Limiter限制電流指令的變化速率。我用的限速是200A/s切換過程大概幾十毫秒完成尖峰被壓到額定范圍內(nèi)。這個(gè)思路其實(shí)和實(shí)物臺架上的軟啟動(dòng)邏輯一致仿真里先驗(yàn)證斜坡策略后面移植到嵌入式代碼就是現(xiàn)成的邏輯。轉(zhuǎn)向硬件測試之前一定要把這個(gè)斜坡時(shí)間調(diào)到和實(shí)際系統(tǒng)能接受的范圍一致。5.2 SOC模型細(xì)節(jié)Ah與As的換算和積分漂移這個(gè)坑我踩得比較狼狽。第一次搭完SOC積分跑了幾十秒仿真SOC從0.8直接沖到1.0我還以為電池容量設(shè)錯(cuò)了。后來逐項(xiàng)排查才發(fā)現(xiàn)容量單位換算錯(cuò)了。Simulink里電流單位是安培時(shí)間單位是秒積分出來的單位是安培秒As而電池容量是安時(shí)Ah1Ah等于3600As。沒有除以3600的話相當(dāng)于把容量放大了3600倍SOC滿格簡直是必然結(jié)果。積分漂移則是更隱蔽的問題。仿真用的理想電流采樣沒有偏置所以漂移不明顯但在跟硬件聯(lián)調(diào)或者測數(shù)據(jù)回放時(shí)一個(gè)0.1A的采樣偏置積分1000秒就會產(chǎn)生2.8%的SOC誤差。我的做法是在SOC計(jì)算通路里加入校準(zhǔn)邏輯當(dāng)系統(tǒng)處于待機(jī)且電流為零時(shí)把SOC修正到與開路電壓查表一致的值。5.3 步長、PI飽和與電池模型三個(gè)隱蔽問題最后這一組問題屬于那種模型看起來能跑但波形怎么都不對的類型。固定步長選太大開關(guān)過程捕捉不完整電感電流波形會出現(xiàn)毛刺嚴(yán)重時(shí)叫自適應(yīng)控制器誤判。當(dāng)時(shí)我把步長從1μs改成5μs電感電流紋波直接失真電感電壓的積分不再守恒母線電壓紋波高了一倍。步長重新改回1μs之后波形立刻恢復(fù)正常所以遇到詭異波形先別調(diào)參數(shù)檢查步長是否匹配開關(guān)頻率。PI飽和問題表現(xiàn)為充電末端由恒流轉(zhuǎn)恒壓時(shí)電流出現(xiàn)數(shù)毫秒的延遲響應(yīng)。原因是恒流階段電流環(huán)PI輸出一直處于上限飽和切換恒壓時(shí)積分器還需要時(shí)間退飽和。解決方法是給PI加抗積分飽和我用的是條件積分法控制器限幅生效時(shí)凍結(jié)積分項(xiàng)直到輸出回到限幅區(qū)間內(nèi)再恢復(fù)積分。這個(gè)邏輯在Discrete PID Controller模塊里可以直接配置。電池模型的問題更隱蔽。用最簡單的固定內(nèi)阻模型時(shí)恒壓充電階段的電流衰減得特別慢因?yàn)镺CV-SOC曲線在平臺區(qū)太平了查表給出的開路電壓差異很小。我換成雙RC網(wǎng)絡(luò)等效電路模型或Simulink自帶的Table-Based Battery模型后極化效應(yīng)體現(xiàn)出來了恒壓階段電流按指數(shù)形式衰減波形才跟真實(shí)電池的特征對上。做完這個(gè)仿真之后我自己最大的收獲不是某個(gè)參數(shù)而是對同步整流管在雙向時(shí)交替角色的理解變得具體了同一只開關(guān)管充電時(shí)是續(xù)流管放電時(shí)變成主功率管控制邏輯上只差一個(gè)模式仲裁但物理角色完全不同。如果后面要接臺架我會把模型里的控制接口直接做成代碼生成友好結(jié)構(gòu)省掉手寫C代碼時(shí)變量名對不上的麻煩。仿真最大的價(jià)值就是讓你在燒錢之前先把錯(cuò)誤犯完這篇文章能幫你少走幾步彎路就很值了。