Matlab/Simulink - BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬
- 前言
- 一、PWM調制技術基本原理
- 二、仿真模型中加入PWM調制
- 三、逆變電路MOS管添加體二極管
- 四、模擬添加機械負載
- 五、仿真模型與控制框圖
- 文章相關模型文件下載鏈接
- 參考鏈接
前言
本系列文章分享如何使用Matlab的Simulink功能來進行BLDC直流無刷電機的基礎仿真;本篇文章將會從較為貼合實際控制情況下,講解如何使用PWM調制技術來實現對BLDC電機的轉速控制。在此感謝各位讀者的支持,并歡迎交流。
文章內容主要參考Matlab官網的BLDC仿真視頻教程,主要是對官方視頻教程的進一步詳細說明,以及對BLDC電機控制原理、仿真過程部分問題點的簡要講解,希望大家通過此系列文章可以掌握Matlab電機仿真的基本技術,并在后續能夠按照需要搭建更復雜的模型。
官方視頻教程地址如下:
https://ww2.mathworks.cn/videos/series/how-to-design-motor-controllers-using-simscape-electrical.html
相關演示操作在Matlab2023b中進行。
一、PWM調制技術基本原理
PWM,即脈沖寬度調制(Pulse Width Modulation),是一種將連續的模擬信號轉換為脈沖序列的調制技術,也就是通過對數字信號進行調制,來等效模擬信號。
面積等效原理是PWM調制技術的重要理論基礎,其原理內容是:沖量相等而形狀不同的窄脈沖加在具有慣性的環節上時,其效果基本相同;這也是應用PWM調制技術的前提。
在前面的文章中,我們搭建了一個基礎的電機轉速閉環控制模型,其中我們通過PID控制器來實現對電源電壓的直接控制,不過在實際的物理世界中,這種方法往往不能直接實現;比如有一塊電池,它的電壓往往也和它的電量有關,我們做不到直接改變電池本身的電壓,但是通過PWM調制技術,我們可以實現幾乎等效的不同幅值電壓的輸出。又或者我們希望能夠輸出正弦波形的電壓,且波形幅值、頻率可以變化,結合PWM技術,同樣可以做到。
PWM輸出的具體形式,受到目標信號的波形、頻率、幅值影響,接下來將會逐個進行簡要講解:
- 波形:不同電壓幅值的直流輸出,可以理解為不同高度的直線波形,此外還有正弦波、三角波等,這些波形決定了我們PWM的占空比應該如何變化;例如對于不同幅值的直流輸出,可以固定占空比,幅值高的輸出,對應占空比則更高,對于正弦波,則是在其波峰處占空比要高一些,而在波谷處,占空比要低一些(具體也要看電路等實際物理情況)。
- 頻率:一般來說,PWM信號的頻率最好遠高于信號頻率,例如十倍以上(涉及到采樣定理);PWM頻率往往直接影響著調制效果,一般來說頻率越高,等效的效果就越好,但是在逆變電路中也會增加開關損耗等,需要平衡。
- 幅值:目標信號的幅值影響著PWM占空比,幅值越高,占空比也就要越高,即此時等效的信號幅值更大。
注意,PWM調制技術適用的前提是控制對象具有比較明顯的慣性環節的特征,若對象的慣性極小,或對噪聲、紋波非常敏感,那么PWM的表現就不太好了,或是并不適用。例如一些小電感電機,若PWM的頻率不高,其電流波動會非常明顯,具有比較大的電流諧波,影響控制效果;還有在電源方面,MCU通常需要使用LDO來供電,而Buck電源由于存在紋波,會對MCU正常工作產生影響。
二、仿真模型中加入PWM調制
在前面的博客中,我們搭建了如下圖所示的BLDC電機速度閉環控制模型,包含有電機本體、霍爾傳感器、換相邏輯模塊、三相逆變器模塊,以及我們的控制回路。
接下來,我們需要引入PWM調制技術,使這個仿真模型更加貼近實際的電路系統。
我們打開庫瀏覽器,并搜索PWM,將該模塊拖出到右側。(有探索精神的朋友也可以看一下simscape庫中的PWM模塊如何使用。)
雙擊該模塊,在模塊配置界面,可以看到我們可以修改該模塊的周期、初始延遲等參數,PWM周期和頻率是倒數關系,在電機控制領域中,一般10kHz的頻率就可以進行大部分基礎效果的控制,對應時間也就是100us,這里我們設定其周期為1e-4(即0.0001s - 100us)。
從該配置界面,我們可以看到該模塊采用輸入信號數值作為占空比,也就是說我們如果給定一個0.5的數值,那么占空比就是50%,數值為1,占空比就是100%。
在正式地引入PWM模塊到我們的模型之前,還需要對模型的一些部分進行調整。
- 此前在逆變器電路中放置的可控電壓源,需要改回我們最開始使用的電壓源(記得將電壓也恢復為直流100V),并刪除現在多余的電壓控制輸入引腳
Voltage in
。(圖中紅色方框部分均刪除。)
- 換相邏輯模塊需要補充PWM關斷時的處理,也就是說我們需要為該模塊添加一個新的輸入引腳,表示PWM信號。
仿照matlab官網視頻中的做法,這里我們設定的PWM控制邏輯是在同一相位時,上橋MOS管發PWM,下橋保持常開。
這里借用一下其他博主文章中的圖片,可以看到我們這種方法對應的就是下圖中的(2)H_pwm-L_on;matlab官網演示的邏輯則是相當于對BLDC電機進行正反向交替的控制,控制效果方面沒有本質區別,不過實際電路中這種方法會存在MOS開關次數較多的問題,會存在較高的開關損耗。
從庫瀏覽器中搜索swith模塊,拖出后按照下圖方式搭建我們新的換相邏輯模塊。
這里switch的閾值設定為0.5,因為我們的PWM模塊的輸出僅有0和1,當PWM模塊輸出1時,我們啟用上方的換相邏輯,也就是正常的打開對應的上橋和下橋,PWM模塊輸出0時,啟用下方的換相邏輯,表示上橋關斷,下橋繼續保持打開。
此時我們的仿真模型如下圖所示。
這里我們的PID控制器此前所要連接的電壓輸入端口已經被刪除了,那么現在控制器的輸出應該連接到哪里?
此前我們已經知道了PWM模塊的輸入信號即代表其占空比,數值越大,占空比越高,那么后續控制輸出的等效的電壓也就越高,是不是和我們之前直接控制電壓源電壓有點相似?
所以PID控制器的輸出要連接到PWM模塊的輸入,而PWM模塊的輸出則是連接到我們剛剛添加的換相邏輯模塊的PWM輸入引腳。
這里我們對我們仿真模型模塊的連接進行了調整,如上圖所示。
不過此時我們的模型還不適合直接運行,因為PWM模塊的輸入信號要求數值在0到1,而我們的PID控制器之前輸出的數值則是直接控制電壓,數值可以達到上百,并不合適。
這里我們重新調整PI參數,可以直接縮小為原本參數的一千分之一。
接下來切換到“飽和”欄,勾選上輸出飽和和積分器飽和的“限制輸出”框,并設定兩者的上限為1,下限為0,將輸出限定在PWM模塊輸入信號的規定范圍內。
點擊運行,在仿真結束后,我們打開速度角速度示波器,看到角速度的變化趨勢與此前的設定一致。
單純看角速度的變化情況平平無奇,畢竟我們本身就是希望引入PWM調制來實現此前直接控制電源電壓相同的效果。
切換到三相逆變器模塊中,打開電流、電壓示波器,可以看到現在的波形長的十分奇特。
這里選定電壓窗口,為了便于展示隱藏了兩相電壓波形,可以看到這一相電壓存在頻繁的高低切換,表明我們的逆變電路正在根據PWM信號對MOS管進行快速的導通與關斷的切換。
我們進一步放大電壓波形,并使用游標來測量電平切換的間隔。
從右側可以看到,相鄰的兩個電平之間的時間間隔竟然是1ms左右,與我們設定的100us(1ms)相去甚遠。
不過別擔心,物理學的大廈并沒有崩塌,這里我們確實設定的PWM的輸出周期是100us,而此處逆變電路模塊的切換間隔是1ms的緣故是求解器設定的采樣時間比較大。(不知道大家還記不記得這個久遠的模塊。)
我們將求解器的時間也設定為100us,重新運行并再次查看電平變化的間隔。(此時由于求解器采樣時間縮短,會導致運行時間變長。)
如下圖所示,可以看到這次電平變化的間隔就是100us了,與我們的設定一致。(拯救物理學大廈行動大成功)
(不過后面我們將會知道,此時的設定依然有一些問題,這一點會在之后的系列文章中進行講解。)
關于剛剛奇特的電壓電流波形,大家如果進行過一些實際調試的話,會覺得這顯然存在一些問題;這種波形與實際示波器中看到的電路波形差異很大,我們會在接下來的部分講解如何修改我們的模型,使得其更貼近實際電路情況。
三、逆變電路MOS管添加體二極管
這里我們打開逆變器模塊中的各個MOS管,為其添加體二極管(紅色框中所示)。
為六個MOS管模塊進行同樣的修改,在完成之后我們再次點擊運行,觀察電壓波形。
有實物調試經驗的朋友可以看到,現在的波形就會比較貼近在示波器中看到的實際波形;從波形的高低切換過程,我們也可以看到六步換相控制方法的特征:
最開始此相下橋導通,之后作為懸空相,電機反電動勢疊加到該相,使得相電壓提高(上圖波形兩側下方的小三角表示逆變電路上橋沒有打開時對應的相電壓);接下來又作為上橋導通相,導通了兩個相位周期,后續又是作為懸空相、下橋導通相,與此前講述的六步換相次序一致。
對該波形下端部分進行放大,可以看到最低達到-0.8V電壓,和剛剛配置的正向導通電壓一致,也就是當電機反電動勢使得相位電壓小于-0.8V時,MOS管內部的體二極管導通,使得相電壓鉗位在-0.8V,不會達到更大的負電壓。
四、模擬添加機械負載
也許這個時候可以認為模型已經比較貼近實際了,不過當我們設定轉速由高速重新降低回到低速時,卻發現出現了不符合預期的情況。
我們修改重復序列模塊的輸出值,要求現在的參考速度是達到1000后,又降低回到500。
打開我們的角速度示波器,發現電機轉速達到1000后,卻沒有按照預期降低下來。
我們在PID輸出側放置一個示波器模塊,觀察PID控制器的輸出,發現中間及后面部分的輸出都是0,表示此時不輸入電壓給逆變電路;但電機速度卻保持了恒定,表明我們的電機是沒有負載轉矩及摩擦損耗的,而我們的控制邏輯又只有正向旋轉的控制,因此無法降低速度。(某種程度上講,我們這里搭建了一個永動機。)
為了模擬實際電機受到的反向轉矩,我們可以按照如下步驟來為我們的模型添加機械負載。
在庫瀏覽器搜索Ideal Torque Source
,即理想轉矩源,并拖動到右側。
閱讀其幫助文檔,我們知道這個模塊的C端口表示外殼,R端口表示輸出軸,和我們電機模型對應端口的含義一致。這里我們將其R、C兩個端口和電機的R、C兩個端口連接在一起。
該模塊的S端口表示信號控制端口,輸出轉矩數值即是我們給定S端口的信號數值(單位是N*m)。
我們按照下圖方式放置、連接此模塊,并在S端口連接了一個Simulink-PS Converter
模塊以實現信號的轉換輸入,在后面添加一個Constant
模塊,這里我們設定數值為-4,即不斷的給BLDC電機輸出軸施加一個反向的,大小為4N*m的負載轉矩。
此時我們再觀察角速度傳感器的輸出,可以看到此時轉速的變化大體上符合了我們設定的參考轉速的給定。
五、仿真模型與控制框圖
這里我們再簡要分析一下現在搭建的仿真模型與自動控制領域的控制框圖的聯系。
目前我們的仿真模型如下圖所示。
借用其他作者文章里面的自動控制系統方框圖,可以看到,我們搭建的仿真模型與這張控制框圖有些相似的地方;實際上我們也確實可以將兩者聯系起來。
接下來我們按照從左到右,從上到下的次序,依次講解這個自動控制系統方框圖各個元素與我們的仿真模型的聯系。
- 輸入信號r(t),在我們的模型中實則就是
Repeating Sequence
重復序列模塊,這個模塊給出了我們希望達到的轉速,也就是參考速度。 - 偏差信號e(t),就是輸入信號減去主反饋信號,在我們的模型中,就是重復序列模塊減去理想角速度傳感器獲得的電機轉速,也是對應的。
- 串聯校正元件,即PID環節,對應的就是模型中的PID控制器模塊。
- 放大元件,對應實際電路系統中,一般MCU的PWM信號給到逆變電路前,還會有驅動芯片等,用于放大MCU輸出的弱電控制信號;在我們的模型中,換相邏輯輸出直接給到了逆變電路,可以認為放大元件和我們的執行元件(MOS管)合并在了一起。
- 執行元件,如前所述,就是我們三相逆變器模塊,或者說其中的MOSFET模塊。
- 控制對象,這里我們搭建的是BLDC電機控制模型,控制對象自然是BLDC電機,我們希望能夠控制其轉速的輸出,而在實際電機運行過程中,由于摩擦轉矩、負載轉矩波動等,會對控制結果引入擾動。
- 輸出,也就是被控量,這里我們要實現的是電機轉速的閉環控制,因此模型中的輸出就是電機轉速。
- 并聯校正元件,有時放大元件、執行元件本身參數會有波動,使用并聯校正的方式來降低被包圍元件參數變化的敏感性。模型中沒有并聯校正部分。(個人對這一點也不是很理解,歡迎指導。)
- 測量元件,即理想旋轉運動傳感器。
- 主反饋信號,模型中我們直接獲取了轉速數值,不過轉速這個概念實際上是抽象的,在實際系統中,我們可能通過編碼器來獲取電機一定時間內轉過的角度,進而計算出轉速;從編碼器輸出的各類信號量,進一步處理為電機轉速,此時我們才得到了實際參與運算的反饋信號。
- 主反饋,也就是測量元件要進行測量的物理量,實際與作為輸出的電機轉速含義相同。
- 此外,我們還需要注意反饋信號的極性,也就是檢測到了這樣的反饋信號后,我們到底是要提高控制器的輸出還是降低控制器的輸出;例如這里電機轉速低于參考量時,我們可以增加PWM占空比,也就是等效提高輸出電壓;但如果我們控制不了PWM占空比,例如我們只能控制一個串聯在逆變器電源上的滑動變阻器,通過改變阻值來影響電壓輸出,阻值越高,給到電機三相的電壓越低,此時如果我們檢測到的電機轉速低于參考轉速,而我們卻增加了變阻器阻值,使得輸出電壓更低,進一步使得電機轉速更低,此時就形成了一個預期外的正反饋,而無法達到我們的控制目的。
下一篇文章中,我們將會對官方視頻展示的animateRotorPosition.m
的可視化腳本進行講解,并展示如何修改腳本以適配我們的模型進行可視化。
文章相關模型文件下載鏈接
通過網盤分享的文件:BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬
鏈接: https://pan.baidu.com/s/1ORc2kw0Dn_0dOwvcu-OzUQ?pwd=32e8 提取碼: 32e8
參考鏈接
PWM(脈沖寬度調制)原理、應用以及實現
BLDC的基本控制
自動控制原理分析工作原理以及方框圖做題過程