基于单片机的智能小车控制.docx
信息工程专业课程设计(二)题目基于STC89C52单独机的能小生姓名袁诚学号所在院系教育信息与技术所在班级404完成时间弓基于单片机的智能小车摘要:智能化作为现代电子产品的新趋势,是今后的电子产业的开展方向。智能化设计的电子产品可以按照预先设定的模式在一个环境里自动运作,不需要人为的管理,可应用于科学勘探、环境监测、智能家居等方面。基于单片机的智能小车控制就是其中的一个表达。本设计实现了一种基于51单片机的按键操作控制和温度检测显示系统,通过温度传感器采集温度数据并且通过显示模块显示出来,通过对按键的操作,自动控制转向电机转向,改变行驶方向。本课题设计的智能小车,具有按键控制前后左右的功能,温度采集功能,液晶显示功能。序言1第1章总体设计方案11.1 课题任务分析I二2方案论证21.1.1 小车驱动局部21.1.2 温度显示局部2第2章系统硬件构成21. 1系统设计原理32. 2主要元器件简介32.2.1STC89C52RC简介32.2.2液晶显示电路32.2.3L298N芯片直流电机驱动模块42.2.4遥控局部独立按键电路4第3章软件的设计与说明43.1软件设计53. 2软件的说明51. 2.1控制局部主程序流程53. 2.2温度检测显示局部主程序流程图5第4章调试与总结54.1 调试的总结6参考文献6致谢7附录7附件1L298N电机驱动模块7附件2小车侧视图7附件3小车俯视图8附件4小车最终硬件图8附件5程序清单8序言随着我国科学技术的进步,智能化和自动化技术越来越普及,各种高科技也广泛应用于智能小车和机器人玩具制造领域,使智能机器人越来越多样化。智能小车是一个多种高新技术的集成体,它融合了机械、电子、传感器、计算机硬件、软件、人工智能等许多学科的知识,涉及到当今许多前沿领域的技术B。而智能电动车正是智能机器人的一种,具有不可估量的实际意义。智能车辆是一个运用计算机、传感、信息、通信、导航、人工智能及自动控制等技术来实现环境感知、规划决策和自动行驶为一体的高新技术综合体。它在军事、民用和科学研究等方面己获得了应用,对解决道路交通平安提供了一种新的途径。随着汽车工业的迅速开展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究,许多国家己经把电子设计比赛作为创新教育的战略性手段。电子设计涉及到多个学科,机械电子、传感器技术、自动控制技术、人工智能控制、计算机与通信技术等等,是众多领域的高科技。电子设计技术,它是一个国家高科技实例的一个重要标准,可见其研究意义很大。第1章总体设计方案11课题任务分析本文设计了智能小车控制系统。智能小车是一个运用传感器、单片机、信号处理、电机驱动及自动控制等技术来实现环境感和自动行驶为一体的高新技术综合体,它在军事、民用和科学研究等方面己获得了应用。通过各种选题之后,我发现制作智能小车非常有意思,它唤起我们对玩具的革新思想,智能小车制作的兴趣。自己遇到过的汽车的功能是怎样的,想通过自己的手创作出属于自己的智能汽车。也夹杂一种童年时对玩具智能化的假想。所以我选定制作单片机智能小车。通过这次设计,掌握51单片机的原理,了解简单传感器组成原理,初步掌握传感器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与装配、调试,提高自己的动手能力,稳固己学的理论知识,建立单片机理论和实践的结合,了解传感器各单元电路之间的关系及相互影响,从而能正确设计、计算定时计数的各个单元电路。初步掌握传感器的调整及测试方法。提高动手能力和排除故障的能力。本设计采用直流电机,电机专用驱动芯片L298N进行电机驱动控制,主控芯片为STC89C52,控制器局部采用简单按键,温度数据的采集采用DS18B20温度传感器模块,显示局部采用1602液晶。本次设计虽然只是一个演示模型,但是具有充分的科学性和实用性。首先我们根据汽车的复杂情况,按照现有材料搭建一个小车模型,车轮,车身,直流电机,按键,温度传感器,单片机,L29BN电机驱动模块等。DS18B20温度传感器将检测到的温度数据传给单片机,单片机根据接收到的信号进行处理再传给显示模块显示,由按键模块控制小车进行倒车、前进、左转、右转等动作。1.2方案论证1.2.1 小车驱动局部方案一:小车的电机驱动局部采用自己搭建的9012三极管电路来实行小车的驱动,9012三极管电路具有电路简单,操作方便的等特点。方案二:小车的电机驱动局部采用L298N芯片直流电机驱动模块,该模块具有较大的驱动带载能力,驱动局部端子供电范围Vs:+5V+35V,并且另外自带了5V、3V的输出端口。方案论证:本设计为2轮驱动的小车,对于小车驱动局部要求能够有较大的带载能力,并且在小车的实际设计过程中,需要不同的输出电压来提供应小车的各个模块。因此综上所述采用方案二,小车的电机驱动局部使用L298N芯片直流电机驱动模块。温度显TR局部方案一:温度的显示通过数码管显示,数码管驱动简单,但是所能显示的字符数量有限有局限性方案二:用液晶来显示温度传感器采集到的温度,虽然操作比数码管要复杂一点,但是功能比数码管要强大很多,能够显示各种各样的字符方案论证:本设计是要显示温度,并且要显示需要显示英文字符,数码管无法满足要求,因此采用1602液晶来做显示模块第2章系统硬件构成1. 1系统设计原理本设计主要分为两局部:按键控制局部和温度检测局部。控制局部主要由电源电路,单片机最小系统,按键模块和电机驱动模块组成,遥控局部的系统框图如图2-1所示。小车局部由电源电路,单片机最小系统,显示电路,无线电木块,报警电路,超声波电路等电路模块组成,小车局部的系统框图如图2-2所示。DS18B20外部电源STC单片机最小系统16022. 2主要元器件简介3. 2.1STC89C52RC简介常用的单片机有很多种:InteI8051系列、MOtoroIa和M68HC系列、Atmel的T89系列、台湾华邦(WinbOnd)W78系列、荷兰PiliPs的PCF80C51系列、MiCroChiP公司系列4位单片机、台湾义隆的EM-78系列等:本次设计最终选用了STC89C52单片机。本系统采用最常用的STC89C52单片机,它是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的STC89C52是一种高效微控制器。STC89C52单片机为很多嵌入式系统提供了一种灵活性高且价廉的方案。引脚排列如图2-3所示。图2-3STC89系列引脚排列2.2.2液晶显示电路该设计的显示局部采用LCD1602来显示超声波测距模块测得的距离。对于现实电路我们可以采用数码管,也可以采用液晶显示。液晶显示相对于数码管显示电路更简洁,显示更明了,故我们采用液晶显示电路。液晶又分字符型和点阵型,我们使用的液晶是字符型液晶。LCD1602自带字符库,不需要查找代码,英文字符可直接使用。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的电位器,调节液晶的亮度。液晶显示电路如图2T1所示。图2-11液晶显示电路1.298N芯片直流电机驱动模块该模块由L298N作为双H桥直流电机驱动芯片,驱动局部端子供电范围Vs:+5V-+35Vo如果在模块上取电压供电,那么模块供电范围为Vs:+7V+35V。模块的驱动不封峰值电流Io为2A。其他相关参数见表2"。模块的实物图见附录附件1(注:红色线框局部为电源接口)。表2-1L298N芯片直流电机驱动模块产品参数逻辑局部端子供电范围VSS+5V÷7V(可板内取电+5V)逻辑局部工作电流范围OTGnA控制信号输入电压范围低电平;-0.3VWVinWL5V高电平:2.3VVinVss使能信号输入电压范围低电平:一0.3WVinWL5V(控制信号无效)高电平:2.3VWViiI这Yss(控制信号有效)最大功耗20W(温度T=75C时)存储温度25"C+130*C驱动板尺寸82mm*57mm*33mm(带固定铜柱,散热片高度)驱动板重量60g其他扩展控制方向指示灯、逻辑局部板内取电接口2.2.4遥控局部独立按键电路遥控局部的独立按键与单片机的接口设置为PI.2、PI.3、PL4、PL5,分别控制小车的前进、后退、左转弯、右转弯。独立按键采用低电平触发,即当按下按键时给单片机一个低电平信号,单片机随后做出相应的处理,当按键松开时,单片机接收到一个高电平信号,单片机随后继续做出相应处理。控制局部的独立按键电路如图2-12所示。图2-12控制局部独立按犍电踏第3章软件的设计与说明3. 1软件设计系统功能的实现依赖于软、硬件的协同工作。主控芯片为STC89C52RC单片机。单片机控制软件实现遥控和小车的各项功能。程序编译采用KeiIuVision4编程软件,KeiIUViSion4程序编译界面如图3T所示。程序局部采用目前单片机最通用的C语言进行编程。程序的烧录软件采用STCSP_V479软件烧写编译好的HEX文件,STCSP_V479软件程序烧写界面如图3-2所示。图3-1KeiIUViSion4编程软件界面图3-2STC_ISP_V479软件程序烧写界面3. 2软件的说明4. 2.1控制局部主程序流程遥控局部主程序流程图如图3-3所示。程序从主函数开始执行,独立按键模块初始化,同时在主函数中定义单片机口对应的按键按下时所发出的函数值。接下来判断是否有按键按下,如果有按键按下,那么发送相应的按键对应的函数值,接着判断是否又有按键按下。如果未发现按键按下那么在主函数中循环判断是否有按键按下。图3-3遥控主程序流程图温度检测显示局部主程序流程图小车局部主程序流程图如图3-5所示。程序从主函数开始执行,液晶显示模块初始化,按键模块初始化。各个模块初始化完毕后,单片机判断是否接受到了DS18B20采集的数据信号,如果接收到信号,处理相应的数值,如果没有接收到新的数值那么返回继续判断是否接受到新的信号。接收到信号后,单片机对应的对液晶的读写进行命令。IS3-5温度检测显示局部流程图第4章调试与总结基于单片机的智能小车控制有许多的模块,在做整体设计之前首先是对每个模块的调试。只有在确保每个模块都正常的情况下才能进行总体的设计和总体的调试。每个模块都需要软硬件的调试才能确保模块的正常。单片机的电路系统相对于简单一些,对于焊接只要多练习就不会出现问题,但是,单片机的电路系统中只要出于一处的错误,那么会对检测造成很大的不便,而且电路的交叉线较多,对于各种锋利的引脚都要注意处理,否那么会刺破带有包皮的导线,那么会对电路造成短路现象。在本次单片机的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以防止的,主要问题在于电机不能正常速度驱动,原因出于电源电压不够造成的。解决方案:更换大功率电源。4.1调试的总结通过这次设计,掌握51单片机的原理,了解简单传感器组成原理,初步掌握传感器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与装配、调试,提高自己的动手能力,稳固己学的理论知识,建立单片机理论和实践的结合,了解传感器各单元电路之间的关系及相互影响,从而能正确设计、计算定时计数的各个单元电路。初步掌握传感器的调整及测试方法。提高动手能力和排除故障的能力。调试期间要多向同学老师请教,有问题就该虚心请教。经过屡次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与对电路的分析能力,同时在软件的编程方面得到更高的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与稳固。参考文献1徐国华.移动机器人的开展现状及其趋势J.机器人技术与应用,2001,(03):1102-1103,1150.2彭宏业,段哲民编著小型舞蹈机器人的驱动系统设计J.国外电子元器件.2005,(04):56-65.3陈南主编.定位控制器的设计与实现J.西安科技大学学报.2003.4谭浩强.C语言程序设计M.北京:清华大学出版社,1998.5苏卫东,任思聪等.温控箱数学模型的建立及其自适应PlD控制J.中国惯性技术学报,1995年,(3):4.6万福君.MCS-51单片机原理、系统设计与应用M.北京:清华大学出版社,2023.7彭宏业,段哲民编著小型舞蹈机器人的驱动系统设计J国外电子元器件.2005,(4).8刘甘娜等编著.IBM-PC微机原理及接口技术J.西安:西安电子科技大学出版社,1998.9孙广清.便携式温度传感标定装置D西北工业大学硕士学位论文,2007.10鲍丽星,陈晓争一种高精度信号源的设计J南京航空航天大学,2023,16(4)1588-590,11党宏社智能车辆系统开展及其关键技术概述J公路交通科技,2002.(4)口2林敏.简易数字化语音存储与回放系统与.仪表技术,2023,28:13-18.13余祖俊.微机监测与控制应用系统设计,北方交通大学出版社,2001.1214温志明运动控制系统分析与应用J,国防工业出版社,2023.215WNGSHX,WUGN,JIANGW,etal.Theprincipleandilluminationappliesoflightemittingdiodej.LightandLighting,2006»14:21-23.16I.MFiIanvsky1H.Baltes.CMOSSchmitTriggerDesignLj.IEEETransactiomsonCircuitsandSystem-FundamentalTheoryandApplications.1994,41(1):46-49.致谢在作品完成之际,我们要特别感谢严焰老师的热情关心和悉心指导。在我们作品制作的过程中,老师们给了我们很多耐心的指导和启发,不仅让我学到了专业知识,还让我学到了很多做人的道理。特别是他们广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我们终生受益,在此表示真诚地感谢。在作品的制作过程中,也得到了许多同学的珍贵建议,在此一并致以诚挚的谢意。感谢所有关心、支持、帮助过我们的朋友。最后,向在百忙中抽出时间对本文进行评审并提出珍贵意见的各位领导老师表示衷心地感谢!由于自身水平有限,设计中一定存在很多缺乏之处,敬请各位老师批评指正。附录附件1L298N电机驱动模块附件2小车侧视图附件3小车俯视图附件4小车最终硬件图附件5程序清单# include<reg52.h>#include<intrins.h># defineucharunsignedchar# defineuintunsignedintsbitkey1=P2;sbitkey2=Pl3;sbitkey3=Pl4;sbitkey4=Pl5;sbitINl=P01;sbitIN2=P()2;sbitIN3=PO3;sbitIN4=P04;sbitRS=PO5;液晶sbitRW=P06;sbitEN=P()7;sbitDQ=P3Odsl8b2O与单片机连接口unsignedcharcodestrl=,temperature:"unsignedcharcodestr2="uchardatadisdata5;uintlvalue;/温度值UChartflag;温度正负标志voiddelay(uintXmS)i11lij;fbr(i=xms;i>O;i)for(j=110;j>0;j-);*小¢p*voidqianjin()1N1=1;IN2=0;delay(5);IN3=1:1N4=O;voidhoutui()INL=O;IN2=1;delay(5);IN3=0;1N4=1;voidzuozhuan()INI=1;IN2=0;delay(5);IN3=0;IN4=0;voidyouzhuan()INl=O;IN2=0;delay(5);IN3=1;IN4=0;voidtingzhi()INl=O;IN2=0;delay(5);IN3=O;IN4=0;*cd1602序*/voiddelay1ms(unsignedintms)延时1毫秒(不够精确的)unsignedinti,j;for(i=0;i<ms;i+)fo,(j=0y<100J+);voidwr_com(unsignedcharCOm)写指令delaylms(l);RS=O;RW=O;EN=0;P2=com;delaylms(l);EN=I;delaylms(l);EN=O;voidwr_dat(unsignedchardat)写数据delayIms(I);RS=I;RW=0;EN=O;P2=dat;delayIms(I);EN=I;delaylms(l);EN=O;voidIccLinitO/初始化设置delaylms(15);wr_com(Ox38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_com(0x0l);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);voiddisplay(unsignedchar*p)显示while(*p!=,0,)(wr_dat(*p);P十十;delay1ms(l);voidinilplay。/初始化显示lcd_init();wr_com(0x80);display(strl);wr_com(0xc0);display(str2);程序*ds820voiddelay-l8B20(unsignedinti)t1微秒while(i-);voiddsl820rst()*dsl820复位*/unsignedcharx=0;DQ=I;DQ复位delay_18B20(4);/MEDQ=O;/DQ拉低delay_l8B20(l00);/精确延时大于480usDQ=1;"拉高delay_18B20(40);uchardsl820rd()/*读数据*/unsignedChari=0;unsignedchardat=O;for(i=8;i>O;i)(DQ=0;"给脉冲信号dat>>=i;DQ=1;"给脉冲信号if(DQ)dat=Ox8O;delay_18B20(10);return(dat);voidds1820wr(ucharwdata)/*写数据*/unsignedchari=0;for(i=8;i>0;i-)(DQ=0;DQ=wdata&OxOl;delay8B20(10);DQ=1;wdala>>=1;readlemp0/*读取温度值并转换*uchara,b;dsl820rst();dsl820Wr(OXCC);俨跳过读序列号*/dsl820Wr(OX44);/*启动温度转换*/dsl820rst();ds1820Wr(OXCc);俨跳过读序列号*/击1820Wr(OXbe);*读取温度*/a=dsl820rd();b=dsl820rd();tvalue=b;tvalue<<=8;tvalue=tvaluea;if(tvalue<xfff)tflag=O;elsetvalue=-tvalue+1;tflag=l;BaIUe=tvalu咪0.625);/温度值扩大10倍,精确到1位小数retur(tvalue);/*/voiddsl820disp()温度值显示ucharflagdat;disdataOJ=tvake/1000+0x30;/百位数disdata1=IVaIUe%1000/100+0x30;十位数disdata2=tvalue%100/10+0x30;个位数disdata3=tvalue%10+0x30;/zJJjif(tflag=O)flagdat=0x20;"正温度不显示符号elseflagdat=02d;负温度显示负号:-if(disdataO=Ox3O)disdata0=0x20;/如果百位为0,不显示if(disdatafI=0x3()disdatal=0x20;"如果百位为0,十位为0也不显示Wjcom(OxcO);wr_dat(flagdat);显示符号位wr_com(OXC1);wr_dat(disdataO);显示百位wr_cum(OXC2);Wr_dat(disdatal);显示十位Wr_com(OXC3);Wr_dat(disdata2);显示个位wr_com(OXC4);wr_dat(OX2e);显示小数点Wjcom(OXC5);wr_dat(disdata3);显示小数位y*主函数*/voidmain()init_play();初始化显示while(l)tingzhi();Pl=0X3C;ead_temp。;读取温度dsl820disp();显示if(keyl=O)qianjin();if(key2=0)houtui();if(key3=0)zuozhuan();if(key4=0)youzhuan();