当前位置:文档之家› 创新设计与实践报告自动寻迹小车

创新设计与实践报告自动寻迹小车

创新设计与实践实训题目:基于S08单片机的自动寻迹小车设计专业班级:自动化学生:学号:指导教师:王威设计地点:2010年 12 月 20 日创新设计与实训任务书绪论1.1 设计背景为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201 号文,附件1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。

该竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,是以智能汽车为竞赛平台的多学科专业交叉的创意性科技竞赛,是面向全国大学生的一种具有探索性的工程实践活动,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。

该竞赛分竞速赛与创意赛两类比赛。

竞速赛是在规定的模型汽车平台上,使用飞思卡尔半导体公司的8 位、16 位微控制器作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应软件,制作一部能够自主识别道路的模型汽车,按照规定路线行进,以完成时间最短者为优胜。

创意赛在统一比赛平台上,充分发挥参赛队伍想象力,以特定任务为创意目标,完成研制作品,由竞赛专家组观摩作品现场展示、质疑、现场观众投票等环节,最终决定比赛名次。

该竞赛涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识。

该竞赛以飞思卡尔半导体公司为协办方,已成功举办了五届,曾得到了原教育部副部长吴启迪教授、原高教司尧学司长及理工处领导、飞思卡尔公司与各高校师生的高度评价,已发展成全国26 个省(自治区)、直辖市的300 余所高校广泛参与的全国大学生智能汽车竞赛。

第三、四、五届连续被教育部批准列入国家教学质量与教学改革工程资助项目之一(附件2,教高函[2010]13 号)。

飞思卡尔公司在2010 年8 月26 与国家教育部国际合作交流司签署了关于“高等学校人才培养战略合作协议”,此协议将继续赞助全国大学生“飞思卡尔”杯智能汽车竞赛。

1.2 设计的意义智能车竞赛与教育部已举办的数学建模、电子设计、机械设计、结构设计4大专业竞赛不同,是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。

引导和激励学生实事、刻苦钻研、勇于创新、多出成果、提高素质,发现和培养一批在学术科技上有作为、有潜力的优秀人才。

1.3 设计所需的设备采用组委会提供的标准赛车底盘(赛车MATIZ,配备标准驱动电机RS-380SH、转向舵机和可充电蓄电池);单片机FREESCALE的8位单片机MC9S08AW60开发评估板;传感器采用红外反射式对管及触发电路;电机驱动采用基于33886芯片的H-Bridge驱动电路。

车模介绍◆车模:G768◆电机:RS380-ST/3545,◆舵机:FUTABA30102 总体设计2.1 小车系统可分为6个部分:◆电源管理:稳定电压,使系统电压稳定在要求的电压围◆光电传感器:检测路径,校正小车在跑道上的位置◆车速传感:实时检测小车当前的速度◆参数选择:根据小车当前的状态,确定算法的参数◆驱动电机:根据小车的速度、位置,增减速度◆转向电机:控制小车的方向2.2 跑道小车跑道宽度50CM,中间黑线20mm,小车从出发去出发,跑完一圈后,在起始线后1米围自动停下来。

3 硬件电路设计3.1 传感器的选择光电式传感器是利用光电器件把光信号转换成电信号的装置。

光电式传感器工作时,先将被测量转换为光量的变化,然后通过光电器件再把光量的变化转换为相应的电量变化,从而实现非电量的测量。

光电式传感器的核心(敏感元件)是光电器件,光电器件的基础是光电效应。

本设计采用采用A/D转换的光电对管红外光耦传感器,当发光二极管由A→B导通时,会发出红外线,经小车跑道散电动机的测速有很多方法,常见的有测速发电机测速、霍尔传感器测速、编码器测速、光电码盘测速等。

测速发电机测速适合大型电机的测速。

霍尔传感器测速的方法具有抗干扰能力强,准确可靠地特点,但是测速分度较低,结构也比较复杂。

编码器测速,不但使用方便,运行可靠稳定而且分辨率高,也是目前智能车大赛中普遍使用的测速装置,但是价格有点高。

我们将着重介绍光电码盘测速,这种测速方法比较简单、容易操作,而且编码器也是基于光电码盘测速的原理。

接下来的是电路部分,需要用到槽型光耦,槽型光耦的外形成一个“凹”字型,一边是个红外发射管另一边是接收管,它们都被塑料壳包起来,中间留了一条很细的窄缝,没有障碍物时接收管能接受到红外线,有东西挡住中间时接收管就接收不到了。

在选择槽型光耦时中间缝越细小说明管子性能越好。

从右图电路中可以看出没有遮挡时,发射管发出的光线直接被接收管接收,接收管导通集电极电位为低电平,当光线被遮挡时,接收管接受不到光线,处于截止状态,集电极为高电平,后面串了个CD40106BC施密特触发器的作用是对信号整形,遮光物体进入和离开时都有一个过程,这就使得信号变化也有一个过程,不是规则的方波,不能直接提供给MCU,加上施密特触发器以后,通过阀值触发,就变成规则的电平信号了。

将方波信号送入测ABCDVCC1KVCCOUT1码盘123456789101112131415164040vcc3.3 电源管理DC BLM29407.2VLM29405V5.7V3.4 转向电机1、舵机部结构:由舵盘、齿轮组、位置反馈电位计、直流电机、控制电路板等组成2、工作原理:脉宽信号给定参考位置,舵机部电路通过反馈控制调节舵盘角位。

舵盘角位由PWM控制信号的脉宽决定。

3、舵机基本参数:型号: S3010电压: 4.0 ~ 6.0 [V]角度控制:1°/ 400us工作速度: 0.16 + 0.02堵转力矩: 6.5 + 1.3 [ Kg.cm]4 系统软件设计在智能车系统的设计中,硬件是基础,没有一个好的硬件平台,软件就无法运行。

对于智能车系统来说,软件的核心是控制算法。

而完成这些任务的编程语言有汇编语言和C 语言。

软件部分是整个智能车系统的灵魂,在硬件方面各参赛队之间小异,真正体现各参赛队智能车的优势和最后决定比赛成绩好坏的往往是软件部分,尤其是核心控制算法的设计。

4.1 控制算法PID (Proportional Integral Differential )控制是比例、积分、微分控制的简称。

在自动控制领域中,PID 控制是历史最久、生命力最强的基本控制方式。

PID 控制器的原理是根据系统的被调量实测值与设定值之间的偏差,利用偏差的比例、积分、微分三个环节的不同组合计算出对广义被控对象的控制量。

常规PID 控制系统原理框图PID 控制算法可分为位置型和增量型两种:(1)位置型算法MC33886驱动电路电机外形模拟调节器的调节动作是连续的,任何瞬间的输出控制量 u 都对应于执行机构(如调节阀)的位置。

数字控制器的输出控制量也和阀门位置相对应,故称为位置型算式(简称位置式)。

(2)增量型算法增量型算法仅仅是在算法设计上的改进,其输出是相对于上次控制输出量的增量形式,并没有改变位置型算法的本质,即它仍然反映执行机构的位置开度。

如果希望输出控制量的增量,则必须采用具有保持位置功能的执行机构。

4.2 主程序流程图主程序流程图如图所示。

系统首先对设备进行初始化,然后选择进入参数修改程序。

参数设定完之后打开中断,最后循环执行位置速度控制程序。

4.3 程序的初始化初始化部分包括参数的读取、PID 初始化、定时器和脉冲计数器的初始化、I/O 端口的初始化、PWM 控制器的初始化和键盘显示控制器7279的初始化。

关键参数实时修改程序程序入口初始化是否进行参数修改?开中断读取光电传感器组的状态位置速度控制程序否是图4.2 初始化程序流程图4.4 位置速度控制程序首先读取前方传感器组的状态来判断赛车和黑线的位置关系,通过该位置关系给出相应的转向舵机的转角和电机的转速。

具体程序流程图如图。

图4.3 位置速度控制程序4.5 中断处理程序中断处理程序每20毫秒执行一次,中断处理函数的主要目的是定时读取脉冲计数器的值并把该值反馈给PID控制程序,然后调用PID控制程序。

图给出了程序流程图。

4.6 PID控制程序系统采用增量式的速度PID,具体流程图如图4.5 。

图4.5 PID控制程序5 系统调试5.1 开发工具程序的开发是在组委会提供的CodeWarrior IDE下进行的,包括源程序的编写、编译和,并最终生成可执行文件。

CodeWarrior 6.2 是面向以HC1和S12为CPU的单片机嵌入式应用开发软件包。

包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、器以及调试器。

5.2 调试过程我们使用的是单片机本身配套的BDM,在调试时,把程序编译下载到S08AC60单片机,运行后可通过存窗口查看程序运行状况。

根据小车在模拟跑道上的状况调整参数,完善硬件、软件设计,最终达到理想的水平。

总结在此份报告中,我主要介绍了智能车准备的基本思路,包括电路、软件、以及最重要的控制算法的创新思想。

在电路方面,我们以模块形式分类,在电源管理、电机驱动、舵机驱动、传感器、速度检测,这五个模块分别设计,在查找资料的基础上确定合适的最优方案;然后我加以实验,最后以报告中所提到的形式决定了我们最终的电路。

在算法方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用的,稳定的程序。

在这套算法中,我们结合路况调整车速,做到直线加速,弯道减速,保证在最短时间跑完全程。

虽然成功的完成了智能车的设计制作,但是赛车的整体性能还有可提高的环节,我们在以下方面还有待于更大的提高。

路线识别方面,如果合理的调整红外装置,则可以更远的探测路线,以便做好弯道前的准备,这样便可以在直道上更充分的加速。

在循线算法方面,更多的阅读文献,查阅资料,可以使得理论更加成熟,也可以更有效的完善算法。

参考文献1 王威.嵌入式微控制器S08AW原理与实践[M].:航空航天大学,2009.2 杰. 传感器与检测技术[M].:高教,2004.3 邵贝贝龚光华.单片机认识与实践[M].:航空航天大学,2006.4 阎石.数字电子技术基础(第三版). :高等教育,19895 懂,瑢,金世俊.智能小车的多传感器数据融合.现代电子技术,2005,第六期6 臧杰,阎岩. 汽车构造[M]. . 机械工业.20057 长生.常用电子元器件使用一读通[M].. 人民邮电.20048 宗光华.机器人的创意设计与实践[M].. 航空航天大学.20049 伟等.Protel DXP高级应用[M].. 人民邮电.200210 文春. 汽车理论[M]..机械工业.200511 王晓明. 电动机的单片机控制[M].. 航空航天大学.2002附表2:程序源代码#include <hidef.h> /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#include <math.h>/*********************************定义舵机变量******************************************/int ad_data[12]; /*定义数组,存放12路ad转化后的值*/int ad_add=0;int ad_average=0 ;int AD,Turn;int mid_flag,left_close,right_close;charZhuanjiao[]={180,170,160,150,140,130,121,113,106,100,95,90,85,80,74,67,59,50,40,30,20,10,0}; int flag0,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag10,flag11;/*********************************定义电机变量******************************************/#define Stop1 TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;//能耗#define Stop2 TPM2C0V=1500;PTCD_PTCD6=1;PTFD_PTFD7=0;//反转int cangshu[]={6,6,6,5,5,4,4,3,3,0,0,0,0,0,-3,-3,-4,-4,-5,-5,-6,-6,-6,};//char ShuruSudu[]={35,35,35,35,38,38,40,40,42,42,45,45,45,42,42,40,40,38,38,35,35,35,35}; //char Shuruspeed[]={23,23,23,23,24,25,26,27,28,29,35,35,35,29,28,27,26,25,24,23,23,23,23}; //冲出跑道char Shuruspeed[]={12,12,12,13,14,15,16,17,18,19,20,20,20,19,18,17,16,15,14,13,12,12,12};//刚好// char Shuruspeed[]={8,8,8,7,7,8,9,9,10,11,13,13,13,11,10,9,9,8,7,7,8,8,8};int speed,a,b;int u=0;int v,w;int uk;int m,n;int zw[]={0,0,0,0,0,0,0,0,0,0,0};int r;int l[]={0};int circle=0;typedef struct{int NextPoint;int ThisPoint; //设定目标 Desired valueint Kp; //比例常数 Proportional Constint Ki; //积分常数 Integral Constint Kd; //微分常数 Derivative Constint LastError; //Error[-1]int PrevError; //Error[-2]int SumError; //Sums of Errors} speedPID ;speedPID sPID; /* *pp=&sPID; */typedef struct{int NextPoint;int ThisPoint; //设定目标 Desired valueint Kp; //比例常数 Proportional Constint Ki; //积分常数 Integral Constint Kd; //微分常数 Derivative Constint LastError; //Error[-1]int PrevError; //Error[-2]int SumError; //Sums of Errors} steerPID ;steerPID DjPID; /*, *pp=&DjPID; *//*************************************************************************/void ADCInit(void){ADC1CFG=0X00; /*A/D初始化,高速模式,8位精度,ADCK=总线频率*/ADC1SC2=0X00; /*软件触发,比较功能禁止*/APCTL1=0XFF; /*AD0~AD7使能*/APCTL2=0XFF; /*AD8-AD15使能*/ADC1SC1=0X00; /*禁止转换完成中断,单词转换,选择AD0,并启动了转换*/}/*************************************************************************/void get_data(void){ad_add=0; /*采集*/ADC1SC1=0X00; /*选择AD通道0,若转化没有结束则等待,否则将转化结果存放入ad_data[0]中*/for(;!ADC1SC1_COCO;);ad_data[0]=ADC1RL;ad_add=ad_add+ad_data[0] ;ADC1SC1=0X01;for(;!ADC1SC1_COCO;);ad_data[1]=ADC1RL;ad_add=ad_add+ad_data[1] ;ADC1SC1=0X02;for(;!ADC1SC1_COCO;);ad_data[2]=ADC1RL;ad_add=ad_add+ad_data[2] ;ADC1SC1=0X03;for(;!ADC1SC1_COCO;);ad_data[3]=ADC1RL;ad_add=ad_add+ad_data[3] ;ADC1SC1=0X04;for(;!ADC1SC1_COCO;);ad_data[4]=ADC1RL;ad_add=ad_add+ad_data[4];ADC1SC1=0X05;for(;!ADC1SC1_COCO;);ad_data[5]=ADC1RL;ad_add=ad_add+ad_data[5] ;ADC1SC1=0X06;for(;!ADC1SC1_COCO;);ad_data[6]=ADC1RL;ad_add=ad_add+ad_data[6] ;ADC1SC1=0X07;for(;!ADC1SC1_COCO;);ad_data[7]=ADC1RL;ad_add=ad_add+ad_data[7];ADC1SC1=0X08;for(;!ADC1SC1_COCO;);ad_data[8]=ADC1RL;ad_add=ad_add+ad_data[8];ADC1SC1=0X09;for(;!ADC1SC1_COCO;);ad_data[9]=ADC1RL;ad_add=ad_add+ad_data[9] ;ADC1SC1=0X0A;for(;!ADC1SC1_COCO;);ad_data[10]=ADC1RL;ad_add=ad_add+ad_data[10];ADC1SC1=0X0B;for(;!ADC1SC1_COCO;);ad_data[11]=ADC1RL;ad_add=ad_add+ad_data[11];ad_average= ad_add /7;/*************************************************************************/ if(ad_data[0]>=ad_average){flag0=1;}if(ad_data[0]<ad_average){flag0=0;}if(ad_data[1]>=ad_average){}if(ad_data[1]<ad_average) {flag1=0;}if(ad_data[2]>=ad_average) {flag2=5;}if(ad_data[2]<ad_average) {flag2=0;}if(ad_data[3]>=ad_average) {flag3=700;}if(ad_data[3]<ad_average) {flag3=0;}if(ad_data[4]>=ad_average) {flag4=8;}if(ad_data[4]<ad_average) {flag4=0;}if(ad_data[5]>=ad_average) {flag5=1100;}if(ad_data[5]<ad_average) {flag5=0;}if(ad_data[6]>=ad_average) {flag6=13;}if(ad_data[6]<ad_average) {}if(ad_data[7]>=ad_average){flag7=1500;}if(ad_data[7]<ad_average){flag7=0;}if(ad_data[8]>=ad_average){flag8=17;}if(ad_data[8]<ad_average){flag8=0;}if(ad_data[9]>=ad_average){flag9=1900;}if(ad_data[9]<ad_average){flag9=0;}if(ad_data[10]>=ad_average){flag10=21;}if(ad_data[10]<ad_average){flag10=0;}if(ad_data[11]>=ad_average){flag11=2300;}if(ad_data[11]<ad_average){flag11=0;}AD=flag0+flag1+flag2+flag3+flag4+flag5+flag6+flag7+flag8+flag9+flag10+flag11;/**********************************************************************************/if(right_close==0){if(AD== 1){Turn=0;mid_flag=0;left_close=1;}if(AD== 301){Turn=1;mid_flag=0;left_close=1;}if(AD== 300){Turn=2;mid_flag=0;left_close=1;}if(AD== 305){Turn=3;mid_flag=0;left_close=1;}if(AD== 5){Turn=4; mid_flag=0;left_close=1;}if(AD== 705){Turn=5; mid_flag=0;left_close=1;}if(AD== 700){Turn=6;mid_flag=0; left_close=1;}if(AD== 708){Turn=7;mid_flag=0; left_close=1;}if(AD== 8){Turn=8; mid_flag=0;left_close=1;}}if(AD== 1108){Turn=9;mid_flag=1;left_close=0;right_close=0; }if(AD== 1100)Turn=10; mid_flag=1;left_close=0;right_close=0; }if(AD== 1113){Turn=11;mid_flag=1;left_close=0;right_close=0; }if(AD==13){Turn=12;mid_flag=1;left_close=0;right_close=0; }if(AD== 1513){Turn=13;mid_flag=1;left_close=0;right_close=0; }if(left_close==0){if(AD== 1500){Turn=14; mid_flag=0; right_close=1;}if(AD== 1517){Turn=15; mid_flag=0;right_close=1;}if(AD== 17){Turn=16; mid_flag=0; right_close=1;}if(AD== 1917){Turn=17; mid_flag=0; right_close=1;}if(AD== 1900){Turn=18; mid_flag=0; right_close=1;}if(AD== 1921){Turn=19;mid_flag=0; right_close=1;}if(AD== 21){Turn=20; mid_flag=0; right_close=1;if(AD== 2321){Turn=21; mid_flag=0; right_close=1;}if(AD== 2300){Turn=22;mid_flag=0; right_close=1;}}}/*************************PID初始化**********************/void PIDInit(void){sPID.ThisPoint=0; //设定目标 Desired valuesPID.Kp=0; //比例常数 Proportional ConstsPID.Ki=0; //积分常数 Integral ConstsPID.Kd=0; //微分常数 Derivative ConststError=0; //Error[-1]sPID.PrevError=0; //Error[-2]sPID.SumError=0; //Sums of ErrorsDjPID.ThisPoint=0; //设定目标 Desired value 302DjPID.Kp=1; //比例常数 Proportional Const 50DjPID.Ki=1; //积分常数 Integral ConstDjPID.Kd=3; //微分常数 Derivative ConststError=0; //Error[-1]DjPID.PrevError=0; //Error[-2]DjPID.SumError=0; //Sums of Errors}/*************************IO初始化**********************/void IOInit(void){PTGDD_PTGDD4=0; //G4复位按键PTGPE_PTGPE4=1;PTGDD_PTGDD3=1; /*G3连接计数芯片4040清零管脚,高电平清零*/ PTGD_PTGD3=0;PTGDD_PTGDD1=1; /*G1拉高蜂鸣器,高电平有效,强驱动*/PTGDS_PTGDS1=1;PTGD_PTGD1=1;PTGD_PTGD1=0;PTEDD=0x00; /*E 测速计数输入*/PTCDD_PTCDD6=1; /*C6连接驱动芯片386的IN1*/PTFDD_PTFDD7=1; /* F7连接驱动芯片386的IN2*/PTCD_PTCD6=0;PTFD_PTFD7=1;}/*************************时钟初始化**********************/void ICGInit(void){ICGC1=0x78; /*fll系数为p=1,外部晶振*/ICGC2=0x20; /*倍频因子N=8,分频因子R=1*/}/*************************电机舵机初始化**********************/void servoInit(void){TPM2SC=0x0F; /*总线时钟128分频*/TPM2MOD=2500;TPM2C1SC=0x28; /*舵机初始化------通道0设置边缘对齐的PWM,中断请求不允许*/ TPM2C1V=185;TPM2C0SC=0x28; /*电机初始化------通道0设置边缘对齐的PWM,中断请求不允许*/ TPM2C0V=0; /*设定初始占空比,舵机处于中间位置*/}/*************************延时****************************/void delay(int de){while(de--){ __RESET_WATCHDOG();}}void delay1(int de){int i=100;while(de--)while(i--)__RESET_WATCHDOG();}void delay2(int count) /* 延时子程序*/{int i,j,k;for(i=0;i<count;i++){for(j=0;j<100;j++){for(k=0;k<800;k++){__RESET_WATCHDOG(); /*复位看门狗计数器*/}}}}/*************************溢出中断处理****************** **/ interrupt VectorNumber_Vtpm3ovf void TPM3OVF_ISR(void){DisableInterrupts;if((TPM3SC & 0x80)==0x80){TPM3SC_TOF = 0;}speed=PTED&0x3F;;PTGD_PTGD3=1;//计数器清零PTGD_PTGD3=0;if((Turn>7)&&(Turn<15)){l[0]=1;}else{l[0]=0;if(Turn>14) r=1;if(Turn<8) r=2;}zw[10]=zw[9];zw[9]=zw[8];zw[8]=zw[7];zw[7]=zw[6];zw[6]=zw[5];zw[5]=zw[4];zw[4]=zw[3];zw[3]=zw[2];zw[2]=zw[1];zw[1]=zw[0];zw[0]=l[0];EnableInterrupts;}/*********************速度PID****************************/int speedPIDCalc (speedPID *pp){int Error,dError;Error=pp->ThisPoint-pp->NextPoint; //偏差e(k)pp->SumError+=Error; //积分 e(1)+e(2)+*******dError=Error-pp->LastError; //当前微分pp->PrevError=pp->LastError;pp->LastError=Error;if((w>=1500)||((Turn>14)||(Turn<8)))sPID.Kp=80; // 110sPID.Ki=0; // 0sPID.Kd=10; // 10}else{ // 145sPID.Kp=180; // 1sPID.Ki=0; // 15sPID.Kd=5;}return (pp->Kp*Error+pp->Ki*pp->SumError/50+pp->Kd*dError);}/*********************舵机PID****************************/int steerPIDCalc (steerPID *pp){int dError,Error;Error=pp->ThisPoint-pp->NextPoint; //偏差pp->SumError+=Error; //积分dError=pp->LastError-pp->PrevError; //当前微分pp->PrevError=pp->LastError;pp->LastError=Error;return (pp->Kp*Error+pp->Ki*pp->SumError/2500+pp->Kd*dError); }/*********************舵机控制****************************/void SteerContral(void){int djpid;DjPID.NextPoint=0;DjPID.ThisPoint=Zhuanjiao[Turn]; //turn为黑线位置if(v>0){djpid=v;}else{djpid=101+steerPIDCalc(&DjPID);}v=0;TPM2C1V=djpid;a=TPM2C1V;}/*********************电机控制****************************/void SpeedContral(void)if(circle>=2){TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;for(;;){__RESET_WATCHDOG();}}else{sPID.NextPoint=speed;sPID.ThisPoint=Shuruspeed[Turn];if(u>0){uk=u;}else{uk=speedPIDCalc(&sPID);}u=0;TPM2C0V=uk;w=TPM2C0V;}}/*********************起始延时***************************/ void Start_Key(void){for(;;){if(PTGD_PTGD4==0){delay1(1);if (PTGD_PTGD4==0){delay2(10) ;EnableInterrupts;break ;}}__RESET_WATCHDOG();}}/********************起始线识别*******************************////////////////void StartLine(){if((ad_data[7]<=30||ad_data[8]<=30)&&ad_data[10]>=70&&(ad_data[5]>=100||ad_data[6]>=100)&&(a d_data[3]<=30||ad_data[4]<=30)&&ad_data[1]>=70){circle++ ;PTGD_PTGD6=1;delay(8000);PTGD_PTGD6=0;}}///************************************************************************////void main(void){IOInit();ICGInit();ADCInit();servoInit();PIDInit();// SOPT_COPE=0;TPM3SC = 0x4F; /*总线时钟128分频*/TPM3MOD = 2500;DisableInterrupts;// EnableInterrupts;Start_Key();for(;;){get_data(); // // //StartLine();n=zw[10]*1024+zw[9]*512+zw[8]*256+zw[7]*128+zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1] *2+zw[0];m=zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1]*2+zw[0];if((m==124)||(m==120)||(m==112)) /////// //直道入弯{if((speed>4)&&(r==1)){// v=TPM2C1V-(Turn-14)*speed;Stop1;}if((speed>4)&&(r==2)){// v=TPM2C1V+(8-Turn)*speed;Stop1;}u=100*speed*(abs(Turn-12));r=0;SteerContral();SpeedContral();}////////////// ////大S道else if(m==0){if(speed>12){ Stop1;TPM2C1V=TPM2C1V+cangshu[Turn]*speed;}else{PTCD_PTCD6=0;PTFD_PTFD7=1;u=90000/(speed*(abs(Turn-12)));//+speedPIDCalc(&sPID) }SteerContral();SpeedContral();}else{if(Turn==10||Turn==11||Turn==12){if(speed<13){u=2500;PTCD_PTCD6=0;PTFD_PTFD7=1;}else if(speed>20){Stop1;u=70*speed;}else{u=14000/speed ; //u=900PTCD_PTCD6=0;PTFD_PTFD7=1;}v=191;SteerContral();SpeedContral();}if(((Turn > 6) && (Turn < 10)) && ((speed > 3)&&(speed<13))) {PTCD_PTCD6=0;PTFD_PTFD7=1;u=50000/(speed*(12-Turn)) ; //u=1250SpeedContral();}if(((Turn > 12) && (Turn < 16)) && ((speed > 3)&&(speed<13))) {PTCD_PTCD6=0;PTFD_PTFD7=1;u=50000/(speed*(Turn-12)); //u=1250SpeedContral();}if(((Turn > 6) && (Turn < 10)) && (speed > 12)){Stop1;u=25*speed*(12-Turn);SpeedContral();}if(((Turn > 12) && (Turn < 16)) && (speed > 12)){Stop1;u=25*speed*(Turn-12);SpeedContral();}if(((Turn> 3) && (Turn < 7)) && (speed <10)){PTCD_PTCD6=0;PTFD_PTFD7=1;u=30000/(speed*(12-Turn));SpeedContral();}if(((Turn> 15) && (Turn< 19)) && (speed <10)){ PTCD_PTCD6=0;PTFD_PTFD7=1;u=30000/(speed*(Turn-12));SpeedContral();}if(((Turn > 3) && (Turn < 7)) && (speed > 9)) { Stop1;u=15*speed*(12-Turn);SpeedContral();}if(((Turn> 15) && (Turn < 19)) && (speed > 9)) {Stop1;u=15*speed*(Turn-12);SpeedContral();}if(((Turn> 18) || (Turn< 4)) && (speed < 8)) { PTCD_PTCD6=0;PTFD_PTFD7=1;if(Turn > 18){u=10000/(speed*(Turn-12));}if(Turn <4){u=10000/(speed*(12-Turn));}SpeedContral();}if(((Turn > 18) || (Turn< 4)) && (speed >10)) {Stop1;u=20*(abs(Turn-12))*speed;SpeedContral();}else{PTCD_PTCD6=0;PTFD_PTFD7=1;SpeedContral();}SteerContral();}__RESET_WATCHDOG();}}附3:红外传感器参数说明该红外传感器(ST188)的特点是采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,采用非接触式检测方式。

相关主题