真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

前言:本文約兩千字,需要讀者具備基礎的高數、模電、微控制器知識,不會的話可以網課學習,希望就本文為有志於逆變技術的入門者提供一點微小的幫助。

一、理論基礎

所謂SPWM,就是透過只有開關兩個狀態(離散,數字的)的PWM序列產生正弦波(連續,模擬的)的方法。其理論基礎一句話就能說明白:衝量相等而形狀不同的窄脈衝加在具有慣性的環節上時,其效果基本相同。用人話類比就是五張一塊和一張五塊一樣有價值。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

從調製的角度可以理解為低頻的50hz正弦訊號作為調製波,高頻的方波作為載波,調製方法是佔空比調製,在經過全橋放大訊號之後,透過低通濾波器就能還原出大功率的50hz正弦訊號。

二、調製方法

常見的調製方法包括單極性PWM、雙極性PWM、單極性倍頻PWM。單雙極性是以半個開關週期內負載上電壓變化情況來分的。

單極性PWM調製在上半個正弦週期內一橋臂A兩隻功率管以較高的開關頻率互補開關,另一橋臂B只開下管,這時負載上的電壓在正電源電壓和0V之間切換;在下半個週期則A橋臂只開下管,B橋臂高頻互補開關,這時負載上的電壓在負電源電壓和0V之間切換,就產生了兩個方向上的電壓。半個週期內只有一側橋臂受控。優點是開關損耗小,缺點是生成的正弦波在過零點會產生失真、控制複雜、而且MOS發熱不均勻。

其負載上的波形圖如下。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

而雙極性pwm則是在整個正弦週期內,四隻管子都在高頻開關狀態工作,對角線上的管子一起導通,另一對角線上管子互補導通,實際上只需要一路互補的PWM控制,負載上電壓在正電壓和負電壓之間切換,不出現0v。半個週期內兩側橋臂都受控。優點是控制簡單、波形失真度小,缺點是管子開關損耗大,發熱比較高。

其負載上的波形圖如下:

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

倍頻調製則是上兩種控制方法的結合,半個週期內兩側橋臂都受控,但負載在半個週期內只在一種電壓與0V之間切換,要麼正要麼負。其核心思想是兩邊橋臂分別由兩個180度相位差的正弦波與三角載波比較來控制,優點是在開關器件工作頻率一樣的情況下,輸出PWM頻率是單極性SPWM的2倍,能夠明顯減少諧波,因此只需要相對較小的電感和電容濾波器件就可以起到很好的濾波效果,提升了系統的效能,也精簡了系統體積,降低了成本。缺點就是控制麻煩。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

三、佔空比序列生成

這一部分的作用是控制管子什麼時候開,什麼時候關。

控制的方法有兩大流派:模擬和數字。模擬的方法很簡單,生成正弦波和三角波,直接輸入比較器,產生高低電平控制管子開關。這個沒啥好說的,搭電路的事。數字則也分兩大流派,模擬模擬方法(兩個模擬不同意思)的有自然取樣法、規則取樣法、不對稱規則取樣法。自然取樣法是透過計算高頻三角載波與正弦調製波的交點來確定開關切換點,以求出相應的脈衝寬度,而生成 SPWM波形的。本質上還是模擬那一套,不過由於脈寬計算公式是一個超越方程,取樣點不能預先確定,只能透過數值迭代求解,所以用的很少。

規則取樣法是對其的簡化,只在三角波的頂點或底點位置對正弦波取樣而形成階梯波,計算簡單,但是波形沒那麼像正弦波(諧波含量高)。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

不對稱規則取樣法是規則取樣法的最佳化,在每個載波週期取樣兩次, 即在三角波的頂點位置取樣, 又在三角波的底點位置取樣, 這樣形成的階梯波與正弦波的逼近程度會大大提高(諧波含量低了一點),但是計算量是規則取樣法兩倍。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

數字實現的另一種流派則是等面積法,這是純數學的,和模擬已經沒關係了,還記得衝量相等而形狀不同的窄脈衝嗎?衝量在電路中就是伏秒積,在圖中表現為面積,這個方法將正弦波等分,用等面積的PWM波代替,可以計算出來佔空比。這種方法生成的正弦波精度是最高的。

圖為我寫的PY程式,計算得到的結果,調製深度為1,半個週期分16段。PWM幅度等於正弦波最大值,圖中灰色部分是高電平時間。積分求面積,PWM波和正弦波的面積是相等的。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

四、程式碼

最簡單實現的SPWM我覺得是雙極性調製。全程只需要控制一個PWM的佔空比。程式碼包括兩部分,生成SPWM佔空比序列的py程式和基於hal庫和STM32cubeMX的微控制器程式。因為我用的是F030F4,這玩意兩塊多一片,只有16kRAM和4k運存,所以實時計算是沒戲了,只能預先計算好佔空比序列,用查表法實現。

生成SPWM佔空比序列的py程式有兩個,分別是單極性和雙極性。先從單極性開始吧。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

核心思想是分段,求正弦波的積分,除PWM週期長度,結果就是PWM佔空比。結果是對稱的,負半周就換個橋臂。很簡單的數學,不詳細分析了。

雙極性也差不多,不過需要做出更改。正弦波的積分除2倍的PWM週期長度,結果再加50%才是PWM佔空比。佔空比50%時等效0v輸出,100%時等效+vcc,0%等效-vcc。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

調製深度大致等於直流母線電壓利用率,受到mos自舉驅動器和mos的限制,高側mos不可能持續導通,也就是說佔空比不可能高到100%,90%算保守值,因此調製深度最好不大於90%。最後輸出的正弦波的有效值=直流母線電壓*調製深度/根號2,輸入24vDC,調製深度0。90時可以輸出有效值15。28vAC。改變調製深度就能改變正弦波電壓。點一下執行,py會以雙精度計算佔空比,對於微控制器11位的定時器精度絕對是大大超過了。

至於STM32,使用兩個定時器,TIM1使用CH3互補輸出48K的PWM,作為載波,TIM17作為中斷時基,中斷頻率12。8khz(基波50Hz X 調製比256)。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

生成好長度為256的佔空比序列,存成陣列。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

重寫TIM17中斷回撥函式,每次中斷更新TIM1->CCR3的值,PWM佔空比就會以12。8khz的重新整理率改變。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

到此為止SPWM逆變器的軟體就完成了。只要正確連線硬體就能輸出SPWM波。只要改變TIM17ARR值就能改變佔空比重新整理頻率,實現變頻。

五、硬體設計硬體上需要一個全橋,全橋PCBlayout和選型看我之前的帖子。懶得搞的話,我也有一個現成的全橋模組我釋出在立創的開源平臺上了,已經打樣驗證過實物。記得點贊收藏評論三連哦(笑)。這還懶得搞的話請拿錢砸我。

硬體上短接L1和H2,短接L2和H1,任意連線微控制器的pwm和互補pwm到兩個輸入端,小心不要接錯。在全橋輸出端接上LC濾波器,上電開機就能看到正弦波了。

將這個正弦波接到變比合適的工頻變壓器上就可以升壓到220v。我手頭上沒有合適的變壓器就不測了。不過比較常規的方案是先升壓到400v直流在輸入高壓全橋逆變成交流電,這樣體積可以做的比較小兩路相差180度正弦波能驅動步進電機,三路依次相差120度的正弦波就是三相逆變器。

上兩張測試圖吧。

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

真硬核!從零開始一文教你快速實現數字化SPWM純正弦波逆變器

工程程式碼及開源連結請點選文章底部的“瞭解更多”。進入帖子內獲取

謝謝觀看!

關注數碼之家網瀏覽更多精彩資訊、拆機圖文DIY

技術交流請聯絡原作者

作者:hbozyq

本文來源:數碼之家