
三相PWM整流器雙閉環控制是電力電子仿真里很經典的一套結構電壓外環穩住直流側電壓電流內環控制網側電流波形和功率因數最后用SVPWM調制驅動三相橋臂。這篇文章直接說說在 MATLAB/Simulink 里怎樣把這套模型搭出來參數怎么設跑出來什么波形算正常仿真發散或波形畸變時又該往哪里查。這套仿真適合三類人一是研究生寫論文需要把三相 PWM 整流器的控制算法用仿真驗證一遍二是做并網變流器、儲能 PCS、電機回饋制動等方向的工程師先在小模型里驗證控制邏輯三是剛接觸 SVPWM 的人想看看空間矢量調制怎么和雙閉環接起來。很多人卡住不是因為概念難懂而是模型里一個采樣時間、一個 PI 極性、一個 SVPWM 扇區判斷寫錯結果整個波形都不對。下面按我實際搭建時的順序拆開講。1. 先搞清楚這套仿真在解決什么問題1.1 “雙閉環”不是兩個PI簡單疊加三相PWM整流器本質上是把交流電變成直流電同時還能控制輸入電流的波形和相位。和普通不控整流相比它不需要靠二極管自然導通而是用IGBT或MOSFET組成的橋臂主動調制讓網側電流接近正弦功率因數接近1直流電壓可調。這里的“雙閉環”包含兩個控制環電壓外環采直流母線電壓和給定電壓比較經過PI調節后輸出有功電流參考值 id_ref。電流內環采三相網側電流經過坐標變換得到 d 軸和 q 軸電流分別用PI調節輸出 d 軸和 q 軸的電壓指令再變換回去送給調制器。為什么需要一個外環一個內環因為直流電壓變化比電流變化慢電流是快速狀態量。如果只用電壓單閉環負載跳變時電流可能瞬時沖擊很大開關管壓力也會很大。加上電流內環之后相當于先把電流這個快速變量控制住再由外環決定電流該給多大。兩級配合動態響應和穩定性都好很多。1.2 SVPWM在三相整流里管什么SVPWM空間矢量脈寬調制本質是讓三相橋臂輸出的電壓矢量在一個開關周期內去逼近給定電壓矢量。它比普通SPWM的直流電壓利用率高諧波也更集中所以在三相PWM整流器里很常用。在雙閉環模型里SVPWM的輸入是控制環算出來的電壓指令一般是靜止兩相坐標系下的 Ualpha、Ubeta輸出是三相橋臂的開關信號。也就是說電流內環和坐標變換負責算“應該輸出什么電壓”SVPWM負責算“六個開關管在哪些時刻導通能達到這個電壓”。兩者是上下游關系不能反過來。1.3 適合誰做以及做之前要先弄懂哪幾個概念這個仿真不算很小涉及的概念包括坐標變換、鎖相環、PI限幅、空間矢量調制、開關管死區。如果你對這些完全沒接觸建議先把下面幾件事弄明白三相靜止 abc 坐標系和二相旋轉 dq 坐標系的關系至少知道 Clarke 變換和 Park 變換的公式。d 軸和 q 軸電流的含義。d 軸對應有功q 軸對應無功。電壓定向控制。一般用鎖相環跟蹤電網電壓相位保證 d 軸和電網電壓同方向。SVPWM 的扇區判斷和作用時間計算。即便直接用現成函數也要知道它的輸入范圍是多少防止調制度過大導致輸出飽和。這些概念不一定都要自己推公式但在 Simulink 里看模型時至少要能對上信號流。2. 搭建仿真之前先把主電路和控制參數列清楚2.1 主電路參數電壓、電感、電容、負載我不建議打開 Simulink 直接拖模塊先把參數表寫在紙上。因為后面所有 PI 參數、限幅值都由這些基礎參數決定。一套常見的三相 PWM 整流器主電路參數可以這樣做項目示例值說明三相線電壓380V / 50Hz常見的工業并網等級方便對照網側電感3mH ~ 10mH影響電流紋波和響應速度直流母線電容1000uF ~ 5000uF影響啟動充電和負載階躍恢復直流電壓給定650V ~ 750V必須高于輸入線電壓峰值開關頻率10kHz平衡仿真速度和波形效果需要說明的是這些數值不是唯一的實際參數要以你的設計目標為準。我這里給的是方便先跑通仿真的量級。低功率小模型可以按比例縮小但電感電容的配合要重新算。2.2 開關頻率、采樣時間與SVPWM實現方式Simulink 里有兩個時間概念容易混仿真算法步長負責解微分方程比如連續求解器下的最大步長。控制算法采樣時間對應真實 DSP 或控制器里的中斷周期SVPWM 和 PI 計算都按這個周期執行。我做這類仿真時開關頻率一般先設在 10kHz控制采樣時間和 PWM 載波周期保持一致也就是 1e-4 秒。太高會明顯拉慢仿真速度太低又不容易看出諧波效果。10kHz 算是一個容易驗證、速度也能接受的起點。SVPWM 實現方式在 Simulink 里常見有三種用 MATLAB Function 寫 SVPWM 函數輸入 Ualpha、Ubeta輸出三對互補 PWM 信號。這種方式最靈活也最容易查扇區判斷和時間計算公式。用 Stateflow 或純邏輯模塊搭扇區判斷和占空比計算。適合想完全看清 SVPWM 底層邏輯的人但模型會很大。用 Simscape Electrical 自帶 PWM 發生器但要注意自帶模塊未必是嚴格意義上的 SVPWM需要看具體算法。我的建議是如果想學習原理用第二種或第一種如果只是想把控制算法跑通用第一種 MATLAB Function 最省事。2.3 控制參數初始值怎么給雙閉環 PI 參數一開始不容易給準。我給初始值的習慣是電流內環先調。給定一個階躍的 id_ref不接電壓外環只看電流能不能快速跟蹤。內環 Kp 從幾十開始Ki 從幾百到幾千逐步加直到電流無靜差、響應快、不振蕩。電壓外環再接上。外環 Kp 給較小值Ki 給較小值先讓電壓能爬起來再慢慢增大響應速度。如果波形劇烈振蕩先減小增益不要強行提高響應速度。這里不寫死具體數值因為同一個電感、電容、電壓等級下PI 參數差別很大。你只要記住一個方向內環快外環慢帶寬相差 5 到 10 倍比較合理。這是一個工程經驗不是公式推導出來的絕對結論。2.4 仿真求解器和步長設置模型風格會影響求解器選擇如果主電路用開關器件和連續積分模型是連續系統可以用 ode23t 或 ode15s。最大步長要能覆蓋 PWM 開關波形比如最大步長設置成 1e-5 秒或更小否則開關細節會丟失。如果控制算法用離散 PID需要單獨設置控制采樣時間。如果整個仿真想跑得更快可以把主電路離散化用離散求解器。這樣更接近真實數字控制系統。我一般先按連續模型跑通再轉離散模型驗證。直接一步到位上離散出現數值發散時不容易判斷是算法問題還是離散化問題。3. Simulink模型分塊搭建主電路、雙閉環、SVPWM3.1 先搭主電路從電源到三相橋再到直流側Simulink 里搭三相 PWM 整流器主電路建議按以下順序放三相交流電源。Simscape Electrical 里有 Three-Phase Source也可以直接用 Simulink 的三相正弦信號加電壓源。如果是想研究波形用 Simscape Electrical 電氣模型更直觀。接網側電感和等效電阻。電感一般用系列電感模型電阻可以選線路電阻和功率電阻也可以用很小的串聯電阻模擬線路損耗。接三相橋臂。三相 PWM 整流器一般用 Universal Bridge選擇三臂、IGBT/Diode。這里要注意橋臂的開關信號要和 SVPWM 輸出對應。接直流母線電容和負載電阻。電容跨接在直流正負母線之間負載接在電容兩端。加電壓和電流測量模塊。直流電壓必須測三相電流必須測網側電壓最好也測控制環要用。主電路搭完先不加控制信號看開環狀態是否正常。整流橋如果完全不給脈沖應該表現為二極管不控整流直流電壓會穩定在一個值。這一步能幫你確認電源、電感、電容有沒有接反。3.2 控制環接線電壓外環和電流內環怎么串控制環的信號流可以拆成三段第一段是測量。直流母線電壓 Vdc 經過一階低通濾波或直接送到電壓 PI三相電流先做 Clarke 變換和 Park 變換得到 id 和 iq。Park 變換需要角度這個角度來自鎖相環 PLL或者來自三相電源電壓的相位。第二段是外環。Vdc_ref 減去 Vdc得到誤差進電壓 PI輸出 id_ref。為了單位功率因數運行iq_ref 一般設為 0也可以用無功指令控制無功功率。第三段是內環。id_ref 減去 idiq_ref 減去 iq得到電流誤差分別進電流 PI。輸出是 vd 和 vq再經過反 Park 變換得到 Ualpha、Ubeta送給 SVPWM。這里最容易犯的錯是把電壓 PI 輸出直接當調制波。正確的鏈條是電壓 PI 輸出的是有功電流參考不是電壓指令。必須經過電流內環之后才得到電壓指令。少數簡化模型會省略電流內環但那個不叫雙閉環。3.3 SVPWM調制模塊和PWM脈沖生成SVPWM 部分按下面方式處理最容易對號入座輸入Ualpha、Ubeta。計算扇區號和相鄰矢量作用時間。結合載波周期 T生成三相占空比。輸出三對互補 PWM 信號給三相橋臂的六個開關管。如果使用 MATLAB Function 實現函數內部要自己寫扇區判斷和伏秒平衡公式。測試時可以先給 Ualpha、Ubeta 一個固定值看三個橋臂占空比是否合理也可以開著 SVPWM 但把直流給定設低讓系統不進入過調制。關于死區Simulink 里可以用 Gain 或者延時模塊模擬也可以先不加死區跑通邏輯。實際工程中死區一定存在仿真里先不加能減少很多波形毛刺問題。3.4 測量、示波器和數據記錄模型跑完之后至少要記錄這些信號三相輸入電壓和三相輸入電流直流母線電壓d 軸和 q 軸電流電壓外環輸出也就是 id_refSVPWM 的相電壓或線電壓波形調制度或占空比建議把波形分開顯示不要全部塞進一個 Scope。電壓和電流的參考值、反饋值畫在一起方便看跟蹤情況。波形數據可以導出到 MATLAB 工作區便于算 THD 和 FFT 分析。數據記錄這一步容易被跳過。很多同學跑出波形后覺得好看但論文里需要諧波分析、穩態誤差、動態時間沒有記錄就只能重新跑。建議在模型里放幾個 To Workspace 模塊把關鍵變量存成結構體或數組。4. 雙閉環PI參數整定先內環后外環看波形而不是只看數值4.1 電流內環怎么調第一次整定時建議先把電壓外環斷開給一個恒定 id_ref單獨觀察電流內環給 id_ref 一個階躍看 id 實際值能否快速跟蹤。跟蹤慢增大 Kp跟蹤有靜態誤差增大 Ki。振蕩說明 Kp 或 Ki 過大先降 Kp 再降 Ki。兩個方向都要看不只是 d 軸。iq_ref 給 0 時iq 應該穩定在 0 附近。如果電流毛刺很大先看采樣時間和開關頻率是否匹配再考慮濾波。判斷內環是否合格的簡單標準電流階躍響應沒有明顯超調幾個毫秒內能跟蹤上穩態紋波在可接受范圍內。這不是絕對指標但對 10kHz 開關頻率的模型足夠起步使用。4.2 電壓外環怎么調電流內環調穩后把電壓外環接上。外環 PI 輸出的是 id_ref要特別注意這條信號的限幅。如果 id_ref 沒有限幅啟動瞬時它會沖得很大直流電壓很容易過沖甚至把電流內環逼到飽和。外環整定的順序先給很小的 Kp 和 Ki讓直流電壓慢慢爬升。此時波形可能又慢又軟但穩定。逐步增大 Ki消除穩態誤差讓電壓能精確落在設定值。再逐步增大 Kp提高響應速度。當負載突變時觀察直流電壓跌落和恢復時間。恢復太快容易超調恢復太慢說明帶寬不足。外環的積分限幅也要設置好。電壓外環輸出 id_ref 的最大值一般由系統允許的最大輸入電流決定。比如設計峰值電流 20A就把 id_ref 限幅在 ±20A 附近。限幅過小會限制整流器輸出能力限幅過大會讓啟動電流沖擊變大。4.3 啟動、穩態和負載階躍怎么驗證一套雙閉環仿真能不能交付通常看三個過程第一是啟動過程。仿真開始后直流電壓從零升到給定值。這個過程中電流應該被內環限制在合理范圍電壓不應該出現大幅度超過給定值的尖峰。如果啟動瞬間電壓過沖到 800V說明外環 Kp 或 id_ref 限幅設置有問題。第二是穩態過程。電壓穩定后輸入電流應該是接近正弦的波形。用 FFT 看電流 THD在 10kHz 開關頻率下不加死區時 THD 通常可以做得比較低。THD 高一般先查 SVPWM 扇區判斷和坐標變換方向再查采樣時間。第三是負載階躍。在穩定運行一段時間后突然增大或減小負載電阻觀察直流電壓恢復情況。合格系統的電壓跌落應在允許范圍內并且能在幾十毫秒到一兩百毫秒內恢復。如果電壓一直恢復不了檢查外環 PI 帶寬和 id_ref 限幅是否太小。我實際做的時候會把三個過程用同一個仿真跑完0 到 0.2 秒啟動0.3 秒加負載0.8 秒減負載。這樣一次仿真能覆蓋大部分驗證需求。5. 仿真發散、波形異常的排查鏈路5.1 仿真直接發散或結果無窮大遇到仿真結果發散不要先懷疑模型算法按下面順序排查看電源、電容、電感的初始值。Simulink 里電容初始電壓、電感初始電流可能影響仿真起始狀態。帶初始值不合理的模型很可能在第一拍就發散。看 PI 反饋極性。PI 反饋接成正反饋系統通常很快發散。一個簡單檢查方法是把 PI 輸出斷開手動給固定值看系統能不能穩定。看 SVPWM 輸出是否超出范圍。調制波太大或調制度超過 1仿真會出現脈沖丟失波形亂掉。看仿真步長。連續模型最大步長太大開關管切換的瞬間可能被跳過數值上就表現為發散。看代數環。Simulink 里如果出現代數環求解會特別慢或報錯。用代數環提示定位。我在調模型時有個習慣先去掉所有 PI手動給固定占空比看主電路能不能穩定。主電路穩定后再接入控制環這樣能快速區分是主電路問題還是控制問題。5.2 電壓跟蹤不上、過沖大、震蕩直流電壓幾種典型異常電壓偏低啟動后一直達不到給定值。常見原因是 id_ref 限幅太小或電源電壓不足以支撐直流給定電壓。三相 380V 系統如果直流給定設成 900VSVPWM 輸出極限不夠電壓就上不去。電壓過沖很大。常見原因是電壓外環 Kp 太大、id_ref 限幅太大、啟動時外環積分飽和。解決方法給外環積分加限幅給 id_ref 加合理限幅限制最大充電電流。電壓持續震蕩。可能外環帶寬和內環帶寬太接近導致兩個環互相影響。按先內環后外環重新調整讓外環明顯慢于內環。5.3 SVPWM沒輸出或電流畸變嚴重SVPWM 沒有輸出先看函數是不是被正確調用了。很多 MATLAB Function 報錯不會立刻停仿真而是輸出恒為 0。你可以用 Display 模塊把 Ualpha、Ubeta 顯示出來確認輸入不是 0再看函數輸出。電流畸變嚴重常見幾個原因坐標變換角度方向反了。Park 變換的旋轉方向不對電流跟蹤不上波形就會扭曲。dq 軸接反了。id 當作 iq 處理功率因數會異常。調制度接近或超過 1輸出進入過調制區電流諧波增大。解決辦法是提高直流電壓給定值或降低輸入電壓。SVPWM 扇區判斷公式寫錯。這種錯誤最隱蔽建議先用固定電壓矢量做開環測試檢查三相占空比是否和理論一致。5.4 常見錯誤定位順序我把自己的排查順序固定下來基本能覆蓋大多數問題第一步看現象是發散、卡住、無輸出還是波形很差。 第二步看輸入三個電壓源、三相電流、直流電壓反饋是否接到正確點位。 第三步看控制環PI 極性、限幅、參考值大小。 第四步看 SVPWM輸入角度是否連續輸出占空比是否在合理范圍。 第五步看求解器步長、采樣時間、代數環。沒有足夠經驗時最忌諱的是一上來就調 PI 參數。如果 SVPWM 本身沒工作調 PI 沒有任何意義。先把信號流對著端口走一遍再用波形定位。6. 模型整理、結果說明和找人定制時的驗收邊界6.1 自己搭完模型后整理什么模型能跑通之后建議花時間整理這樣后面復用、改參數、參與論文或項目時效率會明顯提高模塊命名電源、電感、橋臂、PI、SVPWM 都用有意義的名稱不要叫 Gain1、Gain2。參數集中管理把主電路參數、控制參數、限幅值都放到 MATLAB 腳本或模型里定義的變量中不要散在各個模塊里寫死。版本保存每改一版參數保存成帶時間和版本號的副本避免調壞之后回不去。注釋和說明對 SVPWM 函數、坐標變換、PI 極性這些關鍵點寫簡短注釋防止過兩周自己看不懂。整理模型花費的時間可能比搭模型還長但對后續有利。6.2 找人做仿真模型需求寫到什么程度才算清楚很多人在網上找人做 matlab 仿真模型但需求只寫“三相PWM整流器雙閉環仿真”這個描述太寬泛。交付結果很難保證。如果你需要找人定制我建議至少把下面幾項寫清楚主電路參數電壓等級、頻率、功率、電感、電容、負載電阻范圍。控制要求是否必須用 SVPWM還是 SPWM 也可以是否要求單位功率因數是否需要 PLL 鎖相環是否要求離散模型。輸入輸出信號你期望看到哪些波形是否需要導出 THD 分析數據。MATLAB 版本不同版本對 Simulink 模塊支持有差異不說版本很容易出現打不開的問題。交付物除了 .slx 模型是否需要說明文檔、參數腳本、報告和演示視頻。如果這些信息都寫不清楚定制回來的模型大概率還需要你自己大量調試因為對方猜到的主電路參數和控制要求可能和你項目需求不一致。6.3 交付和驗收要核對哪些點拿到一個別人做的仿真模型我建議按一套驗收清單檢查模型能不能在你本地 MATLAB 版本里直接打開和運行有沒有缺失模塊。主電路參數是否和你的設計一致三相對稱性是否正常。雙閉環結構是否完整電壓外環輸出是否真的送到電流內環參考而不是直接送調制波。SVPWM 是否真正參與驅動把 SVPWM 輸出斷開換成固定占空比系統行為是否明顯不同。啟動、穩態、負載階躍三個過程的波形是否正常。參數改了之后模型能否在合理范圍內繼續穩定運行。有些模型只在某個固定 PI 參數下穩定稍微改負載就可能發散這種模型只能當演示不能用于論文或項目。驗收時最好自己動手改幾個關鍵參數跑一遍不要只看對方提供的截圖。最后說一點個人經驗三相 PWM 整流器雙閉環仿真最核心的不是把 SVPWM 函數寫得多么漂亮而是控制環的信號流向、PI 參數整定順序和異常波形的定位能力。先把主電路跑通再拆開電流內環調最后接上電壓外環一層一層驗證。如果只是學習默認參數跑通就夠如果要用于論文或工程項目就把參數腳本、模型版本、波形記錄和調試日志都留好。很多問題不是工具能力不夠而是前置參數和模型結構沒有理干凈。