飞思卡尔技术报告——光电组_中山大学_二次革命_第1页
飞思卡尔技术报告——光电组_中山大学_二次革命_第2页
飞思卡尔技术报告——光电组_中山大学_二次革命_第3页
飞思卡尔技术报告——光电组_中山大学_二次革命_第4页
飞思卡尔技术报告——光电组_中山大学_二次革命_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五届“飞思卡尔”杯全国大学生智能汽车竞赛技 术 报 告学 校: 中山大学队伍名称: 二次革命参赛队员: 郑勇升卢润戈曾鑫鹏带队教师: 成慧关于技术报告和研究论文使用授权的说明本人完全了解第五届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名:郑勇升 卢润戈 曾鑫鹏带队教师签名:成慧日 期:2010年8月10号XXXIII第一章 引言目录目录4第一章 引言.5第二章

2、方案选择.62.1 路劲识别传感器的选定.62.2 系统总体框图.7第三章 机械结构设计.93.1 车轮机械建模.9 3.2 前轮定位.93.3 传感器的设计安装.103.4 转向舵机的安装.113.5 测速编码器的安装.123.6 后轮刹车装置设计.13第四章 硬件电路的设计和实现.134.1 主控板的设计.134.1.1 电源模块.134.1.2 电机驱动模块.154.1.3 光电编码器模块.164.1.4 人机交互模块.174.2 激光传感器模块的设计.184.3 单片机使用资源情况.19第五章 功能实现原理及算法.205.1 主程序流程框图.205.2 程序初始化.205.3 黑线的判

3、别.215.4 舵机控制.215.5 速度控制.21第六章 开发工具、制作、安装、调试过程.226.1 开发工具.226.2 调试过程.22第七章 主要技术参数说明.23第八章 总结.24参考文献25附录26 “飞思卡尔杯”智能车大赛起源于韩国,是韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司资助下举办的以HCSl2单片机为核心的大学生课外科技竞赛。组委会提供一个标准的汽车模型、直流电机和可充电式电池,参赛队伍要制作一个能够自主识别路径的智能车,在专门设计的跑道上自动识别道路行驶,谁最快跑完全程而没有冲出跑道并且技术报告评分较高,谁就是获胜者。其设计内容涵盖了控制、模式识别、传感技术、汽车电子

4、、电气、计算机、机械、能源等多个学科的知识,对学生的知识融合和实践动手能力的培养,具有良好的推动作用。智能小车系统由HCS12微控制器、电源管理单元、路径识别电路、车速检测模块、舵机控制单元和直流驱动电机控制单元组成。本系统以飞思卡尔公司的16位微处理器MC9S12XS128为控制核心,并采用CodeWarrior软件编程和BDM作为调试工具。运用激光发射强大光线,使用采集光敏传感器AD值进行道路信息采集,并采用PWM技术来控制舵机的转向和电机转速。舵机控制主要采用PWM信号开环控制,而速度控制方面,由数据表来设定速度,PID控制来调整速度。通过将总线频率超频到40M来更快更准确地进行控制。各

5、个部分经过MCU的协调处理,能够以较快的速度在指定的轨迹上行驶,在进弯道之前能够提前减速并改变角度,达到平滑过弯和减小路程的效果。 在前几个月的努力中,我们自主设计机械结构和控制电路,构思独特算法,并一次次地对单片机具体参数进行调试。可以说,这辆在跑道上奔驰的小车凝聚着我们的汗水和智慧。在准备比赛的过程中,我们小组成员涉猎多个学科,这次磨练对我们的知识融合和实践动手能力的培养有极大的推动作用。第二章 方案选择第二章 方案选择 智能汽车比赛以快速平稳地完成赛程作为目标,这就要求赛车能够快速准确地检测跑道路径,及时做出合理的控制并迅速执行。这跟总体方案的确立有很大的联系。2.1 路径识别传感器的选

6、定路径识别模块是智能车系统的关键模块之一,路径识别方案的好坏,直接关系到最终性能的优劣,因此,选定黑线识别传感器模块是总体方案确立的首要步骤。主要有以下几种识别方法:(1)使用光电发射接收管来检测黑线: 光电发射管发射出光,经过赛道的反射回来,由于白色平面和黑线反射光强度不同,不同位置上的光电接收管接收到强弱不同的光,因此可以判断出黑线相对小车的位置。这种检测的方法明显的优点是检测速度快,检测的方法简单,成本相对低廉。但是比赛规定传感器不能超过16个,这样就限制了水平分辨率。不能精确的分辨黑线的位置,同时也许垂直分辨率可能只有一线,不能很好的预测路径的走线。总的来说使用这种方法优点很明显,缺点

7、也很明显。(2)使用图像传感器CCD来检测黑线:图像传感器分为线阵和面阵两种。线阵的图像传感器分辨率高,能克服光电传感器水平分辨率低的缺陷,但是检测速度较慢,且垂直分辨率只有一线。面阵的图象传感器成象是一个平面,无论是水平分辨率还是垂直分辨率都很高,识别上具有很大的优势,可以做到提前预测路径,是最理想的路径检测传感器;但是数据量比前两种方案都大很多,而且数据处理较为困难,大大加重了单片机的负担。(3)使用磁传感器来检测黑线:黑线下面部有电线,通电后会产生磁场,根据磁场场强大小和电线距离的关系,可以用磁传感器测出车体与黑线的相对位置。这样检测稳定,但是磁场场强大小与电线距离有着较复杂的非线性关系

8、,而且使用磁传感器无法做到很好的前瞻,这是对车速很大的限制。比较了三种传感器优劣之后,决定选用应用广泛的光电传感器,相信通过选用大前瞻的激光传感器,加之优秀的程序控制和较快的信息处理速度,相信激光传感器可以极好的控制效果。2.2 系统总体框图 智能车系统采用飞思卡尔的16位微控制器MC9S12XS128单片机作为核心控制单元用于智能车系统的控制。在选定系统采用光电传感器后,由安装在车前部的光电传感器负责采集信号,并将采集到的信号传入核心控制单元,核心控制单元对信号进行判别处理后,由内部ECT模块发出PWM波,分别对转向舵机、直流电机和制动电机进行控制,完成智能车的转向、前进和制动。智能车驱动电

9、机上安装有光电编码器,用来对车轮转速反馈信号的采取,经由核心控制单元进行专家PID控制算法自动调节输入到电机驱动模块的PWM波占空比,从而控制小车的速度。另外,系统带有拨码开关选择程序的运行参数,还有液晶显示模块实时显示智能车的状态。 系统总体结构方框图如图2.1所示。图2.1 系统总体结构方框图根据上面的方案设计,可知系统主要由以下几个部分组成:(1)MC9S12X128主控制器。系统采用112脚的MC9S12XS128MAL,该单片机具有ECT模块,2个SPI模块,8路16位计数器,4路外部事件触发中断输入端口,8路PWM,16路10位AD,转换时间约为3us;(2)传感器模块。使用一字线

10、激光器发射强大光线,用13个光敏传感器采集路面信息,将信号反馈给控制单元,由控制单元判别黑线位置以控制车的速度、转向和制动;(3)电机驱动模块和速度控制模块。根据码盘反馈信号,用MOS管搭建的桥式驱动电路驱动电机的运转状态,形成闭环控制,对电机的速度机型准确快速的调节;(4)转向控制模块。根据路面信息,准确地控制转向舵机的转角;(5)刹车模块。使用伺服舵机构成刹车装置,使智能车在转弯时两轮差速,更及时地转向;(6)人机交互模块。我们使用拨码开关调整智能车的运行参数,并用液晶将车的运行状态显示出来。第三章 机械结构设计第三章 机械结构设计为了使模型车更能发挥竞速特长,我们对车体进行了机械设计和改

11、造,主要包括前轮定位,传感器的设计安装,转向舵机的安装,测速编码器的安装和后轮刹车装置的设计。3.1 车体机械建模光电组采用的是新的B型车模。B型车模采用的是国内厂商生产的1:16的电动越野遥控车的底盘部分,突出特点为四轮驱动,四轮独立悬挂。 智能车的外形大致如图3.1所示:图3.1 智能车大致外形3.2 前轮定位车轮定位是为了使智能车具有直线行驶稳定,转向轻便,转向后能自动转正,并减少轮胎和转向系零件的磨损等优点。车轮定位主要的参数有:主销后倾、主销内倾、车轮外倾和前束。由于前轮负责转向,我们主要调整前轮的各个参数。主销后倾能够产生一个方向与车轮偏转方向相反的力矩,使车轮回到原来的位置,从而

12、保持了汽车直线行驶的稳定性。但回正力矩过大,将会引起前轮回正过猛,加速前轮摆振,并导致转向沉重。主销内倾使转向时路面作用在转向轮上的阻力矩减小,从而可减小转向时舵机施加的力,使转向轻便,同时也减小了由于路面不平而从转向轮输出到转向矩上的力反馈。但主销内倾角过大,将会导致转向时轮胎与路面间产生较大的滑动,从而增加轮胎与路面的摩擦力。B车模的主销已经固定了,故没有改动。前轮外倾角一方面可以在汽车重载时减少或消除主销与衬套、轮毂与轴承等处的装配间隙,使车轮接近垂直路面滚动而滑动,同时减少转向阻力,使汽车转向轻便;另一方面还可防止由于路面对车轮垂直反作用力的轴向分力压向轮毂外端的轴承,减少轴承及其锁紧

13、螺母的载荷,从而增加这些零件的使用寿命,提高汽车的安全性。由于模型车主要用于竞速,在设计中要尽可能减轻重量,所以其底盘承重不大,因此将前轮外倾角设为0即可。前轮前束是克服了车轮转向时在地面上出现边滚边向内滑移的现象,从而避免增加轮胎的磨损。在调整过程中,发现较小的前束,约束03mm可以减小转向阻力,使模型车转向更为轻便。3.3 传感器的设计安装结合往届队伍对光电传感器的研究,我们决定采用“一”字型排布方式,如图3.2所示。采用了13个激光传感器,居于中间部分的11个传感器两两相距较近,两个边缘的传感器相对距离较大些,以探测到更宽的平面信息。图3.2 激光传感器以“一”字型排布如何安装激光传感器

14、也是一个要考虑的机械结构问题,因为如果传感器离车太近,则前瞻性会受到很大影响;而传感器若离车太远则机构不稳定,行走过程会产生振动,影响传感器的工作状态,无法保证稳定、准确的信号反馈,而且比赛规则有限定车体的长宽。综合考虑以上因素,我们通过实验确定了传感器的安装距离和方法。如图3.3所示。图3.3 激光传感器的安装3.4转向舵机的安装舵机响应时间很大程度上决定了小车的灵活性,从而决定着小车在一定赛道条件下的极限速度,为了加快车轮转向响应速度,我们设计并安装了舵机转向机构。我们改变了舵机的安装位置,舵机安装高度的最佳值也通过试验获得。如图3.4所示。图3.4 转向舵机的安装3.5测速编码器的安装在

15、车的调试过程中,由于电池的电量时刻在消耗,车的实际速度往往在发生变化,于是,我们采用了光电编码器。光电编码器安装主要考虑的问题是与齿轮的咬合,太紧会使电机转动吃力并且会发出很大的噪声,太松有时候会丢齿。因此最好使得安装的编码器松紧程度能够调整最好。光电编码器的安装如图3.5所示。通过光电编码器,程序可以通过调整电机的PWM波来控制车速在稳定在一个范围。图3.5 光电编码器位置示意图3.6后轮刹车装置设计在调试过程中,我们发现车模在高速状态转急弯时有时不够及时,导致碾出跑道。为了保证车辆行驶的安全,我们加装了制动舵机,如图3.6所示。图3.6 制动舵机示意图我们在制动舵机上加装了一个连杆,连杆的

16、两边各附有刹车片。在转弯时,通过刹车片向内侧车轮施加摩擦阻力,由于B型车内部装有差速器,当内侧车轮由于受到阻力变慢时,外侧车轮将变快,起到了差速作用,这样车辆能够更及时地转向,避免冲出跑道,更可以在直道上提高速度。例如:左转弯时,调节舵机给左轮一定的摩擦力,降低左轮的速度,起到减速作用。同时,由于内置的差速器作用,右轮的速度将会更快。由于两个车轮间存在差速,速度快的车轮会以另一个车轮为圆心向左甩,这样有利于车左转。同样,右弯时,调节舵机给右轮一定的摩擦力,降低右轮的速度,使其左转平稳而又不冲出跑道。第四章 硬件电路的设计和实现第四章 硬件电路的设计和实现硬件电路的设计应在稳定和可靠的基础上尽量

17、简单化,使其满足工作的基本要求。4.1 主控板的设计4.1.1 电源模块(a)(b)图4.1 电源模块原理图比赛使用智能车竞赛统一配发的标准车模用7.2V 2000mAh Ni-cd供电,而单片机、激光传感器、光电编码器等均需要5V电源,伺服舵机(包括前轮转向舵机和后轮刹车舵机)的额定工作电压为6V,直流电机可直接用7.2V电池直接供电。5V稳压电源用于单片机、激光传感器模块、光电编码器模块供电,实验证明,用LM2940搭建成的5V稳压电路(见图4.1(a))给这些模块供电,能稳定地实现功能,且各个模块不会互相干扰,整个电路简单实用。舵机稳压电源由LM2941组成的稳压电路提供,其输出电压可调

18、(通过调节图中的10k电位器)。由于转向舵机易烧坏,一般将稳压的电路输出调在5.5V6V范围内较合适。4.1.2 电机驱动模块电机的驱动可以使用专用的电机驱动芯片、达林顿管驱动、场效应管驱动。电机驱动芯片MC33886,内部具有过流保护电路,刹车效应好,接口简单易用,虽然能够提供比较大的驱动电流,但对于小车骤然加速时所需的电流还是不够的,发热量也比较大,若使用达林顿管作驱动管,其等效电阻也相对比较大,发热量也会比较大,不利于电机转速的骤起骤降驱动,使用场效应管作为驱动管,其导通电阻可以达到毫欧级,且可以提供强大驱动电流,最后选用场效应管做驱动电路。如图4.2,场效应管IRF4905和IRF32

19、05组成桥式电路,作为电机驱动,从单片机输出的控制信号PP5和PP7(PWM信号)经反相器CD4011放大电流后作为桥式电路的输入。图4.2 电机驱动模块原理图4.1.3 光电编码器模块图4.3 光电编码器模块原理图考虑到小车在加速和减速时可能会出现轮胎与赛道打滑的现象,就采用检测电机齿轮的转速作为小车的当前速度。速度检测的方法主要有霍尔开关检测、光电编码器检测。霍尔开关的开关速度比较快,精度容易调节(只需调节小磁铁块的个数与间距),但是当小车的速度较快时,会出现测量误差。光电编码器对速度的反应很灵敏,精度比较高,速度的实时检测比较好。经考虑,决定采用光电编码器检测模型车的速度。如图4.3所示

20、,LM358起放大信号和比较信号的作用,其输出经上拉接至单片机的脉冲计数管脚PT7。4.1.4 人机交互模块图4.4 人机交互模块原理图为能够对程序运行的参数进行方便的修改,使用了一个八位的拨码开关。拨码开关的状态通过单片机的PA口读得,在程序里进行判断并决定采用哪一组参数。另外,为了能够方便调试,我们还外接了一个1602液晶,可以方便地查看传感器的输出值。4.2 激光传感器模块的设计图4.5 激光传感器模块原理图图4.6 激光发射器实物图采用激光作为光源可以使光敏传感器的前瞻能达到40cm50cm,这对智能车的控制已经足够。激光发射器DS1采用一字线激光器,规格为650nm/100mw,如图

21、4.6所示。该发射器内置透镜,能将激光以一字线型发射出,这样代替了多个的点状激光发射器,从而减轻重量,简化了电路。接收电路如图4.5所示。接送器采用普通的光敏管,接收器的输出接至单片机的AD口,通过读取AD值的方法来确定路面信息。电位器的作用是调整接收器的电流,从而调整输出的电压,从而调整AD值,起到适应环境的作用。4.3 单片机资源使用情况 MC9S12XS128单片机作为本系统唯一的控制器,所有控制信号都由其作逻辑判断后输出,表3.1所示的即为单片机的管脚分配表。表3.1 MC9S12XS128单片机管脚分配表S12单片机管脚分配普通IOPA0-PA7八路拨码开关PB0-PB7,PK0-P

22、K2液晶显示ECTPT7码盘脉冲检测PWM23直流电机PWM1PWM67直流电机PWM2PWM01转向伺服电机PWMPWM45刹车伺服电机PWMADAD00AD15激光传感器信号输入(含备用)中断PH7用于调整参数串口通信RXD0串口接收TXD0串口发射第五章 功能实现原理及算法第五章 功能实现原理及算法5.1 主程序流程框图 开始程序初始化参数设置启动开始8ms中断数据采集数据处理转向控制速度控制图5.1 主程序流程图5.2 程序初始化初始化包括:总线时钟的设置,I/O端口的设置,ADC通道选择和工作方式配置,PWM通道选择和工作方式设置,中断设置,速度PID初始化,SCI初始化。5.3 黑

23、线的判别 一开始通过采用固定阀值对AD采样值进行判别,大于阀值的位置即为黑线位置,但是发现受环境光影响很大,而且调试场地光线并不均匀,所以无法跑动。然后就使用查找最大值的方法判断黑线位置,这样可以很大程度的减少环境光的影响,只要光线不是特别的不均匀,还能正常跑动。5.4 舵机控制当黑线处于传感器两边缘时,让舵机以最大角度转动。当黑线处于中间时主要使用PD算法,调试好PD的参数后既可以很稳定的跑动。5.5 速度控制速度采用脉冲计数器测量,光电编码器的输出接在定时器接口上。在软件里,通过每隔8ms的中断处理程序读取一次脉冲次数,读完后立即清零,等待下一次的中断。读取数据后除去偶然误差,做为速度值。

24、再根据此速度值作为反馈,使用增量式PID算法对速度进行控制,使速度达到设定值。第八章 总结第六章 开发工具、制作、安装、调试过程6.1 开发工具我们采用CodeWarrior作为程序编译软件。CodeWarrior for S12是面向以HC12或S12为CPU的单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器等。在CodeWarrior软件中可以使用汇编语言或C语言。6.2 调试过程我们采用S12系列单片机的BDM(Background Debug Mode)调试方式。在BDM模式下主要可

25、以实现3方面的功能:应用程序的下载和在线更新;单片机内部资源的配置与修复;应用程序的动态调试。初次使用BDM时,需要在PC上安装相应的驱动程序和动态链接库。第七章 主要技术参数说明项目参数路径检测方法(赛题组)光电组车模几何尺寸(长、宽、高)(毫米)350 230 250车模轴距/轮距(毫米)150车模平均电流(匀速行驶)(毫安)2000电路电容总量(微法)500传感器种类及个数13光敏管,2红外管1编码器新增加伺服电机个数1赛道信息检测空间精度(毫米)10赛道信息检测频率(次/秒)125主要集成电路种类/数量LM2940 2片、LM2941 1片、CD4011BD 1片、IRF4905 2片

26、、IRF3205 2片、NE555 2片车模重量(带有电池)(千克)1.8 第八章 总结从一开始走到现在确实不易,未拿到新车模之前就在网上看到种种对新车模的评论,一开始大多是期望新车模能带来更快的速度,然后是怨声四起,然后我们也拿到车模了,然后发现车模的那个转向结构真的是非常的恶心,那种结构根本就跑不了60cm的弯,更别提50cm了。后来看到官网上说可以改装,于是马上改了,改装过程也花了挺长时间。然而更加恶心的是在后面,在网上看到许多烧舵机的言论后,我们的舵机电压就一直控制在6v以下,然而后面跑着跑着突然发现车子晃动得厉害,后来才发现是舵机的中心线偏了。后来换舵机,但是那舵机是一代比一代烂。有

27、的能支撑好几天,有的刚接上还没转几下就突然不动了。最后只能换回最初的那个,所以现在的车上的舵机的中心线跑了一段时间后会有变动的,还好变动在可以接受的范围。再吹下我们的传感器,我们使用了一字线的激光管代替了一排的点状激光管,可谓是一次创新,不过可能接收管没太在意,选的管子比较普通,在黑线与白板之间的电压差只有0.5v左右,还好已经够用了。由于这几天为了能更好的过坡道和弯道提速,对车子进行了不小的改动,时间仓促,报告或许有许多地方不尽人意,忘谅解。参考文献参考文献1 卓晴,黄开胜,邵贝贝等. 学做智能车挑战“飞思卡尔”杯M. 北京北京航空航天大学出版社20072 孙育才,孙华芳,王荣兴.单片机原理

28、及其应用M.北京电子工业大学出版社.20063 张睿. Altium designer 6.0原理图与PCB设计M.北京电子工业出版社.20074 沈长生常用电子元器件使用一读通M北京. 人民邮电出版社20045 张文春. 汽车理论M北京机械工业出版社2005 附录附录Source文件/*定义头文件以调用其他函数*/#include #include #pragma LINK_INFO DERIVATIVE mc9s12xs128 #include System_Init.h /初始化模块函数#include Sensor_operation.h /传感器模块函数#include PID.h

29、/PID闭环控制模块#include SCI.h#include LCD.h /*设置全局变量为在其他函数的初始化*/uchar first_black_po;uchar second_black_po;uchar temp2;/端口a的值uchar temp3;byte LCD_FLAG;int time_temp;int sec;byte time10=0;byte up_time_flag=0;byte up_time_temp=0;byte flag=0;uchar flag_time=0;byte up_flag=0;/上坡标志byte up_de_value;byte ad_sma

30、llest;byte black_flag=0;char this_min,this_max;byte last_ad_largest_po=6;byte de_value=225; /黑白阀值byte black_count=0;int ad_average;int up_ad_average;int VV_MIN = 0; /PID输出最小值int VV_MAX=2000;int pwmvalue = 0; /舵机转角对应的PWM高电平值int speed = 10000; /电机速度对应的PWM高电平值int last_speed=0;int max_speed=40;int senso

31、rtemp = 0; /黑线位置int last_sensor2=0;int last_sensor=0; /存储上一次转角值int last_sensor_array10;int d_sensor=0;int sensor = 0; /本次转角和上一次转角差值byte ad14;byte ad_largest,ad_largest_po;byte ad_larger,ad_larger_po;char sensor_value14=-13,-11,-9,-7,-5,-3,-1,1,3,5,7,9,11,13;int po_kp; int vi_Ref; /速度设定值int vi_FeedBa

32、ck; /速度反馈值int last_vi_FeedBack;int vi_PreError; /速度误差,vi_Ref - vi_FeedBackint vi_PreDerror; /速度误差之差,d_error-PreDerror;int v_Kp; /比例系数int v_Ki; /积分系数int v_Kd; /微分系数int vl_PreU; /PID输出值uchar receive_data4;/串口接收值uint sci_count1;uchar start_state=0; /起跑线相关的数值uchar startline_flag=0;uchar startsum=0;uchar

33、 startsum1=0;uchar startsum2=0;uchar startsum3=0;uchar startsum4=0;uchar second_white_po=0;uchar first_white_po=0;uchar black_state=0; /十字线相关的数值uchar blacksum1=0;uchar blacksum2=0;uchar blacksum3=0;uchar cross_flag=0;uchar tab_timer10=0,1,2,3,4,5,6,7,8,9;int absabsabs(int a) /绝对值函数 if(a 0) return a;

34、 else return -a; /*主函数*/void main(void) DisableInterrupts; System_Init(); /调用系统初始化函数 EnableInterrupts; /允许中断 PWMDTY45 = 2000; PWMDTY01 = 2120; temp2=PORTA&0x0f; switch(temp2) case 0: max_speed=30;break; case 1: max_speed=35;break; case 2: max_speed=40;break; case 3: max_speed=45;break; case 4: max_s

35、peed=50;break; case 5: max_speed=55;break; case 6: max_speed=60;break; case 7: max_speed=65;break; case 8: max_speed=70;break; case 9: max_speed=75;break; case 10: max_speed=80;break; temp3=PORTA&0x70; temp3=temp34; switch(temp3) case 0: v_Kp=8;v_Ki=0;v_Kd=1; break; case 1: v_Kp=8;v_Ki=1;v_Kd=0; bre

36、ak; case 2: v_Kp=10;v_Ki=1;v_Kd=2; break; case 3: v_Kp=10;v_Ki=2;v_Kd=5; break; case 4: v_Kp=20;v_Ki=3;v_Kd=5; break; case 5: v_Kp=20;v_Ki=3;v_Kd=10; break; case 6: v_Kp=10;v_Ki=3;v_Kd=3; break; LCD_FLAG=PORTA_PA7; if(LCD_FLAG=1) LCMInit(); for(;) /*=PIT频道0(一共有4个频道)中断函数(定时中断)=*/#pragma CODE_SEG _NEA

37、R_SEG NON_BANKEDvoid interrupt 66 PIT_ISR0(void) /每一毫秒中断 time_temp+; time10+; sci_count1+; Sensor_collect(); /传感器采集 Sensor_judge(); /传感器判断 if(LCD_FLAG=1) if( sci_count1=1000) /sent_AD(); displayAD1(); if( sci_count1=2000) sci_count1=0 ; displayAD2(); if(time10=8) PWMDTY01 = pwmvalue; /为舵机赋值 vi_Ref=m

38、ax_speed-3*absabsabs(d_sensor);/-absabsabs(sensortemp); last_vi_FeedBack= vi_FeedBack; vi_FeedBack = PACNT; PACNT=0; if(vi_FeedBack2*vi_Ref) vi_FeedBack=last_vi_FeedBack; if(startline_flag=0) PWMDTY45 = v_PIDCalc(); /为电机赋值(闭环),调用PID函数,需要进行速度反馈和速度设定 else PWMDTY45=2000; time10=0; if(time_temp=1000&up_

39、time_flag=1) time_temp=0; sec+; if(sec=5) up_time_flag=0; sec=0; if(up_flag=1) up_time_temp+; if(up_time_temp=1500) up_flag=0; up_time_temp=0; if(up_time_flag=1) flag_time+; if(flag_time600) flag=0; PITTF_PTF0 = 1; /PIT中断标志位清零(写1时clear),以便下次定时能产生中断#pragma CODE_SEG DEFAULT/*=外部中断函数,PH7管脚有上升沿时引发中断=*/#

40、pragma CODE_SEG _NEAR_SEG NON_BANKED interrupt 25 void PH7_INT (void) PIFH_PIFH7 = 1; /PH7中断标志位清零(写1时clear),以便下次上升沿来时能产生中断#pragma CODE_SEG DEFAULT /*SCI* #pragma CODE_SEG _NEAR_SEG NON_BANKEDvoid interrupt 20 SCI0_ISR(void) uchar i,receive_temp; SCI0CR2_RIE=0; while(!(SCI0SR1&0x20); receive_temp=SCI

41、0DRL; if(receive_temp=250) for(i=0;i4;i+) while(!(SCI0SR1&0x20); receive_datai=SCI0DRL; max_speed= receive_data0; v_Kp= receive_data1; v_Ki= receive_data2; v_Kd= receive_data3 ; if(receive_temp=251) while(!(SCI0SR1&0x20); startline_flag=SCI0DRL; SCI0CR2_RIE = 1; #pragma CODE_SEG DEFAULT System_Init文件#ifndef System_Init_H #define System_Init_H #include #include void FBE_Init(void);void PORT_Init(void);void PWMA_Init(void);void PWMB_Init(void);void TIM_Init(void);void PH7_Init(void);void PIT_Init(void);void AD_Init(void);void System_Init(void);#endif/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论