Electric and Hybrid Drive Systems homework

profileansediao
dqCurrentControlledBLDCMotor-20190523.zip

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

We see that the torque is a maximum when = 0 or .

Likewise, the torque is a minimum when = 0 or .

To generate a maximum torque between the stator and rotor, the stator field (Is) is normally energized to lead or lag the rotor field (Br) by 90o. That is = 90o

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

·

Speed is measured as

·

Position is measured as

The additional “m” subscript denotes “measurement”.

Using the measurements, compute the current vector in 2D space (Cartesian coordinates)

(Clarke Transform)

The figure below illustrates the stator field.

Stator field

Rotor 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

Since we measure the angle of the magnetic field of the rotor, we can how the stator current/field lines up with the magnetic field of the rotor. The so-called d-q current/flux vector is the fictitious vector that would project on the rotor axes of . This is can be calculated using the so called Park Transform as shown here.

are called direct and quadrature currents/fluxes as seen from (projected and perpendicular to) the rotor coordinates. The figure illustrates the rotation transformation relationship.

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

Desired to be perpendicular to

Rotor field

Note that 90o is achieved if we can drive . We would control the magnitude of current/flux to follow some command value (say ) , and regulate to zero (say ). A current feedback controller scheme for controlling the current is devised as follows:

and are transfer functions of the controllers to be designed. Example: PI control scheme.

Alpha-Beta Voltage Command and Inverse Park Transform

To close the current loop, we need to transform using the 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

qq

qq

éù

éù

éù

===

êú

êú

êú

-

êú

ëû

ëû

ëû

iTi

&

dq

ii

m

i

a

m

i

a

sref

I

ˆ

s

s

mr

StatorcurrentI

Statorangle

Rotorangleor

q

qq

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

qq

qq

éù

éù

-

éù

==

êú

êú

êú

ëû

ëû

ëû

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

qq

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

qq

qq

éù

éù

éù

=

êú

êú

êú

-

ëû

ëû

ëû

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

qq

qq

éù

éù

-

éù

=

êú

êú

êú

ëû

ëû

ëû

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

qq

-=-

90

o

sr

qq

-=

em

t

90

o

sm

qq

--

90

o

sm

qq

-=

90180

oo

sm

qq

--=-

90

o

sm

qq

-=-

()

sm

qq

-

ˆˆ

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

qq

qq

éù

éù

-

éù

==

êú

êú

êú

êú

ëû

ëû

ëû

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

qq

--

= 0 or

90

o

sm

qq

-=

.

Likewise, the torque

em

t

is a minimum when

90180

oo

sm

qq

--=-

= 0 or

90

o

sm

qq

-=-

.

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

qq

-

= 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

qq

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