?? demo.c
字號:
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
#define LCD_DELAY_nUS(A) Delay(((((long double) A * 1000.0L) / (long double)6.666667) - 18.0L) / 14.0L)
void Delay(unsigned long loopCnt);
//'''''''''''''''''''''''''液晶顯示值/'''''''''''''''''''''''''''''''''''''
extern unsigned char number[10];
extern unsigned char a,b,c,d,e, biao_zhi;
unsigned char f;
int NowSpd=0;
long Place_now_display=0;
//'''''''''''''''''''''''''''end'''''''''''''''''''''''''''''''//
//::::::::::::::::::::::::電機初始化變量定義:::::::::::::::::::::::::::::::::
char motor_OK=1, shan_qu=0;
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/*::::::::::::::::::::::::::速度變量值定義:::::::::::::::::::::::::::::::::::::::::::*/
int temp=0, temp1=0, temp2=0;
long SatErr_speed=0,
OutPreSat_speed=0; //速度變量值定義
long speed_now=0, Up_speed=0, speed_error=0, Ui_speed=0;
long speed_set=0;
//:::::::::::::::::::::::::::位置環變量定義:::::::::::::::::::::::::::
long PlaceSet=0, PlaceError=0,
Place_now=0, Now_P=0,//圈數
OutPreSat_Place=0; //位置變量值定義
unsigned char PlaceSetBit=0; //位置設定標志位
//--------------------------------------------------------------------
//:::::::::::::::::::::::::空間矢量變量定義:::::::::::::::::::::::::::::::::::::::::
int extent_temp=0, extent_temp1=0, extent_temp2=0;//位置變量值定義
unsigned int extent[14]={0x3999, 0x2999, 0x6999, 0x4999, 0x5999, 0x1999, 0x3999, 0x2999, 0x6999, 0x4999, 0x5999, 0x1999, 0x3999, 0x2999 }; //區域數組定義
int extent_i=0, extent_D=0, extent_Q=0, extent_D_1=0; //扇區變量,extent_i, extent_D, extent_Q(extent_Q比extent_D超前90度
//-----------------------------------
extern const int sin_theta[1000];//外部SIN表
extern const int cos_theta[1000];//外部cos表
//cos_theta[theta]為Q15格式, ID, IQ為Q7格式1-128, Id,Iq為LONG型
int t1=0, t2=0, CMPR_temp=1250, theta=0, pwm_temp=0;// turn=0;
long Id=0, Iq=0, ID=0, IQ=0, Ualfa=0, Ubeta=0, x=0, y=0, z=0, temp_volue=0;
//===========================電流環變量定義=========================
int AD2_temp=0,Ki_Q_temp=0, Ki_D_temp=0, pwm_x=0,theta_add_60=0;
long Iu=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;
//------------------------------------------------------------------
// long adc_x0=0, adc_x1=0, adc_restul1=0, adc_restul0=0,adc_i=0;
//===========================測試變量==============================
// unsigned int TimeClash=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;
unsigned int TimeClash=0;
extern unsigned int IsrTest;
//-------------------------------------------------------------------
//==========================串口程式變量定義==========================
int ReceiveTemp = 0, SciCommand_i=0, SciCommand_j=0, SetBit=0;
int SpeedSetTemp = 0, PlaceEnable=1, SpeedSetAD=0;
long PlaceSetTemp=0, SciCommand[14]={0};
//--------------------------------------------------------------------
////////////////外部中斷初始化///////////////////////
void init_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初始化/////////////////////
void init_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////////////////////
void Init_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; //30MHZ PWM
EvaRegs.CMPR1 = 0; //測試用
EvaRegs.CMPR2 = 0; //測試用
EvaRegs.COMCONA.all |= 0X9200; //使能比較操作, 使能SVPWM模式, T0下溢重載, PWM比較輸出使能
EvaRegs.ACTRA.all = 0X0999; //SV正轉, PWM 1,3,5低有效 & pWM 2,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初始化//////////////////////////////////
void InitSci(void)
{
EALLOW;
//Send
SciaRegs.SCICTL1.bit.SWRESET = 1;
SciaRegs.SCICCR.bit.SCICHAR = 7; //取八位數據
SciaRegs.SCICTL1.bit.TXENA = 1; //open send
//Receive
SciaRegs.SCICTL1.bit.RXENA = 1; //open receive
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;
}
//-----------------------------------------------------------
///////////////////電機初始化函數(位置確定)////////////////////////////
void motor_init(void)
{
switch(GpioDataRegs.GPADAT.all & 0xE000)
{
case 0xA000: shan_qu=0; break;
case 0x2000: shan_qu=1; break;
case 0x6000: shan_qu=2; break;
case 0x4000: shan_qu=3; break;
case 0xC000: shan_qu=4; break;
case 0x8000: shan_qu=5; break;
default: motor_OK = 0; break;
}
extent_D = 833 * shan_qu + 416 ;
}
//////////////////中蝦
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -