正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx

上传人:b****5 文档编号:8421149 上传时间:2023-05-11 格式:DOCX 页数:15 大小:19.10KB
下载 相关 举报
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第1页
第1页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第2页
第2页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第3页
第3页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第4页
第4页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第5页
第5页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第6页
第6页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第7页
第7页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第8页
第8页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第9页
第9页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第10页
第10页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第11页
第11页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第12页
第12页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第13页
第13页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第14页
第14页 / 共15页
正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx

《正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx(15页珍藏版)》请在冰点文库上搜索。

正弦波永磁同步电动机驱动控制程序Word格式文档下载.docx

unsignedintcanchannel=0;

//发送选项控制

unsignedlonga=0,b=0;

unsignedintspeedsci=0;

unsignedintspeedsd=0;

unsignedintspeedthousand=3;

//转速千位

unsignedintspeedhundred=3;

//转速百位

unsignedintspeeddecade=1;

//转速十位

unsignedintspeedlow=0;

unsignedintUdc=3500;

//转速个位

unsignedintUdcthousand=0;

//电压千位

unsignedintUdchundred=0;

//电压百位

unsignedintUdcdecade=4;

//电压十位

unsignedintUdclow=8;

//电压个位

unsignedintIdc=0;

unsignedintIdcthousand=0;

//电流千位

unsignedintIdchundred=0;

//电流百位

unsignedintIdcdecade=6;

//电流十位

unsignedintIdclow=0;

//电流个位

unsignedintscicount=0;

//向上位机发送数据周期控制

unsignedlongsetspeed=2500;

//上位机设定的速度

unsignedintscisend[6];

charReceivedChar=0;

charscired[6];

intp=0,q=0,sciflag=0,tenable=0;

inti,j,t;

//AD数字滤波

unsignedintonce=0;

longIa_now;

longIa_fore;

longIb_now;

longIb_fore;

longIc_now;

unsignedintad_count;

unsignedintdelay=0;

unsignedintS_Ia=0;

unsignedintia[18]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

unsignedintib[18]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

longIcb,Ica;

//CLARK变换两相静止坐标系电流

longIat,Ibt;

//AD数字滤波中间变量

longIa=0,Ib=0,Ic=0;

//滤波后的电流值

//转速环PI调节参数

intdirect=0;

//转向控制0为正转1为反转

longspeed_given=170;

//转速给定

longspeed_count=10;

//转速计算周期控制标志

longspeed_feed=0;

//转速反馈

longspeed_out2=0;

//上次转速调节器输出

longspeed_e1;

//当前转速偏差

longspeed_e2=0;

//上次转速偏差

//电流环PI调节参数

longId_given=0;

//Id给定

longIq_given=0;

//Iq给定转速调节器输出

longId_feed;

//d轴电流反馈值

longIq_feed;

//q轴电流反馈值

longId_e;

//d轴当前电流偏差

longId_e0=0;

//d轴上次电流偏差

longIq_e;

//q轴当前电流偏差

longIq_e0=0;

//q轴上次电流偏差

longUd=-150;

//d轴电流调节器输出

longUq=1000;

//q轴电流调节器输出

longUd0=0;

//上次d轴电流调节器输出

longUq0=0;

//上次q轴电流调节器输出

longUpa,Upb;

//UdUqPARKN变换值

longUa,Ub,Uc;

//SPWM调制电压

voidinit_SCI(void);

//串口初始化

voidscia_xmit(inta);

//串口发送函数

voidinit_eva(void);

//EVA初始化

voidinit_ADC(void);

//ADC初始化

voidcalcuindex(void);

//转子位置角计算

voidcalcuspeed(void);

//转速计算

voidspeed_PI(void);

//转速环PI调节

voidAD(void);

//AD采样及滤波

voidI_PI(void);

//电流环PI调节

voidCLARK(void);

//CLARK变换

voidCLARKN(void);

//CLARK逆变换

voidPARK(void);

//PARK变换

voidPARKN(void);

//PARK逆变换

interruptvoidt1pint_isr(void);

//定时器1中断服务程序

interruptvoidcap3_isr(void);

//捕获单元3中断服务程序

interruptvoidsci_isr(void);

signedintsintable[512]=//同SPWM

//Q15格式,将2PI弧度分成了512份

voidmain(void){//初始化系统

InitSysCtrl();

DINT;

IER=0x00;

//关xx

IFR=0x00;

//初始化PIExx

InitPieCtrl();

InitPieVectTable();

EALLOW;

//初始化PIExx矢量表

//GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;

//GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;

GpioMuxRegs.GPAMUX.all=0x073F;

//EVAPWM1-6pinsGpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=0;

//继电器开关

GpioMuxRegs.GPBDIR.bit.GPIOB0=1;

GpioMuxRegs.GPBMUX.bit.C4TRIP_GPIOB13=0;

//LED控制

GpioMuxRegs.GPBDIR.bit.GPIOB13=1;

GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1;

GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1;

EDIS;

PieVectTable.T1UFINT=&

t1pint_isr;

PieVectTable.CAPINT3=&

cap3_isr;

PieVectTable.RXAINT=&

sci_isr;

EvaRegs.EVAIFR

A.all=0XFF;

EvaRegs.EVAIMR

A.all=0X0200;

IER|=M_INT2;

IER|=M_INT3;

IER|=M_INT9;

PieCtrlRegs.PIER

2.bit.INTx6=1;

//定时器中断

//PieCtrlRegs.PIER

3.bit.INTx7=1;

9.bit.INTx1=1;

GpioDataRegs.GPBDAT.bit.GPIOB0=0;

//开xx

init_SCI();

init_eva();

//初始化EVA

init_ADC();

//初始化ADC

if(direct==0)

speed_given=speed_given;

//正反转速度设定

else

speed_given=-speed_given;

EINT;

ERTM;

for(;

;

){if((scienable==1)&

&

(tenable==1)==1){//speedsci=setspeed;

tenable=0;

speedthousand=speedsci/1000;

speedhundred=speedsci/100%10;

speeddecade=speedsci/10%10;

speedlow=speedsci%10;

scisend[0]='

s'

scisend[1]=0x30+speedthousand;

//speedthousand

scisend[2]=0x30+speedhundred;

//speedhundred

scisend[3]=0x30+speeddecade;

//speeddecade

scisend[4]=0x30+speedlow;

//speedlow

scisend[5]='

p'

while

(1){if(SciaRegs.SCICTL

2.bit.TXRDY==1){scia_xmit(scisend[p]);

p++;

}if(p>

5){p=0;

break;

}}}}}voidinit_SCI(){//Note:

ClockswereturnedontotheSCIAperipheral

//intheInitSysCtrl()function

SciaRegs.SCICCR.all=0x0007;

//1stopbit,Noloopback

//Noparity,8charbits,

//asyncmode,idle-lineprotocol

SciaRegs.SCICTL

1.all=0x0003;

//enableTX,RX,internalSCICLK,SciaRegs.SCICTL

2.all=0x0003;

2.bit.TXINTENA=1;

2.bit.RXBKINTENA=1;

//DisableRXERR,SLEEP,TXWAKE

SciaRegs.SCIHBAUD=0x0001;

SciaRegs.SCILBAUD=0x00E7;

}voidscia_xmit(inta){SciaRegs.SCITXBUF=a;

}voidinit_eva(){EvaRegs.T1PR=7500;

//Timer1period

EvaRegs.T1CNT=0x00;

//Timer1counter

EvaRegs.ACTR

A.all=0x0333;

//0x033D;

EvaRegs.DBTCON

A.all=0x0FFC;

//

6.4μs的死区

EvaRegs.COMCON

A.all=0x8207;

A.bit.ACTRLD=2;

EvaRegs.GPTCON

A.all=0X0080;

EvaRegs.T1CON.all=0x0842;

//连续增减记数模式,定时器时钟1分频EvaRegs.T2PR=99;

//光电编码器2500线

EvaRegs.T2CON.all=0x1830;

EvaRegs.T2CNT=0;

EvaRegs.CAPCON

A.all=0X1404;

//使能QEP}voidinit_ADC(void){AdcRegs.ADCTRL

1.all=0X1240;

/AD内核时钟预定标

18.75MHZ,采样窗口3,双排序模式AdcRegs.ADCTRL

1.bit.CONT_RUN=1;

//连续运行

AdcRegs.ADCTRL

3.bit.ADCCLKPS=3;

//AD内核时钟

3.125MHz

2.all=0X4100;

//事件管理器A启动SEQ1

3.bit.ADCBGRFDN=3;

for(i=0;

i<

1000;

i++)SciaRegs.SCICCR.bit.LOOPBKENA=0;

//disableloopback

1.all=0x0023;

//RelinquishSCIfromReset

{;

}

3.bit.ADCPWDN=1;

500;

i++)

AdcRegs.ADCMAXCONV.all=0x0001;

//Setup2conv'

sonSEQ1

AdcRegs.ADCCHSELSEQ

1.bit.CONV00=0;

//SetupADCINA0as1stSEQ1conv.AdcRegs.ADCCHSELSEQ

1.bit.CONV01=1;

//SetupADCINA1as2ndSEQ1conv.}

//*******************************************************************////根据L正反转4种不同情况进行转速计算所得转速均为正值

//*******************************************************************//voidcalcuspeed(void){if((L>

=0)&

(L<

2000))

speed_feed=L*3;

if((L<

0)&

-2000))

speed_feed=(100+L)*3;

if((L>

(L>

speed_feed=(100-L)*3;

=-2000))

speed_feed=(-L)*3;

if(speed_feed>

0)

speedsci=speed_feed;

speedsci=-speed_feed;

}voidspeed_PI(void){speed_e1=speed_given-speed_feed;

Iq_given=speed_out2+Kpspeed*(speed_e1-speed_e2)+Kispeed*speed_e1;

if(Iq_given>

500)

Iq_given=500;

if(Iq_given<

-500)

Iq_given=-500;

speed_e2=speed_e1;

speed_out2=Iq_given;

}//*****************************************************************////AD采样及滤波连续采样18次,舍弃最大值和最小值剩下的再取平均值

//*****************************************************************//voidAD(void){for(ad_count=0;

ad_count<

=17;

ad_count++){for(delay=0;

delay<

=10;

delay++)

{}

ia[ad_count]=AdcRegs.ADCRESULT0>

>

4;

ib[ad_count]=AdcRegs.ADCRESULT1>

}//testtime=0;

for(j=1;

j<

j++)

=17-j;

i++){if(ia[i]>

ia[i+1])

{t=ia[i];

ia[i]=ia[i+1];

ia[i+1]=t;

if(ib[i]>

ib[i+1])

{t=ib[i];

ib[i]=ib[i+1];

ib[i+1]=t;

}}EvaRegs.EVAIFR

A.all=0XFF;

Iat=(ia[5]+ia[6]+ia[7]+ia[8]+ia[9]+ia[10]+ia[11]+ia[12])>

3;

Ibt=(ib[5]+ib[6]+ib[7]+ib[8]+ib[9]+ib[10]+ib[11]+ib[12])>

Ia=Iat-2110;

Ib=Ibt-2110;

if(once==0){Ia_fore=Ia;

Ib_fore=Ib;

once=1;

}Ia_now=(Delta*Ia+(8-Delta)*Ia_fore)>

Ib_now=(Delta*Ib+(8-Delta)*Ib_fore)>

Ia_fore=Ia_now;

Ib_fore=Ib_now;

Ic_now=-(Ia_now+Ib_now);

}//******************************************************************////UdUq限幅值限定了最高转速

//******************************************************************//voidI_PI(void){Id_e=Id_given-Id_feed;

//2*Id_feed

Ud=Ud0+Kpd*(Id_e-Id_e0)+Kid*Id_e;

Iq_e=Iq_given-Iq_feed;

//2*Iq_feed

Uq=Uq0+Kpq*(Iq_e-Iq_e0)+Kiq*Iq_e;

if(Ud>

Ud=500;

if(Ud<

Ud=-500;

if(Uq>

2500)

Uq=2500;

if(Uq<

-2500)

Uq=-2500;

Ud0=Ud;

Uq0=Uq;

Id_e0=Id_e;

Iq_e0=Iq_e;

}voidCLARK(void){Ica=(5017*Ia_now)>

12;

Icb=((2896*Ia_now)>

12)+((5793*Ic_now)>

12);

}voidCLARKN(void){Ua=(Upa*3344)>

Ub=((-Upa*1672)>

12)+((Upb*2896)>

Uc=-(Ua+Ub);

if(Ua>

7500)

Ua=7500;

if(Ua<

-7500)

Ua=-7500;

if(Ub>

Ub=7500;

if(Ub<

Ub=-7500;

if(Uc>

Uc=7500;

if(Uc<

Uc=-7500;

}voidPARK(void){Id_feed=((Ica*sintable[index2])>

15)+((Icb*sintable[index1])>

15);

Iq_feed=-((Ica*sintable[index1])>

15)+((Icb*sintable[index2])>

voidPARKN(void){Upa=((Ud*sintable[index2])>

15)-((Uq*sintable[index1])>

Upb=((Ud*sintable[index1])>

15)+((Uq*sintable[index2])>

//***********************************************************************////转子位置角计算由当前T2计数值计算

//***********************************************************************//voidcalcuindex(void){index1=(210*(long)L2)>

//(210*(long)L2)>

10;

两对极电机应改为105;

i++)//一对极(210*(long)L2)>

{if(index1>

=512)

index1=index1-512;

}if(index1<

=384)

index2=index1+128;

index2=index1-384;

}//=====================================================================//T1下溢中断子程序

//=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2