汽车巡航控制系统设计毕业设计说明书张翅_第1页
汽车巡航控制系统设计毕业设计说明书张翅_第2页
汽车巡航控制系统设计毕业设计说明书张翅_第3页
汽车巡航控制系统设计毕业设计说明书张翅_第4页
汽车巡航控制系统设计毕业设计说明书张翅_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计说明书题目:汽车巡航控制系统设计学院(直属系):交通与汽车工程学院年级、专业:2007级车辆工程姓名:张翅学号:指导教师:赵玲完成时间:2011年6月1日目录摘要 4Abstract 41前言 51.1设计的目的及意义 51.2单片机的国内外开展状况 51.3任务与分析 72系统方案设计 82.1系统设计方案 82.2系统总体框图 103系统硬件电路介绍 113.189C52单片机 113.2ADC0804A/D转换器 153.3舵机 193.4LCD液晶显示器 193.5时钟电路 193.6复位电路 204系统软件设计 204.1proteus软件环境介绍 204.2protel软件环境介绍 224.3系统软件分析 224.4程序流程图 235系统调试过程 295.1电路原理图 295.2系统仿真调试 30结论 37总结与体会 38谢辞 39参考文献 40附录 41汽车巡航控制系统设计摘要本设计是基于AT89C52单片机为控制核心的汽车巡航控制系统设计。系统采用LM016L液晶显示屏,将汽车在高速状态下的当前速度以及巡航设置速度显示出来,在系统中还采用舵机来控制节气门〔也俗称油门〕来控制其开度,设置舵机的转向来表示加油还是减油,在巡航控制中,设置按键对巡航进行加减速度的设计,并运用PID算法进行实现,在仿真中,用滑动变阻器的增减代替道路状况的好或坏来仿真巡航设定后,舵机工作状况。本设计说明书对该系统的硬件电路,工作原理进行了详细的介绍。同时给出了软件设计的流程图和主要源代码。关键词:AT89C52单片机舵机LCD液晶显示器PID算法TheDesignOfTheCruiseControlSystemAbstractThedesignistheCruiseControlSystem,basedontheAT89C52Singlechipasthecontrolcenter.ThisSystemusedLM016LLCDscreentodisplaythecruisingspeedofthevehicleandthecurrentspeedwhenitathighspeed.AlsotheSystemusedsteeringenginetocontrolthethrottleactuator(commonlyknownasthethrottle),inordertocontrolthesizeofopening;androtatingthedirectionofsteeringenginetorepresentincreasingordecreasingoil.Underthecruisecontrol,thedesignofsettingthekeystocreaseordecreasethecruisingspeed,thenusingofPIDalgorithmtoprogramming.Inthecourseofsimulation,authorusestheslidingrheostattosimulatetheroadconditions(goodorbad);afterspeedchanging,authorwatchestheworkingconditionsofsteeringengine.Thisdesignspecificationintroducedbothhardwarecircuitandworkingprincipleindetail;atthesametime,itgivestheflowchartandthemainsourcecodeofsoftwaredesign.Keywords:89C52SingleChipSteeringgearLCDdisplayPIDalgorithm1前言1.1设计的目的及意义随着高速公路的开展,汽车在高速路上以80Km/h-120Km/h的速度行驶,在这种高速下,节气门的开度需要大幅度的开启,也就是说驾驶员需要较大的力度去踩踏板,并且在高速路上要全部保持这种状态,如果驾驶员光用脚去控制踏板,很容易导致控制油门的踏板的腿部肌肉疲劳加大,如果严重了,会失去对踏板的控制能力,那在汽车需要制动的时候,很容易发生事故。一方面对驾驶员的身体造成一定伤害,又增大了驾驶员得劳动强度,使驾驶员容易疲劳,引起交通事故。现代汽车电子技术为解决这个问题,研发出了一种电子控制巡航系统〔CCS〕,当车速到达一定高速的时候,如果想进入巡航状态,可以直接开启巡航控制开关,然后汽车会以当前的车速自动进入巡航状态,保持在这个速度附近不变,如果突遇道路状况变化、上下坡、转弯和各种阻力变化的情况下,巡航控制系统的执行器可以在一定范围下自动调节节气门开度,保持车速恒定,驾驶员在巡航过程中只需要控制转向盘,两腿处于自由状态,使驾驶员的劳动强度大大减轻1.2任务与分析本次设计的系统的实现是基于单片机的。首先,在Protel软件环境中进行硬件电路图的设计。然后在8051软件环境中进行系统的软件编程,并进行程序源文件的编译和调试,最后生成.hex文件。此.hex文件是硬件电路运行实现的源代码来源。把.hex文件加载到AT89C52单片机芯片,然后在Proteus软件环境中运行硬件电路[1]。本课题设计的系统主要由:AT89C52为中央处理芯片,用于数据处理,初值设定。车速是由一个方波信号发生器发出一个固定的信号,是一个固定的信号也就是每次采集的脉冲个数不会因为舵机动作而变化,作为对车速的反应调节,把舵机信号和路况模拟参数加了进去,在巡航控制中,主要设置5个按键,KEY1〔巡航总开关〕,KEY2〔巡航设定开启〕,KEY3〔巡航加速〕,KEY4〔巡航减速〕,KEY5〔巡航取消〕,除这5个按键之外,还设置了两个按键来模拟驾驶员开车时候的加油门和减油门,并将检测的当前的车速和巡航控制中设定的车速显示在LM016L液晶显示器显屏中,本次设计用VC语言进行编程。本系统可以分为以下4大模块:1、AT89C52模块:用于数据处理,和外围的时钟芯片通信,并控制时钟传输过程,采集时间信息并予以处理。2、A/D转换:本次设计采用的是ADC0804A/D转换器,三态锁定输出,135US的存取时间,8位的分辨率,在设计中,用一个滑动变阻器代替汽车行驶时候路面变化状况,阻止的减少表示路面状况变好,阻止增大表示路面状况变差,这样就会产生一个模拟信号,用ADC0804A/D转换器将模拟信号转换成数字信号输入到AT89C52单片机进行处理。3、1602LCD液晶显示器:工业字符型液晶,能够同时显示16x02即32个字符。4、程序:单片机主程序,包括A/D转换程序,中断程序,按键扫描子程序,显示字符子程序,显示转速子程序。

2系统方案设计2.1系统设计方案通过查阅相关资料,设计初期共有3个方案供选择,分别是:〔1〕采用89C2051单片机+步进电机+数码管显示组成的系统;〔2〕采用AT89C52单片机+步进电机+1602液晶显示芯片组成的系统;〔3〕采用AT89C52单片机和舵机加上1602显示组成的系统。〔1〕采用89C2051单片机+步进电机+数码管显示组成的系统此系统的硬件局部主要是由89C2051单片机,数码管,7805,ADC0832构成。该系统硬件结构简单,但是数码管显示消耗单片机资源,软件设计局部,程序冗长而复杂,易产生混淆。〔2〕采用AT89C52单片机+步进电机+1602液晶显示芯片组成的系统;这个方案采用AT89C52单片机,1602液晶,步进电机来组成系统的硬件。但是步进电机做位置定位电机扭力一般比舵机要小,而舵机机用于位置定位,必须用位置反应的方法通过一定的算法来实现的,在进行反应调速时候不如舵机好用。〔3〕采用AT89C52单片机和舵机加上1602显示组成的系统此方案在硬件局部采用了AT89C52单片机,MG995舵机,ADC0804,1602液晶显示器,几个按键。在功能上进行了扩充,并且使得硬件连线显得较为简单,在软件局部,程序显得层次清楚。最后确定设计采用第3方案,即系统是由AT89C52单片机,MG995舵机,ADC0804,1602液晶显示器组成[2]。2.2系统总体框图图1系统总体框图当汽车巡航控制系统启动后,程序进入初始化阶段。单片机一直检测是否有按键按下。当开关键按下后液晶显示当前车速和巡航车速,当巡航车速为0km/h时,系统处于关闭状态。当按下设定键如果当前车速在40km/h-180km/h时,设置巡航车速为当前车速,系统翻开,PID算法控制舵机开始通过节气门调整车速。此时按下加速〔或减速〕键,巡航车速每次增加(或降低)

3系统硬件电路设计3.189C52单片机

AT89C52单片机是低电压,高性能CMOS8位的单片机,其中由和随机存取数据存储器组成,而程序存储器由可反复擦写的Flash8kbytes组成,器件采用ATMEL公司的高密度、非易失性存储技术生产,可以说是89C51单片机的升级版,单片机片内置通用8位中央处理器和Flash存储单元。AT89C52有40个引脚,双向输入/输出〔I/O〕有32个端口,中断口有两个,16位可编程定时计数器有3个,全双工串行通信口有2个,读写口线有2个,AT89C52虽然不可以在线编程,但可以按照常规方法进行编程。Flash存储器是和通用的微处理器结合在一起的,而Flash存储器能够反复擦写使开发本钱得到了降低。图2AT89C52单片机引脚图AT89C52单片机与早期Intel的8051/8751/8031芯片的外部引脚和指令系统完全兼容,只不过用FlashROM替代了ROM/EPROM而已。89C52单片机内部结构如下图。图3AT89C52单片机内部结构示意图VCC:供电引脚。GND:接地。P0口:P0口是一个8位漏级开路双向I/O口,每脚吸收8TTL门电流。当P1口的引脚第一次写入1时,定义为高阻输入。P0口能够用做外部程序数据存储器,还可以被定义为数据/地址的第八位。在FIASH编程时,P0口可作为原码输入口,当对FIASH校验时,P0输出原码,此时P0外部一定要被拉高。P1口:P1口是一个在内部提供上拉电阻的8位双向I/O口。P1口缓冲器可以接收输出4TTL门电流,P1口引脚写入1后,被内部上拉为高,可以用作输入。P1口被外部下拉为低电平时,会输出电流,这是因为内部上拉的原因。对FLASH校验和编程时P1口作为第八位地址接收。P2口:P2口是内部上拉电阻的8位双向I/O口,P2口缓冲器能接收输出4个TTL门电流。当P2口被写1时其管脚被内部的上拉电阻拉高,并且作为输入。因此原因作为输入时,P2口的引脚被外部拉低,此时输出电流,这是由于内部上拉的缘故。当对外部8位地址数据存储器进行读写时,P2口将输出特殊功能存放器的内容。P2口在FLASH校验和编程时接收高八位控制信号和地址信号。P3口:P3口的引脚是8个带内部上拉电阻的双向I/O口可以接收输出4个TTL门电流。当P3口写入1时管脚被内部上拉为高电平,并作为输入引脚。当外部下拉为低电平P3口将输出电流〔ILL〕,是由于上拉的缘故。P3口也可作为AT89C52的特殊功能口P3口管脚第二功能:P3.0RXD:〔串行输入口〕P3.1TXD:〔串行输出口〕P3.2INT0:〔外部中断0〕P3.3INT1:〔外部中断1〕P3.4T0:〔记时器0外部输入〕P3.5T1:〔记时器1外部输入〕P3.6WR:〔外部数据存储器写选通〕P3.7RD:〔外部数据存储器读选通〕P3口同时也为闪烁编程、编程校验接收一些控制信号。RST引脚:复位功能。当振荡器复位器件时,应该保持RST引脚两个机器周期的高电平时间。ALE/PROG引脚:ALE端是以不变的频率周期输出正的脉冲信号,此频率为振荡器频率的1/6,因此它可用作对外部输出的脉冲或者用于定时。但是要注意的是,每当用作外部数据存储器时,都将跳过一个ALE脉冲,如想禁止ALE的输出,可在SFR8EH地址上置0。与此同时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被拉高。PSEN引脚:是外部程序存储器的选通信号。在外部程序存储器取指期间,每个机器周期两次/PSEN有效。但当访问外部数据存储器时,两次有效的/PSEN信号将不会出现。EA/VPP引脚:加密方式1时,/EA将内部锁定为RESET。在FLASH编程期间,这个引脚也可用于施加12V编程电源〔VPP〕。XTAL1引脚:反向振荡放大器的输入以及内部时钟工作电路的输入。XTAL2引脚:反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别是反向放大器的输入和输出端。该反向放大器可以配置为片内振荡器,石晶振荡和陶瓷振荡都可采用。如果采用外部时钟源驱动器件那么XTAL2应不接。要是有输入至内部时钟信号那么要通过一个二分频触发器,因此对外部时钟信号的脉宽并无任何要求,但是必须保证脉冲的上下电平需要的宽度。AT89C52主要特性:1〕与MCS-51兼容2〕片内振荡器和时钟电路3〕4K字节可编程闪烁存储器4〕全静态工作:0Hz-24MHz5〕三级程序存储器锁定6〕数据保存时间:10年7〕128×8位内部RAM8〕32可编程I/O线9〕5个中断源10〕两个16位定时器/计数器11〕寿命:1000写/擦循环12〕可编程串行通道13〕低功耗的闲置和掉电模式

3.2ADC0804A/D转换器A/D转换器就是将产生的模拟信号〔无论是电压变化,温度变化〕转变成数字信号输入单片机进行处理。ADC0804A/D转换器有依次逼近的8位COMS,三态锁定输出,在工作中能到达135US的存取时间。而它的8位分辨率,100US转换时间,1LSB的总误差,是相当高效的图4ADC0804引脚图下面对ADC0804引脚依次作介绍:/CS:为芯片的选择信号。/RD:为外部读取转换结果的控制输出信号。当/RD为HI时,DB0~DB7是高阻抗处理,当/RD为LO时,才能够输出数字信号。/WR:用来控制输入转换的启动口,表示ADC的转换开始〔/CS=0时〕,当/WR口由HI变为LO时,去除转换器:当/WR变为HI时,开始转换。其中/CS,/RD,/WR三个端口对整个AD转换器进行控制。CLKIN,CLKR:时钟输入。/INTR:中断请求信号输出口。VIN(+)VIN(-):差动模拟电压输入。当单端正电压时输入时,VIN(-)接地:当差动输入时,直接参加VIN(+)VIN(-)。DGND,AGND:数字信号和模拟信号的接地口。VREF:辅助参考电压。DB0~DB7:输出8位的数字信号。VCC:电源供给。在本次设计中,由滑动变阻器产生的一个模拟信号,由VIN(+)口输入ADC0804,转换后的数字信号由DB1到DB6输入进89C52单片机进行处理。3.3舵机本次设计采用辉盛mg995舵机,在仿真中,用舵机控制节气门的开度,舵机转动范围为-90度到+90度,而相对应车速在0Km/h到180Km/n之间,舵机转角增大表示节气门开度增大,节气门开度变大,使速度增加,当舵机转角变小时,表示节气门开度减少,驾驶员开始减油门,车速减小,通过单片机AT89C52中的P2.3口来控制舵机。图5舵机3.4LCD1602液晶显示器液晶显示是利用液晶的物理特性,显示区域由电压来控制,有电就有显示,LCD既可以显示图形,也可以显示字符。液晶显示器以体型薄、显示质量高,功耗低等优点被广泛使用。图61602LCD液晶显示屏LCD液晶显示屏的优点。1602LCD液晶屏显示质量高液晶显示器画质高且不会闪烁,这是因为液晶显示器不像阴极射线管显示器,会不断刷新新亮点,每一个点在收到信号后的亮度和色彩会得到很好的保持,而且发光非常恒定。2、数字式接口液晶显示器都是接受数字式的信号,单片机系输出的信号能够被液晶显示器更好吸收,在做实物的时候方便操作。3,体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来到达显示的目的,在重量上比相同显示面积的传统显示器要轻得多。4,功耗低LCD液晶显示器主要内部的电极和驱动IC上耗功电量,因而耗电量比其它显示器要少得多。下列图是LCD液晶显示器实物图:图7LCD液晶显示器3.5时钟电路本设计采用内部时钟方式的电路。在89C52单片机内部中有一个用于构成放大器,该放大器内有高增益反相的振荡器,其中XTAL1为输入端口,XTAL2为输出端口。这两个引脚连接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。电路中的电容C3和C4为30pF。常是在1.2MHZ~12MHZ为晶体的振荡频率的通常范围。晶体频率与系统的时钟频率成正比,而频率越快,单片机的运行速度也就越快。图8时钟电路3.6复位电路复位电路通常采用上电自动复位和按钮复位两种方式。本次设计采用上电复位电路。加电瞬间通过电容充电来实现的是上电复位电路,其电路如图9所示。通电的时候,电容C1通过电阻R1充电,RST端口出现正脉冲时候,用以复位。当电源Vcc的上升时间没有超过1ms时,系统自动复位,即接通电源就完成了系统的复位初始化。在参数的选定过程中,振荡稳定后应保证复位高电平持续时间大于2个机器周期。本次设计采用的晶体频率为6MHZ,C1=22uF,R1=1kΩ。图9复位电路

4系统软件设计4.1proteus软件环境介绍Proteus软件是英国Labcenterelectronics公司所开发的工具软件,Proteus软件除了具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,最重要的是,它有互动的电路仿真。在微处理器的应用上,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试。Proteus软件中能进行模拟和数字电路的设计,在设计中可以使用一个特定符号来代替元器件,并完成不会对真实电路造成任何损害的电路仿真操作。而且在仿真过程中能获得信号图标,对于市面上最流行的单片机都能进行仿真,而且还能利用ARES开发印制电路板。4.2Protel软件环境介绍Protel印制板设计软件包是澳大利亚proteltechnology公司发开的电子CAD产品,在电路图的设计上,protel有着很高的自动布线布通率。而电子元器件在电路图中连接,在印刷幅员中能否实现主要依靠它。在设计常用的单、双面印制板时只要选择适当的元件布局和布线策略方法,protel就可以轻易的到达98%-100%的布通率。对于极少数不能布通的定方,protel可以用飞线指示出来,引导用户用手工方法连通。 4.3系统软件和硬件在本次系统,我偏重做了软件局部,对整个巡航系统首先做了Protel电路图,和Proteus仿真,又利用keil软件进行程序的编译与调试,它对硬件系统起到扩充和完善的作用。而在系统硬件局部,我做了巡航5个按键以及显示的功能。下面将软件和硬件局部做个简单介绍:〔1〕汽车巡航软件程序设计过程使用的AD芯片采样模拟路况,通过信号发生器模拟车速传感器信号,程序里要对AD进行控制和数据读取,而单片机要处理车速信号得到当前车速,还要控制液晶显示和舵机的工作,由于本系统使用的单片机没有PWM模块,舵机控制信号采用的是由两个中断来控制产生的[7]。〔2〕汽车巡航硬件实物设计过程在硬件电路设计中,先购置需要的各种元器件,然后依照Protel软件中生的PCB版,对电路进行连线,最后将程序写入单片机,输入信号,进行按键调试,下列图为此次毕业设计中所做的实物:图10硬件实物4.4程序流程图〔1〕主程序流程图图11主程序图〔上〕图12主程序图〔下〕主程序流程图说明:对系统先进行初始化,由AD转换器采集的模拟信号转换为数字信号,输入单片机进行处理,同时进行按键扫描,当车速到达巡航要求范围内,按下巡航设定,采样当前车速,并进行设定,那么此时PID算法将起作用,将车速和舵机转角控制在设定值左右,由于本系统涉及到生命财产平安,所以设计了开关和设定两个按键来确认汽车巡航,其中巡航取消按键和驾驶员加减油门都可以使汽车巡航关闭。〔2〕A/D采样模拟路况子程序图13AD采样子程序流程图框图A/D采样模拟路况子程序图说明:在此图中先将AD转换器初始化,将滑动变阻器产生的模拟信号转变成数字信号,然后读取到采样值,并输入给单片机工作。〔3〕PID车速控制子函数图14PID车速控制子程序流程框图PID车速控制子函数流程图说明:在此流程图中,主要说明的是车速的控制算法,车速的变化范围从几十千米每小时到零点几千米每小时,变化范围大,控制精度高,一套PID参数难以到达要求,于是我采用了分段PID的方式,当前车速和巡航车速相差较大的时候,采用一套参数,较小采用另一套,最后得到当前舵机的控制量[9]。〔4〕车速采样子函数图15车速采样程序流程图车速采样程序流程图说明:因为本方案采用的车速传感器是用信号源模拟的,传给单片机的脉冲是一定的,因为车速和舵机角度还有路况都有关系,计算车速的时候我是用舵机和路况参数产生一个系数来影响车速,经过试验,得出,舵机系数是(duoji-500)/800,路况系数为(adval+400)/700,从而把这三者联系起来。〔5〕按键扫描子程序图16按键扫描子程序流程图按键扫描子程序流程图说明:按键按下后信号会出现一定频率的抖动,导致单片机识别错误,只按了一次,识别为按了屡次,所以我们这里要加延时去抖。5系统调试过程5.1电路原理图通过上面的硬件设计和软件设计过程,设计的工作已经根本完成,接下来的工作就是对所设计好的应用系统进行调试。通过调试可以检查出系统出现的一些错误,从而进行下一步的修改。〔1〕在Protel99SE中,对硬件电路图进行ERC电气规那么检查。图17protel原理图图18ERC电气规那么检查结果〔2〕程序调试程序经过调试显示“0错误,0警告〞。表示程序调试通过。图19程序调试通过示意图(3)PCB板图图20PCB图5.2系统仿真调试(1)在Proteus中建立仿真图,界面结果如图图21protues仿真图图22巡航按键(2)当速度到达40Km/H图23汽车巡航状态图24汽车舵机转动状态此时当前速度83Km/h,设定巡航车速为83Km/h(3)在仿真中我用一个滑动变阻器来模拟道路状况的变化,如下图:图25滑动变阻器1当滑动变阻器值变小时,表示路面状况变好,此时速度会增加,但因为在巡航中,设定为一定速度,所以,此时巡航控制系统会调节舵机角度,使其变小,来减小节气门开度,从而到达降速的目的:图26路况变好车速和舵机转角此图为当道路状况变好时,当前车速略微高于设定车速,所以舵机转角从-10.8减小为-13.0,降低节气门开度,来到达降速目的。2当滑动变阻器值增大时,表示路面状况变差,此时速度会降低,但因为在巡航中,设定为一定速度,所以,此时巡航控制系统会调节舵机角度,使其变大,来增大节气门开度,从而到达提速的目的:图27路况变差车速和舵机转角此图为道路状况变差时,当前车速略微低于设定速度,所以舵机转角从-10.8增大至-8.1,增大假期们开度,开到达提速目的。(4)在巡航中,当驾驶员想减小巡航车速,按下巡航减速键,设定速度会以5Km/h往下递减,如图:图28巡航减速此图为驾驶员连续按了3次设定速度减为68Km/h,舵机转角从-10.8减小至-23.2,使节气门减小,当前车速也随着减小为69Km/h(5)巡航中,当驾驶员想增加巡航车速,按下巡航加速键,设定速度会以5Km/h往上递增,如图:图29巡航加速此图为驾驶员连续按了3次巡航加速键以后,设定速度增值98(6)当驾驶员在巡航过程中,按下巡航取消键时,巡航功能自动取消,如图:图30巡航取消(7)当驾驶员在巡航过程中,踩下油门或者踩下刹车时,巡航设定自动取消,但LCD液晶显示屏幕依然显示当前速度,如图:图31设定取消结论在本次设计采用了稳定性好,并且功能强大的AT89C52单片机。在系统中,单片机对接收到的按键信号进行判断识别,并执行相应的处理;并且读取车速信号,控制LCD液晶显示屏显示当前车速和巡航设定车速,以及控制舵机转动来到达调节车速。其中,还特别添加了模拟路况局部,将一个滑动变阻器产生一个模拟信号,再通过A/D转换输入进单片机,使巡航的仿真过程更加的完善,本系统采用的电路简单便易于实现,软件设计独特、可靠。本次设计偏重涉及了软件局部,硬件局部只模拟了按键和显示模块的功能,而在实际运用中,还需要将硬件实物与软件结合,才能最终在实际生产中得以实现。总结与体会在这次系统设计的过程中,充分表达了微机原理对汽车电器局部的运用,在设计中对单片机的工作原理需要熟练的掌握,而且学习了解了很多芯片的使用方法,对数据存储器和程序存储器的扩展以及I/O并行口的扩展知识有了更深的了解。而在专业知识中,对汽车巡航设计的理解以及设计,更是让我受益匪浅。本来汽车电器的设计中,主要针对软件局部进行设计,将汽车巡航中中能实现的功能根本实现了,并且模拟路况和油门使仿真更具说服力。在设计中,自己学习了新的芯片以及编译程序,尤其是在编译程序中,更是让自己的VC语言有了更多的进步,再设计之外,也对显示局部和按键局部做了实物仿真,在制作实物过程中,不断的进行焊接,连线,程序调试,在这期间,遇到过很多问题,包括线路的连接,元器件的排版,调试,等等,但随着与导师同学进行交流,很多自己不懂的问题最后都迎刃而解,不仅仅如此,还充分锻炼了自己的动手能力。当看到自己做的实物呈现在面前,有着无比的自豪感,而这次毕业设计,相信对我的专业领域有着深远的影响,而对于即将工作的我们,远远知道学校的理论知识在实际生产和设计中,还有着很大差异,这也时时鼓励我朝着更高的目标前进。谢辞经过半年的准备和忙碌,我毕业设计已经接近尾声,作为一名本科生,由于知识的欠缺,经验的匮乏,毕业设计中难免有许多考虑不周全的地方,如果没有赵老师的催促指导,同学们的帮助,想要完成这次设计是难以想象的。首先要感谢我尊敬的导师赵老师。在设计过程中,赵老师给了我很大的帮助和支持,并提出了很多珍贵的意见,帮我解决了诸多的实际问题。特别是在我对设计感到焦虑时,她也能耐心地给我介绍资料,讲解思路。衷心地感谢赵老师!她严谨细致、一丝不苟的作风将一直是我工作、学习中的典范;她循循善诱的教导和不拘一格的思路给予我无尽的启迪。更重要的是,赵老师在大三教我们微机原理时一丝不苟其次要感谢和我同在一个班级的同学们,在设计中,大家相互鼓励并在学习和生活上相互帮助。在这样一个温馨团结的气氛中,我度过了愉快而有意义的大学时光,并最终完成了学业。【参考文献】[1]?Protel99SEEDA技术及应用?徐峥颖编著,北京:机械工业出版社,2005[2]?单片机系统的protues设计与仿真?张靖武编著,北京:电子工业出版社,2007[3]?单片机原理及接口技术?李朝青编著,北京:北京航空航天大学出版社,2005[4]?MCS-51单片机应用开发实用子程序?边春远编著,北京:人民邮电出版社,2005[5]?单片机应用技术?刘守义编著,西安:西安电子科技大学出版社,2002[6]?单片机应用系统设计?韩志军编著,北京:机械工业出版社,2005[7]?基于PIC单片机汽车巡航控制系统的研究?李海军,王东旭编著,哈尔滨:哈尔滨工业大学出版社,2003[8]?微型计算机控制技术?台方编著,北京:中国水利水电出版社,2001[9]?基于模糊PID控制的汽车巡航控制系统仿真与设计?周美兰,张颖,关晓丽,张诗阁编著,哈尔滨:哈尔滨理工大学出版社2021[10]?微机接口技术300例?李恩林编著,北京:机械工业出版社,2003[11]?现代汽车巡航系统控制原理浅谈?任伟,王怀玲编著,哈尔滨:哈尔滨理工大学出版社2021

附录程序:#definexunhang_Kpp35 #definexunhang_Kii0#definexunhang_Kdd20#definexunhang_Kppp15#definexunhang_Kiii0#definexunhang_Kddd0sbitkey1=P1^3; //定义开关键sbitkey2=P1^4; //定义设定键sbitkey3=P1^5; //定义加速键sbitkey4=P1^6; //定义减速键sbitkey5=P1^7; //定义取消键sbitjiayou=P1^2; //定义加油门键sbitjianyou=P1^1; //定义减油门键sbitE=P2^2; //定义液晶使能端口sbitRW=P2^1; //定义液晶控制端口sbitRS=P2^0; //sbitCS=P2^4; //定义AD控制端口sbitADRD=P2^5; //sbitADWR=P2^6; //sbitpwm=P2^3; //定义PWM输出端口//sfrDBPort =0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 unsignedlongintspeed_get,speed_set=0;//unsignedintadval,duoji=700;//adval为AD采样的值用来模拟路况变化范围0-255,duoji为占空比的控制量范围是500-2500分别对应-90°到90°intpan,key;//pan为判定设定速度和读取速度相对大小的中间值后面详述,key为5个功能按键的状态值ucharnum;//定义一个循环变量,在各个FOR循环中使用ucharcodetable[]="NOW";//显示在液晶上的字符串ucharcodetable1[]="SET";ucharcodetable2[]="km/h";ucharcodetable3[]="SYSTEM";ucharcodetable4[]="DISABLED";ucharbai,shi,ge,xiaosu1,xiaosu2,s_bai,s_shi,s_ge,s_xiaosu1,s_xiaosu2;unsignedlongintPulse;//pulse为采集到的脉冲个数voiddelay(uintN)//延时N毫秒子程序{ uintx,y; for(x=N;x>0;x--) for(y=110;y>0;y--);}voidwrite_cmd(ucharcmd)//写指令子程序{ RS=0; RW=0; P0=cmd; delay(1); E=1; delay(1); E=0;}voidwrite_data(uchardate)//写数据子程序{ RS=1; RW=0; P0=date; delay(1); E=1; delay(1); E=0;}voidLCD_init()//显示屏初始化{ E=0; write_cmd(0x38);//5*7点阵字符 write_cmd(0x0c);//整体显示,关光标,不闪烁 write_cmd(0x06);//AC自动增一,画面不动 write_cmd(0x01);//清屏 write_cmd(0x80);//设置DDRAM地址}voidad_init()//AD转换初始化{ CS=0;//片选}voidCPU_Init(void)//单片机中断初始化{TMOD=0x11;//T0定时模式,方式1;T1定时模式,方式1 T2CON=0x02;//T2计数模式TH0=0;//T0定时初值TL0=0;TH2=0;//T2计数初值TL2=0; TH1=0X63;//T1定时初始值TL1=0XBF;//20MSEA=1;//开放总中断 ET0=1; //允许定时器中断 ET1=1;//允许定时器中断 ET2=1;//允许计数器中断 TR0=0; TR1=1; TR2=0; //关闭TO和T1 }voidad_start()//AD使能,AD开始转换子程序{ ADWR=1; _nop_(); ADWR=0; _nop_(); ADWR=1;}voidad_read()//AD读取子程序{ P3=0XFF; ADRD=1; _nop_(); ADRD=0; _nop_(); adval=P3; ADRD=1;}voidkey_scan()//按键扫描子程序{ if(key1==0) { delay(5);//延时去抖 if(key1==0) { key=1;//给标志位赋值,1表示开关键 while(!key1);//等待按键释放 } } elseif(key2==0) { delay(5); if(key2==0) { key=2;//2表示设定键 while(!key2); } } elseif(key3==0) { delay(5); if(key3==0) { key=3;//3表示加速键 while(!key3); } } elseif(key4==0) { delay(5); if(key4==0) { key=4;//4表示减速键 while(!key4); } } elseif(key5==0) { delay(5); if(key5==0) { key=5;//5表示取消键 while(!key5); } } else//没有键按下时KEY复位0 { key=0; } if(jiayou==0)//加油键检测 { duoji=duoji+10; speed_set=0; } elseif(jianyou==0)//减有键检测 { duoji=duoji-10; speed_set=0; }}voiddisplay1()//显示字符子程序{ write_cmd(0x80+0x00);//光标定为 for(num=0;num<3;num++) { write_data(table[num]);//写入字符串 } write_cmd(0x80+0x0C); for(num=0;num<4;num++) { write_data(table2[num]); } write_cmd(0x80+0x40); for(num=0;num<3;num++) { write_data(table1[num]); } write_cmd(0x80+0x4C); for(num=0;num<4;num++) { write_data(table2[num]); }}voidCount_Disp(void)//数据转换函数{ if(flage1==1)//flage1为采集完成标志位1表示脉冲采集完成 { Pulse=T2H*256+T2L;//高八位乘以256加上低八位为采集到的脉冲个数,读取脉冲采集频率为1s一次车轮, //Pulse=1500; //假设车轮周长为1米每转一圈50个脉冲如果车速为200KM/H,相当于55m/s,每秒钟产生55*50=2750脉冲, //计数器2的计数范围为0-65535所以无论什么情况都不会产生溢出 speed_get=Pulse*(adval+400)*36/(5*700)*(duoji-500)/800;//车速本来应该为speed_get=Pulse*3。6/50 flage1=0;//读取完成,标志位置0 m=0;//读取完成,标志位置0 }if(speed_get>1000000)//最大量程为999999{speed_get=999999;}bai=speed_get/10000;//百位(wan)shi=(speed_get%10000)/1000;//十位ge=((speed_get%10000)%1000)/100;//个位xiaosu1=(((speed_get%10000)%1000)%100)/10;//小数点xiaosu2=((((speed_get%10000)%1000)%100)%10);//小数点 s_bai=speed_set/10000;//百位(wan)s_shi=(speed_set%10000)/1000;//十位s_ge=((speed_set%10000)%1000)/100;//个位s_xiaosu1=(((speed_set%10000)%1000)%100)/10;//小数点s_xiaosu2=((((speed_set%10000)%1000)%100)%10);//小数点}voiddisplay2()//显示转速子程序{ write_cmd(0x80+0x05);//给液晶写入命令,指定光标位置 write_data(0x30+bai);//给液晶写入数据 write_data(0x30+shi); write_data(0x30+ge); write_data('.'); write_data(0x30+xiaosu1); write_data(0x30+xiaosu2); write_cmd(0x80+0x45); write_data(0x30+s_bai); write_data(0x30+s_shi); write_data(0x30+s_ge); write_data('.'); write_data(0x30+s_xiaosu1); write_data(0x30+s_xiaosu2);}voiddisplay3()//显示无效子程序{ write_cmd(0x80+0x05); for(num=0;num<6;num++) { write_data(table3[num]); } write_cmd(0x80+0x44); for(num=0;num<8;num++) { write_data(table4[num]); }}voidxunhang_PID_Set(void)//分段PID控制函数{staticinte2;//上上次误差staticinte1;//上次误差staticinte0;//当前误差 staticinte02;//上上次误差staticinte01;//上次误差/

温馨提示

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

评论

0/150

提交评论