Electric and Hybrid Drive Systems homework
BLDCMtr_CurrLoop_MAIN_2019.slx
metadata/coreProperties.xml
model 2010-05-13T01:40:01Z MototronPC2 Ka C Cheok 2019-05-22T19:21:40Z 1.107 R2018b
metadata/mwcoreProperties.xml
application/vnd.mathworks.simulink.model Simulink Model R2018b
metadata/mwcorePropertiesExtension.xml
9.5.0.941248
metadata/thumbnail.png
simulink/ScheduleCore.xml
HighNumberLast false Default -2147483648 true false 1 Cont 40 255 0 -1 false 2 D2 41 255 0.050000000000000003 -1
simulink/ScheduleEditor.xml
graph.Edge 100 100 Cont base Cont graph.Graph 100 100 D2 implicit-discrete D2 graph.Graph Default graph.Graph 40 #000000 0 Cont base Cont 1 41 #000000 0.05 D2 implicit-discrete D2 Dependency Default
simulink/bddefaults.xml
landscape auto usletter inches [0.500000, 0.500000, 0.500000, 0.500000] 1 off off 200 white 100 off off black white off normal Arial 10 normal normal on on 0 off center middle black white off Arial 10 normal normal model off note_annotation off off off Arial 9 normal normal off 10 1 on Sample based [] [] Inherit: Inherit from 'Constant value' off inf inf off 4 none off 1 Element-wise(K.*u) [] [] Inherit: Same as input [] [] Inherit: Same as input off Floor on -1 1 off [] [] Inherit: auto off off inherit -1 Inherit -1 auto auto off off on none internal 0 off inf -inf off pi -pi off off auto off on '' sin -1 auto on -1 1 off -1 4 none off BusObject off 1 [] [] Inherit: auto off off inherit -1 Inherit -1 auto auto off Dialog held [] off off 0 off 2 Element-wise(.*) All dimensions 1 on [] [] Inherit: Same as first input off Zero on -1 system '' [] auto Simulink.scopes.TimeScopeBlockCfg sine Use simulation time 1 1 Hertz on FromPortIcon ReadWrite All off off off -1 Auto Auto Auto void_void off Inherit from model Inherit from model Inherit from model Inherit from model Inherit from model off UseLocalSettings AllNumericTypes UseLocalSettings off off NONE Expression off off off off on off off off 0 off off rectangular ++ All dimensions 1 on Inherit: Inherit via internal rule [] [] Inherit: Same as first input off Floor on -1 [1] [1 2 1] auto '' auto 1 [1] [0 1] [1] auto ''
simulink/blockdiagram.xml
windows-1252 Normal 0.035000 on off UseLocalSettings AllNumericTypes UseLocalSettings Overwrite Run 1 120 clear all; close all; clc; Ts = 0.001; L = 0.01; R = 1; J = 1; D = 5; win64 1 [303.0, 53.0, 1168.0, 746.0] 0 Left 50 50 9 1 1 SimulinkTopLevel 0 [2800.0, 1475.0] 1.0181159420289856 [-128.39886843861211, 36.249110320284728] GLUE2:PropertyInspector Property Inspector 0 0 Right 256 192 AAAA/wAAAAD9AAAAAgAAAAAAAAC9AAAB+PwCAAAAA/sAAAAWAEQAbwBjAGsAVwBpAGQAZwBlAHQAMwEAAAAxAAAB+AAAAAAAAAAA+wAAABYARABvAGMAawBXAGkAZABnAGUAdAA0AAAAAAD/////AAAAAAAAAAD7AAAAUgBHAEwAVQBFADIAIAB0AHIAZQBlACAAYwBvAG0AcABvAG4AZQBuAHQALwBHAEwAVQBFADIAIAB0AHIAZQBlACAAYwBvAG0AcABvAG4AZQBuAHQAAAAAAP////8AAAEAAP///wAAAAEAAAAAAAAAAPwCAAAAAfsAAABUAEcATABVAEUAMgA6AFAAcgBvAHAAZQByAHQAeQBJAG4AcwBwAGUAYwB0AG8AcgAvAFAAcgBvAHAAZQByAHQAeQAgAEkAbgBzAHAAZQBjAHQAbwByAAAAAAD/////AAAAiAD///8AAAtIAAAGPQAAAAEAAAACAAAAAQAAAAL8AAAAAQAAAAIAAAAP/////wAAAAAA/////wAAAAAAAAAA/////wEAAAAA/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wEAAAEL/////wAAAAAAAAAA/////wEAAAHa/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wEAAALl/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA/////wEAAAch/////wAAAAAAAAAA/////wEAAAeI/////wAAAAAAAAAA/////wAAAAAA/////wAAAAAAAAAA on UpdateHistoryNever %<Auto> %<Auto> 480439297 1.%<AutoIncrement:107> off off none on on off off AliasTypeOnly on on off off off on off off on on on off off off off on on on off off off off on on off off off on normal off 5 1 10 10 0 off 1 none off MATLABWorkspace accel.tlc accel_default_tmf make_rtw off $bdroot $bdroot off on manual normal 1 any 1000 auto 0 0 rising 0 off off off off off on off on on off off on Ensure deterministic transfer (maximum delay) Ensure data integrity only Ensure deterministic transfer (minimum delay) None 0 off [303, 53, 1471, 799] on off Deduce 102 simulink-default.rpt 61 [2, 1] [115, 138, 140, 202] -1 +- off Inherit: Inherit via internal rule off [415, 50, 445, 80] -2 0 [0, 105, 30, 135] -3 magenta 0 1 Idref [480, 70, 510, 100] -4 0 [1, 2] [175, 151, 180, 189] -5 black off 2 bar [1, 2] [200, 426, 205, 464] -6 black off 2 bar 1 Id 2 Iq [1, 2] [215, 486, 220, 524] -7 black off 2 bar 1 Idref 2 Iqref [2, 1] [410, 287, 505, 343] -8 on blue Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 15 [20, 101, 40, 119] -1 Port number [20, 136, 40, 154] -2 2 Port number [1, 1] [270, 230, 320, 270] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 6 [2, 2] [180, 100, 230, 160] 7 sf_sfun [2 2] off on off 2 Idq [460, 241, 480, 259] 9 [460, 101, 480, 119] -6 Port number 11 8::1#out:1 [120, 0] 8::13#in:1 12 8::2#out:1 8::13#in:2 Idq 13 [0, 0] 8::13#out:2 8::6#in:1 14 8::14#out:1 8::15#in:1 15 8::13#out:1 8::14#in:1 [1, 1] [535, 274, 640, 326] -9 on blue Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 14 [20, 101, 40, 119] -1 Port number [1, 1] [270, 230, 320, 270] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 5 [1, 2] [180, 100, 230, 160] 7 sf_sfun [1 2] off on off 2 Is [460, 241, 480, 259] 9 [460, 101, 480, 119] -5 Port number 9 9::1#out:1 9::12#in:1 Is 10 [0, 0] 9::12#out:2 9::5#in:1 11 9::13#out:1 9::14#in:1 12 9::12#out:1 9::13#in:1 [2, 1] [415, 153, 505, 222] -10 blue Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 15 [20, 101, 40, 119] -1 Port number [20, 136, 40, 154] -2 2 Port number [1, 1] [270, 230, 320, 270] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 7 [2, 2] [180, 100, 230, 160] 7 sf_sfun [2 2] off on off 2 Vs [460, 241, 480, 259] 9 [460, 101, 480, 119] -6 Port number 11 10::1#out:1 [120, 0] 10::13#in:1 12 10::2#out:1 10::13#in:2 Vs 13 [0, 0] 10::13#out:2 10::6#in:1 14 10::14#out:1 10::15#in:1 15 10::13#out:1 10::14#in:1 [2, 3] [675, 132, 780, 208] -11 red off 2 ThetaRDot ThetaRdot [303, 53, 1471, 799] off Deduce 89 [465, 443, 495, 457] -1 Port number [210, 58, 240, 72] -2 2 Port number [20, 427, 70, 453] 14 0.1 [800, 565, 820, 585] -3 [1, 3] [455, 86, 460, 124] -4 red black off 3 bar [4, 1] [340, 490, 445, 555] -5 green Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 17 [20, 101, 40, 119] -1 Port number [20, 136, 40, 154] -2 2 Port number [20, 171, 40, 189] -3 3 Port number [20, 206, 40, 224] 4 4 Port number [1, 1] [270, 230, 320, 270] 9 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 4 [4, 2] [180, 102, 230, 203] 8 sf_sfun [4 2] off on off 2 Torq [460, 241, 480, 259] 10 [460, 101, 480, 119] -7 Port number 15 16::1#out:1 16::15#in:1 16 16::2#out:1 16::15#in:2 17 16::3#out:1 16::15#in:3 18 16::11#out:1 16::15#in:4 Torq 19 [0, 0] 16::15#out:2 16::7#in:1 20 16::16#out:1 16::17#in:1 21 16::15#out:1 16::16#in:1 [3, 1] [145, 209, 305, 291] 13 on magenta Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 20 [20, 101, 40, 119] -1 Port number [20, 136, 40, 154] -2 2 Port number [20, 171, 40, 189] -3 3 Port number [1, 1] [270, 230, 320, 270] 12 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 8 [3, 2] [180, 100, 230, 180] 11 sf_sfun [3 2] off on off 2 E_ABC [460, 241, 480, 259] 13 [460, 101, 480, 119] -7 Port number 13 53::1#out:1 53::18#in:1 14 53::2#out:1 53::18#in:2 15 53::3#out:1 53::18#in:3 E_ABC 16 [0, 0] 53::18#out:2 53::7#in:1 17 53::19#out:1 53::20#in:1 18 53::18#out:1 [20, 0] 53::19#in:1 [1, 3] [650, 75, 775, 135] -6 red Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 16 [20, 101, 40, 119] -1 Port number [1, 1] [270, 245, 320, 285] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 2 [1, 4] [180, 102, 230, 203] 7 sf_sfun [1 4] off on off 2 Is 3 MagIs 4 AngIs [460, 256, 480, 274] 9 [460, 101, 480, 119] -5 Port number [460, 136, 480, 154] -6 2 Port number [460, 171, 480, 189] -7 3 Port number 13 17::1#out:1 17::14#in:1 Is 14 [0, 0] 17::14#out:2 17::5#in:1 MagIs 15 [0, 0] 17::14#out:3 17::6#in:1 AngIs 16 [0, 0] 17::14#out:4 17::7#in:1 17 17::15#out:1 17::16#in:1 18 17::14#out:1 17::15#in:1 [2, 1] [265, 52, 435, 143] -7 red Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 15 [20, 101, 40, 119] -1 Port number [20, 136, 40, 154] -2 2 Port number [1, 1] [270, 230, 320, 270] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 1 [2, 2] [180, 100, 230, 160] 7 sf_sfun [2 2] off on off 2 Sum_ABC [460, 241, 480, 259] 9 [460, 101, 480, 119] -6 Port number 11 18::1#out:1 [120, 0] 18::13#in:1 12 18::2#out:1 18::13#in:2 Sum_ABC 13 [0, 0] 18::13#out:2 18::6#in:1 14 18::14#out:1 18::15#in:1 15 18::13#out:1 18::14#in:1 [200, 479, 250, 561] 12 pi Inherit: Inherit via internal rule Inherit: Inherit via internal rule off 1 Kb = Kt = Brmax*l*r*pi*Ns/2 [1, 1] [685, 505, 715, 535] -9 blue 1 ThetaR [1] [965, 530, 1025, 560] -10 StatorRotorMagFields_ANIM_one 0 off [4, 1] [860, 532, 865, 618] -11 off bar [3, 1] [590, 40, 595, 170] -12 red off 3 bar [25, 614, 75, 646] 11 100 [4, 1] [135, 444, 170, 566] 10 4 off Inherit: Inherit via internal rule off [2, 1] [500, 510, 520, 530] -13 off round -+| off Inherit: Inherit via internal rule off [865, 75, 885, 95] -14 [485, 32, 575, 68] -15 red [L R] 1 IA [490, 87, 550, 123] -16 red [L R] 1 IB [485, 147, 545, 183] -17 red [L R] 1 IC [560, 502, 620, 538] -18 blue [J D] 1 ThetaRdot [895, 530, 930, 560] -19 Ts*50 [25, 501, 70, 529] 9 0.15 [25, 556, 70, 584] 8 0.075 [960, 483, 990, 497] -20 Port number [955, 428, 985, 442] -21 2 Port number [860, 28, 890, 42] -22 3 Port number 1 14#out:1 [15, 0; 0, 10] 22#in:3 2 18#out:1 15#in:1 3 15#out:1 [5, 0] 26#in:1 4 15#out:2 27#in:1 5 15#out:3 [5, 0] 28#in:1 IA 6 [0, 0] 26#out:1 [3, 0; 0, -32; -105, 0; 0, 42] 23#in:1 IB 7 [0, 0] 27#out:1 23#in:2 IC 8 [0, 0] 28#out:1 [25, 0] 23#in:3 9 23#out:1 [15, 0] 10 [0, -70] 33#in:1 11 17#in:1 12 22#out:1 [8, 0; 0, -30] 30#in:1 13 30#out:1 21#in:1 ThetaRdot 14 [0, 0] 29#out:1 [45, 0] 15 20#in:1 16 [0, -70] 17 [0, -140; -320, 0; 0, -85] 53#in:1 18 [270, 0] 32#in:1 19 53#out:1 [-9, 0; 0, -130] 18#in:2 20 17#out:1 25#in:1 21 13#out:1 [0, 10] 18#in:1 22 24#out:1 29#in:1 23 12#out:1 [10, 0] 24#in:1 24 17#out:2 [15, 0; 0, 314; -469, 0; 0, 81] 16#in:1 25 17#out:3 [0, 195; -35, 0; 0, 73] 26 [-435, 0; 0, 122] 16#in:2 27 [0, 43; 60, 0; 0, 95; 30, 0; 0, 14] 22#in:1 28 16#out:1 [0, -5; 20, 0] 29 [0, 85] 22#in:4 30 24#in:2 ThetaR 31 [0, 0] 20#out:1 [11, 0] 32 [0, -196; -367, 0; 0, -74] 53#in:2 33 [34, 0] 34 [0, 25] 35 [0, 75; -440, 0] 16#in:3 36 [65, 0; 0, 20] 22#in:2 37 [0, -30] 31#in:1 Kb = Kt = Brmax*l*r*pi*Ns/2 38 [0, 0] 54#out:1 [9, 0] 39 [0, 25] 16#in:4 40 [0, -43; 56, 0] 53#in:3 41 52#out:1 [25, 0; 0, 20] 56#in:1 42 57#out:1 [15, 0; 0, -25] 56#in:2 43 58#out:1 [25, 0; 0, -50] 56#in:3 44 55#out:1 [35, 0; 0, -80] 56#in:4 45 56#out:1 [10, 0] 54#in:1 [560, 57, 590, 93] -12 [2, 1] [555, 406, 560, 444] -13 off 2 bar [2, 1] [60, 136, 65, 174] -14 off 2 bar 1 Idqref [2, 1] [355, 151, 360, 189] -15 off 2 bar 1 Vqd [2, 1] [420, 466, 425, 504] -16 off 2 bar [2, 1] [635, 526, 640, 564] 2 off 2 bar [1, 1] [535, 162, 650, 218] -17 blue Stateflow.Translate.translate ExplicitOnly on off MATLAB Function [227, 345, 838, 789] off Deduce 14 [20, 101, 40, 119] -1 Port number [1, 1] [270, 230, 320, 270] 8 1 Stateflow S-Function BLDCMtr_CurrLoop_MAIN_2019 3 [1, 2] [180, 100, 230, 160] 7 sf_sfun [1 2] off on off 2 Vabc [460, 241, 480, 259] 9 [460, 101, 480, 119] -5 Port number 9 39::1#out:1 39::12#in:1 Vabc 10 [0, 0] 39::12#out:2 39::5#in:1 11 39::13#out:1 39::14#in:1 12 39::12#out:1 39::13#in:1 [3] [710, 415, 745, 485] -18 Simulink.scopes.TimeScopeBlockCfg('CurrentConfiguration', extmgr.ConfigurationSet(extmgr.Configuration('Core','General UI',true),extmgr.Configuration('Core','Source UI',true),extmgr.Configuration('Sources','WiredSimulink',true,'DataLoggingSaveFormat','StructureWithTime','DataLoggingDecimateData',true),extmgr.Configuration('Visuals','Time Domain',true,'SerializedDisplays',{struct('MinYLimReal','-0.04521','MaxYLimReal','0.01257','YLabelReal','','MinYLimMag','0.00000','MaxYLimMag','0.04521','LegendVisibility','On','XGrid',true,'YGrid',true,'PlotMagPhase',false,'AxesColor',[0 0 0],'AxesTickColor',[0.686274509803922 0.686274509803922 0.686274509803922],'ColorOrder',[1 1 0.0666666666666667;0.0745098039215686 0.623529411764706 1;1 0.411764705882353 0.16078431372549;0.392156862745098 0.831372549019608 0.0745098039215686;0.717647058823529 0.274509803921569 1;0.0588235294117647 1 1;1 0.0745098039215686 0.650980392156863],'Title','%<SignalLabel>','LinePropertiesCache',{{}},'UserDefinedChannelNames',{{}},'NumLines',0,'LineNames',{{[]}},'ShowContent',true,'Placement',1),struct('MinYLimReal','-20.00000','MaxYLimReal','20.00000','YLabelReal','','MinYLimMag','0','MaxYLimMag','10','LegendVisibility','On','XGrid',true,'YGrid',true,'PlotMagPhase',false,'AxesColor',[0 0 0],'AxesTickColor',[0.686274509803922 0.686274509803922 0.686274509803922],'ColorOrder',[1 1 0.0666666666666667;0.0745098039215686 0.623529411764706 1;1 0.411764705882353 0.16078431372549;0.392156862745098 0.831372549019608 0.0745098039215686;0.717647058823529 0.274509803921569 1;0.0588235294117647 1 1;1 0.0745098039215686 0.650980392156863],'Title','%<SignalLabel>','LinePropertiesCache',{{}},'UserDefinedChannelNames',{{}},'NumLines',0,'LineNames',{{[]}},'ShowContent',true,'Placement',2),struct('MinYLimReal','-1.39988','MaxYLimReal','1.3797','YLabelReal','','MinYLimMag','0','MaxYLimMag','10','LegendVisibility','On','XGrid',true,'YGrid',true,'PlotMagPhase',false,'AxesColor',[0 0 0],'AxesTickColor',[0.686274509803922 0.686274509803922 0.686274509803922],'ColorOrder',[1 1 0.0666666666666667;0.0745098039215686 0.623529411764706 1;1 0.411764705882353 0.16078431372549;0.392156862745098 0.831372549019608 0.0745098039215686;0.717647058823529 0.274509803921569 1;0.0588235294117647 1 1;1 0.0745098039215686 0.650980392156863],'Title','%<SignalLabel>','LinePropertiesCache',{{}},'UserDefinedChannelNames',{{}},'NumLines',0,'LineNames',{{[]}},'ShowContent',true,'Placement',3)},'DisplayPropertyDefaults',struct('YLabelReal','','AxesColor',[0 0 0],'AxesTickColor',[0.686274509803922 0.686274509803922 0.686274509803922],'ColorOrder',[1 1 0.0666666666666667;0.0745098039215686 0.623529411764706 1;1 0.411764705882353 0.16078431372549;0.392156862745098 0.831372549019608 0.0745098039215686;0.717647058823529 0.274509803921569 1;0.0588235294117647 1 1;1 0.0745098039215686 0.650980392156863],'Title','%<SignalLabel>','LinePropertiesCache',{{}},'UserDefinedChannelNames',{{}},'NumLines',0,'LineNames',{{[]}},'ShowContent',true,'Placement',1),'DisplayLayoutDimensions',[3 1]),extmgr.Configuration('Tools','Plot Navigation',true,'OnceAtStop',false,'PreviousZoomMode','ZoomX','PreviousAutoscale','XY'),extmgr.Configuration('Tools','Measurements',true,'Version','2018b')),'Version','2018b','Location',[767.8 163.8 1499.8 688.6],'VisibleAtModelOpen','on','OpenAtMdlStart',true) 3 off [0, 1] [0, 185, 30, 215] -19 magenta Amp = %<Amplitude>\nFreq = %<Frequency> %<Units>\n%<WaveForm> square 16 0.2 1 Iqref [420, 534, 570, 586] 1 [4*0.5/7] [1 3.5] 1 Est Model ThetaRdot [205, 102, 345, 148] -20 [-20 -40] [0 -100] [2] [200, 205, 330, 255] -21 [-10 -20] [0 -100] [2] 1 39#out:1 11#in:2 2 2#out:1 34#in:1 3 4#out:1 34#in:2 4 34#out:1 [25, 0; 0, 75] 11#in:1 5 11#out:3 [35, 0; 0, 105] 9#in:1 6 9#out:1 8#in:1 7 8#out:1 [-270, 0] 8 [0, -87; -72, 0; 0, -43] 1#in:2 9 [0, 130] 6#in:1 Idref 10 [1, 0] 3#out:1 [10, 0] 36#in:1 Iqref 11 [0, 0] 41#out:1 [10, 0] 36#in:2 Idqref 12 [0, 1] 36#out:1 [15, 0] 13 1#in:1 14 [0, 350] 7#in:1 15 [0, 0] 1#out:1 5#in:1 16 5#out:1 [5, 0] 42#in:1 17 5#out:2 [5, 0; 0, 50] 43#in:1 18 10#out:1 39#in:1 19 11#out:1 [45, 0; 0, 240; -310, 0] 20 8#in:2 21 [-130, 0; 0, -180] 10#in:2 Vqd 22 [0, 0] 37#out:1 10#in:1 23 42#out:1 [0, 35] 37#in:1 24 43#out:1 [5, 0] 37#in:2 25 35#out:1 40#in:1 Id 26 [1, 1] 6#out:1 [300, 0; 0, -20] 35#in:1 Idref 27 [3, 1] 7#out:1 [88, 0; 0, -7; 96, 0; 0, -32; 73, 0; 0, 32; 43, 0; 0, -53] 35#in:2 Iq 28 [1, 1] 6#out:2 [195, 0] 38#in:1 Iqref 29 7#out:2 [152, 0] 36 [0, -10; 28, 0] 38#in:2 30 [2, 1] [0, 45] 59#in:1 32 38#out:1 [0, 17; 156, 0; 0, -52] 40#in:2 Est Model ThetaRdot 33 [1, 1] 59#out:1 [27, 0; 0, -5] 60#in:2 ThetaRDot 34 [0, 0] 11#out:2 [25, 0; 0, 409; -191, 0; 0, -44] 60#in:1 35 60#out:1 [30, 0; 0, -70] 40#in:3 Current Controller [155, 62, 254, 78] [0, 0, 0, 0] -1 12 bold italic
simulink/configSet0.xml
[] [] 0.0 30 auto on Ts auto 5 auto 10*128*eps 1000 4 1 auto auto 1 1e-3 on off ode3 ode3 auto DisableAll UseLocalSettings Nonadaptive TrustRegion off off Fast off off Unconstrained Whenever possible [] off off [] 1 [t, u] xFinal xInitial on 1000 off off off off Array ModelDataLogs on off on on off on off streamout on off xout tout yout logsout dsmout RefineOutputTimes [] out 1 off timeseries out.mat [-inf, inf] ZeroExternalMemoryAtStartup ZeroInternalMemoryAtStartup NoFixptDivByZeroProtection OptimizeModelRefInitCode BooleansAsBitfields PassReuseOutputArgsAs PassReuseOutputArgsThreshold UseSpecifiedMinMax on on on Tunable off off double off off on on off off on off on off uint_T on 64 Structure reference 12 2147483647 on 5 off off Native Integer on on on off off on inf Inherit from target on off off off on on off level2 Balanced on off off UseOnlyExistingSharedCode error none none none error none UseLocalSettings UseLocalSettings UseLocalSettings warning warning warning warning on Classic none off off UseLocalSettings warning warning none error warning warning warning warning error error error none warning none warning none warning warning error error none warning warning none none none none none none error warning none warning warning warning error none error none warning warning UseLocalSettings on off none error none none warning warning warning error warning warning error none warning none warning ErrorLevel1 WarnAndRepair none warning warning error error none warning warning warning warning warning warning warning warning error warning warning none warning warning all warning on warning warning off none [] 8 16 32 32 64 32 64 32 32 32 Char None Undefined Unspecified 32 on off 32-bit Generic 8 16 32 32 64 32 64 32 32 32 Char None on off Undefined Unspecified 32 32 32 Specified off on on on [] IfOutOfDateOrStructuralChange on error off on None Multi Infer from blocks in model on off off off [] [] on on on off off off sf_incremental_build off on 50 on on 65536 [] NotSpecified IncludeHyperlinkInReport GenerateTraceInfo GenerateTraceReport GenerateTraceReportSl GenerateTraceReportSf GenerateTraceReportEml PortableWordSizes GenerateWebview GenerateCodeMetricsReport GenerateCodeReplacementReport GenerateMissedCodeReplacementReport GenerateErtSFunction CreateSILPILBlock CodeExecutionProfiling CodeProfilingSaveOptions CodeProfilingInstrumentation grt.tlc None off make_rtw on off grt_default_tmf off on off [] off off off off off off Automatically locate an installed toolchain Faster Builds [] off off off None off executionProfile SummaryOnly off off C off off off off off off off off off off off [] Off 1024 IgnoreCustomStorageClasses InsertBlockDesc SFDataObjDesc SimulinkDataObjDesc DefineNamingRule SignalNamingRule ParamNamingRule InlinedPrmAccess CustomSymbolStr CustomSymbolStrGlobalVar CustomSymbolStrType CustomSymbolStrField CustomSymbolStrFcn CustomSymbolStrBlkIO CustomSymbolStrTmpVar CustomSymbolStrMacro IgnoreTestpoints InsertPolySpaceComments MATLABFcnDesc InternalIdentifier CustomSymbolStrModelFcn CustomSymbolStrFcnArg CustomSymbolStrUtil CustomSymbolStrEmxType CustomSymbolStrEmxFcn CustomUserTokenString ReqsInCode BlockCommentType off on Auto on off 31 off off off off off off off 1 8 $R$N$M $N$R$M_T $N$M $R$N$M$F $R$N rt$I$N$M rtb_$N$M $N$M $R$N$M $N$C emxArray_$M$N emx$M$N None None None off off on BlockPathComment on off off Shortened Literals off off [] IncludeMdlTerminateFcn RemoveResetFunc SuppressErrorStatus ERTCustomFileBanners GenerateSampleERTMain GenerateTestInterfaces ModelStepFunctionPrototypeControlCompliant PortableWordSizes PurelyIntegerCode GenerateAllocFcn SupportComplex SupportAbsoluteTime SupportContinuousTime SupportNonInlinedSFcns ExistingSharedCode RemoveDisableFunc PreserveStateflowLocalDataDimensions ansi_tfl_table_tmw.mat NOT IN USE C89/C90 (ANSI) None Auto System defined 2048 256 on off off off on on on on on Disable all off off off off Auto off on rt_ on off Nonreusable function off on on on on off off off Nominal Nominal off Simulink.SoftwareTarget.GRTCustomization off on off off on off on on [] [] 1,2,3,4,... Size,Breakpoints,Table Size,Breakpoints,Table Column-major error $R$E $R$E $R_data off off off off 1000000 0 ext_comm Level1 off off off off off Error [] Simulink Coverage Configuration Component Simulink Coverage off EntireSystem on off / covdata dw off on on on on on covCumulativeData off on slcov_output/$ModelName$ $ModelName$_cvdata on on off off on 1e-05 0.01 off 0 0 Masking Configuration Solver [ 153, 69, 1213, 699 ]
simulink/configSetInfo.xml
Configuration
simulink/graphicalInterface.xml
0 0 0 0 0 0 0 0 0 Unset 0 0 0 1
simulink/modelDictionary.xml
simulink/plugins/DiagnosticSuppressor.xml
on
simulink/plugins/LogicAnalyzerPlugin.xml
on
simulink/plugins/NotesPlugin.xml
on
simulink/plugins/SLCCPlugin.xml
on
simulink/plugins/WebScopes_FoundationPlugin.xml
on
simulink/stateflow.xml
03-Jun-2010 06:12:11 0 80000014 HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function PWM+3HalfBrigde+Current Circuit [376 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 10 6 CLUSTER_CHART EML_CHART 1 1 Stator_Vltgs 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 10 FUNC_STATE CLUSTER_STATE 1 function Sum_ABC = Stator_Vltgs(V_abc,E_ABC) Kpwm = 4; V_ABC = Kpwm*V_abc; V_N = (sum(V_ABC)-sum(E_ABC))/3; Sum_ABC = V_ABC - E_ABC - V_N*[1;1;1]; Matrix(4,1) [127.0, 405.0, 864.0, 322.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 10 SMART BOTH_STICK 1 [23.5747 49.5747 7] 10 CONNECTIVE_JUNCTION HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function Clarke Transform [376 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 18 7 CLUSTER_CHART EML_CHART 2 1 ClarkeTrsfm 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 18 FUNC_STATE CLUSTER_STATE 1 function [Is,MagIs,AngIs] = ClarkeTrsfm(I_ABC) eml.extrinsic('unwrap'); T_Clarke = [ 1 -0.5 -0.5; 0 0.866 -0.866 ]; Is = T_Clarke*I_ABC; % [AngIs,MagIs] = cart2pol(Is(1),Is(2)); MagIs = sqrt(sum(Is.^2)); AngIs = atan2(Is(2),Is(1)); AngIs = unwrap(AngIs); % AngIs = feval(@unwrap,AngIs); Matrix(4,1) [127.0, 405.0, 864.0, 322.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 18 SMART BOTH_STICK 1 [23.5747 49.5747 7] 18 CONNECTIVE_JUNCTION SOFTWARE 1 Space vector to 3-Phase Transform [396 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 27 5 CLUSTER_CHART EML_CHART 3 1 InvClarkeTfm 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 27 FUNC_STATE CLUSTER_STATE 1 function Vabc = InvClarkeTfm(Vs) % Inverse Clarke Transform Vabc = 2/3*[1 0; -0.5 0.867; -0.5 -0.867]*Vs; z1 = - min(Vabc); Vabc = Vabc + z1; Matrix(4,1) [10.0, 5.0, 700.0, 500.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 27 SMART BOTH_STICK 1 [23.5747 49.5747 7] 27 CONNECTIVE_JUNCTION HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function [376 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 34 8 CLUSTER_CHART EML_CHART 4 1 TorqGen 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 34 FUNC_STATE CLUSTER_STATE 1 function Torq = TorqGen(MagIs,AngIs,ThetaR,Kt) ThetaS = AngIs; Brmax = 3; Ns = 100; r = 0.1; l = 0.2; % NsIs2 = MagIs*Ns/2; % NPts = 360; Torq = 0; % for k = 1:NPts % ZetaTemp = (k-1)*2*pi/NPts; % Torq = Torq + Brmax*cos(ThetaR+ZetaTemp)*NsIs2*sin(ThetaS+ZetaTemp)*2; % end % Kt = Brmax*r*l*Ns/2*pi*sin(ThetaS-ThetaR); Torq = Kt*sin(ThetaS-ThetaR)*MagIs; Matrix(4,1) [10.0, 5.0, 700.0, 500.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 34 SMART BOTH_STICK 1 [23.5747 49.5747 7] 34 CONNECTIVE_JUNCTION Embedded MATLAB Function Clarke Transform [416 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 44 5 CLUSTER_CHART EML_CHART 5 1 ClarkeTfm 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 44 FUNC_STATE CLUSTER_STATE 1 function Is = ClarkeTfm(IABC) T_Clarke = [ 1 -0.5 -0.5; 0 0.866 -0.866 ]; Is = T_Clarke*IABC; % [MagIs,AngIs] = cart2pol(Is(1),Is(2)); Matrix(4,1) [103.0, 195.0, 819.0, 228.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 44 SMART BOTH_STICK 1 [23.5747 49.5747 7] 44 CONNECTIVE_JUNCTION Embedded MATLAB Function [376 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 51 6 CLUSTER_CHART EML_CHART 6 1 ParkTfm 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 51 FUNC_STATE CLUSTER_STATE 1 function Idq = ParkTfm(Ism,ThetaR) % This block supports the Embedded MATLAB subset. % See the help menu for details. T_Park =[cos(ThetaR) sin(ThetaR); -sin(ThetaR) cos(ThetaR)]; Idq = T_Park*Ism; Matrix(4,1) [137.0, 126.0, 671.0, 364.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 51 SMART BOTH_STICK 1 [23.5747 49.5747 7] 51 CONNECTIVE_JUNCTION Embedded MATLAB Function1 [396 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 59 6 CLUSTER_CHART EML_CHART 7 1 InvParkTfm 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 59 FUNC_STATE CLUSTER_STATE 1 function Vs = InvParkTfm(Vdq,ThetaR) % This block supports the Embedded MATLAB subset. % See the help menu for details. T_Park_Inv =[cos(ThetaR) -sin(ThetaR); sin(ThetaR) cos(ThetaR)]; Vs = T_Park_Inv*Vdq; Matrix(4,1) [145.0, 145.0, 605.0, 243.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 59 SMART BOTH_STICK 1 [23.5747 49.5747 7] 59 CONNECTIVE_JUNCTION HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function Back_Emf [396 52 213 385] [0 156.75 0 153.75] [1 1 1366 768 1.333333333333333] 67 7 CLUSTER_CHART EML_CHART 8 1 Back_Emf 0 eML_blk_kernel() [18 64.5 118 66] 12 SUBCHART 67 FUNC_STATE CLUSTER_STATE 1 function E_ABC = Back_Emf(ThetaRdot,ThetaR,Kb) E_ABC = Kb*[sin(ThetaR - 0); sin(ThetaR - 2*pi/3); sin(ThetaR - 4*pi/3)]*ThetaRdot; end Matrix(4,1) [76.0, 112.0, 700.0, 229.0] fimath(... 'RoundMode', 'floor',... 'OverflowMode', 'wrap',... 'ProductMode', 'KeepLSB', 'ProductWordLength', 32,... 'SumMode', 'KeepLSB', 'SumWordLength', 32,... 'CastBeforeSum', true) FimathMatlabFactoryDefault FimathUserSpecified INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE SF_COMPLEX_INHERITED inherit Inherit: Same as Simulink OUTPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_NO inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink INPUT_DATA -1 SF_INHERITED_TYPE SF_DOUBLE_TYPE 1 16 SF_COMPLEX_INHERITED SF_FRAME_INHERITED inherit Inherit: Same as Simulink {eML_blk_kernel();} [28.125 13.875 102.544 14.964] 12 [0 0 1 0 23.5747 14.625 0 0] 3 [1 0 -1 0 23.5747 42.5747 0 0] [23.5747 24.9468] [21.175 25.975 14.625 42.575] 67 SMART BOTH_STICK 1 [23.5747 49.5747 7] 67 CONNECTIVE_JUNCTION 9 HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function PWM+3HalfBrigde+Current Circuit 10 9 HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function Clarke Transform 18 9 SOFTWARE 1 Space vector to 3-Phase Transform 27 9 HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function 34 9 Embedded MATLAB Function Clarke Transform 44 9 Embedded MATLAB Function 51 9 Embedded MATLAB Function1 59 9 HARDWARE BLDC Motor with PPU PWM+3HalfBridges+Stator+Rotor +ExternalTorq/Embedded MATLAB Function Back_Emf 67
[Content_Types].xml
_rels/.rels
simulink/_rels/blockdiagram.xml.rels
simulink/_rels/configSetInfo.xml.rels
Ch6D3 BLDC Motor w dq Park Clark 2019.docx
ECE 4/595 Electric Drive Systems Prof Ka C Cheok
AC MACHINE WITH PERMANENT MAGNET ROTOR
Brushless DC (BLDC) Motor – Max Torque Condition
Torque Generated between Stator and Rotor - Summary
Variables:
Parameters:
BLDC Motor is a special case of the AC Synchronous Machine when the lead angle between stator and rotor field orientation is always maintained (controlled) to be at 90o.
Max Torque Conditions
The 90 deg orientation yields a consistent torque constant and proportional relationship to the stator current:
,
This makes the AC (sinusoidally distributed field) motor behave like that of a DC motor… hence the name Brushless DC Motor. It’s an AC motor that is controlled to produce a torque proportional to an input current.
To turn an AC Machine (electrically excited stator + PM rotor) into a BLDC, we need to add an electronic firmware (hardware & software) that uses feedback to determine how the stator should be excited to maximize torque in the motor action. We shall see how we can do that. It’ll be in the section for “field oriented control of d-q space vector”.
“We can do that. We are the factory!” … Hanson Windows Ad.
Current Control Loop for BLDC Motors
Coordinate transformation - Rotation matrix
clear all; close all; clc;
Ialfa = 2; Ibeta = 8; theta = 30/57.3;
figure
plot([0 0; 10 0 ],[0 0; 0 10],'b'); hold on
axis([-1 11 -1 11]); axis('equal');
plot([0 Ialfa],[0 Ibeta],'b','linewidth',2);
plot([[Ialfa Ialfa]' [0 Ialfa]'],[[0 Ibeta]' [Ibeta Ibeta]'],':b')
text(Ialfa+0.1,Ibeta,num2str([Ialfa; Ibeta]),'color','b');
plot([0 10*cos(theta)],[0 10*sin(theta)],'r')
plot([0 10*cos(theta+pi/2)],[0 10*sin(theta+pi/2)],'r')
Rot = [ cos(theta) sin(theta);
-sin(theta) cos(theta)];
Idq = Rot*[Ialfa; Ibeta];
xyredX = Rot'*[Idq(1); 0];
plot(xyredX(1),xyredX(2),'*r')
plot([Ialfa xyredX(1)],[Ibeta xyredX(2)],':g')
text(xyredX(1)+0.2,xyredX(2),num2str(Idq(1)),'color','r');
xyredY = Rot'*[0;Idq(2)];
plot(xyredY(1),xyredY(2),'*r')
Measured Alpha-beta currents
The BLDC motor feedback requires measurements of stator and rotor variables. We will assume that the following variables can be measured:
· Currents IA, IB, IC are measured as IAm, IBm, ICm
·
·
The additional “m” subscript denotes “measurement”.
(Clarke Transform)
The figure below illustrates the stator field.
Stand on the Rotor platform (light blue) and call out the dimensions (E.g., 3,4)
Stand on the Stator platform (gray) and call out the dimensions (E .g., 0.5980, 4.940)
Direct-quadrature (d-q) currents & Park Transform
Control of Currents
To promote generating a maximum or minimum torque, we would like to have Stator Current lead or lag the Rotor Field by a certain angle (for example 90o). That is
Alpha-Beta Voltage Command and Inverse Park Transform
The BLDC Motor – Its Basic Hardware + Software Integration
Connect the dots
( Inverse Clarke Transform PWM+ Three P hase Inverter Circuit Y-Stator circuit Hardware - Hardware Measurements & Software Software Space Vector Current/Field )
Measurement
Current Controller
Inverse Park Transform
Park Transform
Clarke Transform
Software
Hardware
Current Control Scheme for FOC BLDC
Or to be at the min of the sinusoid as needed.
Torque is always controlled to be at the max of the sinusoid, as shown in this case.
Open Loop Scheme AC PMSM
Torque oscillates and settles around the zero equilibrium
or neutral position.
Uncontrolled PMSM torque is much weaker than FOC BLDC
2015 AC BLDC Motor w dq Park Clark.docx 1 1 Jun ‘15
ˆˆ
cos(90)
2
ˆˆ
sin()
2
o
s
emrsms
s
rsms
N
BrlI
N
BrlI
tpqq
pqq
=--
=-
m
sm
m
i
i
a
b
éù
=
êú
ëû
I
sm
I
m
d
rmrm
dqParkm
q
rmrm
m
i
i
cs
i
sc
i
a
ab
b
éù
éù
éù
===
êú
êú
êú
-
êú
ëû
ëû
ëû
iTi
&
dq
ii
m
i
a
m
i
a
sref
I
ˆ
s
s
mr
StatorcurrentI
Statorangle
Rotorangleor
q
sref
I
0
d
i
®
q
i
qref
i
d
i
0
dref
i
=
ˆ
.
r
s
MaxmagdensityinrotorB
rradiusofrotor
llengthofrotor
Nnoofstatorwindings
=
=
=
(
)
(
)
()
0 to achieve 90lead or lag angle
is determined by desired magnitude
()
o
Cddrefd
d
dref
dq
q
qref
Cqqrefq
Gsii
v
i
v
i
Gsii
éù
-
=
éù
êú
==
êú
êú
-
ëû
ëû
v
()
Cd
Gs
()
Cq
Gs
()&()
iCq
iCd
CdpCdCqpCq
K
K
GsKGsK
ss
=+=+
d
dq
q
v
v
éù
=
êú
ëû
v
d
rmrm
q
rmrm
v
v
cs
v
v
sc
a
ab
b
éù
éù
-
éù
==
êú
êú
êú
ëû
ëû
ëû
v
min
1min
1
10
2
0.50.866
3
0.50.866
min(,,)
3
1
1
1
3
1
am
bm
cm
ambmcm
aam
bbm
ccm
v
v
v
v
v
vvvv
zv
vv
vvz
vv
a
b
éù
éù
éù
êú
êú
=-
êú
êú
êú
ëû
êú
êú
--
ëû
ëû
=
=-
éùéù
éù
êúêú
êú
=+
êúêú
êú
êúêú
êú
ëû
ëûëû
0
1
2
3
4
5
Q
Q
Q
Q
Q
Q
a
b
c
v
v
v
a
b
c
V
V
V
ˆ
s
s
mr
StatorcurrentI
Statorangle
Rotorangleor
q
AAN
A
BBN
B
CCN
C
VEV
I
sLR
VEV
I
sLR
VEV
I
sLR
--
=
+
--
=
+
--
=
+
1
(
3
)
NABC
ABC
VVVV
EEE
=++
---
sin()
2
sin(120)
2
sin(240)
2
s
Arrr
o
s
Brrr
o
s
Crrr
N
EBlr
N
EBlr
N
EBlr
pqq
pqq
pqq
=
=-
=-
&
&
&
v
v
a
b
em
t
Ext
t
r
q
&
r
q
r
q
&&
s
i
I
i
a
b
éù
=
êú
ëû
ˆ
.
r
s
MaxmagdensityinrotorB
rradiusofrotor
llengthofrotor
Nnoofstatorwindings
=
=
=
ˆ
s
s
I
q
1
JsD
+
ˆˆ
sin()
2
s
rsms
N
BrlI
pqq
-
1
s
22
1
ˆ
tan
s
s
II
I
I
I
ab
b
a
q
-
éù
+
êú
éù
êú
=
êú
êú
ëû
êú
ëû
d
m
rmrm
q
m
rmrm
i
i
cs
i
i
sc
a
b
éù
éù
éù
=
êú
êú
êú
-
ëû
ëû
ëû
10.50.5
00.8670.867
m
AmBmCm
m
i
III
i
a
b
éù
--
éùéùéù
=++
êú
êúêúêú
-
ëûëûëû
ëû
(
)
(
)
()
()
Cddrefd
d
q
Cqqrefq
Gsii
v
v
Gsii
éù
-
éù
êú
=
êú
êú
-
ëû
ëû
d
rmrm
q
rmrm
v
v
cs
v
v
sc
a
b
éù
éù
-
éù
=
êú
êú
êú
ëû
ëû
ëû
0
To be set
dref
qref
i
i
éù
éù
=
êú
êú
ëû
êú
ëû
, ,
AmBmCm
III
rm
q
10.50.5
00.8670.867
s
a
b
c
i
i
I
I
I
a
b
éù
=
êú
ëû
éù
--
éù
êú
=
êú
êú
-
ëû
êú
ëû
I
em
t
i
i
a
b
a
b
c
I
I
I
90
o
sr
-=-
90
o
sr
-=
em
t
90
o
sm
--
90
o
sm
-=
90180
oo
sm
--=-
90
o
sm
-=-
()
sm
-
ˆˆ
2
s
emrs
N
BrlI
tp
=
r
q
&
rm
q
&
r
q
rm
q
ab
10.50.5
00.8670.867
m
smmAmBmCm
m
i
III
i
a
ab
b
éù
--
éùéùéù
===++
êú
êúêúêú
-
ëûëûëû
ëû
Ii
3
..,,30
4
0.8660.50030.5980
0.5000.86644.9640
d
o
rm
q
m
m
i
Eg
i
i
i
a
b
q
éù
éù
==
êú
êú
ëû
ëû
éù
-
éùéùéù
==
êú
êúêúêú
ëûëûëû
êú
ëû
rm
q
sm
I
r
B
r
d
i
q
i
m
i
b
sm
q
m
i
a
rm
q
sm
I
ˆˆ
cos(90)
2
ˆˆ
sin()
2
o
s
emrsms
s
rsms
N
BrlI
N
BrlI
tpqq
pqq
=--
=-
r
B
r
d
i
q
i
m
i
b
sm
q
m
i
a
m
d
rmrm
m
q
rmrm
m
i
i
cs
i
sc
i
a
ab
b
éù
éù
-
éù
==
êú
êú
êú
êú
ëû
ëû
ëû
i
0.5980
..,,30
4.9640
0.8660.5000.59803
0.5000.8664.96404
m
o
rm
m
d
q
i
Eg
i
i
i
a
b
q
éù
éù
==
êú
êú
ëû
êú
ëû
éù
éùéùéù
==
êú
êúêúêú
-
ëûëûëû
ëû
rm
q
ECE 4/595 Electric Drive Systems
Prof Ka C Cheok
2015 AC BLDC Motor w dq Park Clark.docx
1
1 Jun ‘15
AC MACHINE
WITH PERMANENT MAGNET ROTOR
1
Brushless DC (BLDC) Motor
–
Max Torque Condition
1.1
Torque Generated between Stator and Rotor
-
Summary
BLDC Motor is a special case of the AC Synchronous Machine when the lead angle between stator and rotor
field orientation is always maintained (controlled) to be at
90
o
.
1.2
Max
Torque Conditions
We see that the torque
em
t
is a maximum when
90
o
sm
--
= 0 or
90
o
sm
-=
.
Likewise, the torque
em
t
is a minimum when
90180
oo
sm
--=-
= 0 or
90
o
sm
-=-
.
To generate a maximum torque between the stator and rotor, the stator field (
I
s
) is normally energized to lead
or lag the rotor field (
B
r
) by 90
o
.
That is
()
sm
-
= 90
o
ˆˆ
2
s
emrs
N
BrlI
tp
=
The 90 deg orientation yield
s
a consistent torque constant and proportional relationship to the stator current:
ˆˆ
cos(90)
2
ˆˆ
sin()
2
o
s
emrsms
s
rsms
N
BrlI
N
BrlI
tpqq
pqq
=--
=-
Variables:
ˆ
s
s
mr
StatorcurrentI
Statorangle
Rotorangleor
q
Parameters:
ˆ
.
r
s
MaxmagdensityinrotorB
rradiusofrotor
llengthofrotor
Nnoofstatorwindings
=
=
=
em
t
ECE 4/595 Electric Drive Systems Prof Ka C Cheok
2015 AC BLDC Motor w dq Park Clark.docx 1 1 Jun ‘15
AC MACHINE WITH PERMANENT MAGNET ROTOR
1 Brushless DC (BLDC) Motor – Max Torque Condition
1.1 Torque Generated between Stator and Rotor - Summary
BLDC Motor is a special case of the AC Synchronous Machine when the lead angle between stator and rotor
field orientation is always maintained (controlled) to be at 90
o
.
1.2 Max Torque Conditions
We see that the torque
em
is a maximum when 90
o
sm
= 0 or 90
o
sm
.
Likewise, the torque
em
is a minimum when 90180
oo
sm
= 0 or 90
o
sm
.
To generate a maximum torque between the stator and rotor, the stator field (I
s
) is normally energized to lead
or lag the rotor field (B
r
) by 90
o
. That is ()
sm
= 90
o
ˆˆ
2
s
emrs
N
BrlI
The 90 deg orientation yields a consistent torque constant and proportional relationship to the stator current:
ˆˆ
cos(90)
2
ˆˆ
sin()
2
os
emrsms
s
rsms
N
BrlI
N
BrlI
Variables:
ˆ
s
s
mr
StatorcurrentI
Statorangle
Rotorangleor
Parameters:
ˆ
.
r
s
MaxmagdensityinrotorB
rradiusofrotor
llengthofrotor
Nnoofstatorwindings
em
RotationMatrix_ILLUST_B.m
clear all; close all; clc; len = 5; thetaS = 0.1; Ialfa = len*cos(thetaS); Ibeta = len*sin(thetaS); thetaR = 30/57.3; tPark = [ cos(thetaR) sin(thetaR); -sin(thetaR) cos(thetaR)]; dAxis = tPark'*[1;0]*len*1.5; qAxis = tPark'*[0;1]*len*1.5; Idq = tPark*[Ialfa; Ibeta]; xyredX = tPark'*[Idq(1); 0]; xyredY = tPark'*[0;Idq(2)]; figure; plot([-len*1.5 0; len*1.5 0 ],[0 -len*1.5; 0 len*1.5],'r'); hold on axis('equal'); axis([-1 1 -1 1]*len*1.6); ab_line = plot([0 Ialfa],[0 Ibeta],'r','linewidth',2); ab_dash1 = plot([Ialfa Ialfa]',[0 Ibeta]',':r'); ab_dash2 = plot([0 Ialfa]',[Ibeta Ibeta]',':r'); ab_text = text(Ialfa+0.1,Ibeta,num2str([Ialfa; Ibeta]),'color','r'); d_axis = plot([0 dAxis(1)],[0 dAxis(2)],'b'); d_point = plot(xyredX(1),xyredX(2),'*r'); d_dash = plot([Ialfa xyredX(1)],[Ibeta xyredX(2)],':b'); d_text = text(xyredX(1)+0.2,xyredX(2),num2str(Idq(1),3),'color','m'); d_direct = text(dAxis(1),dAxis(2),'d Rotor'); q_axis = plot([0 qAxis(1)],[0 qAxis(2)],'b'); q_point = plot(xyredY(1),xyredY(2),'*r'); q_dash = plot([Ialfa xyredY(1)],[Ibeta xyredY(2)],':b'); q_text = text(xyredY(1)+0.2,xyredY(2),num2str(Idq(2),3),'color','m'); q_quadra = text(qAxis(1),qAxis(2),'q Rotor'); text(-len*1.3,-len,'Idq = tPark * Ialfabeta'); Idq_text = text(-len*1.4,-len*(1.3),num2str(Idq)); text(-len*1.0,-len*(1.3),' = *'); tPark_text = text(-len*0.8,-len*(1.3),num2str(tPark)); Iab_text = text(len*0.5,-len*(1.3),num2str([Ialfa;Ibeta])); ang = linspace(0,thetaR,round(thetaR/0.01)); thetaR_arc = plot(cos(ang)*len*0.5,sin(ang)*len*0.5,'b'); thetaR_text = text(len*0.6*cos(thetaR/2),len*0.6*sin(thetaR/2),[num2str(thetaR*57.3,5),' deg']); for k = 1:400 thetaS = thetaS + 0.02; Ialfa = len*cos(thetaS); Ibeta = len*sin(thetaS); tPark = [ cos(thetaR) sin(thetaR); -sin(thetaR) cos(thetaR)]; dAxis = tPark'*[1;0]*len*1.5; qAxis = tPark'*[0;1]*len*1.5; Idq = tPark*[Ialfa; Ibeta]; xyredX = tPark'*[Idq(1); 0]; xyredY = tPark'*[0;Idq(2)]; set(ab_line,'xdata',[0 Ialfa],'ydata',[0 Ibeta]); set(ab_dash1,'xdata',[Ialfa Ialfa]','ydata',[0 Ibeta]'); set(ab_dash2,'xdata',[0 Ialfa]','ydata',[Ibeta Ibeta]'); set(ab_text,'pos',[Ialfa+0.1,Ibeta],'string',num2str([Ialfa; Ibeta])); set(d_axis,'xdata',[0 dAxis(1)],'ydata',[0 dAxis(2)]); set(d_point,'xdata',xyredX(1),'ydata',xyredX(2)); set(d_dash,'xdata',[Ialfa xyredX(1)],'ydata',[Ibeta xyredX(2)]); set(d_text,'pos',[xyredX(1)+0.2,xyredX(2)],'string',num2str(Idq(1))); set(d_direct,'pos',[dAxis(1),dAxis(2)]); set(q_axis,'xdata',[0 qAxis(1)],'ydata',[0 qAxis(2)]); set(q_point,'xdata',xyredY(1),'ydata',xyredY(2)); set(q_dash,'xdata',[Ialfa xyredY(1)],'ydata',[Ibeta xyredY(2)]); set(q_text,'pos',[xyredY(1)+0.2,xyredY(2)],'string',num2str(Idq(2))); set(q_quadra,'pos',[qAxis(1),qAxis(2)]); set(Idq_text,'string',num2str(Idq)); set(tPark_text,'string',num2str(tPark)); set(Iab_text,'string',num2str([Ialfa;Ibeta])); ang = linspace(0,thetaR,round(thetaR/0.01)); set(thetaR_arc,'xdata',cos(ang)*len*0.5,'ydata',sin(ang)*len*0.5,'color','b'); set(thetaR_text,'pos',[len*0.6*cos(thetaR/2) len*0.6*sin(thetaR/2)],... 'string',[num2str(thetaR*57.3,5),' deg']); pause(0.05) end
StatorRotorMagFields_ANIM_one.m
function [] = StatorRotorMagFields_ANIM_one(In) %% Prof KaC Cheok ECE 4/577 Electric & Hybrid Drive Systems global Fig1 RotorArrow StatorFields StatorNsIs StatorNsIsDir PlotTorq global PlotRotor XLabel persistent Arrow ArrowLen Zeta Nz Bs Br RadR RadS RadS1 Cir CirLen NsIs Cross persistent Bsmax Brmax NsIs2 ThetaS = In(1); ThetaR = In(2); Clock = In(3); Torq = In(4); if Clock == 0 Nz = 16; RadR = 4.5; RadS = 1.75*RadR; RadS1 = 1.75*RadR; Bsmax = 1.5; NsIs2 = 2*1/2; Brmax = 2.5; Zeta = 0:2*pi/Nz:(Nz-1)*2*pi/Nz ; Bs = Bsmax*cos(Zeta); NsIs = NsIs2*sin(Zeta); Br = Brmax*cos(Zeta); Arrow = [-5 3 3 5 3 3 -5; 1 1 2 0 -2 -1 -1]/10*1.5; ArrowLen = size(Arrow,2); Cir = [cos(0:0.05:6.3); sin(0:0.05:6.3)]/NsIs2; CirLen = size(Cir,2); Cross = [ -1 1 0 -1 1; 1 -1 0 -1 1]/NsIs2*0.707; Fig1 = figure(1); set(Fig1,'pos',[30,30,900,500],'menu','none') subplot(1,2,1); plot(0,0); hold on; axis('equal'); axis([-1 1 -1 1]*10); for k = 1:Nz Temp = ThetaS + Zeta(k); Rot = [cos(Temp) -sin(Temp); sin(Temp) cos(Temp)]; Arrow1 = Bs(k)*Rot*Arrow + RadS1*Rot(:,1)*ones(1,ArrowLen); StatorFields(k) = fill(Arrow1(1,:),Arrow1(2,:),[1 0 0]); Cir1 = NsIs(k)*Cir + RadS*Rot(:,1)*ones(1,CirLen); StatorNsIs(k) = plot(Cir1(1,:),Cir1(2,:),'k'); if k <= Nz/2 StatorNsIsDir(k) = plot(RadS*Rot(1,1),RadS*Rot(2,1),'.'); else StatorNsIsDir(k) = plot(NsIs(k)*Cross(1,:)+RadS*Rot(1,1),... NsIs(k)*Cross(2,:)+RadS*Rot(2,1)); end end title(['Equiv Stator Current Is & Field Bs (RED)'; 'Rotor Field Br (BLUE) ']) XLabel = xlabel(['ThetaS = ' num2str(ThetaS)]); for k = 1:Nz Temp = ThetaR + Zeta(k) + pi; Rot = [cos(Temp) -sin(Temp); sin(Temp) cos(Temp)]; Arrow1 = Br(k)*Rot*Arrow + RadR*Rot(:,1)*ones(1,ArrowLen); RotorArrow(k) = fill(Arrow1(1,:),Arrow1(2,:),[0 0 1]); end % title('Permanent Magnet Rotor Field Br') plot((RadS*1.15)*Cir(1,:),(RadS*1.15)*Cir(2,:),'color',[1 0.5 0.5],'linewidth',3) plot((RadS*0.85)*Cir(1,:),(RadS*0.85)*Cir(2,:),':','color',[1 0.5 0.5],'linewidth',3) PlotRotor = plot((RadR*1.4)*Cir(1,:),(RadR*1.4)*Cir(2,:),':','color',[0.5 0.5 1],'linewidth',3) plot((RadR*0.6)*Cir(1,:),(RadR*0.6)*Cir(2,:),'color',[0.5 0.5 1],'linewidth',3) subplot(1,2,2); plot(0,0); hold on; axis([-180 180 -100 100]); grid on; Brmax = 3; Ns = 100; r = 0.1; l = 0.2; MagIs = 2; Kt = Brmax*r*l*Ns/2*pi*sin(ThetaS-ThetaR); Torq = Kt*MagIs; PlotTorq = plot(0,Torq,'*m','erasemode','none'); xlabel('ThetaS-ThetaR [deg]'); ylabel('Torq betw Rotor & Stator'); drawnow else for k = 1:Nz Temp = ThetaS + Zeta(k); Rot = [cos(Temp) -sin(Temp); sin(Temp) cos(Temp)]; Arrow1 = Bs(k)*Rot*Arrow + RadS1*Rot(:,1)*ones(1,ArrowLen); set(StatorFields(k),'xdata',Arrow1(1,:),'ydata',Arrow1(2,:)); Cir1 = NsIs(k)*Cir + RadS*Rot(:,1)*ones(1,CirLen); set(StatorNsIs(k),'xdata',Cir1(1,:),'ydata',Cir1(2,:)); if k <= Nz/2 set(StatorNsIsDir(k), 'xdata',RadS*Rot(1,1),... 'ydata',RadS*Rot(2,1)); else set(StatorNsIsDir(k),'xdata',NsIs(k)*Cross(1,:)+RadS*Rot(1,1),... 'ydata',NsIs(k)*Cross(2,:)+RadS*Rot(2,1)); end end set(XLabel,'string',['ThetaS = ' num2str(ThetaS)]); % display('Draw Stator') for k = 1:Nz Temp = ThetaR + Zeta(k) + pi; Rot = [cos(Temp) -sin(Temp); sin(Temp) cos(Temp)]; Arrow1 = Br(k)*Rot*Arrow + RadR*Rot(:,1)*ones(1,ArrowLen); set(RotorArrow(k),'xdata',Arrow1(1,:),'ydata',Arrow1(2,:)); end set(PlotRotor,'xdata',(RadR*1.4)*(cos(Temp)*Cir(1,:)-sin(Temp)*Cir(2,:)),... 'ydata',(RadR*1.4)*(sin(Temp)*Cir(1,:)+cos(Temp)*Cir(2,:))); set(PlotTorq,'xdata',rem((ThetaS-ThetaR)*57.3,180),'ydata',Torq); drawnow end