2012飞思卡尔哈尔滨工业大学智能车程序.doc

2012飞思卡尔哈尔滨工业大学智能车程序.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2012飞思卡尔哈尔滨工业大学智能车程序

#include includes.h /*位置PID调节*/ #define Ki_p 0 #define Kp_p 9/20 #define Kd_p 20/18 void Va_0(char);//加速 void Va_1(char);//减速 void Va_2(char);//减速 void Va_3(char);//减速 void fun0(void); void fun1 (void); void fun2(void); void fun3(void); void fun4(void); void fun5(void); void fun6(void); void delay2(int x); #define cycle 2 //圈数 void startpointIdentify()//起始识别 /*起始点识别*/ {char RaceS1 = RWS[0]+RWS[9]+RWS[1]+RWS[8]+RWS[2]+RWS[7]; char RaceS2 = RWS[0]+RWS[1]+RWS[2]+RWS[3]+RWS[4]+RWS[5]+RWS[6]+RWS[7]+RWS[8]+RWS[9]; if((RaceS1==6)(!WB))// RaceS1==6保证是正向通过,(!WB) { WB=1; //出发点判断打开 Pulse=0; //开始记判断距离 } if((RaceS2==10)(WB==1)(!WBOff)) //若RaceS2值为10表示通过的事交叉线 { WBOff=1; //WBOff=1表示通过的是十字交叉线; } if((Pulse=5000)(WB==1))//判断距离是5000个码盘脉冲,计数结束后进入最终判断,同时初始化数据以便下一次判断; {if(WBOff==0) ++Start; //Start表示经过出发点的次数; else Start=Start; WBOff=0; WB=0; Pulse=0; // PORTA=Start; }if(Start=cycle+1) { WB1=1; if(Pulse=5000) { WB1=0; Pulse=0; //DstV=0; stop_flag = 0; //delay2(10000); } } } int e,es=0; int ee[10]; int cach[201]; int DstV = 0; char flag_0; char flag_y; char stop_flag = 1; char a_flag; void SystemInit() { flag_0 = -1; CRGInit(); ECTInit();//使能脉冲计数器 ATDInit(); PWMInit(); PWME=0Xaa; //使能PWM输出 DDRA = 0x00; EnableInterrupts; DDRB = 0xff; //PORTB = 0x55; ADvalueInit();// 初始化 } char RWS[10]; //为全局布尔数组 char WBOff=0,WB=0,WB1=0; //为全局布尔数 int Pulse=0; //为型全局变量 char Start=0; //经过起始点次数,为全局变量 void startpointIdentify(); void main(void) { SystemInit(); DstV =108; flag_0 = 0; for(;;) { if(flag_0==2) { biliY(); chushihua();//计算ie cache_replace(); ie=-ie; //反向加到舵机上 cach[0]=(int)(ie*100); //处理完所有数据, ee[0] = cach[0]*Kp_p; e = cach[0]*Kp_p+(cach[0]-cach[7])*Kd_p;// /70*CurrentSpeed; if(e600) e=600; if(e-600) e=-600; ee[3] = cach[0] -cach[2]; if(stop_flag == 1) { aa = PORTA; aa = aa0xf0; switch(aa) { case 0x00:fun0();break;//冲弯道速度比较快 ,且第二圈速度会减速 case 0x20:fun1();break;//冲弯道速度比较快 case 0x30:fun2();break;//匀速 case 0x50:fun3();break;//冲直道 case 0x80:fun4();break;//快速直道, case 0x90:fun5();break;/

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档