1. 程式人生 > >PMSM控制01-在MATLAB/sinmulink模擬實現-計時器比較法輸出SVPWM波形

PMSM控制01-在MATLAB/sinmulink模擬實現-計時器比較法輸出SVPWM波形

由於本人轉入新能源汽車電機控制行業,因此日後會陸續更新汽車電機、控制器、控制演算法、電路等的文章。當然別的DIY文章也會繼續更,工作、興趣、生活,該有的都得有。 以下正文: simulink中實現計時器比較法輸出SVPWM控制波形: 計時器比較法是控制中常用的演算法,在DSP中基本都使用此演算法輸出SVPWM,因為與硬體原理相適用,這也是為後續在硬體上實現DSP控制做鋪墊。
scope2顯示的輸出波形:
clock模組用於給定系統輸入時間,根據系統時間產生正弦餘弦波形:

clock輸出的即是一個計時累加的訊號,最終值等於simulink模擬時間。 雙擊matlab function,彈出介面進行如下配置,模組輸出的是一個複數。帶i的為虛部。
輸入引數即是一個實部虛部之間相位差pi/2的複數,至於為何三角函式內乘100,因為輸入引數u與模擬時間相關,u為0-0.01的遞增值,乘100保證相位為0~pi,起碼有半個週期的輸入,是修正數量級用的引數。
complex to Magnitude-Angle模組分解複數,為幅值和角度: 該模組專用於分解複數,複數的英文即complex。
再下一步,將產生的幅值和角度輸入S-function模組: S-function是simulink中供使用者呼叫自定義指令碼函式的模組: 自定義的m檔案,下面對m檔案程式碼進行分析: 對輸入的連續電壓向量進行離散化: function[sys,x0,str,ts] = SVPW_TimeCounterCompare003(t,x,u,flag)
tsam = 0.02/20; switchflag, case 0         [sys,x0,str,ts] = Initialization(tsam); case 3         sys = mdlOutputs(t,x,u); case {1,2,4,9}         sys = []; otherwise         error(['Unhandled flag=',num2str(flag)]); end function[sys,x0,str,ts] = Initialization(tsam) sizes = simsizes;%simsizes用於設定Sfunction引數狀態
sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 2; sizes.NumInputs = 2; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;%取樣時間 sys = simsizes(sizes); x0 = []; str = []; ts = [tsam 0 ]; functionsys = mdlOutputs(t,x,u) sys = [u(1),u(2)]; 下一步是進入包含核心計算公式的程式碼:
第二個matlab dunction模組配置: 直接呼叫m檔案。
左邊輸入4個訊號5個量,第一個是上一步分解的幅度角度兩個值組成的一維陣列,第二個輸入是取樣頻率第三個是直流電壓值,第四個為比較用的三角波: 這些量作為輸入量,MATLAB Function模組呼叫的程式碼: functiony = SVPWM_TimeCounterCompare(u) Ve = u(1); Ph = u(2); te = u(3); Udc = u(4); du = pi/3; %定義每個向量開關訊號 u0 = [0 0 0]; u1 = [1 0 0]; u2 = [1 1 0]; u3 = [0 1 0]; u4 = [0 1 1]; u5 = [0 0 1]; u6 = [1 0 1]; u7 = [1 1 1]; %判斷向量所處的扇區,選擇對應的ua,ub,phe,根據所在扇區選擇合成的所需的一組向量 ifPh>0 && Ph<=du     Phe = Ph;     h = 1;     ua = u1;     ub = u2; elseifPh>du && Ph<=2*du     Phe=2*du-Ph;     h = 2;     ua = u3;     ub = u2; elseifPh>2*du && Ph<=3*du     Phe = Ph-2*du;     h = 3;     ua = u3;     ub = u4; elseifPh>-3*du && Ph<=-2*du     Phe = -Ph-2*du;     h = 4;     ua = u5;     ub = u4; elseifPh>-2*du && Ph<=-du     Phe = Ph+2*du;     h = 5;     ua = u5;     ub = u6; else     Phe = -Ph;     h = 6;     ua = u1;     ub = u6; end %計算ta,tb,t0(ms) A = Udc; ta = 1.5*(cos(Phe)-1/sqrt(3)*sin(Phe))*Ve*te/A; tb = sqrt(3)*Ve*sin(Phe)*te/A; t0 = te-ta-tb; ift0<0     ta = ta/(ta/tb)*te;     tb = te-ta; end %時間折算成電壓值 usw1 = Udc*t0/te/2; usw2 = Udc*ta/te+usw1; usw3 = Udc*tb/te+usw2; %判斷並輸出 %u(5)即為輸入的三角波值 ifu(5)>=0 && u(5)<usw1     y = u0;%中值電壓 elseifu(5)>=usw1 && u(5)<usw2     y = ua; elseifu(5)>=usw2 && u(5)<usw3     y = ub; elsey = u7;%中值電壓 end 程式碼的具體演算法公式等為計時器比較法輸出的原理及電壓向量疊加的理論推導公式,不在模擬的範疇,因此在此不做公式推導之類的贅述,有興趣可以查閱SVPWM波形原理,一般書都會詳細敘述上述公式的推導過程,半小時便能理解。 另外說明一下幾個模組的配置: 此為三角波發生模組,三角波模組在SVPWM發生中用作比較作用,(與調製訊號比較,這個模型的調製訊號就是第一個matlab function模組產生的複數訊號轉換成的相位幅度訊號,實際就是正餘弦波) 配置如下: 最終在scope2可以看到,模型輸出為: 然後,再把SVPWM訊號連線到逆變器上,輸出正弦波: 整體模型如下: 這一塊為模擬逆變器用,switch引數如下: 具體配置原理是,由於SVPWM控制訊號發生側輸出的是數字訊號,switch的邏輯關係設定為:若輸入訊號大於0.5,則輸出200,小於0.5,則輸出-200.由三個switch模組組成三路輸出。 這是模擬真實逆變器的模擬圖(只作為說明,此模型中不用到):
這是真實逆變器的原理圖: 逆變器的原理即是數字控制訊號通過控制6個IGBT的關斷,控制UVW三相輸出狀態:正,反,關斷,可直接用三個switch開關模擬,效果相同,實際的逆變器還需要考慮到死區時間、導通週期等問題,需要考慮的問題篇幅過大,在此不做贅述,逆變器部分再詳解。在此只為驗證計時器比較法的SVPWM輸出的正確性: 下面為輸出觀測模組:
傅立葉模組輸出的波形: 這裡傅立葉模組用於觀測幅值,可以看到幅值在起動的短時間內相電壓可以達到理論值148.8並保持穩定,接近150V輸入。
可觀測到,scope6的顯示為:
scope6前有4個低通濾波器,過濾諧波用,從上到下低通濾波器的作用分別為:只通過基波、過濾掉3次諧波以上的諧波、過濾5次諧波以上的諧波、過濾7次諧波以上的諧波,濾波器在軟硬體設計中都是一門大學問,在此亦暫不做贅述。 低通濾波器配置: 說明一下,下圖是保留基波的配置,若要過濾3次諧波以上的諧波,只需修改成314*3即可。5次7次同理。
從逆變器輸出波形可以看出: 一、濾波後,基波已經可以輸出較標準的正弦波形。 二、3次諧波的含量較高。 三、波形在一個週期後即達到理想狀態。(實際中由於EMC、氣隙磁場畸變等原因不會這麼理想) 可以看出此SVPWM演算法是正確可行的。 注: 1.SVPWM只是電機控制中很基礎的一環,控制訊號、反饋、park、clark變換等等軟體處理在實際應用中均有難度,特別是濾波,電磁相容的問題,足夠想到脫髮。因此只在matlab上做個模擬,輸輸波形跑跑電機是非常輕鬆愉悅的事。 2.實際要在simulink中搭建更接近真實控制電路控制流程的模型還缺幾個模組,會在後續補充,這裡只說明SVPWM的生成。 3.目前主流的還是FOC和DTC一類的控制演算法,以及無感測器控制的均會陸續更新。 4.CSDN的編輯器很不人性化,後續可能直接分享我的印象筆記,排版實在費時。 5.相關模型檔案我已經上傳到CSDN,可下載。

相關推薦

PMSM控制01-在MATLAB/sinmulink模擬實現-計時比較法輸出SVPWM波形

由於本人轉入新能源汽車電機控制行業,因此日後會陸續更新汽車電機、控制器、控制演算法、電路等的文章。當然別的DIY文章也會繼續更,工作、興趣、生活,該有的都得有。 以下正文: simulink中實

PMSM 控制技術探究與模擬1:三相PMSM的數學建模與座標變換

PMSM 控制技術探究與模擬1:三相PMSM的數學建模與座標變換 1,三相PMSM的基本數學模型   1.1 三相PMSM 的結構   1.2 基本數學模型 2,三相PMSM的座標變換   

c++ std::thread + lambda 實現計時

wake aps pen hide view color col pre pro 1 bool wait_for_wake = false; 2 std::mutex process_mutex; 3 std::condition_variable_any pro

關於安卓如何實現計時chronometer的暫停和繼續計時功能

package com.book.b525; import java.text.ChoiceFormat; import android.app.Activity; import android.app.ActionBar; import android.app.AlertDialog; import and

Android之Handler:實現計時例項

通常情況下,當應用程式啟動時,Android首先會開啟一個主執行緒 (也就是UI執行緒) , 主執行緒為管理介面中的UI控制元件,進行事件分發。如果此時需要一個耗時的操作,例如:聯網讀取資料,或者讀取本地較大的一個檔案的時候,你不能把這些操作放在主執行緒中,如果

自定義控制元件01---簡單view的實現

對於每一個應用來說幾乎都會有一個Topbar,並且基本都是類似的那麼假如應用有好多個頁面的話,就要寫好多遍,可以在Topbar整合為一個控制元件來使用,針對於這個的學習,總結如下: 1 atts自定義屬性的定義 res–values-atts.xml <?xml versi

2018.10.01【校內模擬】購買書籍(貪心)(堆)(set實現堆)

描述 L的書籍被M偷了以後傷心欲絕,決定再購買一些回來,現在有 N 本書可以買,每本書的價格是 a[i]元。 現在L總共有 M 元,以及 K 張優惠券。 對於每本書,如果使用一張優惠券,則可以用b[i]的優惠價格購買。 注意每本書只能使用一張優惠券,只能購買一次

python3.6環境下利用TCP傳輸控制協議模擬實現的端對端的聊天功能

服務端原始碼 """ TCP完整版聊天室端對端開發(服務端) version 1.1.0 author lkk Email [email protected] """ # 引入所需模組

C++實現滑鼠控制 封裝常見的模擬滑鼠、鍵盤的操作函式

API 或 MFC 視窗程式 裡 有 函式, 例如 API 函式 設位置: BOOL SetCursorPos( int x, int y); 引數是螢幕座標x,y 標頭檔案 Winuser.h 連結庫 #pragma comment (lib, "User32.lib") 或取位

最課程階段大作業之01:使用SVN實現版本控制

       版本控制在友軍那裡都是放在整個培訓的最後階段才開始講的,但我們打算放到SE階段。與其匆匆在專案實戰階段弄個半生不熟,然後進入實際工作中接受他人對你的懷疑,不如……早死早超生~~~。        可是,我們畢竟現在才剛學了Java一個月,程式碼都寫的不溜呢,甚至都不知道目前掌握的知識能做點撒實

ESP8266-01之NodeMCU(lua)實現遠端控制LED燈

開發環境 ESP-01 wifi模組 LualLoader NodeMCU nodemcu_float_0.9.6-dev_20150704.bin nodemcu_integer_0.9.6-de

svpwmmatlab模擬實現

為了能讓大家在已經氾濫的知識上少走彎路,本人把自己在SVPWM上的認識與看到此貼的讀者們一起分享,廢話少說,切入正題:在看下面內容之前,您應該至少對SVPWM的原理有大致的瞭解,如果不瞭解也沒關係,你只要按照我交給你的步驟來做,也可以輕而易舉的跨過SVPWM這道坎,在模擬之前您必須安裝MATLAB7.0或

模糊PID基本原理及matlab模擬實現(新手!新手!新手!)

有關模糊pid的相關知識就把自己從剛接觸到模擬出結果看到的大部分資料總結一下,以及一些自己的ps 以下未說明的都為轉載內容 在講解模糊PID前,我們先要了解PID控制器的原理(本文主要介紹模糊PID的運用,對PID控制器的原理不做詳細介紹)。PID控制器(比例

Spring程式碼例項系列-07:Spring AOP面向切面,模擬實現事物控制

在Spring框架中,通過自定義的資料庫事物攔截器,對所有的Service層的Bean中的*Save和*Bc方法進行事務控制。 主要涉及的技術有: 1. Spring AOP 2. annot

python基礎作業------模擬實現一個ATM + 購物商城程序

setting water 轉賬 atm 結算 pan auth hide use 模擬實現一個ATM + 購物商城程序 作業需求: 額度 15000或自定義 實現購物商城,買東西加入 購物車,調用信用卡接口結賬 可以提現,手續費5% 每月22號出賬單,每月10號為還款日

模擬實現簡化版List叠代&嵌入List

元素 sort 可能 節點數 != ring type 部分 分配 1、叠代器(iterators)概念(1)叠代器是一種抽象的設計概念,其定義為:提供一種方法,使他能夠按順序遍歷某個聚合體(容器)所包含的所有元素,但又不需要暴露該容器的內部表現方式。 (2)叠代器是一種行

集合的模擬實現(函數模板)

delete bcd break 一行 其中 執行 eset 數據類型 turn 我們可以用一個數組來模擬集合,add運算用以實現集合元素的增加,delete運算用於實現集合元素的刪除,find運算用以實現集合元素的查找,但是目前集合元素類型未知,可以是int、char、d

頁面實現多個定時計時)時選用NSTimer還是GCD?(幹貨不濕)

self. spa inf ima efault baidu 設定 common ref 定時器在我們每個人做的iOS項目裏面必不可少,如登錄頁面倒計時、支付期限倒計時等等,一般來說使用NSTimer創建定時器: + (NSTimer *)timerWithTimeInte

用ES5模擬實現ES6中的Map類

fun 遍歷 false 創建 per 映射 .get script 實例 ECMAScript6原生實現了Map類,即我們所說的字典,字典和集合很像,不過集合是以值值得形式存儲元素,字典則是以鍵值的形式存儲元素。字典也叫映射。 1. 創建一個字典 function M

模擬實現MyBites中通過SQL反射實體類對象功能

println sub var void mysql exc 模擬實現 obj 執行 話不多說,直接上幹貨! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; im