劉 濤, 蔡 燕, 張海華, 李新旻
(天津工業大學 電工電能新技術天津市重點實驗室, 天津市電機系統先進設計與 智能控制技術工程中心, 天津 300387)
Matlab/Simulink是一款高級科學計算與工程仿真軟件,能夠實現動態系統建模、仿真和綜合集成分析以及線性/非線性系統、數字控制及數字信號處理的仿真[1-2],近十幾年在電力電子系統和電機驅動等領域得到了廣泛的應用[3-5]。
在高等院校,Matlab/Simulink相關課程通常安排在教學計劃的后期,與其他專業課程相區別。該課程綜合了電路理論、電器學、自動控制理論、信號與系統、電力系統、電力電子、電機學、電機拖動等多門課程的核心知識,對教學方法和實驗設計的要求很高[6-8]。目前,Matlab/Simulink的教學包括簡單的編程練習和基礎仿真訓練,學生掌握的知識是碎片化的,缺乏整體系統模型的概念。
本文在傳統的Matlab/Simulink課程中引入代碼生成技術和物理實驗系統,使虛擬仿真技術與實驗教學緊密結合,借此提高學生對所學理論知識的實踐運用能力[9-12]。以傳統經典的PID控制系統和電機控制系統實驗為例,對Matlab/Simulink課程的實驗教學進行改革,力求把理論知識與實際相結合,在Simulink建模的基礎上實現理論與實踐的一體化教學,使學生加深對復雜系統及其與專業知識之間映射關系的理解,初步積累項目經驗和提高解決復雜工程的能力。
代碼生成技術是將Matlab/Simulink中建立的算法模型自動生成代碼,然后轉換為能夠控制實際物理模型的高級語言程序,通過將程序進行編譯、鏈接、下載到開發板中,將Matlab/Simulink中虛擬形式的控制系統轉換為可以直接實現功能的硬件系統控制程序。
Matlab/Simulink中的代碼生成技術體現在軟件所包含的Matlab Coder、Simulink Coder和Embedded Coder 3個工具箱中。其中,Matlab Coder用于Matlab編程語言與C/C++代碼之間的轉換;Simulink Coder用于Simulink仿真模型與C/C++代碼之間的轉換;Embedded Coder專門針對嵌入式系統實現C/C++代碼的生成,同時提供Matlab Coder和Simulink Coder的配置選項和高級優化,以便對所生成代碼的函數、文件和數據進行精細控制。
生成的C/C++代碼并不能直接應用于物理硬件系統,需要根據目標控制器選擇合適的編譯環境,同時使用專用的接口工具實現Matlab/Simulink與編譯環境的連接。例如,針對TI公司的C2000系列微控制器,需要采用Code Composer Studio 6作為編譯環境,同時下載C2000支持包作為Matlab/Simulink的插件實現接口工具。
基于代碼生成技術的Matlab/Simulink實驗教學流程如圖1所示。

圖1 基于代碼生成技術的實驗教學流程
傳統的Matlab/Simulink課程的實驗教學模式包含3部分:
(1) 課程基本定義與基本方法:講授仿真所涉及的基本理論知識和方法,該部分與學生以往所學的課程相關,例如講授電機驅動系統仿真時,講授電機學和電機拖動相關知識;
(2) 基本公式與推理過程:從基本理論和方法中提取關鍵公式和推理過程,用于仿真模型的搭建;
(3) Matlab/Simulink仿真模型實現:講授Matlab /Simulink仿真模型的建立過程和相關參數設定方法。
傳統的實驗教學按基本理論的講解、基本公式的推演、仿真模型的實現逐步推進,最后通過仿真實現對理論的闡明和驗證,整個教學過程停留在單個反饋環中,所有的過程均利用黑板和個人電腦完成,很難讓學生將理論知識、技術手段與實際工程相結合,而且仿真結果只是在數學層面驗證基本理論的正確性,沒有對學生進行實際硬件操作的訓練,且并未考慮實際物理系統與數學模型的聯系與區別。
附加代碼生成技術后,教學過程增加了2個環節:
(1) C/C++代碼生成:將Matlab/Simulink仿真模型對應的算法模型進行轉換,生成相應的C/C++代碼,在此基礎上,利用接口工具對代碼進行參數配置和優化,使其成為編譯環境可以識別的程序語言;
(2) 實際控制系統:將C/C++代碼下載到硬件系統的微控制器中,通過完成算法的功能實現對物理系統的控制,從而驗證算法對應的理論知識。
可以看到:附加代碼生成技術后,通過實驗驗證,增加一條反饋環,可以觀察到算法對系統的控制作用,加深學生對系統知識的理解,學生可以觀察到數學模型與實際物理系統的聯系與區別。重要的是:基于代碼生成技術,不需要經過繁瑣的程序設計與硬件學習便可完成實驗,減少了學習周期和實驗設計的難度。
PID控制堪稱自動控制理論中的經典,在Matlab/Simulink教學中,有必要將其加入相關實驗教學過程。
圖2是基于Matlab/Simulink代碼生成技術的PID控制系統教學平臺。圖2中:
① 為實際物理系統,包括鋁合金支架、電磁鐵、H橋電路、光電傳感器、arduino開發板等組件,可以實現電磁鐵對鐵球的磁懸浮控制,進而控制鐵球的懸停位置;
② 為實際物理系統的結構示意圖,其中,光電傳感器測量鐵球與電磁鐵之間的距離,并通過模擬電路傳遞給arduino開發板的模擬數字轉換端口,arduino根據鐵球位置設定值,利用PID控制器得到合適的輸出值,結合脈寬調制(pulse-width modulation,PWM)技術向H橋電路發出PWM信號,從而控制電磁鐵對鐵球的吸引力;

圖2 基于Matlab/Simulink代碼生成技術的 PID控制系統教學平臺
③ 為Matlab/Simulink仿真模型,分為控制算法仿真部分和硬件系統仿真部分,其中控制算法部分主要包括PID控制器和鐵球位置設定模塊,體現經典控制理論中的數學模型,硬件系統仿真部分包括模/數轉換以及脈寬調制,與實際物理硬件系統相對應。
在實驗教學中,學生通過實際物理系統和結構示意圖推導系統的控制原理,并在此基礎上搭建PID控制系統的Matlab/Simulink仿真模型,通過代碼生成技術,將仿真模型轉換為C代碼,經過接口工具,將生成的代碼編譯、鏈接、下載到arduino開發板中,實現鐵球的磁懸浮控制。學生可以通過Matlab/Simulink中的虛擬示波器觀察鐵球的位置波動曲線,從而對PID控制器進行相應的調試。由于代碼生成技術的輔助,學生在操作過程中不需要進行繁瑣的編程,而是將主要精力放在PID控制器的特性學習和參數調試中,從而提高學習效率。
基于Matlab/Simulink代碼生成技術的電機控制系統教學平臺如圖3所示。

圖3 基于Matlab/Simulink代碼生成技術的 電機控制系統教學平臺
電機控制系統涉及電機拖動、自動控制和電力電子等多門課程的交叉,對實驗教學設計有較高的要求。圖3中:
① 為實際的硬件物理系統,由兩臺永磁同步電機、DRV8301驅動板和Launchpad 28069M開發板組成;
② 為Matlab/Simulink搭建的仿真電路;
③ 為代碼生成工具運行時輸出的報告。
在實驗教學中,通過對圖3①中硬件系統各部分的講解,使學生直觀地了解交流電機控制系統所需的控制器、驅動器、變流器各自的作用和相互關系。在此基礎上,對仿真模型進行講解,使學生了解控制算法的實現方法,以及仿真與實際物理系統的映射關系。利用代碼生成技術,將仿真模型進行轉換,并利用接口工具將代碼傳遞給微控制器所需的編譯環境Code Composer Studio 6中,通過編譯、鏈接、下載到微控制器中。學生通過調試,能夠更為實際地理解交流電機中坐標變換、閉環控制、空間矢量調制技術等重要環節。
Matlab/Simulink課程的教學過程可分為課前預習、教師講解、學生自主學習、學生自主實驗以及總結5部分。
在正式上課之前,要求學生對相關內容進行預習,了解實驗所涉及的理論知識、實驗原理、實驗步驟,并提交實驗預習報告。教師根據學生預習的情況,有重點地講解相關知識內容,以節省在課堂上對基礎知識進行講解所花費的時間。
在實驗人數安排上,安排3~4人為一組,通過分工合作,每人完成不同部分的程序編寫與調試、記錄參數和數據、下載程序與硬件調試,完成全部的實驗步驟。通過組內交流,總結并記錄實驗中出現的問題以及解決方法。每次實驗結束后,學生通過交換位置,確保每人都能掌握整個實驗過程,并各自撰寫實驗總結報告。教師對學生在實驗中遇到的問題進行解答,鞏固和加深學生對知識的理解。
實驗結束后,從有無預習報告、仿真模型搭建、代碼生成、實際物理系統調試、實驗數據以及實驗報告等方面對學生的學習情況進行綜合評分,評分中應兼顧學生的團隊合作能力和表達溝通能力。
基于代碼生成技術對Matlab/Simulink實驗課程進行重新設計,加入了實際物理系統,使得學生在基礎理論學習的基礎上,通過代碼生成工具對仿真模型進行轉換,并將所生成的代碼進行編譯、鏈接、下載到硬件系統的微控制器中,完成實際物理系統的控制與調試。該實驗課程的改革實現了仿真模型與實際物理系統對學生理論學習過程的雙重反饋,加深了學生對所學內容的理解,鍛煉了學生將理論知識應用到實際工程的能力,增強學生的學習興趣,提高了學生的團隊協作能力和解決復雜工程項目的能力。在設計的電氣傳動控制系統案例中,應用代碼生成技術,簡化了系統的編程設計過程,取得了良好的教學效果。