xx“飞思卡尔”杯全国大学生智能车竞赛技术报告芜湖信息技术职业学院内容摘要:

可以直接点击【确定】按钮确认即可,后续操作和之前描述一致。 待程序下载完毕后,点击图: 【 Start】按钮即可进行在线调试了,也可以进行单步调试、断点调试。 第五届全国大学生智能汽车邀请赛技术报告 14 图 【 start】程序开始运行 我们还可以联机调试传感器 先点击【 Start】按钮,找到【 Data:1】对话框。 点击菜单栏中的【 Data】标签,选择【 Mode】选择【 Periodical„ 】就可以联机调试了。 如图: 图 第五章、智能车控制软件设计说明 15 第五章、智能车控制软件设计说明 软件控制分三个模块,舵机控制、电机控制、小车档位选择。 如图 示。 是否否 是 是否传 感 器 数 据判 断 数 据的 有 效 性权 值 计 算偏 移 量 计 算舵 机 偏 转 角 度编 码 器 脉 冲脉 冲 计 数电 机 调 速达 到 预 定 速 度丢 弃数 据判 断 选 择 的 档 位存 储 器选 择 不 同 的档 位设 置 相 应数 据 8 位 L E D 显 示 传 感 器 状 态 图 软件控制流程图 我们传感器设计最终采用 8个激光传感器,间距为 30mm,所用端口为 A口 0~7,程序中对 A口初始化为输入,原程序如下: //=========AB口初始化 ============================// voidPORT_init() { DDRA=0X00。 } 程序中把 A口的值赋值给整型变量 temp,通过读取变量的值可以判断传感器的状态 ,原程序如下: 第五届全国大学生智能汽车邀请赛技术报告 16 voidsensor() { temp=PORTA。 } 寻迹算法即根据传感器传给的数据,进行判断确定舵机的转向和角度。 通过程序 MAIN函数中的 for循环来实现;这里需要说明,我们原本的寻迹算法是通过 20MS进入一次中断,在中断中读取传感器的值判断输出;原本中断的算法有缺陷,中断的运行时间 与传感器状态的读取判断输出有时间偏差;所以最终采用MAIN函数中死循环的方法,可以最有效的时间利用。 附原程序: Main函数部分: for(。 ) { sensor()。 read_status()。 //读端口值即传感器传回来的状态 angle_PD()。 // _FEED_COP()。 /*feedsthedog*/ } sensor()函数读取传感器状态,把 A口数据赋值给变量 TEMP; read_status()函数判断 TEMP数值并计算权值,判断 TEMP值是否正确; angle_PD()函数把计算出的权值 与对应转角输出给舵机电机。 编码器控制算法整体思路为:通过设置 PT口的输入捕捉功能对编码器输出的脉冲进行计数;并通过设置另一个定时中断读取脉冲值 Get_pulse进行速度控制;具体脉冲值 Get_pulse为多少,则要通过实验测试。 程序如下: void initPIT(void)//定时中断初始化函数 定时中断设置 { PITCFLMT_PITE=0。 //该寄存器用于 PIT模块的使能设置和工作方式 PITCE_PCE0=1。 //该寄存器用于对 PIT模块中的 4个通道 使能 设置 PITMTLD0=2001。 // 200分频 PITLD0=PITTIME1。 //16位定时器初值设定。 PITINTE_PINTE0=1。 //定时器中断通道中断使能 PITCFLMT_PITE=1。 //定时器通道使能 } void Init_PT4_Capture() 第五章、智能车控制软件设计说明 17 { TIOS=0x00。 //输入捕捉 TCTL3=0x02。 //通道 0下降沿触发 TSCR2=0X07。 //分频 ,用来给 TCNT作时间参考 TSCR1=0x80。 //Timer Enable TIE=0X10。 //初始化定时器开启 } //===========================中断服务子程序 pragma CODE_SEG __NEAR_SEG NON_BANKED // void interrupt 66 PIT0(void) { count++。 jishu++。 if(count==1) // { Get_pulse = number_count。 number_count=0。 count=0。 // PORTB=~PORTB。 } PITTF_PTF0=1。 //清中断标志位 } pragma CODE_SEG __NEAR_SEG NON_BANKED //每一个脉冲进入一次中断 void interrupt 12 PT4_Capture(void) { TFLG1=0x10。 number_count++。 } 为了适应不同赛道要求及不同赛道的速度不一致性,本算法设置了硬件调速;调速算法用一个拨码开关及部分软件设置来实现;我们的拨码开关为三位,分别连接 B口的 0~2位;拨码开关那个接通,即对应的 B口位拉低接地;软件通过第五届全国大学生智能汽车邀请赛技术报告 18 判断对应的位数为低或高进行速度选择。 程序如下: void getkey() { DDRB=0X00。 if(PORTB_PB0==0) { key=1。 } if(PORTB_PB1==0) { key=2。 } if(PORTB_PB2==0) { key=3。 } } void keyscan() { switch(key) { case1:wanh=45。 wanl=28。 wanm=260。 zhih=70。 zhil=40。 zhim=465。 break。 case2:wanh=50。 wanl=33。 wanm=320。 zhih=85。 zhil=44。 zhim=525。 break。 case3:wanh=55。 wanl=38。 wanm=380。 zhih=100。 zhil=49。 zhim=580。 break。 default:break。 } } void control_angle(int angle) { angle1=angle+1450。 PWMDTY23=angle+1450。 // 所加数值为黑线中心位置 if((angle11525)||(angle11375)) //弯道 { PWMDTY45=wanh。 if(Get_pulsewanm) { PWMDTY45=wanl。 } } if((angle11375)amp。 amp。 (angle11525))//直道 { 第五章、智能车控制软件设计说明 19 PWMDTY45=zhih。 if(Get_pulsezhim) { PWMDTY45=zhil。 } } } 设置锁相环升频可以提高程序的运行速度,所以我们通过设置锁相环把总线频率由原来的 8Mhz提高为 80Mhz; 锁相环原程序如下: void SetBusCLK_80M(void) { CLKSEL=0X00。 //disengage PLL to system PLLCTL_PLLON=1。 // on PLL SYNR =0xc0 | 0x09。 REFDV=0x80 | 0x01。 POSTDIV=0x00。 //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz。 _asm(nop)。 //BUS CLOCK=80M _asm(nop)。 while(!(CRGFLG_LOCK==1))。 //when pll is steady ,then use it。 CLKSEL_PLLSEL =1。 //engage PLL to system。 } 第五届全国大学生智能汽车邀请赛技术报告 20 第六章、模型车的主要技术参数说明 项目 参数 赛题组 光电组 车模几何尺寸(长、宽、高)(毫米) 370 220 140 车模轴距 /轮距(毫米) 170 120 车模平均电流(匀速行驶) (毫安 ) 1500 电路电容总量(微法) 传感器种类及个数 激光传感。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。