當前位置: 華文星空 > 知識

MATLAB 到底有多厲害?

2018-03-27知識

關註作者或點贊,私信可領取電機控制秘籍一份。

剛開始玩電機的時候也不喜歡MATLAB,每次都是直接碼程式碼,然後去轉電機。

效果不好就在程式碼裏改來改去,暈暈乎乎調了一周進展也不大。這種情況就是陷入了調參數的怪圈,惡性迴圈進而打擊自信,進步也很緩慢。

後來學會了simulink,才明白學習FOC一定要配合MATLAB,進步快很多。

1、 理解離散系統 :在FOC中經常涉及到上個開關周期的角度,電壓,或者預測下個周期的角度,電流,一般都是透過延時模組實作。

delay延時模組

為什麽要使用這個模組呢?比如一般PWM比較值寄存器被覆寫後都是使能了預裝載,采樣後觸發計算到比較值生效可以延時0.5個開關周期Ts,也可以延時1個開關周期Ts,或者1.5個Ts。不同的延時對於控制效果有什麽區別呢?只需要在simulink定義延時時間即可,非常方便對比不同的方案下的區別。這種偵錯在實物上實作要復雜很多!

2、 實作參數自整定 :把所有的環路參數放在m檔裏,在執行工程前,修改電機參數,環路參數等等,先執行m檔,可以實作參數自整定。要修改參數也只用改m檔,類似宏定義一樣,環路的參數自整定和這個也差不多了。

m檔實作參數自整定

3、 強大示波器功能 :simulink的示波器功能非常強大,可以不限制檢視任意波形,這在實物偵錯中也很難做到,除非去開發上位機配合檢視,但是也有通道和數據量的限制。一般ARM M0的平台也沒有資源去開發上位機。

示波器顯示電流電壓

尤其是現在比較通用的直流側單電阻采樣波形,可以清晰看到每個磁區對應的電流波形和單電阻波形的對應關系:

單電阻采樣波形

4、 模組化的平台,縮短開發周期 :一般開發一種新的觀測器,閱讀文獻之後,經過simulink驗證。在搭建好平台之後,把觀測器,速度環,電流環,轉矩補償等等封裝成各自的模組。需要驗證哪個模組,即進行對應的修改。經過simulink驗證的方法,基本都可以在實物中實作。如果simulink仿真失敗,基本就直接放棄了。一般一個新的觀測器仿真需要一到兩周,可以大大縮短開發周期。

在搭建了完整的仿真平台後,實物和仿真模型基本可以做到95%以上的對應,除了一些非線性相依的因素,因為在仿真中無法模擬,需要在實物中實作。對於有經驗的開發人員,拿到了離散的仿真模型,基本就等於拿到了程式碼。

當然如果模型在連續域仿真,那當我沒說,這種方法以無限的計算量替代離散仿真,基本等同於耍流氓。。。

滑模和電流模型整合到同一平台
滑模模型,和公式一一對應

5、 s函數程式碼級仿真 :如果有足夠的精力,simulink是可以實作c語言程式碼級仿真的。用s函數替代離散模組,程式碼放在s函數裏,完全可以實作跟實物對應的仿真。移植到實物中程式碼也可以快速偵錯透過。

s函數執行的指令是在命令視窗輸入:」mex xx.c「,xx是s函數檔名。

s函數程式碼
s函數框圖

6、線上參數變化的仿真。

一般來,Ld和Lq會隨著電流出現飽和特性,所以可以透過m檔編程,實作Ld和Lq線上根據電流查表確定電感值。但是實際的無感FOC控制依然使用固定值,電機模型使用的飽和模型,這樣子可以評估無感FOC的控制方法對電感飽和是否敏感,或者對電感的敏感程度。

Ld飽和模型

提供一種方法作參考:

用如下文件裏的程式碼生成電感表格:
https:// ww2.mathworks.cn/help/p hysmod/sps/ref/elec_generateidealpmsmfluxdata.html

將表格匯入如何可編輯的電機模型即可:
https:// ww2.mathworks.cn/help/a utoblks/ref/fluxbasedpmsm.html?requestedDomain=zh

表格需要自己對應程式碼整理一下。

7、模擬MCU的執行方式。使用Simulink離散模組搭建的方式,可以模擬MCU的硬件執行的結構。一般MCU最重要的是主頻和中斷,分別對應Simulink的最上層執行時間和定時執行的中斷部份。如下圖:

powergui模組設定仿真步長和類別

使用powergui模組設定成離散模式,設定仿真步長5e-7,相當於仿真最上層是2MHz的執行頻率,這個2M就類似於MCU的主頻,顯示,電機模型本體響應的計算就以這個頻率執行。

然後透過脈沖模組設定定時觸發執行的控制模組,就相當於是定時執行的中斷:

使用Pulse Generator模組,執行周期1e-4,相當於中斷頻率10k,控制環路都放在中斷裏,就跟MCU的執行結構非常類似了。執行頻率對於離散控制來說是核心參數,不同的執行頻率仿真結果區別很大。

千萬不要在powergui裏設定成continuous仿真模式 ,那樣會透過很高的計算頻率掩蓋環路的問題,用連續模式仿真成功基本等同於耍流氓!

8、評估環路的階躍響應:在伺服中比較常見的測試電流環頻寬,一般測試交流給定幅相曲線。

以階躍響應為例,可以把電機角度固定成0,電流解耦角度和逆變角度都強制給0,然後電流環的Id給參考,測試Id環路的參考和反饋,即可得到階躍響應。如下圖:

Id電流環節約響應

9、評估參數敏感性:

以磁鏈模型為例,當電機模型磁鏈跟計算使用磁鏈相等時,觀測角度和誤差如下:

計算磁鏈和電機模型磁鏈相等

當溫度上升,磁鏈降低到只有計算值的80%,再去比較估算角度和誤差,就能判斷控制方法對磁鏈的變化敏感程度。

電機模型的磁鏈只有計算使用磁鏈的80%
磁鏈下降20%,觀測角度誤差增大到15degrees

對於研究電機控制來說,前期的主要工作放在文獻和仿真上,到了程式碼已經是很後期的工作了。這種工作並不是靠程式碼量來決定工作進展,也許研究了一個月就改了一行程式碼卻能夠解決大問題。

對於我來說,如果不讓我使用simulink我覺得自己就基本失業了,工作也沒有任何樂趣可言。轉電機並不是無腦的去寫程式碼做實驗,而是透過simulink去打磨模型,透過模型的搭建深入理解了方法才去開始實物階段的實驗。要想深入理解FOC,使用MATLAB是必經之路,沒有捷徑可走。模型對電機的詮釋是無法用實驗來代替的。

到現在為止,MATLAB的功能也許我才用了不到1‰。如果單純能把MATLAB玩得很溜,我覺得年薪百萬也不是難題。至少我的工作離不開MATLAB。