DSP无刷直流电动机驱动控制程序(2)

2019-02-21 00:55

case 't': //停止 {

Motor_Stop(); break; }

default: break; } }

//******************* // 串口接收/发送判断 //****************** 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];

T_pointer++; //发送缓冲器数组指针+1 if(T_pointer==T_length) {

FlagRegs.bit.Send = 0; T_pointer=0; }

if(T_pointer>=10) {

T_pointer=0;

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]=='z')

{

R_length=R_pointer-1; FlagRegs.bit.Send= 1; FlagRegs.bit.SendEnd=1;

//**************** //接收数据格式调整 //****************

unsigned int Sci_Rx_check(unsigned int i_Rx,unsigned int *p_Rx) {

unsigned long data_Rx;

unsigned int *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); }

//**************** //发送数据格式调整 //****************

if(FlagRegs.bit.Test==1) {

Check_Rxdata(); R_pointer = 0; } }

if(R_pointer== 10)

{

R_pointer = 0; } }

#endif

}

char *Fen_Jie(signed int Send_Temp) {

unsigned int Temp; char s1,s2,s3,s4;

char String_Tmp[6]={0,0,0,0,0,'\\0'}; if(Send_Temp< 0) {

String_Tmp[0]='-'; Send_Temp=-Send_Temp; } else {

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); }

//************** // 数据发送 //**************

void Sci_Send(signed int sci_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]='a';

Sci_Tx[1]=*p_send;

Sci_Tx[2]='0';

Sci_Tx[3]=*(p_send+1); Sci_Tx[4]=*(p_send+2); Sci_Tx[5]=*(p_send+3); Sci_Tx[6]=*(p_send+4); Sci_Tx[7]='z'; FlagRegs.bit.Send=1; a2=0; } }

//===================================================================== //电机状态控制

//===================================================================== //******************* // 数据处理

//****************** Protect_Data() {

if(spd_kp<=0)spd_kp=1; //转速环P参数 else if(spd_kp>30000) spd_kp=30000;

if(spd_ki<=0)spd_ki=1; //转速环P参数 else if(spd_ki>30000) spd_ki=30000;

if(id_kp<=0)id_kp=1; //转速环P参数 else if(id_kp>30000) id_kp=30000;

if(id_ki<=0)id_ki=1; //转速环P参数 else if(id_ki>30000) id_ki=30000;

EvaRegs.T1PR =7500; //矢量控制开关频率5K固定 t1per=7500;

EvaRegs.T1CON.all = 0X080C; //连续增减计数 InitAdc_Eva();

//************ //电机停止 Motor_Stop() {

EvaRegs.CMPR1=0; EvaRegs.CMPR2=0; EvaRegs.CMPR3=0;

EvaRegs.ACTR.all=0X0FFF; InitData();

FlagRegs.bit.Openint=0;

}

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

EvaRegs.T1CON.bit.TENABLE=0; EvbRegs.T3CON.bit.TENABLE=0; }

//************ //电机启动 //************ Motor_Start() {

EvaRegs.ACTR.all=0X0999; FlagRegs.bit.Openint=1; t1per=7500;

EvaRegs.T1PR =7500; //周期寄存器 5khz EvaRegs.T1CON.all = 0X080C; //连续增减计数 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; else cap2=cap2;

GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1; //将cap456设置为CAP口 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1; GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=1; EvaRegs.T1CON.bit.TENABLE=1; FlagRegs.bit.Vflag=1; }

//===================================================================== //直流无刷电动机驱动双闭环主程序

//===================================================================== //***************** //驱动主程序

//***************** void bldc() {

intruptcount++; speed();

switch((int)cap2)


DSP无刷直流电动机驱动控制程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浅析需量计费与容量计费对企业电费的影响

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: