dsp电机代码.docx

上传人:b****5 文档编号:8043507 上传时间:2023-01-28 格式:DOCX 页数:28 大小:23.54KB
下载 相关 举报
dsp电机代码.docx_第1页
第1页 / 共28页
dsp电机代码.docx_第2页
第2页 / 共28页
dsp电机代码.docx_第3页
第3页 / 共28页
dsp电机代码.docx_第4页
第4页 / 共28页
dsp电机代码.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

dsp电机代码.docx

《dsp电机代码.docx》由会员分享,可在线阅读,更多相关《dsp电机代码.docx(28页珍藏版)》请在冰豆网上搜索。

dsp电机代码.docx

dsp电机代码

#include"DSP281x_Device.h"

#include"DSP281x_Examples.h"

#defineLCD_DELAY_nUS(A)Delay(((((longdouble)A*1000.0L)/(longdouble)6.666667)-18.0L)/14.0L)

voidDelay(unsignedlongloopCnt);

 

//'''''''''''''''''''''''''液晶显示值/'''''''''''''''''''''''''''''''''''''

externunsignedcharnumber[10];

externunsignedchara,b,c,d,e,biao_zhi;

unsignedcharf;

intNowSpd=0;

longPlace_now_display=0;

//'''''''''''''''''''''''''''end'''''''''''''''''''''''''''''''//

//:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

电机初始化变量定义:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

charmotor_OK=1,shan_qu=0;

//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

/*:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

速度变量值定义:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

*/

inttemp=0,temp1=0,temp2=0;

longSatErr_speed=0,

OutPreSat_speed=0;//速度变量值定义

longspeed_now=0,Up_speed=0,speed_error=0,Ui_speed=0;

longspeed_set=0;

 

//:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

位置环变量定义:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

longPlaceSet=0,PlaceError=0,

Place_now=0,Now_P=0,//圈数

OutPreSat_Place=0;//位置变量值定义

unsignedcharPlaceSetBit=0;//位置设定标志位

//--------------------------------------------------------------------

//:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

空间矢量变量定义:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

intextent_temp=0,extent_temp1=0,extent_temp2=0;//位置变量值定义

unsignedintextent[14]={0x3999,0x2999,0x6999,0x4999,0x5999,0x1999,0x3999,0x2999,0x6999,0x4999,0x5999,0x1999,0x3999,0x2999};//区域数组定义

intextent_i=0,extent_D=0,extent_Q=0,extent_D_1=0;//扇区变量,extent_i,extent_D,extent_Q(extent_Q比extent_D超前90度

//-----------------------------------

externconstintsin_theta[1000];//外部SIN表

externconstintcos_theta[1000];//外部cos表

//cos_theta[theta]为Q15格式,ID,IQ为Q7格式1-128,Id,Iq为LONG型

intt1=0,t2=0,CMPR_temp=1250,theta=0,pwm_temp=0;//turn=0;

longId=0,Iq=0,ID=0,IQ=0,Ualfa=0,Ubeta=0,x=0,y=0,z=0,temp_volue=0;

//===========================电流环变量定义=========================

intAD2_temp=0,Ki_Q_temp=0,Ki_D_temp=0,pwm_x=0,theta_add_60=0;

longIu=0,Iv=0,I_d=0,I_q=0,I_ref_D=0,I_ref_Q=0,I_er_Q=0,

I_er_D=0,I_order_Q=0,

OutPreSat_IQ=0,SatErr_IQ=0,Ui_IQ=0,Up_IQ=0,

OutPreSat_ID=0,SatErr_ID=0,Ui_ID=0,Up_ID=0;

//------------------------------------------------------------------

//longadc_x0=0,adc_x1=0,adc_restul1=0,adc_restul0=0,adc_i=0;

//===========================测试变量==============================

//unsignedintTimeClash=0,timer2_x=0,timer2_x1=0,timer1_test[1000]={0},

//timer2_test[1000]={0},timer3_test[500]={0},//timer4_test[500]={0},

//test_i=0,ICTs=0;

unsignedintTimeClash=0;

externunsignedintIsrTest;

//-------------------------------------------------------------------

//==========================串口程式变量定义==========================

intReceiveTemp=0,SciCommand_i=0,SciCommand_j=0,SetBit=0;

intSpeedSetTemp=0,PlaceEnable=1,SpeedSetAD=0;

longPlaceSetTemp=0,SciCommand[14]={0};

//--------------------------------------------------------------------

////////////////外部中断初始化///////////////////////

voidinit_Xint1(void)

{

EALLOW;

PieCtrlRegs.PIEIER1.bit.INTx4=1;//中断允许

PieCtrlRegs.PIEIFR1.bit.INTx4=0;//清除中断标志

PieCtrlRegs.PIEACK.bit.ACK1=1;

XIntruptRegs.XINT1CR.bit.POLARITY=1;//上升沿触发

XIntruptRegs.XINT1CR.bit.ENABLE=1;

EDIS;

EINT;

}

 

////////////////ADC初始化/////////////////////

voidinit_ADC(void)

{

//AdcRegs.ADCTRL1.bit.RESET=1;

//AdcRegs.ADCTRL1.bit.RESET=0;

AdcRegs.ADCTRL3.bit.ADCPWDN=1;

LCD_DELAY_nUS(2000);

AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;

LCD_DELAY_nUS(2000);

AdcRegs.ADCTRL1.bit.CONT_RUN=1;//连续运行;

AdcRegs.ADCTRL1.bit.CPS=0;

AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;

AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;

AdcRegs.ADCTRL3.bit.ADCCLKPS=3;//25MHZ

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=2;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;

AdcRegs.ADCCHSELSEQ1.bit.CONV01=1;

AdcRegs.ADCCHSELSEQ1.bit.CONV02=2;

}

///////////////初始化事件管理器EVA////////////////////

voidInit_Evx(void)

{

//=======定时器3定时中断初始化======================

EALLOW;

EvbRegs.T3PR=9375;//一毫秒

EvbRegs.T3CON.all=0x1340;//8分频

PieCtrlRegs.PIEIER4.bit.INTx4=1;//定时器3周期中断允许

PieCtrlRegs.PIEIFR4.bit.INTx4=0;//清除中断标志位

PieCtrlRegs.PIEACK.bit.ACK4=1;

EvbRegs.EVBIMRA.bit.T3PINT=1;

EvbRegs.EVBIFRA.bit.T3PINT=1;

EDIS;

//-------------------------------------------

//========定时器1下溢中断&(svpwm)初始化====================

EALLOW;

EvaRegs.T1CON.all=0x0842;//定时器1,连续增减,一分频,使能,比较使能,立即重载

EvaRegs.T1PR=1250;//30MHZPWM

EvaRegs.CMPR1=0;//测试用

EvaRegs.CMPR2=0;//测试用

EvaRegs.COMCONA.all|=0X9200;//使能比较操作,使能SVPWM模式,T0下溢重载,PWM比较输出使能

EvaRegs.ACTRA.all=0X0999;//SV正转,PWM1,3,5低有效&pWM2,4,6高有效;

//EvaRegs.EXTCONA.bit.INDCOE=1;//独立输出比较使能

//EvaRegs.GPTCONA.all|=0x0052;

EvaRegs.T1CNT=0;

EvaRegs.EVAIMRA.bit.T1UFINT=1;//下溢中断允许

EvaRegs.EVAIFRA.bit.T1UFINT=1;//清除下溢中断标志位

PieCtrlRegs.PIEIER2.bit.INTx6=1;//下溢中断向量允许

PieCtrlRegs.PIEIFR2.bit.INTx6=0;//清除下溢中断标志

PieCtrlRegs.PIEACK.bit.ACK2=1;

/////////////////QEP初始化////////////////

EvaRegs.T2CON.all=0x1870;

EvaRegs.T2CNT=0x0000;

EvaRegs.T2PR=0xffff;

//------------------------------------------

 

/*//////////////EVB捕获功能初始化/////////

EvbRegs.CAPCONB.bit.CAP45EN=1;//使能捕捉单元4和5

EvbRegs.CAPCONB.bit.CAP45TSEL=3;//44和5选择定时器3

EvbRegs.CAPCONB.bit.CAP4EDGE=3;//单元4上升和下降沿触发

EvbRegs.CAPCONB.bit.CAP5EDGE=3;//单元5上升和下降沿触发

 

EvbRegs.EVBIFRC.bit.CAP4INT=1;//复位捕捉4标志位

EvbRegs.EVBIFRC.bit.CAP5INT=1;//复位捕捉5标志位

EvbRegs.EVBIMRC.bit.CAP4INT=1;//允许捕捉中断4

EvbRegs.EVBIMRC.bit.CAP5INT=1;//允许捕捉中断5

PieCtrlRegs.PIEIER5.bit.INTx5=1;//允许捕捉中断4向量

PieCtrlRegs.PIEIER5.bit.INTx6=1;//允许捕捉中断5向量

PieCtrlRegs.PIEIFR5.bit.INTx5=0;//清除捕捉中断4标志位

PieCtrlRegs.PIEIFR5.bit.INTx6=0;//清除捕捉中断5标志位

PieCtrlRegs.PIEACK.bit.ACK5=1;*/

//------------------------------------------

EDIS;

}

///////////////////SCI初始化//////////////////////////////////

voidInitSci(void)

{

EALLOW;

//Send

SciaRegs.SCICTL1.bit.SWRESET=1;

SciaRegs.SCICCR.bit.SCICHAR=7;//取八位数据

SciaRegs.SCICTL1.bit.TXENA=1;//opensend

//Receive

SciaRegs.SCICTL1.bit.RXENA=1;//openreceive

SciaRegs.SCICTL2.bit.RXBKINTENA=1;//允许接收中断

SciaRegs.SCIHBAUD=0x01;

SciaRegs.SCILBAUD=0xE7;//9600

PieCtrlRegs.PIEIER9.bit.INTx1=1;//允许接收中断

PieCtrlRegs.PIEIFR9.bit.INTx1=0;

PieCtrlRegs.PIEACK.bit.ACK9=1;

///////////////功率保护中断初始化////////////////

EvaRegs.EVAIMRA.bit.PDPINTA=1;//PDPINTA中断允许

EvaRegs.EVAIFRA.bit.PDPINTA=1;//PDPINTA中断标志清零

PieCtrlRegs.PIEIER1.bit.INTx1=1;//PDPINTA中断允许

PieCtrlRegs.PIEIFR1.bit.INTx1=0;

PieCtrlRegs.PIEACK.bit.ACK1=1;//

EDIS;

}

//-----------------------------------------------------------

///////////////////电机初始化函数(位置确定)////////////////////////////

voidmotor_init(void)

{

switch(GpioDataRegs.GPADAT.all&0xE000)

{

case0xA000:

shan_qu=0;break;

case0x2000:

shan_qu=1;break;

case0x6000:

shan_qu=2;break;

case0x4000:

shan_qu=3;break;

case0xC000:

shan_qu=4;break;

case0x8000:

shan_qu=5;break;

default:

motor_OK=0;break;

}

extent_D=833*shan_qu+416;

}

//////////////////中虾?

//////////////////////////

interruptvoidMY_XINT1_ISR(void);//T1捕获中断

interruptvoidMY_T3PINT_ISR(void);

interruptvoidMY_T1UFINT_ISR(void);

interruptvoidMY_SCI_ISR(void);

interruptvoidMY_PDPINDA_ISR(void);

//---------------------------------------------------------

voidSciSendChar(unsignedcharSciSendTemp);

voidSciSendString(unsignedchar*x);

 

voidmain(void)

{

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

InitSysCtrl();//初始化系统控制寄存器,PLL,看门狗...

InitGpio();//初始化GPIO工作模式

InitPeripheralClocks();//初始化外设时钟

InitPieCtrl();//初始化PIE寄存器

InitPieVectTable();//初始化PIE中断向量表

motor_init();//电机初始化

if(motor_OK==1)//如果电机工作正常才允许使用

{

init_Xint1();//初始化外部中断1

init_ADC();//初始化ADC

Init_Evx();//初始化事件管理A

}

Init_LCD();//液晶初始化两次

Init_LCD();

InitSci();

EALLOW;

PieVectTable.XINT1=&MY_XINT1_ISR;//外部中断XINT1向量地址

PieVectTable.T3PINT=&MY_T3PINT_ISR;//TIMER3比较中断

PieVectTable.T1UFINT=&MY_T1UFINT_ISR;//time1下溢中断

PieVectTable.RXAINT=&MY_SCI_ISR;//SciInterrupt

PieVectTable.PDPINTA=&MY_PDPINDA_ISR;//PDPINDA

EDIS;

IER=0x0000;

IER=0x010b;//xint1tiufintt3pintrxaint(int1int2int4int9)

IFR=0x0000;

EINT;//开放全局中断

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

while

(1)

{

if(motor_OK==1)

{

display_a_string(0,0,"NowSpd=");

display_a_string(12,0,"r/m");

if(speed_now>=0)

{

NowSpd=speed_now;

display_a_char(7,0,'+');

}

else

{

NowSpd=-speed_now;

display_a_char(7,0,'-');

}

a=NowSpd/1000;

b=NowSpd%1000/100;

c=NowSpd%100/10;

d=NowSpd%10;

display_a_char(8,0,number[a]);

display_a_char(9,0,number[b]);

display_a_char(10,0,number[c]);

display_a_char(11,0,number[d]);

display_a_string(0,1,"Now_P=");

display_a_string(13,1,"r");

if(Now_P>=0)

{

Place_now_display=Now_P;

display_a_char(6,1,'+');

}

else

{

Place_now_display=-Now_P;

display_a_char(6,1,'-');

}

f=Place_now_display/100000;

e=Place_now_display%100000/10000;

a=Place_now_display%10000/1000;

b=Place_now_display%1000/100;

c=Place_now_display%100/10;

d=Place_now_display%10;

display_a_char(7,1,number[f]);

display_a_char(8,1,number[e]);

display_a_char(9,1,number[a]);

display_a_char(10,1,number[b]);

display_a_char(11,1,number[c]);

display_a_char(12,1,number[d]);

if(SetBit==0)//清除位置信号数组

{

for(SciCommand_j=0;SciCommand_j<14;SciCommand_j++)

{SciCommand[SciCommand_j]=0;}

}

//////////////////返回位置完成信息///////////////////////////////////

if((PlaceError<=2)&&(PlaceError>=-2))//当脉冲数相差+-1时,速度为0

{

if(PlaceSetBit==1)

{

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1