智能车电磁组完整程序.docx
- 文档编号:28494284
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:28
- 大小:20.32KB
智能车电磁组完整程序.docx
《智能车电磁组完整程序.docx》由会员分享,可在线阅读,更多相关《智能车电磁组完整程序.docx(28页珍藏版)》请在冰豆网上搜索。
智能车电磁组完整程序
#include
#include"derivative.h"/*derivative-specificdefinitions*/
intleft1=0;
intleft2=0;
intright1=0;
intright2=0;
intAR_LEFT=0;//left2-right2
intAR_RIGHT=0;
intCR=0;//左边相加减右边相加
intpreCR=0;
intppreCR=0;
intmkp=0;
intmki=0;
intmkd=0;
intideal_speed=0;//设定速度
intspeed=0;
ints_ideal0[6]={75,80,42,42,42,42};//普通道、长直道、普通到弯、长直道到弯、弯内、偏离黑线
ints_ideal1[6]={70,75,42,42,42,42};
ints_ideal2[6]={62,70,42,40,41,40};
ints_ideal3[6]={54,66,42,40,41,40};
inttable_mkp0[6]={30,30,30,30,30,30};//ni16.31,shun15.16
inttable_mkp1[6]={25,25,25,25,25,25};
inttable_mkp2[6]={5,4,4,20,20,20};
inttable_mkp3[6]={4,4,4,10,8,9};//稳定速度
inttable_mki0[6]={0,0,20,20,20,20};
inttable_mki1[6]={0,0,20,20,20,20};
inttable_mki2[6]={0,0,0,10,10,20};
inttable_mki3[6]={0,0,0,0,0,0};
inttable_mkd0[6]={0,0,0,0,0,0};
inttable_mkd1[6]={0,0,0,0,0,0};
inttable_mkd2[6]={0};
inttable_mkd3[6]={0,0,0,0,0,0};
ints_table[6];
intb_mkp[6]=0;
intb_mki[6]=0;
intb_mkd[6]=0;
inttable_rkp0[7]={5,3,2,550,550,550,8};//普通道中间、长直道低速、长直道高速、普到弯、直到弯、弯、普通道两边
inttable_rkp1[7]={7,5,4,450,450,400,9};
inttable_rkp2[7]={6,3,2,150,150,150,9};
inttable_rkp3[7]={5,3,2,150,150,150,9};
inttable_rkd0[7]={0,0,0,400,400,400,100};
inttable_rkd1[7]={0,0,0,500,500,500,100};
inttable_rkd2[7]={0,0,0,200,300,400,100};
inttable_rkd3[7]={0,0,0,200,300,400,100};
intb_rkp[7]=0;
intb_rkd[7]=0;
intrkp=0;
intrkd=0;
intf=0;//pwmDTY要加的值
intpref=0;
intPulse_count=0;//脉冲数
intganhuang=0;
unsignedintting=0;
inti=0;
intFlag_Chute=0;//道路标志
intGeneralCtn=0;
intCurveCtn=0;
intChuteCtn=0;
intWANCtn=0;
intFlag_gaosu=0;
unsignedcharFlag_Pwm;//知道转弯道标志
intflag=0;
/***********************
//PLL超频到40MHZ
****************/
voidPLL_Init(void){
CLKSEL=0X00;
PLLCTL_PLLON=1;
REFDV=0X80|0X01;
SYNR=0X40|0X04;
POSTDIV=0X00;
asmnop;
asmnop;
while(!
(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;
}
//延时函数cnt*1ms;
voiddelay(unsignedintcnt){
unsignedintloop_i,loop_j;
for(loop_i=0;loop_i loop_j=0x1300; while(loop_j--); } } /******************************* ///////////////\\计数程序//\\\\\\\\\\\\\\\ *********************************/ voidPACBInit()//PT7获得脉冲值 { PACTL=0X40;//PT7PIN,PACN3216BIT,Risingedge,NOTINTERRUPT TCTL3=0x40;//c-输入捕捉7上升沿有效, TIE_C7I=0;//通道7禁止中断 TIOS_IOS7=0;//每一位对应通道的: 0输入捕捉,1输出比较 PACNT=0; } voidRTI_init(void)//RTI产生10ms的中断定时 { asmsei;//关闭中断 RTICTL=0xC7;//中断周期设置10ms中断一次(或者让RTICTL=0x59<为10.24ms定时>) CRGINT_RTIE=1;//实时中断有效,一旦RTIF=1则发出中断请求 asmcli;//开放中断 } //舵机初始化 voidPWM_rudder_init(void){ PWME_PWME3=0; PWME_PWME2=0; PWMPRCLK_PCKB=2;//CLOCKB=BUS/4=10MHz PWMSCLB=2;//CLOCCSB=10/(2*2)=2.5MHz PWMCTL_CON23=1;//组合PWM23 PWMCLK_PCLK3=1;//PWM3使用SB PWMPER23=50000;//写PWM23的周期寄存器,周期是20ms PWMPOL_PPOL3=1;//极性为正 PWMCAE_CAE3=0;//左对齐 PWME_PWME3=1;//使能PWM23 } //电机初始化 voidPWM_init_motor(void){//电机初始化 PWME_PWME0=0; PWME_PWME1=0; PWMPRCLK_PCKA=2;//ClockA=40M/4=10M PWMPOL_PPOL1=1;//通道1正极性输出 PWMCLK_PCLK1=0;//通道1选择A时钟 PWMCAE_CAE1=0;//左对齐 PWMCTL_CON01=1; PWMPER01=1000;//输出频率=10M/1000=10Khz PWMDTY01=0;//通道1占空比为100/250 PWME_PWME1=1;//通道1使能 PWME_PWME4=0; PWME_PWME5=0; PWMPRCLK_PCKA=1;//ClockA=40M/2=20M PWMPOL_PPOL5=1;//通道5正极性输出 PWMCLK_PCLK5=1;//通道5选择SA时钟 PWMSCLA=1;//ClockSB=20M/(2*1)=10M PWMCAE_CAE5=0;//左对齐 PWMCTL_CON45=1; PWMPER45=1000;//输出频率=10M/1000=10Khz PWMDTY45=0;//初始通占空比0 PWME_PWME5=1;//通道5使能 } voidAD_Init(void) { ATD0CTL1=0x20;//选择AD通道为外部触发,10位精度,采样前不放电 ATD0CTL2=0x40;//标志位自动清零,禁止外部触发,禁止中断 ATD0CTL3=0xA0;//右对齐无符号,每次转换4个序列,NoFIFO,Freeze模式下继续转 ATD0CTL4=0x09;//采样时间为4个AD时钟周期,PRS=9,ATDClock=40/(2*(9+1))2MHz ATD0CTL5=0x30;//特殊通道禁止,连续转换4个通道,多通道转换,起始通道为0转换 ATD0DIEN=0x00;//禁止数字输入 } /************************ /////////检测起跑线\\\\\\\\\\\ *****************/ voidCheckstart(){ asmsei; TIOS_IOS0=0;//输入捕捉 TSCR1=0X80; TSCR2=0X07; TCTL4=0X01;//上升沿捕捉 TIE=0X01;//允许硬件中断 asmcli; } //拨码开关 voidboman(){ if(PORTA_PA0==1){ b_rkp[0]=table_rkp0[0]; b_rkp[1]=table_rkp0[1]; b_rkp[2]=table_rkp0[2]; b_rkp[3]=table_rkp0[3]; b_rkp[4]=table_rkp0[4]; b_rkp[5]=table_rkp0[5]; b_rkp[6]=table_rkp0[6]; b_rkd[0]=table_rkd0[0]; b_rkd[1]=table_rkd0[1]; b_rkd[2]=table_rkd0[2]; b_rkd[3]=table_rkd0[3]; b_rkd[4]=table_rkd0[4]; b_rkd[5]=table_rkd0[5]; b_rkd[6]=table_rkd0[6]; b_mkp[0]=table_mkp0[0]; b_mkp[1]=table_mkp0[1]; b_mkp[2]=table_mkp0[2]; b_mkp[3]=table_mkp0[3]; b_mkp[4]=table_mkp0[4]; b_mkp[5]=table_mkp0[5]; b_mki[0]=table_mki0[0]; b_mki[1]=table_mki0[1]; b_mki[2]=table_mki0[2]; b_mki[3]=table_mki0[3]; b_mki[4]=table_mki0[4]; b_mki[5]=table_mki0[5]; b_mkd[0]=table_mkd0[0]; b_mkd[1]=table_mkd0[1]; b_mkd[2]=table_mkd0[2]; b_mkd[3]=table_mkd0[3]; b_mkd[4]=table_mkd0[4]; b_mkd[5]=table_mkd0[5]; s_table[0]=s_ideal0[0]; s_table[1]=s_ideal0[1]; s_table[2]=s_ideal0[2]; s_table[3]=s_ideal0[3]; s_table[4]=s_ideal0[4]; s_table[5]=s_ideal0[5]; } if(PORTA_PA1==1){ b_rkp[0]=table_rkp1[0]; b_rkp[1]=table_rkp1[1]; b_rkp[2]=table_rkp1[2]; b_rkp[3]=table_rkp1[3]; b_rkp[4]=table_rkp1[4]; b_rkp[5]=table_rkp1[5]; b_rkp[6]=table_rkp1[6]; b_rkd[0]=table_rkd1[0]; b_rkd[1]=table_rkd1[1]; b_rkd[2]=table_rkd1[2]; b_rkd[3]=table_rkd1[3]; b_rkd[4]=table_rkd1[4]; b_rkd[5]=table_rkd1[5]; b_rkd[6]=table_rkd1[6]; b_mkp[0]=table_mkp1[0]; b_mkp[1]=table_mkp1[1]; b_mkp[2]=table_mkp1[2]; b_mkp[3]=table_mkp1[3]; b_mkp[4]=table_mkp1[4]; b_mkp[5]=table_mkp1[5]; b_mki[0]=table_mki1[0]; b_mki[1]=table_mki1[1]; b_mki[2]=table_mki1[2]; b_mki[3]=table_mki1[3]; b_mki[4]=table_mki1[4]; b_mki[5]=table_mki1[5]; b_mkd[0]=table_mkd1[0]; b_mkd[1]=table_mkd1[1]; b_mkd[2]=table_mkd1[2]; b_mkd[3]=table_mkd1[3]; b_mkd[4]=table_mkd1[4]; b_mkd[5]=table_mkd1[5]; s_table[0]=s_ideal1[0]; s_table[1]=s_ideal1[1]; s_table[2]=s_ideal1[2]; s_table[3]=s_ideal1[3]; s_table[4]=s_ideal1[4]; s_table[5]=s_ideal1[5]; } if(PORTA_PA2==1){ b_rkp[0]=table_rkp2[0]; b_rkp[1]=table_rkp2[1]; b_rkp[2]=table_rkp2[2]; b_rkp[3]=table_rkp2[3]; b_rkp[4]=table_rkp2[4]; b_rkp[5]=table_rkp2[5]; b_rkp[6]=table_rkp2[6]; b_rkd[0]=table_rkd2[0]; b_rkd[1]=table_rkd2[1]; b_rkd[2]=table_rkd2[2]; b_rkd[3]=table_rkd2[3]; b_rkd[4]=table_rkd2[4]; b_rkd[5]=table_rkd2[5]; b_rkd[6]=table_rkd2[6]; b_mkp[0]=table_mkp2[0]; b_mkp[1]=table_mkp2[1]; b_mkp[2]=table_mkp2[2]; b_mkp[3]=table_mkp2[3]; b_mkp[4]=table_mkp2[4]; b_mkp[5]=table_mkp2[5]; b_mki[0]=table_mki2[0]; b_mki[1]=table_mki2[1]; b_mki[2]=table_mki2[2]; b_mki[3]=table_mki2[3]; b_mki[4]=table_mki2[4]; b_mki[5]=table_mki2[5]; b_mkd[0]=table_mkd2[0]; b_mkd[1]=table_mkd2[1]; b_mkd[2]=table_mkd2[2]; b_mkd[3]=table_mkd2[3]; b_mkd[4]=table_mkd2[4]; b_mkd[5]=table_mkd2[5]; s_table[0]=s_ideal2[0]; s_table[1]=s_ideal2[1]; s_table[2]=s_ideal2[2]; s_table[3]=s_ideal2[3]; s_table[4]=s_ideal2[4]; s_table[5]=s_ideal2[5]; } if(PORTA_PA3==1){ b_rkp[0]=table_rkp3[0]; b_rkp[1]=table_rkp3[1]; b_rkp[2]=table_rkp3[2]; b_rkp[3]=table_rkp3[3]; b_rkp[4]=table_rkp3[4]; b_rkp[5]=table_rkp3[5]; b_rkp[6]=table_rkp3[6]; b_rkd[0]=table_rkd3[0]; b_rkd[1]=table_rkd3[1]; b_rkd[2]=table_rkd3[2]; b_rkd[3]=table_rkd3[3]; b_rkd[4]=table_rkd3[4]; b_rkd[5]=table_rkd3[5]; b_rkd[6]=table_rkd3[6]; b_mkp[0]=table_mkp3[0]; b_mkp[1]=table_mkp3[1]; b_mkp[2]=table_mkp3[2]; b_mkp[3]=table_mkp3[3]; b_mkp[4]=table_mkp3[4]; b_mkp[5]=table_mkp3[5]; b_mki[0]=table_mki3[0]; b_mki[1]=table_mki3[1]; b_mki[2]=table_mki3[2]; b_mki[3]=table_mki3[3]; b_mki[4]=table_mki3[4]; b_mki[5]=table_mki3[5]; b_mkd[0]=table_mkd3[0]; b_mkd[1]=table_mkd3[1]; b_mkd[2]=table_mkd3[2]; b_mkd[3]=table_mkd3[3]; b_mkd[4]=table_mkd3[4]; b_mkd[5]=table_mkd3[5]; s_table[0]=s_ideal3[0]; s_table[1]=s_ideal3[1]; s_table[2]=s_ideal3[2]; s_table[3]=s_ideal3[3]; s_table[4]=s_ideal3[4]; s_table[5]=s_ideal3[5]; } } /************************** ////////赛道特征识别/////// ****************************/ voidRoadjudge(void){ if(Flag_Chute==0)//普通弯道情况0 {GeneralCtn=0; CurveCtn=0; if(CR>=-23&&CR<=40)//此时对应一个车轮的内侧压线@@@@@@@@@@@@@@@@@@@@@@@@@@@@ { ChuteCtn++; WANCtn=0; } if(CR<-23||CR>40){//@@@@@@@@@@@@@@@@@@@@@@@@@@ if(CR<-85||CR>90){//对应车轮的外侧压线@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ChuteCtn=0; WANCtn++; } else{ ChuteCtn=0; WANCtn=0; } } if(ChuteCtn>10000)//300 { Flag_Chute=1; } if(WANCtn<-10000){ Flag_Chute=2; } } if(Flag_Chute==1)//长直道情况1 { ChuteCtn=0; GeneralCtn=0; WANCtn=0; if(CR>40)CurveCtn++;//60@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if(CR<-23)CurveCtn--;//-60@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if(CurveCtn>1||CurveCtn<-1) { if(Flag_gaosu==1)//高速时转入大弯道情况 { Flag_Chute=2; } if(Flag_gaosu==0) Flag_Chute=0;//低速时转入普通弯道情况 } } if(Flag_Chute==2)//大弯道情况2 { ChuteCtn=0; CurveCtn=0; WANCtn=0;//@@@@@@@@@@@@@@@@@@@@@@@ if(CR>-23&&CR<35)GeneralCtn++; elseGeneralCtn=0; if(GeneralCtn>1300)Flag_Chute=0; //if(GeneralCtn>130)Flag_Ct=1; //elseFlag_Ct=0; //if(k_abs(Turn_C-Turn<54) //{ //Flag_Zhj=1; //} //else //{ //Flag_Zhj=0; //} //if(Flag_Pwm==1&&Flag_Ct==1)Flag_Chute=1; } } /****************************** \\\\\\\\\\\\\\\\\\\\//舵机控制\\\\\\\\\\\\\\\\\ *********************************/ voidrudder_ctrl(void){ if(Flag_Chute==0)//普通道 { Flag_Pwm=0; if(CR<40&&CR>-23){ rkp=b_rkp[0]; rkd=b_rkd[0]; } else{ rkp=b_rkp[6]; rkd=b_rkp[6]; } } elseif(Flag_Chute==1)//长直道 { Flag_Pwm=1; if(Fl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 电磁 完整 程序