开关磁阻程序
开关磁阻电机控制器硬件设计及底层驱动开发

三、盘式开关磁阻电机控制器的 设计
针对洗衣机应用场景的特殊性,我们设计了一种盘式开关磁阻电机控制器。该 控制器由功率开关、磁传感器、控制电路板等组成。功率开关采用IGBT或 MOSFET等高性能开关器件,能够承受较高的电流和电压。磁传感器采用霍尔 元件或磁敏电阻等器件,能够准确检测磁场的变化。控制电路板采用微处理器 或FPGA等高性能芯片,能够实现复杂的控制逻辑和算法。
二、底层驱动开发
2、1驱动程序架构
底层驱动开发主要包括对STM32F4系列单片机的配置和编程。为了实现对电机 的精确控制,我们需要对单片机的GPIO(General Purpose Input/Output) 口、PWM口和ADC口进行配置和控制。我们使用C语言编写了相应的驱动程序, 包括初始化、配置、控制等函数。
2、4 ADC口配置与控制
ADC口是实现电机电流和电压采样的重要接口。我们使用STM32CubeMX工具对 ADC口进行了配置和初始化,设置了ADC的采样通道、采样速率等参数。通过 调用STM32F4系列单片机的ADC模块API函数实现ADC的采样和数据处理。我们 将采样到的电流和电压数据进行处理后,可以获得电机的实时运行状态信息, 从而为上层控制算法提供数据支持。
四、实验结果与分析
为了验证盘式开关磁阻电机控制器的性能,我们进行了一系列实验。实验结果 表明,该控制器具有较高的稳定性和可靠性,能够有效控制洗衣机的运转。同 时,该控制器具有较强的灵活性和可编程性,能够实现多种洗涤模式和洗涤程 序的快速切换。此外,该控制器具有较强的适应性和稳定性,能够在不同的洗 涤环境下稳定工作。
微控制器模块是整个控制器的核心,我们选择了具有高性能、低功耗特点的 STM32F4系列单片机作为主控制器。该系列单片机采用ARM Cortex-M4内核, 具有高达168MHz的时钟频率和丰富的外设接口,能够满足开关磁阻电机的高 精度控制需求。我们利用STM32F4系列单片机的PWM(Pulse Width Modulation)模块实现对电机的速度控制,利用ADC(Analog-to-Digital Converter)模块实现对电机电流和电压的采样和处理。
四相86结构开关磁阻程序

" ˫ W )-ÅP ַt) / !" ސ ַ#$ !" ̵- %"! !&! !'!(! )#$ !" ᆼ !"%(*)! %((*)#$ &!" ސ !"% ˋƢ)! %ˋƢ)(+ !" ऋϤ#ɢ(+ (!" ( ऋϤ#ɢ(+ ' !" ' ऋϤ#ɢ+ ,!" Φİ % -) ᇍɢ+./!" Φİ %" -) ᇍɢ(0+ (!" ( ᇍɢ(0+' !" ' ᇍɢ(1 (!" ( ऋ çɢ(1 ' !" ' ऋ çɢ/1+!" ऋ ࡙ɢ2+$!" Ƙ /2 (3! ᆿt)( /ࢍ4 5 t)( /ࢍ2' 6 ȉ Gś"./2"' $6 /20+ 6 ./2" Gś./2 ' 2"$ .0 . 6 ./2 Gś7./2& ' 2 $ .0 . 6 ./2& Gś./2 ' $6 /20+ 6 ./2 Gś8./27 ' $6 /20+ 6 ./27 Gś./2 ' $6 /20+ (6 ./2 Gś9: ' $6 /20+ 6 ç) Gś"* ./2 ' $6 /20+ " 6 %t)ᆿƑ* ./29 ' $6 /20+ " 6 %t)ᆿƑ* ./2" ' $6 /20+ " 6 %t)ᆿƑ* ./2"" ' $6 /20+ " 6 %t)ᆿƑ* ./2" ' $6 /20+ " 6 %t)ᆿƑ* ./2"& ' $6 /20+ " 6 %t)ᆿƑ* ./2" ' $6 /20+ "(6 %t)ᆿƑ* ./2"7 ' $6 /20+ " 6 %t)ᆿƑ* ./2" ' $6 /20+ 6 %t)ᆿƑ2 $ ' $6 /20+ 6 2 $ //+. ' $6 /20+ 6 /+. Gś&+1 2 $ ' $6 /20+ 6 25 ; Gś* ./2 ' $6 /20+ 6 %t)ᆿƑ* ./2 " ' $6 /20+ 6 %t)ᆿƑ* ./2 ' $6 /20+ (6 %t)ᆿƑ* ./2 & ' $6 /20+ 6 %t)ᆿƑ* ./2 ' $6 /20+ & 6 %t)ᆿƑ* ./2 7 ' $6 /20+ & 6 %t)ᆿƑ* ./2 ' $6 /20+ & 6 %t)ᆿƑ* ./2 8 ' $6 /20+ & 6 %t)ᆿƑ* ./2 ' $6 /20+ & 6 %t)ᆿƑ* ./2 9 ' $6 /20+ & 6 %t)ᆿƑ* ./2& ' $6 /20+ &(6 %t)ᆿƑ* ./2&" ' $6 /20+ & 6 %t)ᆿƑ( ַ" ַ2( ./2+ Ӈ Ƒ< $ = 6$<3 = 6! * ($<3 = 6! ( " (<3./>" +6?!(<3012> +6?Ƒ ַ < $ =$<3 = @@6!.@ ܖ "Ƒ$<3 = "" '!.+ ./2 ! ./2&Ƒ< $ = 6< (( : .@ - ౧ ܖ Ƒ(< : .@< (( : .@ '(< : .@ '< (( : .@ ((< : .@ ($<3 = ! : .+ Ӈ ܖ Ƒ$<3 = ! : .+ '$<3 = ! : .+ (ᆼѤȉූ( ( << 2 2 ) ᆼѤȉූѤ ַ( < $ = "6$<3= 9 6! (2 <" ( " !"+6A$<3 = "6!+ ,(0/: -ሓ$<3 = " 6!(6 < B" - (./ < (./"-ሓ< (( +(0 = @ 6 ၠූ$*+" !B $"(< +(- ౧ ַ < $ = 6$<3 = 6! (2 $$*+" PȊ$<3= !(+$ " Φİ ɢ(" -$<3 = !(+$$<3 = !(+$ &$<3 = 6!(0+(0/ t ব ᇍ /ᇇ!ˋƢ ᇍ$<3 = !2"$ Үp ɢ % 7C6?$*+)$<3 = !2"(/2$<3 =9 6!2"(0/ -"H၏ ! ("!ˋƢ2"$<3 =9 8 6!2 (0/ t H !ˋƢ" $<3 = &'6! 2 $ 2 Үp %8@@@6D )$<3 = 8@(&6! 2 (+$ 2 ᇍҮp %8@@@6 )$<3 = 8@@@6! 2 (/2 " ၏ ɢƑ < $ = 6< (( : .@ - ౧ ܖ Ƒ(< : .@< (( : .@ '(< : .@ '< (( : .@ ((< : .@ ($<3 = 6! : .+ 2" Ƒ$<3 = &6! : .+ ' 2 Ƒ < ᇍƑ$<3 = ! : .+ (< "!= 2 (3 ᆿ(< ( ./2+ Ƒ/ < $ = 6< (( =(< (+ ऋϤ# ɢ%-Nj- ࢨ )(< (+ ( ( ऋϤ#ɢ(< (+ ' ' ऋϤ#ɢ< (( ="(< /1+ ऋ ࡙ɢ< $ = 6< (( 2"$< $ =(< + , + , >2"$ !Φİ > -< (( =(< +./ +./ > !Φİ >" -< (( +./(< (0+ ( ( Φİ >" -(< (0+' ' Φİ >" -< (( =(< (1 ( ( ऋ>< (( #$ ᆼ ! ´ .ᇗˣ1' ="'(/ ,&! B ࡙ᆼ%(*) +ᆼ< (( = ᆼ%((*)(< #$ ̵ސ' ,,,& < (( = ࡙ᆼ%(*)(< #$ ̵ސ ',, < (( ="(< #$ & ࡘސ"´ ͪ ᆼ-<ᆼ ᇗˣ ּ ַ* .2 ' * .2( "=Ƒ Ѥ ַ $6 /20+(< ( ./2+22" Ƒ Ѥ ַ 2"$ .0 .+ E! " pந+ ED2 ="! ED p 2"2 = ! E p 2< $ = 6< (( $.: Ƒ< $ = 6$<3 = @@@6! : .@ç ސ < $ =< (( #$ &1' ="'(/ /0(0+! B ސ +ᆼᆼ ƣ !) ̵ސ < (( #$ ސ1' ="'(/ @0 * ! B ࡙ᆼ +ᆼ: ᆼ%((*)< (( #$ ) ̵ސ1' ="(< #$' #0012," < (( = #$ >(< #$' #0012@0 * %(*)< (( #$ ᆼ1' ='(/ : ! B 8 ᆼ +ᆼ< (( #$ ) ̵ސ="(< #$1' =7'(/ , ! B #$ F7+ᆼ' #0012, < (( =" #$ >"(< #$#0012< (( ="(< #$ & ސ ( ސ) ऋ çѤ ַ /0(0+( << 2 ./2ऋ)༐ < (( = (20 2 '<#$ ͪɯ /2'<< (( +ᆼ' (( +ᆼ$6< (( = 6 ֦ܴ' $$$ -$6 ऋ)< (( (+ ( ( ऋϤ#ɢ1' (1 ( ç/ɢ ᇍ'(/ ( ! <2 ç/ɢ ǎϤ#ɢ +ᆼ< (( (0+ ( ǎϤ#ɢ1' /1+ ࡙ɢ!ȩΦİ Hͪ(< (0+ ( p ᇍɢ< (( +./ ç ᄇ1' (0+ ('(/ 2 ! # B ᄇNj +ᆼ' #00/ ࣣᄇNj -( ç/ɢ ǎϤ#ɢ< (( (0+ (/1+ ͪ ࡙ɢ!ȩΦİ(< (0+ ( p ᇍɢ< (( + , ç ᄇ1' (0+ ('(/ #00/ ! # B ࣣᄇNj -< (( + , ᄇ(< (0+ ( ᇍɢķǎ %Φİ > -)' #00/2< (( +./(< (0+ ( ᇍɢķǎ %Φİ >" -)#00/< (( (0+ (< $ = 6(< (+$ " ᇍɢ$<3 = 6! (2 $*+"2 !$*+ P2!J҅ PȊ< $ =< (( +./(< (0+' ' Φİ ɢ>" -< (( =(< (1 ' ऋ çɢ' $$$ -' $6 ' ' ऋ)< (( (+ ' ' ऋϤ#ɢ1' (1 ' ç/ɢ ᇍ'(/ ( '! <2 ç/ɢ ǎϤ#ɢ +ᆼ< (( (0+' ǎϤ#ɢ1' /1+ ࡙ɢ!ȩΦİ Hͪ(< (0+' p ᇍɢ< (( +./ ç ᄇ1' (0+''(/ 2 '! # B ᄇNj +ᆼ' #00/ ' ࣣᄇNj -( ' ç/ɢ ǎϤ#ɢ< (( (0+'/1+ ͪ ࡙ɢ!ȩΦİ(< (0+' p ᇍɢ< (( + , ç ᄇ1' (0+''(/ #00/ '! # B ࣣᄇNj -< (( + , ᄇ(< (0+' ᇍɢķǎ %Φİ > -)' #00/ '2 '< (( +./(< (0+' ᇍɢķǎ %Φİ >" -)#00/ '< (( (0+'< $ = 6(< (+$ ' ᇍɢ$<3 = 6! (2 $*+&2 !$*+ P2!J҅ PȊ< $ =< (( +./(< (0+ ( ( Φİ ɢ>" -< (( =(< (1 ( ऋ çɢ' $$$ -( $6 ( ( ऋ)< (( (+ ( ( ऋϤ#ɢ1' (1 ( ç/ɢ ᇍ'(/ ( (! <2 ç/ɢ ǎϤ#ɢ +ᆼ< (( (0+ ( ǎϤ#ɢ1' /1+ ࡙ɢ!ȩΦİ Hͪ(< (0+ ( p ᇍɢ< (( +./ ç ᄇ1' (0+ ('(/ 2 (! # B ᄇNj +ᆼ' #00/ ( ࣣᄇNj -( ( ç/ɢ ǎϤ#ɢ< (( (0+ (/1+ ͪ ࡙ɢ!ȩΦİ(< (0+ ( p ᇍɢ< (( + , ç ᄇ1' (0+ ('(/ #00/ (! # B ࣣᄇNj -< ((+ , ᄇ(< (0+ ( ᇍɢķǎ %Φİ > -)' #00/ (2 (< (( +./(< (0+ ( ᇍɢķǎ %Φİ >" -)#00/ (< (( (0+ (< $ = 6(< (+$ & ( ᇍɢ$<3 = (6! (2 $*+72 !$*+ P2!J҅ PȊ< $ =< (( +./(< (0+' ' Φİ ɢ>" -< (( =(< (1 ' ऋ çɢ'$$$ -$6 ऋ)< (( (+ ' ' ऋϤ#ɢ1' (1 ' ç/ɢ ᇍ'(/ ( ! <2 ç/ɢ ǎϤ#ɢ +ᆼ< (( (0+' ǎϤ#ɢ1' /1+ ࡙ɢ!ȩΦİ Hͪ(< (0+' p ᇍɢ< (( +./ ç ᄇ1' (0+''(/ 2 ! # B ᄇNj +ᆼ' #00/ ࣣᄇNj -( ç/ɢ ǎϤ#ɢ< (( (0+'/1+ ͪ ࡙ɢ!ȩΦİ(< (0+' p ᇍɢ< (( + , ç ᄇ1' (0+''(/ #00/ ! # B ࣣᄇNj -< (( + , ᄇ(< (0+' ᇍɢķǎ %Φİ > -)' #00/2< (( +./(< (0+' ᇍɢķǎ %Φİ >" -)#00/< (( (0+'< $ = 6(< (+$ & ᇍɢ$<3 = ( 6! (2 $*+ 2 !$*+ P2!J҅ PȊ< $ =< (( +./(< (0+ ( ( Φİ ɢ>" -< (( =(< (1 ( ऋ çɢ$$$+ E! " ٤ ந< 2 = ! E ٤ 2< 2 ="! E ٤ 2"(< ( ./2+2ऋǟ < ᆼސѤ ַ 2 ./2< $ = "6$<3 = 6! (2 < W ᆼސ(0/: .0/'.2 (2 < !& Ġ ȉ P̤2('(/ (0/: .0/!2( ķؗᆼސ"< (( 1<2 !" ) ( ऋᆼސ"< $ =(6 (1 ( p< $ = "6< (( 1<2"!" )' ऋᆼސ"< $ =(6 (1 ' p22 < ᇍƑ Ѥ ַ2 $ .0 .+ E! " pந+ ED2 ="! ED p 2"2 = ! E p 2< $ = 6< (( $.: Ƒ< $ = 6$<3 = @6! : .@ '$<3 = 8@@@ ! 2 (/2 2 " ၏ Ư ɢ< $ =< (( =(< #$ & ˋƢސ %#$ &> )+ E! " ٤ ந< 2 = ! E ٤ 2< 2 ="! E ٤ 2"(< ( ./2+2ᆼѤȉූѤ ַ2 2/0$< $ = 6$<3 = 6! (2 -$<3 = ( 6! (0+(0/ ĵγ ᇍ$<3 = ! (+$ " Φİ >7 -$<3 = !2"(/2$<3 = !2"$ 2" Үp$<3 =9 6!2"(0/ -"H ၏ ! ("!ˋƢ2" < $ =< (( = @@@@6 O !ķؗᆼѤ̤ ȉූ(< 2+$<00$< (< 2+$1' ="(< 2+$'(/ <00$! / B< (( = @@@@6 ˹(< 2+$<00$< (< 2+$1' ="(< 2+$'(/ <00$ ! / B< $ = 6$<3 = ! (2 ˫ $*+2ސ ַ(20 2 '<G 5 $6 ֦ܴ ַG 5 $6 ސ ַG 5 $6 ' ސ ' ַG 5 $6 ( ސ ( ַG 5 $6 ސ ַ。
开关磁阻电机matlab程序设计

开关磁阻电机设计程序%开关磁阻电机设计程序%%电机给定数据:功率7.5KW,电源电压380V,额定转速1500r/min,额定效率0.88,%调速范围200——2000r/min,4相8/6极结构。
%clear allformat short e%1.功率,转速PN=7.5*10^3;n=1500;%2.相数q=4;%3.定子极数、转子极数Ns=8;Nr=6;%4.绕组端电压(单位V)U=280;%5.主要尺寸选择,电磁功率eta=0.88;Pem=PN*((1+eta)/(2*eta));%6.细长比lambda=1.2;%7.电磁负荷初选值A1=28000;Bdelta1=0.4;%8.转子外径Daki=0.5;km=0.8;Da=6.1/(Bdelta1*A1)*(ki/km)*(Pem/n)/(1.05*lambda);Da=Da^(1/3);%9.铁芯叠长la=0.1355;%10.定子外径Ds=0.21;%11.气隙g=0.0004;%12.定转子极弧betas=21*pi/180;betar=23*pi/180;%13.定转子极宽bps=(Da+2*g)*sin(betas/2);bpr=Da*sin(betar/2);%14.第二气隙,设%%%%%%%%%%%% 此处可以输入数值 %%%%%%%%%%%%%%%%%%%例如:gi=input('输入第二气隙gi=')gi=0.01615;%15.定转轭高hcs=1.3*bps/2;hcr=1.4*bpr/2;%16.轴径。
%%%%%%%%%%%% 此处可以输入数值 %%%%%%%%%%Di=0.05;%17.定子槽深ds=(Ds-Da-2*g-2*hcs)/2;%19.有效铁芯长度kFe=0.93;lFe=kFe*la;%20.转子极距taur=pi*Da/Nr;%21.控制参数。
开通脚,关断角,导通角thetaon=0;thetau=0;thetaoff=(1/2)*(2*pi/Nr-betar)+thetau;thetahr=thetaoff;thetac=thetaoff-thetaon;%22.每相绕组串联匝数,取Bps=1.6T,重新校验BdeltaBps=1.6;ldelta=1.05*la;Bdelta=0.805*bps*Bps/taur;Nph=3.04*Nr*U*thetac/(n*Bdelta*Da*ldelta);%%%%%%%%%%%% 此处可以输入数值 %%%%%%%%%%%23.磁化曲线计算,选择DR510-50硅钢片冲片,delta=0.0005,计算机计算得:%不对齐位置电感Lu=0.00918; %%%%%%%%%%%% 此处可以输入数值 %%%%%%%%%%%25.额定电磁转矩omega=2*pi*n/60;Tem=Pem/omega;%26.额定电磁转矩Tem所需的理想方波电流幅值Ims%在图6-17中,取Ims=28A时,W1=13.61J,Ims=28;W1=13.61;Tem1=Ns*Nr*W1/4/pi; %%%%%%%%%%%% 此处可以输入数值 %%%%%%%%%%%27.绕组电流有效值I=Ims/(2^(1/2));%28.实际电流峰值ki=0.5;im=I/ki;%29.定子极间窗口面积SW=(1/2)*(pi/Ns)*((Ds/2-hcs)^2-(Da/2+g)^2)-bps*ds/2;%30.导线规格、导线截面积Sa和槽满率ks%预取电流密度J1=5A/mm^2,J1=5;Sa1=I/J1;Sa=3.94; %%%%%%%%%%%%%%%%%%%%此处可以输入数值%%%%%%%%%%%每槽导体净截面积SCu=Nph*Sa/2;%槽满率ks=SCu/SW;%31.电流密度J=5; %%%%%%%%%%%%%%%%%%%%此处可以输入数值%%%%%%%%%%%32.绕组平均匝长lavbw=(Da+2*g)*sin(pi/Ns)-bps/2;a=bps+bw;b=la+2*5*10^(-3)+bw;r=5*10^(-3)+bw/2;lav=2*la+2*(bps-2*5*10^(-3))+2*pi*r;%33.每相绕组导线总长l=Nph*lav;%34.每相绕组电阻Rp=0.0217*l/Sa;%参数计算%35.铜重GCu=q*Sa*l*10^(3)*8.9*10^(-6);%36.定子铁芯体积VSFe=((1/2)*(pi/Ns)*((Ds/2)^2-(Ds/2-hcs)^2)+bps*ds)*2*Ns*lFe;%37.转子铁芯体积VRFe=((1/2)*(pi/Nr)*((Di/2+hcr)^2-(Di/2)^2)+bpr*(gi-g)/2)*2*Nr*lF e;%38.铁芯重GFe=(VSFe+VRFe)*10^(9)*7.8*10^(-6);%39.电负荷Dsi=Da+2*g;A=q*Nph*I/(pi*Dsi);%40.铜耗PCu=q*I^2*Rp;%41.电机利用系数TN=PN/(2*n*pi/60);K=TN/(Da^2*la);。
开关磁阻电机 控制

江苏大学硕士学位论文摘要开关磁阻电机是上世纪70年代发展起来的新型调速电机,具有结构简单坚固、起动性能好、成本低、容错性好、可四象限运行等突出优点。
ISAD(Integrated Starter Alternator Damper)系统是混合动力汽车中起动、助力、发电、阻尼多功能一体化的系统。
将开关磁阻电机应用于混合动力汽车ISAD系统,可提高汽车整车性能,降低汽车油耗和排放,具有很好的应用前景和研究价值。
本文以12/10结构开关磁阻电机在混合动力汽车ISAD系统中的应用为研究背景,重点研究了开关磁阻电机在起动、助力、发电状态的运行控制。
结合开关磁阻电机的数学模型,分析了开关磁阻电机在电动与发电状态下的运行特点。
根据ISAD系统的性能要求,分别提出了开关磁阻电机在起动、助力、发电三种工作模式下的控制方法。
在此基础上,构建了开关磁阻电机的ISAD系统实验平台,设计了开关磁阻电机的控制软件。
所设计的开关磁阻电机ISAD系统,通过对不同状态下反馈输入,判断运行状态并根据所在状态调节控制参数。
能够在一定负载下带载起动;在助力状态下以效率最优和转矩最优模式为发动机助力;在发电状态,能够为蓄电池提供恒流和恒压两种模式的闭环充电。
实验证明,研究的开关磁阻电机ISAD系统运行控制方法性能良好,具有很好的应用前景。
关键词:开关磁阻电机,ISAD,混合动力汽车,DSPI江苏大学硕士学位论文AΒSTRACTSwitched Reluctance Motor(SRM)is a novel drive machine developed since 1970s, with the inherent characteristics of simple and rugged construction, good start performance, low-cost, fault tolerant and four-quadrant operation capability,. Integrated Starter Alternator Damper (ISAD)is a system within Hybrid Electrical Vehicle (HEV), combining the starter, alternator, and Damper. The application of SRM in ISAD is prospective for .well performances of the whole HEV, lower oil consumption and emission.Focused on a 12/10 SRM applied in ISAD for HEV, the control scheme of SRM is studied. Considering the mathematical model of SRM, the characteristics of SRM in the motor and generator operation are analyzed . According to the performance requirement of ISAD, control strategies of SRM in starter, booster and Alternator modes are presented respectively. Then the SRM-based ISAD experimental platform is established, the control software is also designed. The designed system recognizes running mode with the current and voltage feedback, and then adjusts control parameters accordingly. When in starter mode, it starts with load to idle speed. When in boost mode, it boosts the engine with efficiency and torque optimum. When in alternator mode, it charges battery with current-constant mode or voltage-constant mode. The experimental results illuminates the performances of the designed ISAD system based on SRM and justify the presented control strategy.KEY WORDS: SRM , ISAD , HEV , DSPII江苏大学硕士学位论文目录第一章绪论 (1)1.1 ISAD系统简介 (1)1.2 开关磁阻电机的发展概况 (2)1.3 开关磁阻电机在ISAD系统上的应用 (3)1.4 课题研究背景及意义 (5)1.5 本文主要研究内容 (5)第二章开关磁阻电机的基本理论 (7)2.1 开关磁阻电机调速系统的基本组成 (7)2.2 开关磁阻电机的原理、基本结构与特点 (9)2.3 开关磁阻电机的数学模型 (11)2.3.1 开关磁阻电机的基本方程 (11)2.3.2 开关磁阻电机的线性模型 (13)2.3.3 开关磁阻电机的磁链特性 (14)2.3.4 开关磁阻电机的电流分析 (15)2.3.5 开关磁阻电机的机械特性 (17)2.4 开关磁阻电机的常用控制方式 (19)2.4.1 电流斩波控制(CCC)方式 (19)2.4.2 角度位置控制(APC)方式 (19)2.4.3 脉宽调制控制(PWM)方式 (20)2.5 开关磁阻电机的发电运行 (20)2.5.1 开关磁阻电机的功率平衡方程 (20)2.5.2 开关磁阻电机的发电运行分析 (21)2.6 小结 (22)第三章12/10结构开关磁阻电机调速系统硬件设计 (23)3.1 系统构成 (23)3.2 开关磁阻电机 (23)3.3 功率变换器 (24)3.3.1 功率变换器拓扑结构 (24)3.3.2 功率变换器具体设计 (25)3.4 控制器组成 (26)3.4.1 DSP控制器 (27)3.4.2 复杂可编程逻辑器件(CPLD)硬件控制电路 (28)3.4.3 外围比较电路 (30)3.5 反馈信号检测 (30)3.5.1 位置信号检测 (30)3.5.2 电流信号检测 (32)III江苏大学硕士学位论文3.5.3 电压信号检测 (33)3.6 小结 (33)第四章开关磁阻电机的控制策略及软件实现 (34)4.1 ISAD系统的控制要求 (34)4.2 开关磁阻电机ΙSAD调速系统的控制策略 (35)4.2.1 起动状态控制策略 (35)4.2.2 助力状态控制策略 (36)4.2.3 发电状态控制策略 (36)4.3 开关磁阻电机的控制问题 (37)4.3.1 转速计算功能的实现 (37)4.3.2 角度位置的准确定位 (38)4.3.3 换相逻辑的实现 (39)4.4 控制软件结构 (40)4.5 后台程序 (41)4.5.1 主程序 (41)4.5.2 初始化模块 (42)4.5.3 起动状态子程序 (43)4.5.4 助力状态子程序 (44)4.5.5 发电状态子程序 (44)4.6 前台中断 (45)4.6.1 捕获中断 (45)4.6.2 定时器1的中断 (46)4.6.3 其它中断 (47)4.7 小结 (47)第五章实验及数据分析 (48)5.1 实验系统 (48)5.2 起动实验 (50)5.3 助力实验 (51)5.3.1 助力状态导通角度优化实验 (51)5.3.2 助力性能分析 (55)5.4 发电运行开通角优化实验 (56)5.5 闭环发电实验 (58)5.6 缺相发电实验 (58)5.7 小结 (60)第六章全文总结与展望 (61)6.1 全文总结 (61)6.2 展望 (62)参考文献 (63)致谢 (68)IV江苏大学硕士学位论文第一章绪论1.1 ISAD系统简介混合动力汽车(Hybrid ElectricVehicle,简称HEV),是指同时装备汽车发动机和电动机两种动力源的新型车辆。
开关磁阻电机的工作原理

开关磁阻电机的工作原理开关磁阻电机是一种常见的电机类型,它基于磁阻效应来实现电机转动。
下面将详细介绍开关磁阻电机的工作原理。
一、磁阻效应简介磁阻效应是指材料在外磁场作用下,磁通量通过材料时会引起材料内部磁场的变化。
根据材料的磁导率和磁场的变化情况,磁阻效应可分为正磁阻效应和负磁阻效应。
正磁阻效应是指在磁场作用下,磁通量增加时,材料的磁导率减小;负磁阻效应则相反,磁通量增加时,材料的磁导率增大。
二、磁阻电机的基本结构开关磁阻电机由转子、定子、磁阻切换器和电源组成。
其中,转子是电机的旋转部分,定子是电机的固定部分,磁阻切换器用于切换磁通的路径,电源提供电流给电机。
三、工作原理1. 初始状态:在电机初始状态下,磁阻切换器将磁通量导向转子的一个极性,使得转子与定子之间存在磁阻。
2. 通电启动:当电源给电机提供电流时,电流通过定子线圈,产生磁场。
此时,由于磁阻切换器的作用,磁通量无法直接通过转子,导致转子受到磁阻的阻碍,无法自由转动。
3. 磁阻切换:在转子受到磁阻的阻碍时,磁阻切换器会切换磁通的路径,使得磁通量可以通过转子。
通过切换,磁通量的路径发生变化,从而改变了转子所受到的磁阻大小。
4. 磁阻变化:磁阻切换后,转子所受到的磁阻发生变化,转子受到的力矩也随之改变。
根据磁阻效应的原理,当转子在磁阻变化的作用下,会趋向于转到较小磁阻路径的方向运动。
5. 转动运行:当转子受到磁阻的作用,趋向于转到较小磁阻路径的方向运动时,电机开始转动。
转子的转动会继续改变磁阻切换器的状态,从而引起磁通量的改变,进一步推动转子的转动。
这样就实现了电能向机械能的转换,使得电机正常运行。
四、优势和应用开关磁阻电机具有以下优势:1. 结构简单:相比传统的电机结构,开关磁阻电机的结构较为简单,减少了动力传输的损耗。
2. 超低速驱动:开关磁阻电机具有较好的低速性能,在一些特殊应用中具有优势。
3. 节能环保:开关磁阻电机的能效较高,能够有效节约能源和减少环境污染。
开关磁阻电机驱动系统的运行原理及应用

开关磁阻电机驱动系统的运行原理及应用二低轴阻发电机参考资料1 引言开关磁阻电机驱动系统SDR具有一些很有特色的优点:电机结构简单、坚固、维护方便甚至免维护,启动及低速时转矩大、电流小;高速恒功率区范围宽、性能好,在宽广转速和功率访问内都具有高输出和高效率而且有很好的容错能力;这使得SR电机系统在家用电器、通用工业、伺服与调速系统、牵引电机、高转速电机、航空航天等领域得到广泛应用;SR电机是一种机电能量转换装置;根据可逆原理,SR电机和传统电机一样,它既可将电能转换为机械能—电动运行,在这方面的理论趋于成熟;也可将机械能转换为电能—发电运行,其内部的能量转换关系不能简单看成是SR电动机的逆过程;本文将从SR电机电动和发电运行这两个角度阐述SR电机的运行原理;2 电动运行原理转矩产生原理控制器根据位置检测器检测到的定转子间相对位置信息,结合给定的运行命令正转或反转,导通相应的定子相绕组的主开关元件;对应相绕组中有电流流过,产生磁场;磁场总是趋于“磁阻最小”而产生的磁阻性电磁转矩使转子转向“极对极”位置;当转子转到被吸引的转子磁极与定子激磁相相重合平衡位置时,电磁转矩消失;此时控制器根据新的位置信息,在定转子即将达到平衡位置时,向功率变换器发出命令,关断当前相的主开关元件,而导通下一相,则转子又会向下一个平衡位置转动;这样,控制器根据相应的位置信息按一定的控制逻辑连续地导通和关断相应的相绕组的主开关,就可产生连续的同转向的电磁转矩,使转子在一定的转速下连续运行;再根据一定的控制策略控制各相绕组的通、断时刻以及绕组电流的大小,就可使系统在最隹状态下运行;图1 三相sr电动机剖面图从上面的分析可见,电流的方向对转矩没有任何影响,电动机的转向与电流方向无关,而仅取决于相绕组的通电顺序;若通电顺序改变,则电机的转向也发生改变;为保证电机能连续地旋转,位置检测器要能及时给出定转子极间相对位置,使控制器能及时和准确地控制定子各相绕组的通断,使srm能产生所要求的转矩和转速,达到预计的性能要求;电路分析图2中电源vcc是一直流电源,3个电感分别表示srm的三相绕组,igbt1~igbt6为与绕组相连的可控开关元件,6个二极管为对应相的续流二极管;当第一相绕组的开关管导通时,电源给第一相励磁,电流的回路即励磁阶段是由电源正极→上开关管→绕组→下开关管→电源负极,如图2a所示;开关管关断时,由于绕组是一个电感,根据电工理论,电感的电流不允许突变,此时电流的续流回路即去磁阶段是绕组→上续流二极管→电源→下续流二极管→绕组,如图2b所示;图2 srm电路工作示意图能量转换关系当忽略铁耗和各种附加损耗时,srm工作时的能量转换过程为:通电相绕组的电感处在电感上升区域内转子转向“极对极”位置,当开关管导通时,输入的净电能一部分转化为磁场储能,一部分转化为机械能输出;当开关管关断时,绕组电流通过二极管和电源续流,存储的磁场储能一部分转化为电能回馈电源,另一部分则转化为机械能输出;sr电动机的运行特性12 sr电动机运行速度低于ωfc第一临界速度的范围内,为了保证ψmax和i不超过允许值,采用改变电压、导通角和触发角三者中任一个或任两个,或三者同时配合控制;当sr电动机在高于ωfc范围运行时,在外加电压、导通角和触发角都一定的条件下,随着转速的增加,磁链和电流将下降,转矩则随着转速的平方下降如图3中细实线;为了得到恒功率特性,必须采用可控条件;但是外施电压最大值是由电源功率变换器决定的,而导通角又不能无限增加一般不能超过半个转子极距;因此,在电压和导通角都达最大时,能得到的最大功率的最高转速ωsc被称之为“第二临界转速”;当转速再增加时,由于可控条件都已经达到极限,转矩将随转速的二次方下降,如图3所示;图3 sr电动机的运行特性开关磁阻电机一般运行在恒转矩区和恒功率区;在这两个区域中,电机的实际运行特性可控;通过控制条件,可以实现在粗实线以下的任意实际运行特性;而在串励特性区,电机的可控条件都已达极限,电机的运行特性不再可控,电机呈现自然串励运行特性,故电机一般不会运行在此区域; 运行时存在着第一、第二两个临界运行点是开关磁阻电机的一个重要特点;采用不同的可控条件匹配可以得到两个临界点的不同配置,从而得到各种各样所需的机械特性,这就是开关磁阻电动机具有优良调速性能的原因之一;从设计的观点看,两个临界点的合理配置是保证sr电动机设计合理,满足给定技术指标要求的关键; 从控制角度看,在上述两个区域采用不同的控制方法,在第一临界转速以下一般采用电流斩波控制方式ccc方式,在第一、第二临界转速之间采用角度位置控制方式apc方式;3 发电运行原理开关磁阻发电机switched reluctance generator简介开关磁阻发电机srg的研究始于20世纪80年代末;初期它是被用作飞机上的起动/发电机的,所以,又称为sr起动/发电机456;由于开关磁阻电机在航天飞机中的广阔应用前景,引起了一些国家政府部门和航天企业的高度重视;1990年美国空军usaf、wright实验室、wpafb联合与通用电气飞机发动机公司general electric aircraft engine签约,共同资助ge公司开展开关磁阻组合起动/发电机的研究;lucas航空公司lucas aerospace也开展了sr起动/发电机的研究,认为sr起动/发电机可以在飞机发动机熄火的紧急情况下,由风力发动机windmilling engine驱动为众多的机载设备提供更加可靠的应急电源; 我国在sr发电机的领域也开展了相关的研究活动;其中西北工业大学、西安交通大学在国家“九五”预研基金和国家教委博士点基金的资助下进行sr起动/发电机的相关研究,研制了4kw的sr 起动/发电机3;南京航天航空大学也开展了sr发电机的研究工作;与其它发电机相比,开关磁阻发电机具有独特的结构特点: 1 结构简单其定、转子均为简单的叠片式双凸极结构,定子上绕有集中绕组,转子上无绕组及永磁体; 2 容错能力强,无论从物理方面还是从电磁方面来讲,电机定子各相绕组间都是相互独立的,因而在一相甚至两相故障的情况下,仍然能有一定功率的电能输出; 3 可以作成很高转速的发电装置,从而达到很高的能流密度;转矩产生原理如图4所示,与电动运行时不同,绕组在转子转离“极对极”位置即电感下降区时通电,产生的磁阻性电磁转矩趋使电机回到“极对极”位置,但原动机驱动转子克服电磁转矩继续逆时针旋转;此时电磁转矩与转子运动方向相反,阻碍转子运动,是阻转转矩性质;图4 三相sr发电机剖面图当转子转到下一相的“极对极”位置时,控制器根据新的位置信息向功率变换器发出命令,关断当前相的主开关元件,而导通下一相,则下一相绕组会在转子转离“极对极”位置通电;这样,控制器根据相应的位置信息按一定的控制逻辑连续地导通和关断相应的相绕组的主开关,就可产生连续的阻转转矩,在原动机的拖动下发电;电路分析根据法拉第电磁感应定律“运动导体在磁场中会产生电势”,而srg转子仅由叠片构成,没有任何带磁性的磁体;这就需要在srg发电前有电源提供给srg励磁,使其内部产生磁场;所以,srg的特点是首先要通过定子绕组对电机励磁;这一点和其它发电机有着很明显的区别;srg的工作原理如下:图5中电源vcc是一直流电源,既可以是电池,也可以是直流电机;三个电感分别表示srg 的三相绕组,igbt1~igbt6为与绕组相连的可控开关元件,6个二极管为对应相的续流二极管;当第一相绕组的开关管导通时即励磁阶段,电源给第一相励磁,电流的回路是由电源正极→上开关管→绕组→下开关管→电源负极,如图5a所示;开关管关断时,由于绕组是一个电感,根据电工理论,电感的电流不允许突变,电流的续流回路即发电阶段是绕组→上续流二极管→电源→下续流二极管→绕组,如图5b所示;能量转换关系当忽略铁耗和各种附加损耗时,srg工作时的能量转换过程为:通电相绕组的电感处在电感下降区域内转子转离“极对极”位置,当开关管导通时,输入的净电能转化为磁场储能,同时原动机拖动转子克服srg产生的与旋转方向相反的转矩对srg做功使机械能也转化为磁场储能;当开关管关断时,srg绕组电流续流,磁场储能转化为电能回馈电源,并且机械能也转化为电能给电源充电;图5 srg电路工作示意图sr发电机的运行特性 sr发电机的运行特性与sr电动机的运行特性类似,只不过将曲线沿速度轴翻转到转矩为负的第四象限,在此不再赘述;4 结束语虽然srd系统的发展历程仅仅二十余年,但它取得了令人瞩目的成绩;其产品已在电动车用驱动系统、家用电器、工业应用、伺服系统、高速驱动、航空航天等众多领域得到成功应用,其功率范围也覆盖了从10w到5mw的宽广范围;它已成为现代调速系统中一支不可忽视的竞争力量;作为一种结构简单、鲁棒性能好、价格便宜的新型调速系统,开关磁阻电机及其调速系统引起各国电气传动界的广泛关注和浓厚兴趣,在世界范围内,正在形成理论研究和实际应用齐头并进的发展趋势;。
开关磁阻程序

RCAP2H = 0xFC;//重载值
TR2 = 1; //启动定时器
}
void init_serial()
{
S2BRT = 250; //重载值波特率57600
AUXR |= 0x80;//选择S2BRT作为时钟
AUXR2 |= 0X14;//S2BRT*12=1;S2TR=1;启动定时器
unsigned char bdata flag_all;
sbit flag_rec_timeout = flag_all^0;
sbit flag_over_voltage = flag_all^1;
sbit flag_low_voltage = flag_all^2;
sbit flag_low_speed = flag_all^3;
void T0_initial() //定时器0作为计数器用
{
TH0 = 0;
TL0 = 0;
TMOD |= 0x01; //工作在模式1,定时方式
TR0 = 1;
ET0 = 1;
}
void T2_initial() //定时器2作为计数器用
{
T2MOD |= 0x02;// 设置为从P1.0脚输出时钟
write_date('S');
busy_state();
write_date(':');
// while(1);
}
void main()
{
out_en = 0;
PHASE_C=0;
PHASE_D=0;
PHASE_B=0;
基于DSP的开关磁阻电机系统的搭建-软件部分实现

目 录摘要‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥1 1 绪论‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11.1概况‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11.2国内外发展状况‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11.3本设计主要任务‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥52 系统设计方案以及原理介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥52.1系统框架构建‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥52.2 TMS320F2812 DSP特点及其原理‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥6 2.3开关磁阻电机‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥82.1.1 开关磁阻电机组成‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥92.1.2 开关磁阻电机工作原理‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥92.1.3 开关磁阻电机控制策略‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥93 系统设计‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥103.1 SRD系统控制器的软件设计‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥10 3.1.1 SRD系统软件设计概述‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥10 3.1.2 初始化程序 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11 3.1.3 主程序 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11 3.1.3.1 测速程序‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11 3.1.3.2 相通断逻辑判断‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥12 3.1.3.3 中断服务程序‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥12 3.2F2812控制模块‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥133.2.1系统Q E P模块‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥133.2.1.1 QEP模块解码‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥14 3.2.1.2 QEP转换流程图‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥153.2.1.3 QEP程序模块‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥153.2.1.4 部分QEP模块寄存器介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥153.2.1.5实验箱Q E P模块电路图‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥163.3系统D A模块‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥163.3.1D A模块流程图‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥173.3.2D A程序模块‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥183.3.3部分事件管理器寄存器介绍‥‥‥‥‥‥‥‥‥‥‥‥183.3.4D A信号输出电路‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥194 实验过程与结果‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥20 5总结‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥24 参考文献‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥25 致谢‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥26 Abstract ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥27【摘要】本设计的主要任务是以TI公司的TMS320F2812数字信号处理器(DSP)为主构建一个用于开关磁阻电机系统。
开关磁阻电机控制系统设计

摘要开关磁阻电机调速系统是一种新型电机调速系统,结构简单,成本低,调速性能优异,是传统交、直流电机调速系统的强有力竞争者,具有强大的市场潜力。
本文以DSP为控制核心,研究并设计了15kW三相12/8极SRM的调速实验系统,用于SRM控制技术的研究。
本文概述了开关磁阻电机调速系统(Switched Reluctance Drive,简称SRD)及其发展和研究现状,论述了其主要研究方向,阐述和分析了开关磁阻电机的结构、运行原理以及系统控制。
并且对SRD系统总体硬件结构进行了设计。
采用不对称半桥型结构,在进行了相关功率器件选型计算的基础上设计了该SRD调速实验系统的功率变换器。
然后,以TMS320LF2407为核心设计了开关磁阻电机控制系统的硬件电路,给出了包括电流检测、位置检测、故障保护等部分电路的详细设计,充分利用了DSP的丰富外设资源,达到了简化电路结构、提高运行可靠性的目的。
另外本文讨论了开关磁阻电机控制软件的设计,采用模块化编程方法,采用基于多中断的控制程序,提高了控制软件的效率。
最后,利用MATLAB/SIMULINK对上述12/8极开关磁阻电机调速系统建立了非线性仿真模型,并对该系统进行了仿真实验,实现了调速,并达到了开关磁阻电机调速系统研究和设计的预期目标,验证和深化了前文所取得一些理论成果,同时也为更近一步研究打下了基础。
关键词:开关磁阻电机;调速系统;DSP;MATLAB/SIMULINK;仿真ABSTRACTSwitched Reluctance Drive system is a new motor drive system. It has many good features for example simple structure, low cost and excellent driving performance. It's the strongest competitor to traditional AC and DC drive system, so it has powerful future.This paper developed a speed experimental system for a 3-phase 12/8-pole SRM of 15 kW based on TMS320LF2407 DSP, which can be used for the technical research on SRM control.The thesis summarizes the development and research of switched reluctance drive (SRD), discusses the main research direction. The structure of SRM, operation principle, and the control scheme of the SRD are elaborated and analyzed. And the whole structure of hardware is schemed out for the SRD speed experimental system. Adopting the dissymmetry half-bridge structure, a power converter is designed for the system after selection calculation of the corresponding devices. Then, TMS320LF2407 DSP is used to design the hardware circuits of SRM control system, and design details including the current detection, position sensing, fault protection and PWM output etc. are provided. Because of the full use of the abundant peripheral resources of DSP, it comes to the aim simplifying the circuit structure and heightening the reliability. Also, the thesis discusses the routine designing issue. Because the modularized programming method is adopted, and multi-interrupt processing technique is used, operation efficiency of the control software is highly raised. At last, with the MATLAB/SIMULINK a nonlinear simulation model for the foregoing 12/8-pole SRM control system is established. And the simulation experiments have been done on this model. Speed adjustment is realized, and other targets on the research and design of SRM control system are reached, which establishes a good foundation for further research.Keywords:Switched Reluctance Motor; Drive System; DSP; MATLAB/SIMULINK;Simulation目录1 绪论 (1)1.1开关磁阻电机的发展概述 (1)1.2开关磁阻电机调速系统组成 (2)1.3开关磁阻电机调速系统研究现状和方向 (2)1.4本文研究的内容 (4)2 开关磁阻电机原理 (5)2.1开关磁阻电机的基本结构和运行原理 (5)2.1.1电机结构 (5)2.1.2运行的原理 (6)2.1.3电机的基本方程 (7)2.2开关磁阻电机调速系统的基本控制方式 (8)2.2.1角度控制方式(APC) (9)2.2.2电流斩波方式(CCC) (10)2.2.3电压斩波PWM控制方式 (11)2.2.4组合控制 (13)2.3系统控制方式及控制策略的确定 (13)3 SRD调速实验系统硬件设计 (15)3.1 SRD系统设计方案 (15)3.2基于TMS320LF2407控制器的SRD系统硬件结构设计 (16)3.3功率变换器设计与选型 (18)3.3.1功率变换器主电路的选择 (19)3.3.2功率开关器件的选择及参数计算 (19)3.3.3 IGBT驱动电路的设计 (21)3.4控制、检测和保护电路的设计 (22)3.4.1转子位置检测 (22)3.4.2 PWM输出电路 (23)3.4.3电流检测电路 (24)3.4.4故障检测与保护电路 (25)3.4.5键盘与显示电路 (27)4 软件设计 (29)4.1总的设计思路 (29)4.2主程序设计 (29)4.2.1初始化子程序 (29)4.2.2键盘和显示子程序 (31)4.2.3功率驱动保护子程序 (32)5 SRD系统仿真 (34)5.1基于MATLAB/SIMULINK的SRD非线性仿真模型的建立 (34)5.2 CCC方案下SRD仿真模型 (35)5.3 仿真结果 (40)6 总结 (45)参考文献 (46)翻译部分 (48)中文译文 (48)英文原文 (57)致谢 (68)1 绪论开关磁阻电机调速系统(Switched Reluctance Drive,SRD)是80年代中期发展起来的新型调速系统[1]。
开关磁阻电机的原理和控制系统方案

开关磁阻电机的原理及其控制系统开关磁阻电机80年代初随着电力电子、微电脑和控制理论的迅速发展而发展起来的一种新型调速驱动系统。
具有结构简单、运行可靠、成本低、效率高等突出优点,目前已成为交流电机调速系统、直流电机调速系统、无刷直流电机调速系统的强有力的竞争者。
一、开关磁阻电机的工作原理开关磁阻电机的工作原理遵循磁磁阻最小原理,即磁通总是要沿着磁阻最小路径闭合。
因此,它的结构原则是转子旋转时磁路的磁阻要有尽可能大的变化。
所以开关磁阻电动机采用凸极定子和凸极转子的双凸极结构,并且定转子极数不同。
开关磁阻电机的定子和转子都是凸极式齿槽结构。
定、转子铁芯均由硅钢片冲成一定形状的齿槽,然后叠压而成,其定、转子冲片的结构如图1所示。
图1:开关磁阻电机定、转子结构图图1所示为12/8极三相开关磁阻电动机,S1. S2是电子开关,VD1, VD2是二极管,是直流电源。
电机定子和转子呈凸极形状,极数互不相等,转子由叠片构成,定子绕组可根据需要采用串联、并联或串并联结合的形式在相应的极上得到径向磁场,转子带有位置检测器以提供转子位置信号,使定子绕组按一定的顺序通断,保持电机的连续运行。
电机磁阻随着转子磁极与定子磁极的中心线对准或错开而变化,因为电感与磁阻成反比,当转子磁极在定子磁极中心线位置时,相绕组电感最大,当转子极间中心线对准定子磁极中心线时,相绕组电感最小。
当定子A相磁极轴线OA与转子磁极轴线O1不重合时,开关S1, S2合上,A 相绕组通电,电动机内建立起以OA为轴线的径向磁场,磁通通过定子扼、定子极、气隙、转子极、转子扼等处闭合。
通过气隙的磁力线是弯曲的,此时磁路的磁导小于定、转子磁极轴线重合时的磁导,因此,转子将受到气隙中弯曲磁力线的切向磁拉力产生的转矩的作用,使转子逆时针方向转动,转子磁极的轴线O1向定子A相磁极轴线OA趋近。
当OA和O1轴线重合时,转子己达到平衡位置,即当A相定、转子极对极时,切向磁拉力消失。
TI公司提供-基于DSP的开关磁阻电机驱动程序(全套)

/*********************************************************** * File: TYPEDEFS.H * * TMS320x240 Test Bed Code * * Texas Instruments, Inc. ** Copyright (c) 1996 Texas Instruments Inc. ** 11/05/96 Version 1.0 ** Jeff Crankshaw ************************************************************/ #ifndef TYPEDEFS_H#define TYPEDEFS_H#define FALSE 0#define TRUE 1typedef unsigned int WORD; /* 16–bit data */typedef unsigned long DWORD; /* 32–bit data */typedef volatile WORD * PORT;#define STR(x) #x#define OUTMAC(address,data) \asm(” LDPK _”STR(da ta)); \asm(” OUT _”STR(data) ”,” STR(address))#define INMAC(address,data) \asm(” LDPK _”STR(data)); \asm(” IN _”STR(data) ”,” STR(address))#define Int_Read(addr) * (int *) (addr)#define Int_Write(addr,data) * (int *) (addr) = (data)#endif /* _TYPEDEFS *//*********************************************************** * File: C240.H ** TMS320x240 Test Bed Code * * Texas Instruments, Inc. ** Copyright (c) 1996 Texas Instruments Inc. ** 11/05/96 Version 1.0 ** Jeff Crankshaw ** * * TMS320C240 Peripheral Register Addresses ** * ***********************************************************/ #ifndef c240_h#define c240_h#include ”typedefs.h”/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/ /* definitions of I/O space macros *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/ #define STR(x) #x#define OUTMAC(address,data) \asm(” LDPK _”STR(dat a)); \asm(” OUT _”STR(data) ”,” STR(address))#define INMAC(address,data) \asm(” LDPK _”STR(data)); \asm(” IN _”STR(data) ”,” STR(address))#define LED_LOC 000ch /* F240 EVM I/O space location for LEDs *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* definitions of CPU core registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define IMR_REG (( PORT )0x0004 )#define IFR_REG (( PORT )0x0006 )/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* External Memory Interface Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define WSGR 0x0ffff/* Wait State Generator Register *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* System Module Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define SYSCR (( PORT )0x07018) /* System Module Control Register */#define SYSSR (( PORT )0x0701A) /* System Module Status Register */#define SYSIVR (( PORT )0x0701E) /* System Interrupt Vector Register */#define XINT1_CR (( PORT )0x07070) /* Int1 (type A) Control reg */#define NMI_CR (( PORT )0x07072) /* Non maskable Int (type A) Control reg */ #define XINT2_CR (( PORT )0x07078) /* Int2 (type C) Control reg */#define XINT3_CR (( PORT )0x0707A) /* Int3 (type C) Control reg */#define PDPINT_CR (( PORT )0x0742C) /* Power Drive Protection Int cntl reg */ /* System Interrupt Vector Register – Address offsets */#define PHANTOM_INT_VECTOR 0x00#define NMI_INT_VECTOR 0x02#define XINT1_INT_VECTOR 0x01#define XINT2_INT_VECTOR 0x11#define XINT3_INT_VECTOR 0x1f#define SPI_INT_VECTOR 0x05#define SCI_RX_INT_VECTOR 0x06#define SCI_TX_INT_VECTOR 0x07#define RTI_INT_VECTOR 0x10#define PDP_INT_VECTOR 0x20#define EV_CMP1_INT_VECTOR 0x21#define EV_CMP2_INT_VECTOR 0x22#define EV_CMP3_INT_VECTOR 0x23#define EV_SCMP1_INT_VECTOR 0x24#define EV_SCMP2_INT_VECTOR 0x25#define EV_SCMP3_INT_VECTOR 0x26#define EV_T1PER_INT_VECTOR 0x27#define EV_T1CMP_INT_VECTOR 0x28#define EV_T1UF_INT_VECTOR 0x29#define EV_T1OF_INT_VECTOR 0x2a#define EV_T2PER_INT_VECTOR 0x2b#define EV_T2CMP_INT_VECTOR 0x2c#define EV_T2UF_INT_VECTOR 0x2d#define EV_T2OF_INT_VECTOR 0x2e#define EV_T3PER_INT_VECTOR 0x2f#define EV_T3CMP_INT_VECTOR 0x30#define EV_T3UF_INT_VECTOR 0x31#define EV_T3OF_INT_VECTOR 0x32#define EV_CAP1_INT_VECTOR 0x33#define EV_CAP2_INT_VECTOR 0x34#define EV_CAP3_INT_VECTOR 0x35#define EV_CAP4_INT_VECTOR 0x36#define AC2_INT_VECTOR 0x04/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Digital I/O Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define OCRA (( PORT )0x07090) /* Output Control Reg A */#define OCRB (( PORT )0x07092) /* Output Control Reg B */#define PADATDIR (( PORT )0x07098) /* I/O port A Data & Direction reg. */#define PBDATDIR (( PORT )0x0709A) /* I/O port B Data & Direction reg. */#define PCDATDIR (( PORT )0x0709C) /* I/O port C Data & Direction reg. *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/ /* Watch–Dog(WD) / Real Time Int(RTI) / Phase Lock Loop(PLL) Registers *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/ #define RTICNTR (( PORT )0x07021) /* RTI Counter reg */#define WDTCNTR (( PORT )0x07023) /* WD Counter reg */#define WDTKEY (( PORT )0x07025) /* WD Key reg */#define RTICR (( PORT )0x07027) /* RTI Control reg */#define WDCR (( PORT )0x07029) /* WD Control reg */#define CKCR0 (( PORT )0x0702B) /* PLL control reg 1 */#define CKCR1 (( PORT )0x0702D) /* PLL control reg 2 *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Analog–to–Digital Converter(ADC) registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define ADCTRL1 (( PORT )0x07032) /* ADC Control & Status reg */#define ADCTRL2 (( PORT )0x07034) /* ADC Configuration reg */#define ADCFIFO1 (( PORT )0x07036) /* ADC Channel 1 Result Data */#define ADCFIFO2 (( PORT )0x07038) /* ADC Channel 2 Result Data *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Serial Peripheral Interface (SPI) Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define SPICCR (( PORT )0x07040) /* SPI Config Control Reg */#define SPICTL (( PORT )0x07041) /* SPI Operation Control Reg */#define SPISTS (( PORT )0x07042) /* SPI Status Reg */#define SPIBRR (( PORT )0x07044) /* SPI Baud rate control reg */#define SPIEMU (( PORT )0x07046) /* SPI Emulation buffer reg */#define SPIBUF (( PORT )0x07047) /* SPI Serial Input buffer reg */#define SPIDAT (( PORT )0x07049) /* SPI Serial Data reg */#define SPIPC1 (( PORT )0x0704D) /* SPI Port control reg1 */#define SPIPC2 (( PORT )0x0704E) /* SPI Port control reg2 */#define SPIPRI (( PORT )0x0704F) /* SPI Priority control reg *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Serial Communications Interface (SCI) Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define SCICCR (( PORT )0x07050) /* SCI Comms Control Reg */#define SCICTL1 (( PORT )0x07051) /* SCI Control Reg 1 */#define SCIHBAUD (( PORT )0x07052) /* SCI Baud rate control */#define SCILBAUD (( PORT )0x07053) /* SCI Baud rate control */#define SCICTL2 (( PORT )0x07054) /* SCI Control Reg 2 */#define SCIRXST (( PORT )0x07055) /* SCI Receive status reg */#define SCIRXEMU (( PORT )0x07056) /* SCI EMU data buffer */#define SCIRXBUF (( PORT )0x07057) /* SCI Receive data buffer */#define SCITXBUF (( PORT )0x07059) /* SCI Transmit data buffer */#define SCIPC1 (( PORT )0x0705D) /* SCI Port control reg1 */#define SCIPC2 (( PORT )0x0705E) /* SCI Port control reg2 */#define SCIPRI (( PORT )0x0705F) /* SCI Priority control reg *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Event Manager (EV) Registers *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define GPTCON (( PORT )0x07400) /* General Timer Controls */#define T1CNT (( PORT )0x07401) /* T1 Counter Register */#define T1CMP (( PORT )0x07402) /* T1 Compare Register */#define T1PER (( PORT )0x07403) /* T1 Period Register */#define T1CON (( PORT )0x07404) /* T1 Control Register */#define T2CNT (( PORT )0x07405) /* T2 Counter Register */#define T2CMP (( PORT )0x07406) /* T2 Compare Register */#define T2PER (( PORT )0x07407) /* T2 Period Register */#define T2CON (( PORT )0x07408) /* T2 Control Register */#define T3CNT (( PORT )0x07409) /* T3 Counter Register */#define T3CMP (( PORT )0x0740a) /* T3 Compare Register */#define T3PER (( PORT )0x0740b) /* T3 Period Register */#define T3CON (( PORT )0x0740c) /* T3 Control Register */#define COMCON (( PORT )0x07411) /* Compare Unit Control */#define ACTR (( PORT )0x07413) /* Full Compare Unit Output Action Ctrl */#define SACTR (( PORT )0x07414) /* Simple Comp Unit Output Action Ctrl */ #define DBTCON (( PORT )0x07415) /* Dead Band Timer Control */#define CMPR1 (( PORT )0x07417) /* Full Compare Channel 1 Threshold */#define CMPR2 (( PORT )0x07418) /* Full Compare Channel 2 Threshold */#define CMPR3 (( PORT )0x07419) /* Full Compare Channel 3 Threshold */#define SCMPR1 (( PORT )0x0741a) /* Simple Comp Channel 1 Threshold */#define SCMPR2 (( PORT )0x0741b) /* Simple Comp Channel 2 Threshold */#define SCMPR3 (( PORT )0x0741c) /* Simple Comp Channel 3 Threshold */#define CAPCON (( PORT )0x07420) /* Capture Unit Control */#define CAPFIFO (( PORT )0x07422) /* FIFO1–4 Status Register */#define FIFO1 (( PORT )0x07423) /* Capture Channel 1 FIFO Top */#define FIFO2 (( PORT )0x07424) /* Capture Channel 2 FIFO Top */#define FIFO3 (( PORT )0x07425) /* Capture Channel 3 FIFO Top */#define FIFO4 (( PORT )0x07426) /* Capture Channel 4 FIFO Top */#define IMRA (( PORT )0x0742c) /* Group A Interrupt Mask Register */#define IMRB (( PORT )0x0742d) /* Group B Interrupt Mask Register */#define IMRC (( PORT )0x0742e) /* Group C Interrupt Mask Register */#define IFRA (( PORT )0x0742f) /* Group A Interrupt Flag Register */#define IFRB (( PORT )0x07430) /* Group B Interrupt Flag Register */#define IFRC (( PORT )0x07431) /* Group C Interrupt Flag Register */#define IVRA (( PORT )0x07432) /* Group A Int. Vector Offset Register */#define IVRB (( PORT )0x07433) /* Group B Int. Vector Offset Register */#define IVRC (( PORT )0x07434) /* Group C Int. Vector Offset Register */#endif/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* *//*File: CONSTANT.H *//*Target Processor: TMS320F240 *//*Compiler Version: *//*Assembler Version: *//*Created: 10/1/97 *//* *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Constants for the SRM control algorithms *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*––––––––––––––––––––––––––––––––––––––––––––––*//* clock frequencies and time related constants *//*––––––––––––––––––––––––––––––––––––––––––––––*/#define PWM_FREQ 20000 /* PWM frequency (Hz) */#define CPU_INT_FREQ 5000 /* timer ISR frequency (Hz) */#define ONE_HALF_SECOND (CPU_INT_FREQ/2)/*––––––––––––––––––––––––––––––––––– *//* current loop algorithm constants *//*––––––––––––––––––––––––––––––––––– */#define ILOOP_GAIN 22 /* current loop gain: *//* (Q3: gain = 2.75) */#define ILIMIT 1023 /* current limit: (1023 bits = *//* 5 V x 0.855 A/V = 4.273 A) */#define MAXIMUM_DUTYRA TIO 999 /* limit on the PWM duty cycle: *//* 100 % = *//* (SYSCLK_FREQ/PWM_FREQ – 1) *//*–––––––––––––––––––––––––––––––––––––––––––*//* velocity loop algorithm constants *//*–––––––––––––––––––––––––––––––––––––––––––*/#define INTEGRAL_LIMIT 2793472 /* integrator limit */#define KI 3 /* (Q13*1000): Ki = 0.366 */#define KP 1 /* Q1: Kp = 0.5 *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* position & velocity estimation algorithm constants *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#define K_POSITION_EST 1432#define K2_VELOCITY_EST 62500#define ALPHA 7 /* Q3: alpha = 0.875 */#define ONE_MINUS_ALPHA 1 /* Q3: 1–alpha = 0.125 *//*–––––––––––––––––––––––––––––––––––––––––––*//* motor geometry related *//*–––––––––––––––––––––––––––––––––––––––––––*/#define NR 8 /* number of rotor poles */#define NUMBER_OF_PHASES 3/*––––––––––––––––––––––––––––––––––––––––––––––––––*//* Electrical Angles: 2*pi (rad) = 65535 *//*––––––––––––––––––––––––––––––––––––––––––––––––––*/#define PIBYSIX_16 5461#define PIBYFOUR_16 8192#define PIBYTHREE_16 10923#define TWOPIBYTHREE_16 21845#define THREEPIBYFOUR_16 24576#define FIVEPIBYSIX_16 27307#define PI_16 32768#define FOURPIBYTHREE_16 43690#define FIVEPIBYTHREE_16 54613#define TWOPI_16 65535/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* *//*File: SRM.H *//*Target Processor: TMS320F240 *//*Compiler Version: *//*Assembler Version: *//*Created: 10/1/97 *//* *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Variable declarations for the SRM control algorithm *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #include ”constant.h”#include ”typedefs.h”/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* position estimation state machine data structure *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/typedef struct {int state;WORD position;int direction;} state_machine;/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* SRM variables data structure: */ /*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*a2d_chan[i] –> sets which A/D pin is used for the ith phase current/*desiredTorque –> torque command (output of velocity loop)/*integral_speed_error –> velocity loop integrator for PI compensator/*iDes[i] –> current command for the ith phase/*capture_edge[i] –> timer #2 count value at the occurence of/* the most recent ith capture/*capture_delta[i][2] –> change in the timer #2 count value between/* the occurences of the ith capture events. The two most/* recent events are stored./*delta_count –> change in the software counter of the timer ISR/* between occurences of any capture event./*wEst_10xrpm –> shaft velocity estimate (units of rpm*10)/* wDes_10xrpm –> desired shaft velocity (units of rpm*10)/* active[i] –> flag indicating whether the ith phase is ON (1 = on)/* iFB[i] –> current feedback measurement for the ith phase/* dutyRatio[i] –> commanded % duty ratio for the high–side FET of/* the ith phase/*position –> shaft position estimate (electrical degrees)/* scaled: 2*pi (rad) = 65535 bits/*position_state –> position state of the SRM (defined by opto–couplers)/*shaft_direction –> direction which the shaft is rotating./*trans_lut[7][4] –> the position state machine/*position_initial_guess[7] –> initial position guess, based on state/*dp_remainder –> 16–bit remainder used in the position estimation alg/*last_capture –> the most recent capture to occur/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––* /typedef struct {int a2d_chan[NUMBER_OF_PHASES];int desiredTorque;long integral_speed_error;WORD iDes[NUMBER_OF_PHASES];WORD capture_edge[NUMBER_OF_PHASES];WORD capture_delta[NUMBER_OF_PHASES][2];WORD delta_count;int wEst_10xrpm;int wDes_10xrpm;int active[NUMBER_OF_PHASES];WORD iFB[NUMBER_OF_PHASES];int dutyRatio[NUMBER_OF_PHASES];WORD position;int position_state;int shaft_direction;state_machine trans_lut[7][4];WORD position_initial_guess[7];long dp_remainder;int last_capture;} anSRM_struct;/*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*PROTOTYPE DEFINITIONS *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/void eventmgr_init();void initializeSRM(anSRM_struct *anSRM);void Commutation_Algorithm( anSRM_struct *anSRM);void Time_Update_Position(anSRM_struct *anSRM);void velocityController( anSRM_struct *anSRM);void currentController( anSRM_struct *anSRM);void computePositionAndVelocity(anSRM_struct *anSRM);void Msmt_Update_Velocity(anSRM_struct *anSRM, int mode);void Msmt_Update_Position(anSRM_struct *anSRM);void switch_lowside(int phaseactive);void switch_mux(int adc1, int adc2);void disable_interrupts();void dsp_setup();void initialize_counters_and_flags();void enable_interrupts();void start_background();void check_for_stall();/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/* /*File: MAIN.C/*Target Processor: TMS320F240/*Compiler Version: 6.6/*Assembler Version: 6.6/*Created: 10/31/97/*/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ * This file is the main program for the control of an SRM drive with a/*position sensor/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++*//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*INCLUDE FILES *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/#include ”c240.h”#include ”srm.h”/*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*GLOBAL VARIABLE DECLARA TIONS *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/int count;int slice;int old_count;int Update_Velocity;int Toggle_LED;int Msmt_Update;anSRM_struct SRM;int LEDvalue;/*–––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*MAIN PROGRAM *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––*/void main() {disable_interrupts();dsp_setup();initializeSRM(&SRM);eventmgr_init();initialize_counters_and_flags();enable_interrupts();start_background();}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *//*BACKGROUND TASKS *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––– *//*Upon completion of the required initialization, the main/*program starts the background task. The background is/*simply an infinite loop. Time critical motor control/*processing is done via interrupt service routines and lower/*priority processing is done in the background, when they/*are needed. Two background operations are defined:/*/*1) Update_Velocity – when a capture interrupt occurs,/* the ISR stores the capture data and then intiates/* this task. The velocity update is done in/* background, because it is doing a floating point/* division./*2) Toggle_LED – this task toggles an LED on the EVM to/* provide visual feedback to the user that the code/* is running. This task is initiated at a fixed/* rate set by the ONE_HALF_SECOND value./*/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ void start_background(){while (1){/*––––––––––––––––––––––*//* Velocity update task *//*––––––––––––––––––––––*/if (Update_Velocity) {if (Update_Velocity == 1) { /* use capture data *//* as time base */Msmt_Update_Velocity(&SRM,1);}else { /* else shaft is rotating too slowly, capture/* data may be in error by overflow./* use count of timer ISR’s between captures/* as time base. */Msmt_Update_Velocity(&SRM,2);}Update_Velocity = 0;}/*–––––––––––––––––––––––*//* Visual feedback task *//*–––––––––––––––––––––––*/if (Toggle_LED) {LEDvalue = –LEDvalue;if (LEDvalue == 1) {asm(” OUT 1, 000ch”);}else {asm(” OUT 0, 000ch”);}Toggle_LED = 0;SRM.wDes_10xrpm = 6000; /* motor speed command units = (rpm x 10) *//* just hard–coded here, but setup *//* another background task to allow *//* command from an external input */}} /* infinite loop */}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*TIMER ISR *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//*/*This interrupt service routine is executed at each/*occurence of the maskable CPU interrupt INT3. This CPU/*interrupt corresponds to the event manager group B interrupts,/*of which we enable only the timer #3 period interrupt, TPINT3./*The frequency, F, at which this routine is executed is specified/*using the CPU_INT_FREQ parameter./*/*The SRM control algorithms which are implemented during the/*timer ISR are:/*/* 1. Current control (frequency = F)/* 2. Rotor position estimation (frequency = F)/* 3. Commutation (frequency = F/5)/* 4. Velocity control (frequency = F/5)/*/*Additionally, time can be measured (coarsely) by counting/*the number of executions of this ISR, which runs at a/*known fixed rate. This measure of time is used for several/*reasons, including:/*/*– For precaution against over–current, a simple/*test is made to determine if the rotor has stalled./*/*– Also, the visual feedback task is initiated if the correct/*amount of time has elapsed./*/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++*/void c_int3(){*IFR_REG = 0x0004; /* clear interrupt flags */*IFRB = 0xff;currentController(&SRM); /* current loop algorithm */if (Msmt_Update) { /* position estimation */Msmt_Update_Position(&SRM); /* if recent capture edge */Msmt_Update = 0; /* use this information */}else { /* else, propagate pos est */Time_Update_Position(&SRM); /* using algorithm */}check_for_stall();count = count + 1; /* increment count */slice = slice + 1; /* increment slicer */if (slice == 1) {Commutation_Algorithm(&SRM); /* do commutation in the 1st */} /* slice. */else if (slice == 2) { /* velocity loop algorithm in */velocityController(&SRM); /* the 2nd */}else if (slice == 5) {slice = 0; /* reset slicer */}if (count == ONE_HALF_SECOND) { /* set flag for toggling the */Toggle_LED = 1; /* EVM LED, if time */count = 0;}}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*CAPTURE ISR *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– *//*/*This interrupt service routine is executed at each/*occurence of the maskable CPU interrupt INT4. This CPU/*interrupt corresponds to the event manager group C interrupts,/*of which we enable the three capture event interrupts,/*CAPINT1–3. This ISR executes asynchronously and the/*frequency of execution is dependent on the shaft speed/*of the SRM./*/*The ISR performs the following processing:/*/* clear interrupt flags;/* determine which capture has occured;/* read the appropriate capture FIFO register;/* store capture data;/* set flag for position update using measurement;/* set flag for initiating velocity estimate/* update in background;/* return;/*/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void c_int4(){int groupc_flags;int capture;int n;int delta_count;WORD edge_time;*IFR_REG = 0x0008; /* clear CPU interrupt flag *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* determine which capture interrupt occured and read *//* the appropriate FIFO *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/groupc_flags = *IFRC; /* read event manger interrupt *//* flag register */if (groupc_flags & 0x1){ /* capture #1 */*IFRC = 0xf9; /* clear flag register */capture = 1; /* */edge_time = read_fifo(capture); /* read FIFO */}else if (groupc_flags & 0x2) { /* capture #2 */*IFRC = 0xfa;capture = 2;edge_time = read_fifo(capture);}else if (groupc_flags & 0x4) { /* capture #3 */*IFRC = 0xfc;capture = 3;edge_time = read_fifo(capture);}else { /* not a valid capture */*IFRC = 0xff;capture = 0;}/*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* if a valid capture occured, store capture data and set flags *//* foor position and velocity estimate updates. The most *//* recent two time intervals between edges is saved *//* to allow for some filtering of the velocity estimate. *//* The number of timer ISR’s which occur between capture *//* interrupts is also checked. When this time exceeds a *//* certain value, then the capture data could be in error *//* by an overflow, so the lower resolution delta–time *//* associated with the ISR count is used in the velocity *//* estimate calculation. *//*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */if (capture > 0) {st_capture = capture; /* save capture data */n = capture–1;SRM.capture_delta[n][1] = SRM.capture_delta[n][0];SRM.capture_delta[n][0] = edge_time – SRM.capture_edge[n];SRM.capture_edge[n] = edge_time;Msmt_Update = 1; /* position update flag *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Set flags & select time base for use with velocity update *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/delta_count = count – old_count;old_count = count;if (delta_count < 0) delta_count = delta_count + ONE_HALF_SECOND;if (delta_count > 100) { /* low shaft speed use *//* ISR counter */SRM.delta_count = delta_count;Update_Velocity = 2;}else { /* else, shaft speed ok *//* use 1.25MHz clk */SRM.delta_count = delta_count;Update_Velocity = 1;}}}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*UTILITY SUBROUTINES *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*******************************************************************/void disable_interrupts(){asm(” SETC INTM”);}*****************************************************************/void dsp_setup() {int temp;/*––––––––––––––––––––––––*//* Disable watchdog timer *//*––––––––––––––––––––––––*/temp = *WDCR;temp = temp | 0x68;*WDCR = temp;/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */if (capture > 0) {st_capture = capture; /* save capture data */n = capture–1;SRM.capture_delta[n][1] = SRM.capture_delta[n][0];SRM.capture_delta[n][0] = edge_time – SRM.capture_edge[n];SRM.capture_edge[n] = edge_time;Msmt_Update = 1; /* position update flag *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*//* Set flags & select time base for use with velocity update *//*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/delta_count = count – old_count;old_count = count;if (delta_count < 0) delta_count = delta_count + ONE_HALF_SECOND;if (delta_count > 100) { /* low shaft speed use *//* ISR counter */SRM.delta_count = delta_count;Update_Velocity = 2;}else { /* else, shaft speed ok *//* use 1.25MHz clk */SRM.delta_count = delta_count;Update_Velocity = 1;}}}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*UTILITY SUBROUTINES *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ /*******************************************************************/void disable_interrupts(){asm(” SETC INTM”);}*****************************************************************/void dsp_setup() {。
第12章 开关磁阻电动机PPT课件

SRD中常用的功率变换器有不对称半桥型、双绕组型、 分裂电源型、H桥型、公共开关型、电容转储型等主电路拓 扑结构,可以采用IGBT、功率MOSFET、GTO等开关器件。 图12-2所示为开关磁阻电机中几种功率变换器主电路的拓 扑结构,图中Si代表开关器件。
第12章 开关磁阻电动机
图12-2 开关磁阻电机功率驱动主电路拓扑结构
以三相12/8极开关磁阻电动机为例,假设电机理想空载, 图12-3所示为该电机的A相绕组及其与电源的连接。图中 S1、S2为主开关管(功率器件);VD1、VD2为续流二极管; U为直流电源。定子上属于同一相的4个线圈并联组成一相 绕组。
第12章 开关磁阻电动机
图12-3 开关磁阻电动机的工作原理图
第12章 开关磁阻电动机
设当A相磁极轴线OA与转子齿轴线Oa为图12-3所示位 置时,主开关管S1、S2导通,A相绕组通电,电动机内建立起 以OA为轴线的径向磁场,磁力线沿定子极、气隙、转子齿、 转子轭、转子齿、气隙、定子轭路径闭合。通过气隙的磁力 线是弯曲的,此时磁路的磁阻大于定子极与转子齿轴线重合 时的磁阻,因此,转子将受到气隙中弯曲磁力线的切向磁拉 力产生的转矩的作用,使转子逆时针方向转动,转子齿的轴 线Oa向定子A相磁极轴线OA趋近。当OA和Oa轴线重合时, 转子已达到平衡位置,即当A相定子极与转子齿对齐的同时, 切向磁拉力消失。此时关断A相开关管S1、S2,开通B相开关 管,即在A相断电的同时B相通电,建立以B相定子磁极为轴 线的磁场,电机内磁场沿顺时针方向转过30°,而转子在磁 场磁拉力的作用下继续沿着逆时针方向转过15
DSP2407A开发的开关磁阻电机控制程序的源代码

DSP2407A开发的开关磁阻电机控制程序的源代码(1).INCLUDE "240x.H";--------------------------------------以下定义变量---------------------------------------------------- .DATA.BSS ADDRESS,1 ;换相处理程序地址.BSS GPR0,1 ;当前通电相标志(1,2,3,4---A,B,C,D).BSS GPR2,1 ;转向标志,1(CW),0(CCW).BSS GPR3,1 ;换相标志,1(不允许),0(允许).BSS CMD,1 ;电流参考值.BSS CMDAC,1 ;A/C相电流参考值.BSS CMDBD,1 ;B/D相电流参考值.BSS MAX,1 ;最小占空比(0%)比较值.BSS MIN,1 ;最大占空比(100%)比较值.BSS COMAC,1 ;A/C相比较值.BSS COMBD,1 ;B/D相比较值.BSS CURRAC,1 ;A/C相电流检测值.BSS CURRBD,1 ;B/D相电流检测值.BSS NUM,1 ;电流修正值.BSS TMP,1 ;临时变量.BSS STACK,6 ;软堆栈初始地址;--------------------------------------定义主向量段------------------------------------------------------ .SECT ".VECTORS" ;定义主向量段RESET B START ;地址0000H,复位,优先级1INT1 B PHANTOM ;地址0002H,INT1,优先级4INT2 B T1PERIOD_ISR ;地址0004H,INT2,优先级5INT3 B T2PERIOD_ISR ;地址0006H,INT3,优先级6INT4 B PHANTOM ;地址0008H,INT4,优先级7INT5 B PHANTOM ;地址000AH,INT5,优先级8INT6 B PHANTOM ;地址000CH,INT6,优先级9RESERVED B PHANTOM ;地址000EH,测试,优先级10SW_INT8 B PHANTOM ;地址0010H,自定义软中断SW_INT9 B PHANTOM ;地址0012H,自定义软中断SW_INT10 B PHANTOM ;地址0014H,自定义软中断SW_INT11 B PHANTOM ;地址0016H,自定义软中断SW_INT12 B PHANTOM ;地址0018H,自定义软中断SW_INT13 B PHANTOM ;地址001AH,自定义软中断SW_INT14 B PHANTOM ;地址001CH,自定义软中断SW_INT15 B PHANTOM ;地址001EH,自定义软中断SW_INT16 B PHANTOM ;地址0020H,自定义软中断TRAP B PHANTOM ;地址0022H,TRAP矢量NMI B PHANTOM ;地址0024H,NMI,优先级3EMU_TRAP B PHANTOM ;地址0026H,仿真Trap,优先级2SW_INT20 B PHANTOM ;地址0028H,自定义软中断SW_INT21 B PHANTOM ;地址002AH,自定义软中断SW_INT22 B PHANTOM ;地址002CH,自定义软中断SW_INT23 B PHANTOM ;地址002EH,自定义软中断SW_INT24 B PHANTOM ;地址0030H,自定义软中断SW_INT25 B PHANTOM ;地址0032H,自定义软中断SW_INT26 B PHANTOM ;地址0034H,自定义软中断SW_INT27 B PHANTOM ;地址0036H,自定义软中断SW_INT28 B PHANTOM ;地址0038H,自定义软中断SW_INT29 B PHANTOM ;地址003AH,自定义软中断SW_INT30 B PHANTOM ;地址003CH,自定义软中断SW_INT31 B PHANTOM ;地址003EH,自定义软中断;--------------------------------------以下是主程序------------------------------------------------------ .TEXT;--------------------------------------系统初始化程序-------------------------------------------------- STARTSETC INTM ; 屏蔽中断LDP #0E0HSPLK #0068H, WDCR ;不用看门狗SPLK #0284H, SCSR1 ;CLKIN=10MHz,CLKOUT=20MHz;--------------------------------------中断初始化程序-------------------------------------------------- LDP #0SPLK #0FFH,IFR ;清所有系统中断标志SPLK #00000110B,IMR ;开INT2, INT3中断LDP #0E8HLACC EVAIFRA ;清事件管理器A所有中断标志SACL EVAIFRALACC EVAIFRBSACL EVAIFRBLACC EVAIFRCSACL EVAIFRCSPLK #0,EVAIMRA ;屏蔽所有中断SPLK #0,EVAIMRBSPLK #0,EVAIMRC;--------------------------------------初始化转子位置为A相-------------------------------------------CALL START2 ;调用初始化转子位置子程序;--------------------------------------ADC初始化-----------------------------------------------------LDP #0E1HSPLK #0900H,ADCTRL1 ;ADC预分频10,1MHZSPLK #0001H,MAXCONV ;两个通道SPLK #0010H,CHSELSEQ1 ;选择ADCIN0和ADCIN1通道LACC MCRAOR #0FD8H ;设置PWM1-6,QEP1-2SACL MCRA;--------------------------------------初始化事件管理器A程序--------------------------------------LDP #0E8HSPLK #0000H,ACTRA ;引脚PWM1-6强制低SPLK #0,CMPR1 ;占空比初值为100%SPLK #0,CMPR2SPLK #0,CMPR3SPLK #8200H,COMCONA ;定时器下溢比较器重载,允许比较SPLK #0800,T1PR ;周期寄存器值800(25kHzPWM)SPLK #0,T1CNTSPLK #9040H,T1CON ;连续增计数方式,预分频为1,允许T1SPLK #9872H,T2CON ;定向增减,允许编码接口SPLK #0803BH, T2PR ;T2周期寄存器(7FFFH+60)SPLK #07FC3H, T2CMPR ;T2比较寄存器(7FFFH-60)SPLK #07FFFH, T2CNT ;编码器计数器初值;--------------------------------------开中断---------------------------------------------------------------- LDP #0E8HLACC EVAIFRA ;清事件管理器A所有中断标志SACL EVAIFRALACC EVAIFRBSACL EVAIFRBLACC EVAIFRCSACL EVAIFRCSPLK #0080H,EVAIMRA ;开T1周期中断SPLK #0003H,EVAIMRB ;开T2周期中断和比较中断SPLK #0,EVAIMRCLAR AR1,#STACK ;软堆栈指针CLRC INTM ;开中断;--------------------------------------变量初始化---------------------------------------------------------- LDP #0HLACC #0SACL CMD ;电流参考初值(通过速度环求得)SACL CMDAC ;A/C相电流参考值SACL CMDBD ;B/D相电流参考值LACC #10SACL NUM ;电流修正值LDP #0E8HLACC T1PRLDP #0SACL MAX ;MAX =T1PR,占空比=0%LACC #00SACL MIN ;MIN = 0,占空比=100%LACC MINSACL COMAC ;A/C相占空比=100%SACL COMBD ;B/D相占空比=100%LACC #0SACL CURRAC ;A/C相电流=0SACL CURRBD ;B/D相电流=0LACC GPR2 ;转向,由用户外部输入SUB #1BCND X3, EQ ;正转(CW)则跳转LACC #4 ;反转(CCW)SACL GPR0 ;当前换相是D相B XXX3 LACC #2 ;正转(CW)SACL GPR0 ;当前换相是B相XX LACC #1SACL GPR3 ;禁止换相;--------------------------------------初始化结束----------------------------------------------------------;--------------------------------------用户可添加包括转速和转向输入的应用程序------------WAIT B WAIT ;;--------------------------------------主模块结束----------------------------------------------------------;--------------------------------------假中断处理子程序-------------------------------------------------- PHANTOMCLRC INTMRET;--------------------------------------T1周期中断处理子程序-----------------------------------------T1PERIOD_ISRMAR *,AR1 ;保存现场MAR *+SST #1, *+ ;保存ST1SST #0, * ;保存ST0LDP #0E0HLACC PIVR ;清中断标志LDP #0E8HSPLK #0FFFH,EVAIFRA;--------------------------------------检测是否换相------------------------------------------------LDP #0LACC GPR3SUB #1BCND NOCOM, EQ ;不换相则跳转;--------------------------------------转向识别,调整当前换相标志-----------------------------------LACC GPR2 ;换相SUB #1BCND FORWARD, EQ ;正转则跳转REVERSE ;反转(CCW)LACC GPR0 ;调整当前换相标志SUB #1SACL GPR0BCND X1, EQ ;GPR0=0跳转B GOOUTX1 LACC #4 ;修改GPR0=4SACL GPR0B GOOUTFORWARD ;(CW)LACC GPR2 ;检查转向是否改变SUB #0BCND REVERSE, EQ ;如果转向改变则跳转LACC GPR0 ;调整当前换相标志ADD #1SACL GPR0SUB #5BCND X2, EQ ;GPR0>5跳转B GOOUTX2 LACC #1 ;修改GPR0=1SACL GPR0GOOUTLACC #1SACL GPR3 ;修改换相标志为不换相;--------------------------------------调用电流检测子程序---------------------------------------------。
开关磁阻电机控制流程

转速计算子程序AD采样子程序当蓄电池电压降至额定值的90%左右,即电池降为42V视为欠压,电池停止供电,从而防止蓄电池放电过深,受到损害。
为避免“欠压震荡”,连续3次检测到欠压才进行欠压保护动作调速子程序8KW,输入48V,输入电流167A。
过流保护,即电流超过180A,允许行使一定时间(例如5分钟),电流达到200A即立即关闭。
1. 配置ADC 模块:a) 选择端口引脚作为模拟输入引脚(ADxPCFGH<15:0>或b)(ADxCON2<15:13>)c)理器时钟匹配(ADxCON3<5:0>)d) 确定使用多少路采样/保持通道(和ADxPCFGH<15:0> 或e) 选择适当的采样/转换序列(和ADxCON3<12:8>)f)(ADxCON1<9:8>)g) 开启ADC 模块(ADxCON1<15>2. 配置ADC 中断(如需要):a) 清零ADxIF 位b) 选择ADC 中断优先级引脚由PWM控制A控制寄存器B控制寄存器12互补输出模式特殊事件触发信号后分频比 1:1时基递增产生特殊事件信号;TIMER1 初始化mov #0x0000, w0mov w0, T1CON ;Timer1 复位BCLR IFS0, #3;Timer1MOV #0X6547, W0MOV W0, IPC0;IPC0中断优先级;Timer1 中断优先级6BSET IEC0, #3; Timer1MOV #0X0000, W0 ;Timer1MOV W0, TMR1MOV #0X7FFF, W0 ;Timer1器MOV W0, PR1;Timer1 启动计数BSET T1CON, #15。
开关磁阻电机控制系统软件设计

开关磁阻电机控制系统软件设计作者:兴志来源:《科技资讯》 2014年第34期兴志(南京信息职业技术学院江苏南京 210046)摘要:首先介绍了开关磁阻电机基本原理及基本控制策略,在此基础上实现了基于ARM Cortex M3内核的微处理器STM32F103上的软件设计。
软件是经典的前后台系统,实现了开关磁阻电机控制系统的调速及各种保护功能。
相较于现有控制系统软件设计的多中断情形,该软件设计在所有功能均满足的情形下,兼顾程序的精简性及可扩充性,仅使用一个定时中断,并解决了由于多中断的软件设计导致的电流斩波偏高的问题,获得较理想的电流斩波效果。
关键词:开关磁阻电机控制策略软件设计电流斩波中图分类号:TD614 文献标识码:A 文章编号:1672-3791(2014)12(a)-0080-01开关磁阻电机SRM(Switched Reluctance Motor)是随着电力电子、微电脑和控制技术的迅猛发展而出现的一种新型调速系统,具有结构简单、运行可靠及效率高等突出优点,成为交流、直流和无刷直流电动机调速系统强有力的竞争者,引起各国学者和企业的广泛关注。
1 基本控制策略开关磁阻电机基本控制策略主要包括电流斩波控制(CCC)、电压PWM控制、角度位置控制(APC)三种控制策略。
电流斩波控制的优点是可限制电流峰值的增长,保护开关器件的安全,并起到良好有效的调节效果,因此适用于低速调速系统。
当相电流超过约定的上限电流值时,则主开关关断,当相电流低于约定的下限电流值时,则组合开关开通,从而实现电流斩波控制效果。
电压PWM控制是通过调整占空比,来调节相绕组的平均电压,以改变相绕组电流的大小,从而实现转速和转矩的调节,电压PWM控制的特点是通过调节相绕组电压的平均值,进而能间接地限制和调节相电流,因此既能用于高速调速系统,又能用于低速调速系统,而且控制也较简单。
角度位置控制是指对开通角和关断角的控制。
它的实质就在于输入电压保持不变而通过改变主开关的开通角和关断角来调节电流,以达到调节电机转矩的目的。
开关磁阻程序

《四相8/6结构开关磁阻电动机调速控制程序》.include "240x.h".global _c_int0;--------------------------------------以下定义变量---------------------------------------------------- .bss ADDRESS,1 ;换相处理程序地址.bss GPR0,1 ;当前通电相标志(1,2,3,4---A,B,C,D).bss GPR2,1 ;转向标志,1(CW),0(CCW).bss GPR3,1 ;换相标志,1(不允许),0(允许).bss CMD,1 ;电流参考值.bss CMDAC,1 ;A/C相电流参考值.bss CMDBD,1 ;B/D相电流参考值.bss MAX,1 ;最小占空比(0%)比较值.bss MIN,1 ;最大占空比(100%)比较值.bss COMAC,1 ;A/C相比较值.bss COMBD,1 ;B/D相比较值.bss CURRAC,1 ;A/C相电流检测值.bss CURRBD,1 ;B/D相电流检测值.bss NUM,1 ;电流修正值.bss TMP,1 ;临时变量.bss STACK,6 ;软堆栈初始地址;--------------------------------------定义主向量段------------------------------------------------------ .sect ".vectors" ;定义主向量段RESET B _c_int0 ;地址0000H,复位,优先级1INT1 B PHANTOM ;地址0002H,INT1,优先级4INT2 B T1PERIOD_ISR ;地址0004H,INT2,优先级5INT3 B T2PERIOD_ISR ;地址0006H,INT3,优先级6INT4 B PHANTOM ;地址0008H,INT4,优先级7INT5 B PHANTOM ;地址000AH,INT5,优先级8INT6 B PHANTOM ;地址000CH,INT6,优先级9RESERVED B PHANTOM ;地址000EH,测试,优先级10SW_INT8 B PHANTOM ;地址0010H,自定义软中断SW_INT9 B PHANTOM ;地址0012H,自定义软中断SW_INT10 B PHANTOM ;地址0014H,自定义软中断SW_INT11 B PHANTOM ;地址0016H,自定义软中断SW_INT12 B PHANTOM ;地址0018H,自定义软中断SW_INT13 B PHANTOM ;地址001AH,自定义软中断SW_INT14 B PHANTOM ;地址001CH,自定义软中断SW_INT15 B PHANTOM ;地址001EH,自定义软中断SW_INT16 B PHANTOM ;地址0020H,自定义软中断TRAP B PHANTOM ;地址0022H,TRAP矢量NMI B PHANTOM ;地址0024H,NMI,优先级3EMU_TRAP B PHANTOM ;地址0026H,仿真Trap,优先级2SW_INT20 B PHANTOM ;地址0028H,自定义软中断SW_INT21 B PHANTOM ;地址002AH,自定义软中断SW_INT22 B PHANTOM ;地址002CH,自定义软中断SW_INT23 B PHANTOM ;地址002EH,自定义软中断SW_INT24 B PHANTOM ;地址0030H,自定义软中断SW_INT25 B PHANTOM ;地址0032H,自定义软中断SW_INT26 B PHANTOM ;地址0034H,自定义软中断SW_INT27 B PHANTOM ;地址0036H,自定义软中断SW_INT28 B PHANTOM ;地址0038H,自定义软中断SW_INT29 B PHANTOM ;地址003AH,自定义软中断SW_INT30 B PHANTOM ;地址003CH,自定义软中断SW_INT31 B PHANTOM ;地址003EH,自定义软中断;--------------------------------------以下是主程序------------------------------------------------------ .text;--------------------------------------系统初始化程序-------------------------------------------------- _c_int0SETC INTM ; 屏蔽中断LDP #0E0HSPLK #0068H, WDCR ;不用看门狗SPLK #0284H, SCSR1 ;CLKIN=10MHz,CLKOUT=20MHz;--------------------------------------中断初始化程序-------------------------------------------------- LDP #0SPLK #0FFH,IFR ;清所有系统中断标志SPLK #00000110B,IMR ;开INT2, INT3中断LDP #0E8HLACC EV AIFRA ;清事件管理器A所有中断标志SACL EV AIFRALACC EV AIFRBSACL EV AIFRBLACC EV AIFRCSACL EV AIFRCSPLK #0,EV AIMRA ;屏蔽所有中断SPLK #0,EV AIMRBSPLK #0,EV AIMRC;--------------------------------------初始化转子位置为A相------------------------------------------- CALL START2 ;调用初始化转子位置子程序;--------------------------------------ADC初始化----------------------------------------------------- LDP #0E1HSPLK #0900H,ADCTRL1 ;ADC预分频10,1MHZSPLK #0001H,MAXCONV ;两个通道SPLK #0010H,CHSELSEQ1 ;选择ADCIN0和ADCIN1通道LACC MCRAOR #0FD8H ;设置PWM1-6,QEP1-2SACL MCRA;--------------------------------------初始化事件管理器A程序-------------------------------------- LDP #0E8HSPLK #0000H,ACTRA ;引脚PWM1-6强制低SPLK #0,CMPR1 ;占空比初值为100%SPLK #0,CMPR2SPLK #0,CMPR3SPLK #8200H,COMCONA ;定时器下溢比较器重载,允许比较SPLK #0800,T1PR ;周期寄存器值800(25kHzPWM)SPLK #0,T1CNTSPLK #9040H,T1CON ;连续增计数方式,预分频为1,允许T1SPLK #9872H,T2CON ;定向增减,允许编码接口SPLK #0803BH, T2PR ;T2周期寄存器(7FFFH+60)SPLK #07FC3H, T2CMPR ;T2比较寄存器(7FFFH-60)SPLK #07FFFH, T2CNT ;编码器计数器初值;--------------------------------------开中断---------------------------------------------------------------- LDP #0E8HLACC EV AIFRA ;清事件管理器A所有中断标志SACL EV AIFRALACC EV AIFRBSACL EV AIFRBLACC EV AIFRCSACL EV AIFRCSPLK #0080H,EV AIMRA ;开T1周期中断SPLK #0003H,EV AIMRB ;开T2周期中断和比较中断SPLK #0,EV AIMRCLAR AR1,#STACK ;软堆栈指针CLRC INTM ;开中断;--------------------------------------变量初始化---------------------------------------------------------- LDP #0HLACC #0SACL CMD ;电流参考初值(通过速度环求得)SACL CMDAC ;A/C相电流参考值SACL CMDBD ;B/D相电流参考值LACC #10SACL NUM ;电流修正值LDP #0E8HLACC T1PRLDP #0SACL MAX ;MAX =T1PR,占空比=0%LACC #00SACL MIN ;MIN = 0,占空比=100%LACC MINSACL COMAC ;A/C相占空比=100%SACL COMBD ;B/D相占空比=100%LACC #0SACL CURRAC ;A/C相电流=0SACL CURRBD ;B/D相电流=0LACC GPR2 ;转向,由用户外部输入SUB #1BCND X3, EQ ;正转(CW)则跳转LACC #4 ;反转(CCW)SACL GPR0 ;当前换相是D相B XXX3 LACC #2 ;正转(CW)SACL GPR0 ;当前换相是B相XX LACC #1SACL GPR3 ;禁止换相;--------------------------------------初始化结束----------------------------------------------------------;--------------------------------------用户可添加包括转速和转向输入的应用程序------------ WAIT B W AIT ;;--------------------------------------主模块结束----------------------------------------------------------;--------------------------------------假中断处理子程序-------------------------------------------------- PHANTOMCLRC INTMRET;--------------------------------------T1周期中断处理子程序----------------------------------------- T1PERIOD_ISRMAR *,AR1 ;保存现场MAR *+SST #1, *+ ;保存ST1SST #0, * ;保存ST0LDP #0E0HLACC PIVR ;清中断标志LDP #0E8HSPLK #0FFFH,EV AIFRA;--------------------------------------检测是否换相------------------------------------------------ LDP #0LACC GPR3SUB #1BCND NOCOM, EQ ;不换相则跳转;--------------------------------------转向识别,调整当前换相标志----------------------------------- LACC GPR2 ;换相SUB #1BCND FORWARD, EQ ;正转则跳转REVERSE ;反转(CCW)LACC GPR0 ;调整当前换相标志SUB #1SACL GPR0BCND X1, EQ ;GPR0=0跳转B GOOUTX1 LACC #4 ;修改GPR0=4SACL GPR0B GOOUTFORWARD ;(CW)LACC GPR2 ;检查转向是否改变SUB #0BCND REVERSE, EQ ;如果转向改变则跳转LACC GPR0 ;调整当前换相标志ADD #1SACL GPR0SUB #5BCND X2, EQ ;GPR0>5跳转B GOOUTX2 LACC #1 ;修改GPR0=1SACL GPR0GOOUTLACC #1SACL GPR3 ;修改换相标志为不换相;--------------------------------------调用电流检测子程序--------------------------------------------- NOCOMCALL DATAINT;--------------------------------------电流调节----------------------------------------------------------- LACC #SECTOR_TABLE ;表头地址ADD GPR0 ;加偏移量TBLR ADDRESS ;查表LACC ADDRESS ;取跳转地址BACC ;跳转PHASE_00LACC #0DEADH ;干扰陷阱B PPP ;退出;--------------------------------------A相----------------------------------------------------------------- PHASE_A ;A相电流调整LACC CMDAC ;A/C相电流参考值SUB CURRAC ;与测量值比较BCND DEC_A, LT ;测量值大于参考值则跳转LACC COMAC ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMAC ;保存新比较值LACC MIN ;检测是否超出上限SUB COMACBCND SET_A, GEQ ;超过则跳转B GOON_A ;没超过则退出DEC_A ;测量值大于参考值LACC COMACADD NUM ;加修正值,使占空比减小SACL COMAC ;保存新比较值LACC MAX ;检测是否超出下限SUB COMACBCND GOON_A, GEQ ;没超过则退出LACC MAX ;超出SACL COMAC ;比较值等于下限(占空比=0%)B GOON_ASET_ALACC MINSACL COMAC ;比较值等于上限(占空比=100%) GOON_ALACC COMACLDP #0E8HSACL CMPR1 ;更新A相比较值SPLK #000EH, ACTRA ;PWM1高有效,PWM2强制高,其它强制低LDP #0LACC MINSACL COMBD ;B/D相占空比初值=100%LACC #0SACL CURRBD ;电流检测值清零B PPP ;退出;--------------------------------------B相--------------------------------------------------------------------- PHASE_B ;B相电流调整LACC CMDBD ;B/D相电流参考值SUB CURRBD ;与测量值比较BCND DEC_B, LT ;测量值大于参考值则跳转LACC COMBD ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMBD ;保存新比较值LACC MIN ;检测是否超出上限SUB COMBDBCND SET_B, GEQ ;超过则跳转B GOON_B ;没超过则退出DEC_B ;测量值大于参考值LACC COMBDADD NUM ;加修正值,使占空比减小SACL COMBD ;保存新比较值LACC MAX ;检测是否超出下限SUB COMBDBCND GOON_B, GEQ ;没超过则退出LACC MAX ;超出SACL COMBD ;比较值等于下限(占空比=0%)B GOON_BSET_BLACC MINSACL COMBD ;比较值等于上限(占空比=100%) GOON_BLACC COMBDLDP #0E8HSACL CMPR2 ;更新B相比较值SPLK #00E0H, ACTRA ;PWM3高有效,PWM4强制高,其它强制低LDP #0LACC MINSACL COMAC ;A/C相占空比初值=100%LACC #0SACL CURRAC ;电流检测值清零B PPP ;退出;--------------------------------------C相------------------------------------------------------------------- PHASE_C ;C相电流调整LACC CMDAC ;A/C相电流参考值SUB CURRAC ;与测量值比较BCND DEC_C, LT ;测量值大于参考值则跳转LACC COMAC ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMAC ;保存新比较值LACC MIN ;检测是否超出上限SUB COMACBCND SET_C, GEQ ;超过则跳转B GOON_C ;没超过则退出DEC_C ;测量值大于参考值LACC COMACADD NUM ;加修正值,使占空比减小SACL COMAC ;保存新比较值LACC MAX ;检测是否超出下限SUB COMACBCND GOON_C, GEQ ;没超过则退出LACC MAX ;超出SACL COMAC ;比较值等于下限(占空比=0%)B GOON_CSET_CLACC MINSACL COMAC ;比较值等于上限(占空比=100%) GOON_CLACC COMACLDP #0E8HSACL CMPR3 ;更新C相比较值;SPLK #020CH, ACTRA ;PWM5高有效,PWM2强制高,其它强制低LDP #0LACC MINSACL COMBD ;B/D相占空比初值=100%LACC #0SACL CURRBD ;电流检测值清零B PPP ;退出;--------------------------------------D相-------------------------------------------------------------- PHASE_D ;D相电流调整LACC CMDBD ;B/D相电流参考值SUB CURRBD ;与测量值比较BCND DEC_D, LT ;测量值大于参考值则跳转LACC COMBD ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMBD ;保存新比较值LACC MIN ;检测是否超出上限SUB COMBDBCND SET_D, GEQ ;超过则跳转B GOON_D ;没超过则退出DEC_D ;测量值大于参考值LACC COMBDADD NUM ;加修正值,使占空比减小SACL COMBD ;保存新比较值LACC MAX ;检测是否超出下限SUB COMBDBCND GOON_D, GEQ ;没超过则退出LACC MAX ;超出SACL COMBD ;比较值等于下限(占空比=0%)B GOON_DSET_DLACC MINSACL COMBD ;比较值等于上限(占空比=100%) GOON_DLACC COMBDLDP #0E8HSACL CMPR3 ;更新D相比较值SPLK #08C0H, ACTRA ;PWM6高有效,PWM4强制高,其它强制低LDP #0LACC MINSACL COMAC ;A/C相占空比初值=100%LACC #0SACL CURRAC ;电流检测值清零PPPMAR *, AR1 ;恢复现场LST #0, *- ;恢复ST0LST #1, *- ;恢复ST1CLRC INTMRET;--------------------------------------电流采样和AD转换子程序-------------------------------------------- DA TAINTLDP #0E1HSPLK #2000H,ADCTRL2 ;启动AD转换CONVERSIONBIT ADCTRL2,3 ;将忙状态位复制到TCBCND CONVERSION,TC ;等待转换结束LACC RESULT0,10 ;读A/C相电流转换结果LDP #0SACH CURRAC ;保存LDP #0E1HLACC RESULT1,10 ;读B/D相电流转换结果LDP #0SACH CURRBD ;保存RET;--------------------------------------T2周期和比较中断处理子程序-------------------------------T2PERIOD_ISRMAR *,AR1 ;保存现场MAR *+SST #1, *+ ;保存ST1SST #0, * ;保存ST0LDP #0E0HLACC PIVR ;清中断标志LDP #0E8HSPLK #0FH,EV AIFRBSPLK #07FFFh, T2CNT ;T2编码器计数器赋初值LDP #0LACC #0SACL GPR3 ;允许换相(GPR3=0)MAR *, AR1 ;恢复现场LST #0, *- ;恢复ST0LST #1, *- ;恢复ST1CLRC INTMRET;--------------------------------------初始化转子位置子程序------------------------------------------- START2NOPLDP #0E8HSPLK #000EH, ACTRA ;A相通电SPLK #0CA00H, COMCONA ;立即比较SPLK #0400, CMPR1 ;占空比=50%SPLK #0,T1CNTSPLK #800,T1PR ;T1周期寄存器SPLK #9040H,T1CON ;连续增减计数方式,预分频为1,允许T1LDP #0LACC #0FFFFH ;准备延时,等待转子到A相对极位置SACL TMPLOOPLACL TMPSUB #1SACL TMPBCND LOOP, NEQLACC #0FFFFH ;再延时SACL TMPLOOP2LACL TMPSUB #1SACL TMPBCND LOOP2, NEQLDP #0E8HSPLK #0, ACTRA ;关闭PWMRET.data;--------------------------------------换相处理程序地址表----------------------------------------- SECTOR_TABLE.word PHASE_00 ;干扰陷阱程序地址.word PHASE_A ;换相A相处理程序地址.word PHASE_B ;换相B相处理程序地址.word PHASE_C ;换相C相处理程序地址.word PHASE_D ;换相D相处理程序地址.end。
maxwell软件-开关磁阻电机

maxwell软件-开关磁阻电机15 开关磁阻电机本章我们将简化RMxprt ⼀些基本操作的介绍,以便介绍⼀些更⾼级的使⽤。
有关RMxprt 基本操作的详细介绍请参考第⼀部分的章节。
15.1基本理论开关磁阻电机的定⼦和转⼦均为凸极结构,通常定⼦的极对数⼤于转⼦的极对数。
定⼦磁极上有多相集中绕组,转⼦上⽆绕组。
当定⼦上某(些)绕组通电时,由于磁阻的差异,转⼦将受到⼒矩的作⽤,转⼦磁极向与定⼦磁极对齐(磁阻最⼩)的位置转动,以使定⼦绕组获得最⼤的磁链。
绕组的相数是定⼦极数与定、转⼦极数的最⼩公约数之⽐。
在开关磁阻电动机(SRM)中,定⼦和转⼦的极数不同,转⼦上设有位置传感器,定⼦电流严格地根据转⼦的位置换向。
转⼦的位置信号通过位置传感器获得。
定⼦绕组按顺序触发,⼀般情况下当⼀相绕组电流关断或快要关断时,下⼀相绕组被触发。
因此可以忽略两相绕组间的相互影响。
⼀相的电压⽅程为:t i i R u u S T d ),(d θψ++=(15.1)式中u T 表⽰晶体管或⼆极管的压降,R S 表⽰定⼦绕组电阻。
Ψ (θ, i )表⽰转⼦在θ位置,绕组电流为i 时绕组的磁链,如图15.1所⽰,当转⼦槽的中⼼与绕组轴线对齐时转⼦的位置为0。
图 15.1 Ψ (θ, i)令)(),(),(θθθθL i i i i L =ψ≈?ψ?=(15.2))(),(θθθθθG L i i 1G =??≈?ψ?=(15.3)得出i G i L i R u u e S T ωθ+++=p(15.4)式中ωe 表⽰转速,⽤电⾓度表⽰,微分算⼦为:t d d p =(15.5)瞬时电磁转矩t 2为:22Gi 21t =(15.6)输⼊电功率可由电压和电流获得:=T1tui T 1P 0d (15.7)输出的机械功率为:)(Fe t Cua fw 12P P P P P P +++-= (15.8)式中P fw ,P Cua ,P t 和P Fe 分别表⽰摩擦和风损耗、电枢铜损耗、晶体管/⼆极管压降损耗和铁⼼损耗。
开关磁阻电机设计MATLAB程序

%%%%-开关磁阻电机设计实例%%%%-Time:2013.08.20%%%%-By Sun Peng(悟空)%%%------------------------------------------------------%%%-给定参数要求:%% 功率:PN=11kw 电源电压:UN=380V(线电压) 额定转速:n=1500r/min 额定效率: ita=0.88%% 调速范围:200~2000r/min 其中200~1500r/min为恒转矩特性1500~2000r/min为恒功率特性%% 运行方式:连续运行绝缘等级:E 电机转子承受的扭矩不得小于3500N.m %%%------------------------------------------------------%%%-相数、极数、绕组端电压:采用4相8/6极结构,功率变换器主电路选用每相一个主开关管的裂相式电路clc;clear;global Nq Nr Ns Nph Da Ds g gi lFe laglobal miu0 sigmaglobal w v u y h q p m nglobal l_deltaglobal alph theta beltaglobal w v u h b f m miu0 gamma gh hms delta sigmaglobal t1 t2 t3 m1 m2 n1 b1 b2 S5 S6 S6p n_theta1global p1 p2_1pie p2_2pie p2_3pie p2 p3 p4 p5 p6 p7 sum_pglobal lF gF L_2D L1global bps bpr hcs hcrglobal Sg Sts Str Scs Scr hmr lts ltr lg lcs lcrglobal Bts Btr Bg Bcs Bcr Bpsglobal Hts Htr Hg Hcs Hcrglobal fai_2 Fai sum_F i_sglobal theta_1global L1 Lao Lu U Rpglobal W_pie Tem Tem_pieglobal fai_1m fai_s fai_m km omigaglobal I Im_star Im i_m i_sglobal a0 a1global Sw ks ki J_pie Sa_pie Sa Scu J Iglobal UN PN nN ita A_pie B_delta_pie Pem Tem Tem_pieglobal theta_on theta_off theta_c theta_u theta_hr theta_0 theta_n1 theta_2theta_3 theta_4 theta_a beta_s beta_r beta_sf beta_rfglobal lambda Da_ratio_Dsglobal Di dsglobal tal_r B_delta I i_m Im_star Sw Sa Scu ks J lav l Rp Gcu VsFe VrFe GFe A Pcu Kglobal alph tal_r_degree tal_s_degreeglobal w v u y h q p m n miu0global P1 P2 P3 P4 P5 sum_P gF sigma lFglobal Lu L2Dglobal Lu ik Pasi_u Pasi_1 Pasi_aglobal fai_ms fai_m i_ms i_m a iso Pasi_soglobal Nph Ns Ds Da bps lFe g giglobal hmr hms hms_pie hcs hcrglobal Bts1 Bts2 Bts3 Bts4 Btr1 Btr2 Btr3 Btr4 Bg Bcs1 Bcs2 Bcr1 Bcr2 B_min B_max B_amin B_amaxglobal Sts1 Sts2 Sts3 Sts4 Str1 Str2 Str3 Str4 Scs1 Scs2 Scr1 Scr2 Scs Scr Sgglobal Hts1 Hts2 Hts3 Hts4 Htr1 Htr2 Htr3 Htr4 Hcs1 Hcs2 Hcr1 Hcr2 Hgglobal lts1 lts2 lts3 lts4 ltr1 ltr2 ltr3 ltr4 lcs1 lcs2 lcr1 lcr2 lgglobal Fai_am fai_0 fai_2am fai_am i_am Sum_F sum_Fam i_shr fai_shr miu0 Lao_hr gi_pie delta_beta kd km sigma_mglobal Ac Bc Cc ka Pasi_1u theta_1u theta_x Pasi_thetax Pasi_a_mtrix Pasia pasia Pasihr pasihr Pasi_hr_mtrix Pasi_u_mtrix Pasi_1_mtrix Matrixglobal Pasi_ahr theta_ahr Ac_pie Bc_pie Cc_pie Torque current Lao_hr Pasi1k1 Pasihrk1 ik1 ik2 ik3global k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 LengthN stephNq=4; %1.相数Ns=8; %2.定子极数Nr=6; %3.转子极数UN=380;%额定电压Ud=3*sqrt(2)*UN/pi; %三相全波整流后直流电压U=1.1*(Ud/2); %4.绕组端电压(1.1系数为考虑电容滤波器存在导致的电压升高系数)%%%-主要尺寸选择PN=7.5; %额定功率KwnN=1500; %额定转速1500r/minita=0.88; %额定效率Pem=PN*(1+ita)/(2*ita); %5.电磁功率Kwlambda=1.2; %6.细长比(参照中小型交流电机经验数据,取0.5~3.0,对于SRM,典型取值1)A_pie=28000; %7.电磁负荷出选A_pie=28000A/m(15000~50000A/m);B_delta_pie=0.40T(0.29~0.55)B_delta_pie=0.4;ki=0.5;km=0.8;Da=(((6.1/(B_delta_pie*A_pie))*(ki/km)*(Pem*(10^3)/nN)*(1/(1.05*lambda)))^(1/ 3))*(10^3); %8.转子外径 /mm/Da=Keep_decimal(Da,0);%la=lambda*Da; %9.贴心叠长la=Round_off_la(la);%%%-圆整铁心叠长l_delta=1.05*la;Da_ratio_Ds=Ratio_Da_Ds(Nq,Ns,Nr); %确定定转子外径比Ds=Da/Da_ratio_Ds; %10.定子外径Ds=Standardizing_Ds(Ds); %将定子外径规格化到已有机座New_Da_ratio_Ds=Da/Ds;%%%-其他结构尺寸及绕组匝数g=0.4; %11.气隙% beta_s=21; %12.定转子极弧,查表取经典值% beta_r=23;beta_s=Pore_arc_s(Nq,Ns,Nr);beta_r=Pore_arc_r(Nq,Ns,Nr);beta_sf=beta_s*pi/180; %定子极弧beta_rf=beta_r*pi/180; %转子极弧bps=(Da+2*g)*sin(beta_sf/2); %13.定转子极宽bps=Keep_decimal(bps,2); %保留两位小数bpr=Da*sin(beta_rf/2);bpr=Keep_decimal(bpr,2); %保留两位小数gi=bps/2; %14.第二气隙hcs=1.3*(bps/2); %15.定转子轭高hcs=Keep_decimal(hcs,2); %保留两位小数hcs_arter_roundoff=Round_off_h(hcs); %进行圆整hcr=1.4*(bpr/2);hcr=Keep_decimal(hcr,2); %保留两位小数hcr_after_roundoff=Round_off_h(hcr); %进行圆整Di=Da-2*(gi-g)-2*hcr; %16.轴径Di=Keep_decimal(Di,1); %保留一位小数ds=(Ds-Da-2*g-2*hcs)/2; %17.定子槽深ds=Keep_decimal(ds,2); %保留两位小数ds_after_roundoff=Round_off_h(ds); %进行圆整% [Di_after gi_after]=Adapt_Di_gi(Di,Da,hcr,gi,g); %18.电机尺寸需根据工程设计特点进行圆整,取平行转子极结构[Di gi]=Adapt_Di_gi(Di,Da,hcr,gi,g);kFe=0.93;lFe=kFe*la; %19.有效铁心长度lFe=Round_off_l(lFe); %进行圆整tal_r=(pi*Da)/Nr; %20.转子极距tal_r=Keep_decimal(tal_r,2); %保留两位小数tal_r_degree=2*pi/Nr;%%%%%%%%%%%%%%%%%%%%%%-以上程序段已经检查无误-%%%%%%%%%%%%%%%%%%%%%%%%%%%-控制参数theta_u=0;theta_on=0; %21.开通角theta_off=theta_u+((2*pi/Nr)-beta_rf)/2; %关断角theta_a=pi/Nr;theta_2=theta_a-abs(beta_rf-beta_sf)/2;theta_1=theta_a-(beta_sf+beta_rf)/2;% theta_0=-theta_1;% theta_0=theta_1-fai_s*theta_a/(12*fai_ms);% theta_0=theta_1-fai_s*theta_a/(12*fai_ms);theta_n1=(-1)*theta_1;theta_3=theta_a+(theta_a-theta_2);theta_4=tal_r_degree-theta_1;% theta_0=-10*pi/180;% theta_1=10*pi/180;theta_hr=theta_off;theta_c=theta_off-theta_on; %导通角%%%-每相绕组串联匝数Bps=1.6;B_delta=0.805*(bps/tal_r)*Bps; %重新校核Nph=(3.04*Nr*U*theta_c)/(nN*B_delta*(Da/(10^3))*(l_delta/(10^3))); %22.每相绕组串联匝数Nph1=(3.04*Nr*U*theta_c)/(nN*B_delta*(Da/(10^3))*(l_delta/(10^3))); Adapt_B_delta();%%%-对齐位置和不对齐位置磁化曲线计算%%-theta_u不对齐位置电感Lu计算% global Nr Ns Nph Da Ds bps g gi lFe la hcs beta_sf beta_rf alph tal_r_degree tal_s_degree% global w v u y h q p m n pi% % % tal_r_degree=2*pi/Nr; %转子极距角% % % tal_s_degree=2*pi/Ns; %定子极距角% % % % beta_sf=beta_s*pi/180; %定子极弧% % % % beta_rf=beta_r*pi/180; %转子极弧% % % % p=(Da/2+g)*sin(beta_sf/2);% % % % w=(Da/2+g)*tan(tal_s_degree/2)-p;% % % w=(Da/2+g)*tan(pi/Ns)-(bps/2); %%已阅% % % v=(Ds/2-hcs-(Da/2+g)/cos(pi/Ns))/cos(pi/Ns); %已阅% % % alph=(pi/2)-(beta_sf/2); %已阅% % % u=w/tan(alph); %已阅% % % % h1=sqrt((Ds/2-hcs)*(Ds/2-hcs)-p^2);% % % % h2=sqrt((Ds/2-hcs)*(Ds/2-hcs)-(p+w)^2);% % % % u=h2-h1;% % % % alph=atan(w/u);% % % % v=h1-(Da/2+g);% % % % y=(Da/2)+g-(Da/2)*cos(tal_r_degree-beta_rf)/2;% % % y=(Da/2)+g-(Da/2)*cos((tal_r_degree-beta_rf)/2); %已阅% % % % h=Da/2*sin((tal_r_degree-beta_rf)/2)-p;% % % h=(Da/2)*sin((tal_r_degree-beta_rf)/2)-(bps/2); %已阅% % % q=v/2; %已阅% % % p=bps/2;% % % m=u+q; %已阅% % % n=y+q; %已阅% % % P1=alph*(m^2)/(4*(w^2)*((2*v+u)^2));% % % P2=(2/pi)*( log(n/h)+2*(n-h)*y/(w*v)-( (n^2-h^2)/(4*((w*v)^2)) )*(pi*w*v-2*(y^2))-(n^3-h^3)*y*pi/(6*((w*v)^2))+(n^4-h^4)*(pi^2)/(64*((w*v)^2)) );% % % P3=(2/tal_r_degree)*log((2*tan(tal_r_degree-beta_rf)+pi-(tal_r_degree-beta_rf))/(2*tan(tal_r_degree-beta_rf)+pi-2*(tal_r_degree-beta_rf)-beta_rf));% % % P4=(2/(pi-tal_r_degree))*log(2*gi/(h*(pi-tal_r_degree)));% % % P5=(p+h)/gi-(2/(pi-tal_r_degree));% % % sum_P=P1+P2+P3+P4+P5;% % % gF=(1/5)*(pi*n/2-pi*h/2+((pi/2-(tal_r_degree-beta_rf)/2))*h+g+gi);% % % sigma=(2/pi)*( atan(2*n/gF)-( gF/(4*n) )*log( 1+( (2*n)/gF )^2) );% % % lF=la+2*n*(1-sigma);% % % miu0=0.4*pi*(10^(-6)); % H/m% % % L2D=(Nph^2)*miu0*lFe*(10^(-3))*sum_P; %此处乘以10^(-3)将铁心lFe:mm->m% % % Lu=L2D*(2*(lF/la)-1); %23.theta_u不对齐位置电感Theta_u_Lu(); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-theta_1位置磁化曲线% % % h=(Da/2)*sin(tal_r_degree-beta_rf-(beta_sf/2))-(Da/2+g)*sin(beta_sf/2); % % % b=(Da/2+g)*cos(beta_sf/2)-(Da/2)*cos(tal_r_degree-beta_rf-beta_sf/2); % % % % b=(Da/2-g)*cos(beta_sf/2)-(Da/2)*cos(tal_r_degree-beta_rf-beta_sf/2);% % % f=sqrt(h^2+b^2);% % % theta=atan(h/(gi+g-b));% % % % beta1=pi/2-beta_sf/2;% % % beta1=(pi/2)-(beta_sf/2)-(beta_rf/2); %平行转子齿% % % % beta2=pi/2-(tal_r_degree-beta_rf-beta_sf/2);% % % beta2=(pi/2)-(tal_r_degree-beta_rf-(beta_sf/2))-(beta_rf/2);% % % gamma=theta-(tal_r_degree-beta_rf-beta_sf/2)-beta_rf/2;% % % if f>=gi% % % gh=(Da/2)*(cos(beta_sf/6)-cos(beta_sf/2))+g;% % % else% % % gh=(Da/2+g)*(cos(beta_sf/2-beta_sf/7)-cos(beta_sf/2))+g;% % % end% % % % w=(Da/2+g)*tan(pi/Ns)-bps/2;% % % % alph=pi/2-(asin((w+bps/2)/(Ds/2-hcs))+asin((bps/2)/(Ds/2-hcs)))/2; % % % % v=sqrt((Ds/2-hcs)^2-((Da/2+g)^2)*(tan(pi/Ns)^2))-(Da/2+g);% % % hms=(Ds/2)-hcs-(Da/2+g);% % % t1=(gi-gh)/beta1;% % % t2=(h/sin(theta))-gi+g;% % % t3=(gi-f)/beta2;% % % m1=u+(v/2);% % % m2=u+(2/3)*v;% % % n1=hms-m1;% % % % delta=pi/2+beta_sf/2-acos(n1/Da);% % % delta=(pi/2)-acos(n1/Da)+(beta_sf/2)*alph;% % % p1=alph*(m^2)/(4*(w^2)*((2*v+u)^2));% % % p2_1pie=(1/(pi/2+delta))*log((gh+(pi/2+delta)*n1)/gh);% % % p2_2pie=(pi/(2*w*v))*((n1^2)/(2*(pi/2+delta))-gh*n1/((pi/2+delta)^2)+(gh^2)/((pi/2+delta)^3)*log((gh+(pi/2+delta)*n1)/gh)); % % % p2_3pie=((pi^2)/(16*(w^2)*(v^2)))*( n1^4/(4*(pi/2+delta))-(gh/(pi/2+delta))*(n1^3/(3*(pi/2+delta))-gh*(n1^2)/(2*((pi/2+delta)^2))+n1*(gh^2)/(pi/2+delta)^3-(gh^2/(pi/2+delta)^4)*log(((pi/2+delta)*n1+gh)/gh)));% % % p2=p2_1pie-p2_2pie+p2_3pie;% % % p3=(1/beta1)*log((beta1*t1+gh)/gh);% % % if f>=gi% % % b1=sqrt((gi+t2)^2-gi^2);% % % S5=(w*v-t2*b1/4)/(w*v);% % % b2=sqrt((gi+hms-m2)^2-(gi^2));% % % S6=(w*v-v*b2/12-t2*b1/4)/(w*v);% % % p4=(bps-t1)/gi;% % % p5=(S5^2)/(theta-gamma)*log(theta*(gi+t2)/(theta*gi+gamma*t2));% % % % p6=(S6^2)/theta*log(theta*(gi+hms-m2)/(theta*(gi+t2)));% % % p6=(S6^2)*(1/theta)*log((gi+hms-m2)/(gi+t2));% % %gF=(1/8)*(((pi/2)*n1+gh+delta*n1)+gh+(gh+beta1*t1)+2*gi+(gi*theta+gamma*t 2)+(gi+t2)*theta+(gi+hms-m2)*theta);% % % else% % % S6p=1-v/(36*w*tan(pi/Ns));% % % p4=(bps-t1-t3)/gi;% % % p5=(1/beta2)*log((f+beta2*t3)/f);% % % p6=(2/pi)*(S6p^2)*log((f+(pi/2)*(hms-m2))/f);% % %gF=(1/8)*(((pi/2)*n1+gh+delta*n1)+gh+(gh+beta1*t1)+2*gi+(f+beta2*t3)+f+(f+ (pi/2)*(hms-m2)));% % % end% % % p7=alph*(m2^4)/(4*(w^2)*((2*v+u)^2));% % % sum_p=p1+p2+p3+p4+p5+p6+p7;% % % n_theta1=n1+gh;% % % % xi=(pi/2)*(atan(2*n/gF)-(gF/(4*n))*log(1+((2*n/gF)^2)));% % % lF=la+2*n_theta1*(1-sigma);% % % L_2D=2*miu0*(lFe*(10^(-3)))*((Nph/2)^2)*sum_p;% % % L1=L_2D*(2*lF/la-1);Theta_1_L1()%%-Theta_a对齐位置时的磁化曲线% % % Sg=(bps+2*g)*lFe; %气隙截面积 /mm^2% % % Sts=bps*lFe; %定子极截面积/mm^2% % % Str=bpr*lFe; %转子极截面积/mm^2% % % Scs=hcs*lFe; %定子轭截面积/mm^2% % % Scr=hcr*lFe; %转子轭截面积/mm^2% % % hmr=gi; %第二气隙% % % lts=2*(Ds/2-hcs-Da/2-g);% % % ltr=2*hmr;% % % lg=2*g;% % % lcs=(Ds-hcs)*pi/2;% % % lcr=(Da/2-hmr-hcr/2)*pi;% % % Bts=1.3000; %/T% % % % for kk=0:1% % % fai_2=Bts*(Sts/2)*(10^(-6)); %Wb% % % Btr=fai_2/(Str*0.000001/2);% % % Bg=fai_2/(Sg*0.000001);% % % Bcs=fai_2/(Scs*0.000001);% % % Bcr=fai_2/(Scr*0.000001);% % % % end% % % % syms NB% % % % for k=1:NB% % % %% % % % end% % % % B=Bts;% % % Hts=Magcurv_Lagranges_DR510_50(Bts);% % % Hts=Hts*100; %单位转化为A/m% % % Htr=Magcurv_Lagranges_DR510_50(Btr);% % % Htr=Htr*100; %/A/m% % % Hg=Bg/(miu0*(10^4));% % % Hcs=Magcurv_Lagranges_DR510_50(Bcs);% % % Hcs=Hcs*100;% % % Hcr=Magcurv_Lagranges_DR510_50(Bcr);% % % Hcr=Hcr*100;% % % sum_F=(Hts*lts+Htr*ltr+Hg*lg+Hcs*lcs+Hcr*lcr)*(10^(-3));% % % % Fai=2*fai_2/(10^4);% % % Fai=2*fai_2;% % % % if Bts==1.3000% % % i_s=sum_F/Nph;% % % fai_s=Fai*Nph;% end% Bts=2.0500;% if Bts==2.0500% i_m=sum_F/Nph;% fai_m=Fai*Nph;% endTheta_a_is_fais();% fai_1m=(U/omiga)*(theta_1-theta_on);% I_m=fai_1m/L1; %实际电流峰值% Im_star=km*I_m;% fai_m=fai_1m+((U-Im*Rp)/omiga)*(theta_off-theta_1);% % psi_um=% Lao=fai_s/i_s;% % Im_star=5;% i_m=Im_star;% a1=((1/fai_m)-(1/fai_s))/((1/i_m)-(1/i_s));% a0=(1/fai_s)-(a1/i_s);% W_pie=(Lao*(i_s^2)-Lu*(Im_star^2))/2+(a0*(Im_star-i_s)-a1*log((a1+a0*Im_star)/(a1+a0*i_s)))/(a0^2);% Tem_pie=(Ns*Nr/(4*pi))*W_pie;% while Tem_pie<=Tem% i_m=Im_star;% a1=((1/fai_m)-(1/fai_s))/((1/i_m)-(1/i_s));% a0=(1/fai_s)-(a1/i_s);% Im_star=Im_star+0.5;% W_pie=(Lao*(i_s^2)-Lu*(Im_star^2))/2+(a0*(Im_star-i_s)-a1*log((a1+a0*Im_star)/(a1+a0*i_s)))/(a0^2);% end%24.theta_a对齐位置磁化曲线%%%-电流及转矩计算omiga=2*pi*nN/60; %转动角频率Tem=Pem*(10^3)/omiga; %25.额定电磁转矩 N.m% Im_star=28; %26.额定电磁转矩Tem所需的理想方波电流Im_star % I=Im_star/sqrt(2); %27.绕组电流有效值% im=I/ki; %28.实际电流峰值%%%-绕组平均匝长lavbw=(Da+2*g)*sin(pi/Ns)-(bps/2);bw=Keep_decimal(bw,1); %保留一位小数a=bps+bw;a=Keep_decimal(a,1); %保留一位小数R=5; %绕组圆角半径R=5mmb=la+2*R+bw;b=Keep_decimal(b,1); %保留一位小数r=R+(bw/2);r=Keep_decimal(r,1); %保留一位小数lav=2*la+2*(bps-2*R)+2*pi*r; %32.绕组平均匝长/mmlav=Keep_decimal(lav,1); %保留一位小数l=Nph*(lav*(10^(-3))); %33.每相绕组导线总长/mm% l=Nph*lav; %/mSa=3.94; %查表取导线截面积rou=0.0217; %电阻率Rp=rou*(l*(10^(-3)))/Sa; %每相绕组电阻,乘以10^(-3)/omgh%% % %% % % %%%利用theta1位置处的磁化电流曲线,确定实际电流峰值Im % % % fai_1m=(U/omiga)*(theta_1-theta_on);% % % Im=fai_1m/L1; %实际电流峰值% % % % Im=39.6% % % Im_star=km*Im; %理想方波电流% % % % Im_star=sqrt(2)*ki*Im;% % % % Im_star=28;% % % % Im=Im_star/km;% % % I=Im_star/sqrt(2);%绕组电流有效值% % % % I=Im*ki;% % % Im_star=sqrt(2)*I;% % % fai_m=fai_1m+((U-Im*Rp)/omiga)*(theta_off-theta_1);% % % % psi_um=% % % Lao=fai_s/i_s;% % % % Im_star=5;% % % i_m=Im;% % % % Im0=Im;% % % a1=((1/fai_m)-(1/fai_s))/((1/i_m)-(1/i_s));% % % a0=(1/fai_s)-(a1/i_s);% % % W_pie=(Lao*(i_s^2)-Lu*(Im_star^2))/2+(a0*(Im_star-i_s)-a1*log((a1+a0*Im_star)/(a1+a0*i_s)))/(a0^2);% % % Tem_pie=(Ns*Nr/(4*pi))*W_pie;% % % %% % %% % % % Sw=(1/2)*(pi/Ns)*((Ds/2-hcs)^2-(Da/2+g)^2)-(1/2)*bps*ds; %29.定子极间窗口面积% % % % Sw=Keep_decimal(Sw,1);% % % % J_pie=5; %预取电流密度J_pie=5A/mm^2% % % % Sa_pie=I/J_pie; %30.导线规格,导线截面积% % % % Sa_pie1=Keep_decimal(Sa_pie,2);% % % % Sa=Standardizing_Sa(Sa_pie); %查表取导线截面积% % % % Sa=Keep_decimal(Sa,2);% % % % % Sa=3.94;% % % % Scu=(1/2)*Nph*Sa; %每槽导体净截面积% % % % Scu=Keep_decimal(Scu,2);% % % % ks=Scu/Sw; %槽满率% % % % J=I/Sa; %31.电流密度% % % % ks1=Scu/Sw; %槽满率% % % % J1=I/Sa; %31.电流密度% % % % J_pie=5; %预取电流密度J_pie=5A/mm^2% % %% % % % while J>5.5% % %% % % while Tem_pie<=Tem% % % % fai_1m=(U/omiga)*(theta_1-theta_on);% % % % Im=fai_1m/L1;% % % Im=Im+1; %实际电流峰值% % % % I=Im*ki;% % % % Im_star=sqrt(2)*I;% % % Im_star=km*Im; %理想方波电流% % % % % Im_star=Im_star+1;% % % I=Im_star/sqrt(2); %绕组电流有效值% % % % fai_m=fai_1m+((U-Im*Rp)/omiga)*(theta_off-theta_1);% % % i_m=Im; %实际电路峰值% % % a1=((1/fai_m)-(1/fai_s))/((1/i_m)-(1/i_s));% % % a0=(1/fai_s)-(a1/i_s);% % % W_pie=(Lao*(i_s^2)-Lu*(Im_star^2))/2+(a0*(Im_star-i_s)-a1*log((a1+a0*Im_star)/(a1+a0*i_s)))/(a0^2);% % % Tem_pie=(Ns*Nr/(4*pi))*W_pie;% % % endCurrent_confirm_im_W_pie();Adapt_im_W_pie();Sps=(bps*lFe)*(10^(-6));Bps=fai_m/(Nph*Sps);B_delta=0.805*(bps/tal_r)*Bps; %重新校核% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 %%%-绕组设计Sw=(1/2)*(pi/Ns)*((Ds/2-hcs)^2-(Da/2+g)^2)-(1/2)*bps*ds; %29.定子极间窗口面积Sw=Keep_decimal(Sw,1);J_pie=5; %预取电流密度J_pie=5A/mm^2Sa_pie=I/J_pie; %30.导线规格,导线截面积Sa_pie1=Keep_decimal(Sa_pie,2);Sa=Standardizing_Sa(Sa_pie); %查表取导线截面积Sa=Keep_decimal(Sa,2);% Sa=3.94;Scu=(1/2)*Nph*Sa; %每槽导体净截面积Scu=Keep_decimal(Scu,2);ks=Scu/Sw; %槽满率J=I/Sa; %31.电流密度ks1=Scu/Sw; %槽满率J1=I/Sa; %31.电流密度%% % % while ks>0.5% % % J_pie=J_pie+0.01;% % % Sa_pie=I/J_pie; %30.导线规格,导线截面积% % % Sa_pie=Keep_decimal(Sa_pie,2);% % % Sa=Standardizing_Sa(Sa_pie); %查表取导线截面积% % % Sa=Keep_decimal(Sa,2);% % % % Sa=3.94;% % % Scu=(1/2)*Nph*Sa; %每槽导体净截面积% % % Scu=Keep_decimal(Scu,2);% % % ks=Scu/Sw; %槽满率% % % J=I/Sa; %31.电流密度% % % % while J>5.5% % % % J_pie=J_pie-0.01;% % % % Sa_pie=I/J_pie; %30.导线规格,导线截面积% % % % Sa_pie=Keep_decimal(Sa_pie,2);% % % % Sa=Standardizing_Sa(Sa_pie); %查表取导线截面积% % % % Sa=Keep_decimal(Sa,2);% % % % % Sa=3.94;% % % % Scu=(1/2)*Nph*Sa; %每槽导体净截面积% % % % Scu=Keep_decimal(Scu,2);% % % % ks=Scu/Sw; %槽满率% % % % J=I/Sa; %31.电流密度% % % % end% % % end% % % while J>5.5% % % J_pie=J_pie-0.01;% % % Sa_pie=I/J_pie; %30.导线规格,导线截面积% % % Sa_pie=Keep_decimal(Sa_pie,2);% % % Sa=Standardizing_Sa(Sa_pie); %查表取导线截面积% % % Sa=Keep_decimal(Sa,2);% % % % Sa=3.94;% % % Scu=(1/2)*Nph*Sa; %每槽导体净截面积% % % Scu=Keep_decimal(Scu,2);% % % ks=Scu/Sw; %槽满率% % % J=I/Sa; %31.电流密度% % % end% % % % endAdapt_ks_J();%%%-参数计算Cu_density=8.9*10^(-6); %铜密度Gcu=Nq*Sa*(l*1000)*Cu_density; %35.铜重kgVsFe=((1/2)*(pi/Ns)*((Ds/2)^2-(Ds/2-hcs)^2)+(bps*ds/2))*(2*Ns*lFe); %36.定子铁心体积/mm^3VrFe=((1/2)*(pi/Nr)*((Di/2+hcr)^2-(Di/2)^2)+bpr*(gi-g)/2)*(2*Nr*lFe); %37.转子铁心体积/mm^3Fe_density=7.8*10^(-6); %铁密度GFe=(VsFe+VrFe)*Fe_density; %38.铁心重Dsi=Da+2*g;A=Nq*Nph*I/(pi*(Dsi*10^(-3))); %39.电负荷A=15000~50000A/mPcu=Nq*(I^2)*Rp; %40.铜耗TN=PN*1000/omiga; %额定转矩N.mK=(TN/((Da*0.001)^2*(la*0.001)))*0.001; %41.电机利用系数kN.m/m^3% DATA_input();%DATA_output(Nq,Ns,Nr,UN,PN,nN,ita,lambda,A_pie,B_delta_pie,g,theta_on,theta_off, theta_c,theta_u,theta_hr);% SRM_simulation();% Theta_hr_ish_faish();DATA_output();% end% SRM_simulation();。
开关磁阻电机速度控制

Journal of Electrical Engineering 电气工程, 2016, 4(1), 55-62Published Online March 2016 in Hans. /journal/jee/10.12677/jee.2016.41008Speed Control Strategy of SwitchedReluctance MotorZhou Du1,2, Dingxiang Wu2,3, Lijun Tang1,21School of Physics and Electronic Sciences, Changsha University of Science & Technology, Changsha Hunan2Hunan Province Higher Education Key Laboratory of Modeling and Monitoring on the Near-EarthEletromagnetic Environments, Changsha Hunan3Billion Set Electronic Technology Co, Ltd., Changsha HunanReceived: Mar. 1st, 2016; accepted: Mar. 19th, 2016; published: Mar. 24th, 2016Copyright © 2016 by authors and Hans Publishers Inc.This work is licensed under the Creative Commons Attribution International License (CC BY)./licenses/by/4.0/AbstractAimed at research on starting mode and speed control of switched reluctance motor speed control system, a two-phase starting is adopted to start the electric, in order to increase the torque and reduce the torque ripple. A fuzzy adaptive PID control algorithm is proposed, and a switched re-luctance motor speed control system with STM32 + FPGA as the main controller is designed, ap-plying current chopping in low speed and angle position control mode in high speed, which has a certain effect on solving the problems of high overshoot, slow dynamic response and low accuracy.The experimental results show that the precision of the system speed is within 10 r/min, and the maximum overshoot is 15 r/min.KeywordsSwitched Reluctance Motor, Torque Ripple, Fuzzy Adaptive Tuning PID开关磁阻电机速度控制杜舟1,2,吴定祥2,3,唐立军1,21长沙理工大学物理与电子科学学院,湖南长沙2近地空间电磁环境监测与建模湖南省普通高校重点实验室,湖南长沙3长沙亿旭机电科技有限公司,湖南长沙杜舟等收稿日期:2016年3月1日;录用日期:2016年3月19日;发布日期:2016年3月24日摘要针对开关磁阻电机的调速控制系统的起动方式和速度控制开展研究,采用两相绕组通电起动的方式,以增大转矩、减小转矩脉动。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《四相8/6结构开关磁阻电动机调速控制程序》.INCLUDE "240x.H";--------------------------------------以下定义变量---------------------------------------------------- .DATA.BSS ADDRESS,1 ;换相处理程序地址.BSS GPR0,1 ;当前通电相标志(1,2,3,4---A,B,C,D).BSS GPR2,1 ;转向标志,1(CW),0(CCW).BSS GPR3,1 ;换相标志,1(不允许),0(允许).BSS CMD,1 ;电流参考值.BSS CMDAC,1 ;A/C相电流参考值.BSS CMDBD,1 ;B/D相电流参考值.BSS MAX,1 ;最小占空比(0%)比较值.BSS MIN,1 ;最大占空比(100%)比较值.BSS COMAC,1 ;A/C相比较值.BSS COMBD,1 ;B/D相比较值.BSS CURRAC,1 ;A/C相电流检测值.BSS CURRBD,1 ;B/D相电流检测值.BSS NUM,1 ;电流修正值.BSS TMP,1 ;临时变量.BSS STACK,6 ;软堆栈初始地址;--------------------------------------定义主向量段------------------------------------------------------ .SECT ".VECTORS" ;定义主向量段RESET B START ;地址0000H,复位,优先级1INT1 B PHANTOM ;地址0002H,INT1,优先级4INT2 B T1PERIOD_ISR ;地址0004H,INT2,优先级5INT3 B T2PERIOD_ISR ;地址0006H,INT3,优先级6INT4 B PHANTOM ;地址0008H,INT4,优先级7INT5 B PHANTOM ;地址000AH,INT5,优先级8INT6 B PHANTOM ;地址000CH,INT6,优先级9 RESERVED B PHANTOM ;地址000EH,测试,优先级10SW_INT8 B PHANTOM ;地址0010H,自定义软中断SW_INT9 B PHANTOM ;地址0012H,自定义软中断SW_INT10 B PHANTOM ;地址0014H,自定义软中断SW_INT11 B PHANTOM ;地址0016H,自定义软中断SW_INT12 B PHANTOM ;地址0018H,自定义软中断SW_INT13 B PHANTOM ;地址001AH,自定义软中断SW_INT14 B PHANTOM ;地址001CH,自定义软中断SW_INT15 B PHANTOM ;地址001EH,自定义软中断SW_INT16 B PHANTOM ;地址0020H,自定义软中断TRAP B PHANTOM ;地址0022H,TRAP矢量NMI B PHANTOM ;地址0024H,NMI,优先级3EMU_TRAP B PHANTOM ;地址0026H,仿真Trap,优先级2SW_INT20 B PHANTOM ;地址0028H,自定义软中断SW_INT21 B PHANTOM ;地址002AH,自定义软中断SW_INT22 B PHANTOM ;地址002CH,自定义软中断SW_INT23 B PHANTOM ;地址002EH,自定义软中断SW_INT24 B PHANTOM ;地址0030H,自定义软中断SW_INT25 B PHANTOM ;地址0032H,自定义软中断SW_INT26 B PHANTOM ;地址0034H,自定义软中断SW_INT27 B PHANTOM ;地址0036H,自定义软中断SW_INT28 B PHANTOM ;地址0038H,自定义软中断SW_INT29 B PHANTOM ;地址003AH,自定义软中断SW_INT30 B PHANTOM ;地址003CH,自定义软中断SW_INT31 B PHANTOM ;地址003EH,自定义软中断;--------------------------------------以下是主程序------------------------------------------------------ .TEXT;--------------------------------------系统初始化程序-------------------------------------------------- STARTSETC INTM ; 屏蔽中断LDP #0E0HSPLK #0068H, WDCR ;不用看门狗SPLK #0284H, SCSR1 ;CLKIN=10MHz,CLKOUT=20MHz;--------------------------------------中断初始化程序-------------------------------------------------- LDP #0SPLK #0FFH,IFR ;清所有系统中断标志SPLK #00000110B,IMR ;开INT2, INT3中断LDP #0E8HLACC EV AIFRA ;清事件管理器A所有中断标志SACL EV AIFRALACC EV AIFRBSACL EV AIFRBLACC EV AIFRCSACL EV AIFRCSPLK #0,EV AIMRA ;屏蔽所有中断SPLK #0,EV AIMRBSPLK #0,EV AIMRC;--------------------------------------初始化转子位置为A相------------------------------------------- CALL START2 ;调用初始化转子位置子程序;--------------------------------------ADC初始化----------------------------------------------------- LDP #0E1HSPLK #0900H,ADCTRL1 ;ADC预分频10,1MHZSPLK #0001H,MAXCONV ;两个通道SPLK #0010H,CHSELSEQ1 ;选择ADCIN0和ADCIN1通道LACC MCRAOR #0FD8H ;设置PWM1-6,QEP1-2SACL MCRA;--------------------------------------初始化事件管理器A程序-------------------------------------- LDP #0E8HSPLK #0000H,ACTRA ;引脚PWM1-6强制低SPLK #0,CMPR1 ;占空比初值为100%SPLK #0,CMPR2SPLK #0,CMPR3SPLK #8200H,COMCONA ;定时器下溢比较器重载,允许比较SPLK #0800,T1PR ;周期寄存器值800(25kHzPWM)SPLK #0,T1CNTSPLK #9040H,T1CON ;连续增计数方式,预分频为1,允许T1SPLK #9872H,T2CON ;定向增减,允许编码接口SPLK #0803BH, T2PR ;T2周期寄存器(7FFFH+60)SPLK #07FC3H, T2CMPR ;T2比较寄存器(7FFFH-60)SPLK #07FFFH, T2CNT ;编码器计数器初值;--------------------------------------开中断---------------------------------------------------------------- LDP #0E8HLACC EV AIFRA ;清事件管理器A所有中断标志SACL EV AIFRALACC EV AIFRBSACL EV AIFRBLACC EV AIFRCSACL EV AIFRCSPLK #0080H,EV AIMRA ;开T1周期中断SPLK #0003H,EV AIMRB ;开T2周期中断和比较中断SPLK #0,EV AIMRCLAR AR1,#STACK ;软堆栈指针CLRC INTM ;开中断;--------------------------------------变量初始化---------------------------------------------------------- LDP #0HLACC #0SACL CMD ;电流参考初值(通过速度环求得)SACL CMDAC ;A/C相电流参考值SACL CMDBD ;B/D相电流参考值LACC #10SACL NUM ;电流修正值LDP #0E8HLACC T1PRLDP #0SACL MAX ;MAX =T1PR,占空比=0%LACC #00SACL MIN ;MIN = 0,占空比=100%LACC MINSACL COMAC ;A/C相占空比=100%SACL COMBD ;B/D相占空比=100%LACC #0SACL CURRAC ;A/C相电流=0SACL CURRBD ;B/D相电流=0LACC GPR2 ;转向,由用户外部输入SUB #1BCND X3, EQ ;正转(CW)则跳转LACC #4 ;反转(CCW)SACL GPR0 ;当前换相是D相B XXX3 LACC #2 ;正转(CW)SACL GPR0 ;当前换相是B相XX LACC #1SACL GPR3 ;禁止换相;--------------------------------------初始化结束----------------------------------------------------------;--------------------------------------用户可添加包括转速和转向输入的应用程序------------ WAIT B W AIT ;;--------------------------------------主模块结束----------------------------------------------------------;--------------------------------------假中断处理子程序-------------------------------------------------- PHANTOMCLRC INTMRET;--------------------------------------T1周期中断处理子程序----------------------------------------- T1PERIOD_ISRMAR *,AR1 ;保存现场MAR *+SST #1, *+ ;保存ST1SST #0, * ;保存ST0LDP #0E0HLACC PIVR ;清中断标志LDP #0E8HSPLK #0FFFH,EVAIFRA;--------------------------------------检测是否换相------------------------------------------------ LDP #0LACC GPR3SUB #1BCND NOCOM, EQ ;不换相则跳转;--------------------------------------转向识别,调整当前换相标志----------------------------------- LACC GPR2 ;换相SUB #1BCND FORWARD, EQ ;正转则跳转REVERSE ;反转(CCW)LACC GPR0 ;调整当前换相标志SUB #1SACL GPR0BCND X1, EQ ;GPR0=0跳转B GOOUTX1 LACC #4 ;修改GPR0=4SACL GPR0B GOOUTFORWARD ;(CW)LACC GPR2 ;检查转向是否改变SUB #0BCND REVERSE, EQ ;如果转向改变则跳转LACC GPR0 ;调整当前换相标志ADD #1SACL GPR0SUB #5BCND X2, EQ ;GPR0>5跳转B GOOUTX2 LACC #1 ;修改GPR0=1SACL GPR0GOOUTLACC #1SACL GPR3 ;修改换相标志为不换相;--------------------------------------调用电流检测子程序--------------------------------------------- NOCOMCALL DATAINT;--------------------------------------电流调节----------------------------------------------------------- LACC #SECTOR_TABLE ;表头地址ADD GPR0 ;加偏移量TBLR ADDRESS ;查表LACC ADDRESS ;取跳转地址BACC ;跳转PHASE_00LACC #0DEADH ;干扰陷阱B PPP ;退出;--------------------------------------A相----------------------------------------------------------------- PHASE_A ;A相电流调整LACC CMDAC ;A/C相电流参考值SUB CURRAC ;与测量值比较BCND DEC_A, LT ;测量值大于参考值则跳转LACC COMAC ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMAC ;保存新比较值LACC MIN ;检测是否超出上限SUB COMACBCND SET_A, GEQ ;超过则跳转B GOON_A ;没超过则退出DEC_A ;测量值大于参考值LACC COMACADD NUM ;加修正值,使占空比减小SACL COMAC ;保存新比较值LACC MAX ;检测是否超出下限SUB COMACBCND GOON_A, GEQ ;没超过则退出LACC MAX ;超出SACL COMAC ;比较值等于下限(占空比=0%)B GOON_ASET_ALACC MINSACL COMAC ;比较值等于上限(占空比=100%) GOON_ALACC COMACLDP #0E8HSACL CMPR1 ;更新A相比较值SPLK #000EH, ACTRA ;PWM1高有效,PWM2强制高,其它强制低LDP #0LACC MINSACL COMBD ;B/D相占空比初值=100%LACC #0SACL CURRBD ;电流检测值清零B PPP ;退出;--------------------------------------B相--------------------------------------------------------------------- PHASE_B ;B相电流调整LACC CMDBD ;B/D相电流参考值SUB CURRBD ;与测量值比较BCND DEC_B, LT ;测量值大于参考值则跳转LACC COMBD ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMBD ;保存新比较值LACC MIN ;检测是否超出上限SUB COMBDBCND SET_B, GEQ ;超过则跳转B GOON_B ;没超过则退出DEC_B ;测量值大于参考值LACC COMBDADD NUM ;加修正值,使占空比减小SACL COMBD ;保存新比较值LACC MAX ;检测是否超出下限SUB COMBDBCND GOON_B, GEQ ;没超过则退出LACC MAX ;超出SACL COMBD ;比较值等于下限(占空比=0%)B GOON_BSET_BLACC MINSACL COMBD ;比较值等于上限(占空比=100%) GOON_BLACC COMBDLDP #0E8HSACL CMPR2 ;更新B相比较值SPLK #00E0H, ACTRA ;PWM3高有效,PWM4强制高,其它强制低LDP #0LACC MINSACL COMAC ;A/C相占空比初值=100%LACC #0SACL CURRAC ;电流检测值清零B PPP ;退出;--------------------------------------C相------------------------------------------------------------------- PHASE_C ;C相电流调整LACC CMDAC ;A/C相电流参考值SUB CURRAC ;与测量值比较BCND DEC_C, LT ;测量值大于参考值则跳转LACC COMAC ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMAC ;保存新比较值LACC MIN ;检测是否超出上限SUB COMACBCND SET_C, GEQ ;超过则跳转B GOON_C ;没超过则退出DEC_C ;测量值大于参考值LACC COMACADD NUM ;加修正值,使占空比减小SACL COMAC ;保存新比较值LACC MAX ;检测是否超出下限SUB COMACBCND GOON_C, GEQ ;没超过则退出LACC MAX ;超出SACL COMAC ;比较值等于下限(占空比=0%)B GOON_CSET_CLACC MINSACL COMAC ;比较值等于上限(占空比=100%) GOON_CLACC COMACLDP #0E8HSACL CMPR3 ;更新C相比较值;SPLK #020CH, ACTRA ;PWM5高有效,PWM2强制高,其它强制低LDP #0LACC MINSACL COMBD ;B/D相占空比初值=100%LACC #0SACL CURRBD ;电流检测值清零B PPP ;退出;--------------------------------------D相-------------------------------------------------------------- PHASE_D ;D相电流调整LACC CMDBD ;B/D相电流参考值SUB CURRBD ;与测量值比较BCND DEC_D, LT ;测量值大于参考值则跳转LACC COMBD ;否则小于参考值SUB NUM ;减修正值,使占空比增加SACL COMBD ;保存新比较值LACC MIN ;检测是否超出上限SUB COMBDBCND SET_D, GEQ ;超过则跳转B GOON_D ;没超过则退出DEC_D ;测量值大于参考值LACC COMBDADD NUM ;加修正值,使占空比减小SACL COMBD ;保存新比较值LACC MAX ;检测是否超出下限SUB COMBDBCND GOON_D, GEQ ;没超过则退出LACC MAX ;超出SACL COMBD ;比较值等于下限(占空比=0%)B GOON_DSET_DLACC MINSACL COMBD ;比较值等于上限(占空比=100%) GOON_DLACC COMBDLDP #0E8HSACL CMPR3 ;更新D相比较值SPLK #08C0H, ACTRA ;PWM6高有效,PWM4强制高,其它强制低LDP #0LACC MINSACL COMAC ;A/C相占空比初值=100%LACC #0SACL CURRAC ;电流检测值清零PPPMAR *, AR1 ;恢复现场LST #0, *- ;恢复ST0LST #1, *- ;恢复ST1CLRC INTMRET;--------------------------------------电流采样和AD转换子程序-------------------------------------------- DA TAINTLDP #0E1HSPLK #2000H,ADCTRL2 ;启动AD转换CONVERSIONBIT ADCTRL2,3 ;将忙状态位复制到TCBCND CONVERSION,TC ;等待转换结束LACC RESULT0,10 ;读A/C相电流转换结果LDP #0SACH CURRAC ;保存LDP #0E1HLACC RESULT1,10 ;读B/D相电流转换结果LDP #0SACH CURRBD ;保存RET;--------------------------------------T2周期和比较中断处理子程序-------------------------------T2PERIOD_ISRMAR *,AR1 ;保存现场MAR *+SST #1, *+ ;保存ST1SST #0, * ;保存ST0LDP #0E0HLACC PIVR ;清中断标志LDP #0E8HSPLK #0FH,EV AIFRBSPLK #07FFFh, T2CNT ;T2编码器计数器赋初值LDP #0LACC #0SACL GPR3 ;允许换相(GPR3=0)MAR *, AR1 ;恢复现场LST #0, *- ;恢复ST0LST #1, *- ;恢复ST1CLRC INTMRET;--------------------------------------初始化转子位置子程序------------------------------------------- START2NOPLDP #0E8HSPLK #000EH, ACTRA ;A相通电SPLK #0CA00H, COMCONA ;立即比较SPLK #0400, CMPR1 ;占空比=50%SPLK #0,T1CNTSPLK #800,T1PR ;T1周期寄存器SPLK #9040H,T1CON ;连续增减计数方式,预分频为1,允许T1LDP #0LACC #0FFFFH ;准备延时,等待转子到A相对极位置SACL TMPLOOPLACL TMPSUB #1SACL TMPBCND LOOP, NEQLACC #0FFFFH ;再延时SACL TMPLOOP2LACL TMPSUB #1SACL TMPBCND LOOP2, NEQLDP #0E8HSPLK #0, ACTRA ;关闭PWMRET;--------------------------------------换相处理程序地址表----------------------------------------- SECTOR_TABLE.WORD PHASE_00 ;干扰陷阱程序地址.WORD PHASE_A ;换相A相处理程序地址.WORD PHASE_B ;换相B相处理程序地址.WORD PHASE_C ;换相C相处理程序地址.WORD PHASE_D ;换相D相处理程序地址.END。