DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx

上传人:b****4 文档编号:7608707 上传时间:2023-05-08 格式:DOCX 页数:47 大小:24.17KB
下载 相关 举报
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第1页
第1页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第2页
第2页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第3页
第3页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第4页
第4页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第5页
第5页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第6页
第6页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第7页
第7页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第8页
第8页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第9页
第9页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第10页
第10页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第11页
第11页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第12页
第12页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第13页
第13页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第14页
第14页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第15页
第15页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第16页
第16页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第17页
第17页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第18页
第18页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第19页
第19页 / 共47页
DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx

《DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx(47页珍藏版)》请在冰点文库上搜索。

DSP无刷直流电动机驱动控制程序Word文档下载推荐.docx

//13保留

Uint16Sign:

//14当前转向标志

};

unionFlag_Reg{

Uint16all;

structFlag_Bitsbit;

}FlagRegs;

//全局变量

//串口通信变量

unsignedintSci_Rx[8]={0,0,0,0,0,0,0,0};

//接收数据数组

unsignedintSci_Tx[8]={0,0,0,0,0,0,0,0};

//发送数据数组

charT_pointer=0;

//发送数据数组指针

charR_pointer=0;

//接收数据数组指针

charT_length=1;

//发送数据长度

charR_length=0;

//接收数据长度

chara2=0;

//控制参数

unsignedintspd_kp=0;

//转速环P参数

unsignedintspd_ki=0;

//转速环I参数

unsignedintid_kp=0,id_ki=0;

//电流PI参数

signedintspd_given=0;

//转速给定

signedintspd_given1=0;

signedintspd_given2=0;

//控制变量

unsignedintcap1=0;

//前次换向标志位

unsignedintcap2=0;

//本次换向标志位

unsignedintintruptcount=0;

//定时器1下溢中断次数

unsignedintspeed_given=1000;

signedintIdc_given2=0;

//算得本次电流给定值

signedintspeed_e1=0;

//前次转速误差

signedintspeed_e2=0;

//本次转速误差

signedintIa_e1=0;

//前次电流误差

signedintIa_e2=0;

//本次电流误差

chart2first=0;

signedintP2=0;

//装比较寄存器值

//转速反馈

charSpd_Data=0;

//滤波计数

intspeed_counter=0;

//速度环计数器

unsignedintcap_a;

//本次捕获单元数据

unsignedintcap_b;

//上次捕获单元数据

longcap_c;

//捕获单元数据差

signedintBLDC_SPD[10]={0,0,0,0,0,0,0,0,0,0};

//转速滤波

signedintspd_fd_q1=0;

//转速反馈临时变量

unsignedintspd_fd_q0=0;

//转速检测值

charcc=0;

//电流反馈

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

//A相电流反馈值

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

//B相电流反馈值

signedintia_fd=0,ib_fd=0;

//电流反馈

signedintTemp_filter=0;

//临时变量

unsignedintt1per=0;

//周期寄存器数值

//临时变量

signedlonglong1_tmp=0;

signedlonglong2_tmp=0;

signedintu16_tmp1=0;

signedintu16_tmp2=0;

//子程序声明

interruptvoidt1uf_int(void);

interruptvoidcap_int(void);

voidAd(void);

voidspeed(void);

//计算速度

voidIa_PI(void);

//电流环调节Ia

voidspeed_PI(void);

//速度环调节

voidbldc(void);

voidCheck_Rxdata(void);

voidSci_Send(signedintsci_delay);

char*Fen_Jie(signedintSend_Temp);

unsignedintSci_Rx_check(unsignedinti_Rx,unsignedint*p_Rx);

signedintDIV_CAL(longsignedintdividend,signedintdivisor);

unsignedintU_DIV_CAL(longunsignedintudividend,unsignedintudivisor);

//主程序开始

voidmain(void)

{

//控制寄存器初始设置

InitSysCtrl();

//初始化系统

DINT;

//关全局中断

IER=0x0000;

IFR=0x0000;

InitPieCtrl();

//初始化PIE中断

InitPieVectTable();

//初始化PIE中断矢量表

InitGpio();

//初始化Gpio输入输出口

InitEv();

//初始化Eva的T和T2

InitAdc_Eva();

//初始化AD

InitData();

EALLOW;

//ThisisneededtowritetoEALLOWprotectedregisters

PieVectTable.T1UFINT=&

t1uf_int;

//T1下溢中断地址

PieVectTable.CAPINT4=&

cap_int;

PieVectTable.CAPINT5=&

PieVectTable.CAPINT6=&

EDIS;

//ThisisneededtodisablewritetoEALLOWprotectedregisters

PieCtrl.PIEIER2.bit.INTx6=1;

//T1下溢中断使能

PieCtrl.PIEIER5.bit.INTx5=1;

PieCtrl.PIEIER5.bit.INTx6=1;

PieCtrl.PIEIER5.bit.INTx7=1;

IER|=M_INT2;

//EnableCPUInterrupt2

IER|=M_INT4;

//EnableCPUInterrupt4

IER|=M_INT5;

//EnableCPUInterrupt5

EvbRegs.EVBIMRC.bit.CAP4INT=1;

EvbRegs.EVBIMRC.bit.CAP5INT=1;

EvbRegs.EVBIMRC.bit.CAP6INT=1;

EvbRegs.CAPCONB.all=0x36FF;

NOP;

EvbRegs.CAPCONB.all=0xB6FF;

EINT;

//使能全局中断INTM

ERTM;

//EnableGlobalrealtimeinterruptDBG

 

//等待中断(中断之外的时间进行LCD的发送和接收)

for(;

;

{

SCI_CTL();

}

}

//串口控制

//*************

//接收数据检测

//************

voidCheck_Rxdata()

switch(Sci_Rx[0])

case'

m'

:

//转速给定和转速在线更新

v'

FlagRegs.bit.Vflag=1;

if(Sci_Rx[1]=='

-'

FlagRegs.bit.Sign1=0;

//转速为负值

spd_given1=Sci_Rx_check(4,Sci_Rx);

else

FlagRegs.bit.Sign1=1;

//转速为正值

spd_given1=Sci_Rx_check(3,Sci_Rx);

if(Sci_Rx[0]=='

FlagRegs.bit.Sign2=FlagRegs.bit.Sign1;

FlagRegs.bit.Sign=FlagRegs.bit.Sign1;

break;

}

s'

//启动

Sci_Tx[0]='

a'

Sci_Tx[1]='

+'

Sci_Tx[2]='

0'

Sci_Tx[3]='

Sci_Tx[4]='

Sci_Tx[5]='

Sci_Tx[6]='

Sci_Tx[7]='

z'

spd_given=spd_given1;

Protect_Data();

Motor_Start();

FlagRegs.bit.Send=1;

T_length=8;

T_pointer=0;

t'

//停止

Motor_Stop();

default:

//*******************

//串口接收/发送判断

//******************

SCI_CTL()

if((SciaTx_Ready()==1)&

&

(FlagRegs.bit.Send==1))//发送数据准备好并且软件使能发送

{

if(FlagRegs.bit.Test==0)//SCI测通状态

SciaRegs.SCITXBUF=Sci_Rx[T_pointer];

T_pointer++;

//发送缓冲器数组指针+1

if(T_pointer==R_length)

{

FlagRegs.bit.Test=1;

FlagRegs.bit.Send=0;

T_pointer=0;

}

}

else//SCI非测通状态

SciaRegs.SCITXBUF=Sci_Tx[T_pointer];

//发送缓冲器数组指针+1

if(T_pointer==T_length)

FlagRegs.bit.Send=0;

if(T_pointer>

=10)

FlagRegs.bit.Send=0;

}

R_pointer=0;

#if!

SCIA_INT

if(SciaRx_Ready()==1)//接收数据准备好

FlagRegs.bit.SendEnd=0;

FlagRegs.bit.Send=0;

Sci_Rx[R_pointer]=SciaRegs.SCIRXBUF.all;

R_pointer++;

if(Sci_Rx[R_pointer-1]=='

R_length=R_pointer-1;

FlagRegs.bit.Send=1;

FlagRegs.bit.SendEnd=1;

if(FlagRegs.bit.Test==1)

Check_Rxdata();

R_pointer=0;

if(R_pointer==10)

R_pointer=0;

}

#endif

}

//****************

//接收数据格式调整

unsignedintSci_Rx_check(unsignedinti_Rx,unsignedint*p_Rx)

unsignedlongdata_Rx;

unsignedint*p_tmp_Rx=p_Rx+i_Rx;

data_Rx=1000*(*p_tmp_Rx)+100*(*(p_tmp_Rx+1))+10*(*(p_tmp_Rx+2))+(*(p_tmp_Rx+3))-53328;

return(data_Rx);

//发送数据格式调整

char*Fen_Jie(signedintSend_Temp)

{

unsignedintTemp;

chars1,s2,s3,s4;

charString_Tmp[6]={0,0,0,0,0,'

\0'

if(Send_Temp<

0)

String_Tmp[0]='

Send_Temp=-Send_Temp;

{

String_Tmp[0]='

s1=((long)Send_Temp*2097)>

>

21;

if(s1>

=10){s1=9;

Temp=Send_Temp-s1*1000;

s2=((long)Temp*5253)>

19;

if(s2>

=10){s2=9;

Temp=Temp-s2*100;

s3=((long)Temp*3277)>

15;

if(s3>

=10){s3=9;

s4=Temp-s3*10;

if(s4>

=10){s4=9;

String_Tmp[1]=s1+48;

//千位

String_Tmp[2]=s2+48;

//百位

String_Tmp[3]=s3+48;

//十位

String_Tmp[4]=s4+48;

//个位

return(String_Tmp);

}

//**************

//数据发送

voidSci_Send(signedintsci_delay)

//串口数据发送

char*p_send=0;

a2++;

if((a2>

=sci_delay)&

(FlagRegs.bit.Send==0)&

(FlagRegs.bit.SendEnd==1))

p_send=Fen_Jie(spd_fd_q0);

Sci_Tx[0]='

Sci_Tx[1]=*p_send;

Sci_Tx[3]=*(p_send+1);

Sci_Tx[4]=*(p_send+2);

Sci_Tx[5]=*(p_send+3);

Sci_Tx[6]=*(p_send+4);

a2=0;

//电机状态控制

//数据处理

Protect_Data()

if(spd_kp<

=0)spd_kp=1;

elseif(spd_kp>

30000)spd_kp=30000;

if(spd_ki<

=0)spd_ki=1;

elseif(spd_ki>

30000)spd_ki=30000;

if(id_kp<

=0)id_kp=1;

elseif(id_kp>

30000)id_kp=30000;

if(id_ki<

=0)id_ki=1;

elseif(id_ki>

30000)id_ki=30000;

EvaRegs.T1PR=7500;

//矢量控制开关频率5K固定

t1per=7500;

EvaRegs.T1CON.all=0X080C;

//连续增减计数

//电机停止

//************

Motor_Stop()

EvaRegs.CMPR1=0;

EvaRegs.CMPR2=0;

EvaRegs.CMPR3=0;

EvaRegs.ACTR.all=0X0FFF;

FlagRegs.bit.Openint=0;

EvaRegs.T1CON.bit.TENABLE=0;

EvbRegs.T3CON.bit.TENABLE=0;

//电机启动

Motor_Start()

EvaRegs.ACTR.all=0X0999;

FlagRegs.bit.Openint=1;

//周期寄存器5khz

EvbRegs.T3PR=0xffff;

//周期寄存器

EvbRegs.T3CON.all=0X170C;

//连续增减计数

EvbRegs.EVBIMRA.all=0X0000;

//T3下溢使能

EvbRegs.EVBIFRA.all=0X0FFFF;

//清中断标志位

GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=0;

//将cap456设置为io口

GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0;

GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=0;

cap2=GpioDataRegs.GPBDAT.all&

0x0700;

//记录cap4-6初始状态

cap2=cap2>

8;

cap2=cap2&

0x0007;

if(FlagRegs.bit.Sign==1)cap2=7-cap2;

elsecap2=cap2;

GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1;

//将cap456设置为CAP口

GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1;

GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=1;

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

当前位置:首页 > 医药卫生 > 基础医学

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

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