《课程设计(论文)基于单片机的智能小车控制.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于单片机的智能小车控制.doc(28页珍藏版)》请在三一办公上搜索。
1、信息工程专业课程设计(二) 题目基于STC89C52单片机的智能小车姓名学号所在院系教育信息与技术所在班级完成时间2016.6.25基于单片机的智能小车 摘要:智能化作为现代电子产品的新趋势,是今后的电子产业的发展方向。智能化设计的电子产品可以按照预先设定的模式在一个环境里自动运作,不需要人为的管理,可应用于科学勘探、环境监测、智能家居等方面。基于单片机的智能小车控制就是其中的一个体现。本设计实现了一种基于51单片机的按键操作控制和温度检测显示系统,通过温度传感器采集温度数据并且通过显示模块显示出来,通过对按键的操作,自动控制转向电机转向,改变行驶方向。 本课题设计的智能小车,具有按键控制前后
2、左右的功能,温度采集功能,液晶显示功能。 序 言1第1章 总体设计方案21.1课题任务分析21.2 方案论证31.2.1小车驱动部分31.2.2 温度显示部分3第2章 系统硬件构成42.1系统设计原理42.2主要元器件简介42.2.1 STC89C52RC简介42.2.2 液晶显示电路52.2.3 L298N芯片直流电机驱动模块62.2.4遥控部分独立按键电路7第3章 软件的设计与说明83.1软件设计83.2软件的说明93.2.1 控制部分主程序流程93.2.2 温度检测显示部分主程序流程图10第4章 调试与总结124.1 调试的总结12参考文献13致 谢14附录15附件1 L298N电机驱动
3、模块15附件2 小车侧视图16附件3 小车俯视图16附件4 小车最终硬件图17附件5 程序清单18序 言随着我国科学技术的进步,智能化和自动化技术越来越普及,各种高科技也广泛应用于智能小车和机器人玩具制造领域,使智能机器人越来越多样化。智能小车是一个多种高新技术的集成体,它融合了机械、电子、传感器、计算机硬件、软件、人工智能等许多学科的知识,涉及到当今许多前沿领域的技术1。而智能电动车正是智能机器人的一种,具有不可估量的实际意义。智能车辆是一个运用计算机、传感、信息、通信、导航、人工智能及自动控制等技术来实现环境感知、规划决策和自动行驶为一体的高新技术综合体。它在军事、民用和科学研究等方面已获
4、得了应用,对解决道路交通安全提供了一种新的途径。随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究,许多国家已经把电子设计比赛作为创新教育的战略性手段。电子设计涉及到多个学科,机械电子、传感器技术、自动控制技术、人工智能控制、计算机与通信技术等等,是众多领域的高科技。电子设计技术,它是一个国家高科技实例的一个重要标准,可见其研究意义很大。第1章 总体设计方案 1.1课题任务分析 本文设计了智能小车控制系统。智能小车是一个运用传感器、单片机、信号处理、电机驱动及自动控制等技术来实现环境感和自动行驶
5、为一体的高新技术综合体,它在军事、民用和科学研究等方面已获得了应用。 通过各种选题之后,我发现制作智能小车非常有意思,它唤起我们对玩具的革新思想,智能小车制作的兴趣。自己遇到过的汽车的功能是怎样的,想通过自己的手创作出属于自己的智能汽车。也夹杂一种童年时对玩具智能化的假想。所以我选定制作单片机智能小车。 通过这次设计,掌握51单片机的原理,了解简单传感器组成原理,初步掌握传感器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与装配、调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解传感器各单元电路之间的关系及相互影响,从而能正确设计、计算定时计数的
6、各个单元电路。初步掌握传感器的调整及测试方法。提高动手能力和排除故障的能力。本设计采用直流电机,电机专用驱动芯片L298N进行电机驱动控制,主控芯片为STC89C52,控制器部分采用简单按键,温度数据的采集采用DS18B20温度传感器模块,显示部分采用1602液晶。本次设计虽然只是一个演示模型,但是具有充分的科学性和实用性。首先我们根据汽车的复杂情况,按照现有材料搭建一个小车模型,车轮,车身,直流电机,按键,温度传感器,单片机,L29BN电机驱动模块等。DS18B20温度传感器将检测到的温度数据传给单片机,单片机根据接收到的信号进行处理再传给显示模块显示,由按键模块控制小车进行倒车、前进、左转
7、、右转等动作。 1.2 方案论证1.2.1小车驱动部分方案一:小车的电机驱动部分采用自己搭建的9012三极管电路来实行小车的驱动,9012三极管电路具有电路简单,操作方便的等特点。方案二:小车的电机驱动部分采用L298N芯片直流电机驱动模块,该模块具有较大的驱动带载能力,驱动部分端子供电范围Vs:+5V+35V,并且另外自带了5V、3V的输出端口。方案论证:本设计为2轮驱动的小车,对于小车驱动部分要求能够有较大的帯载能力,并且在小车的实际设计过程中,需要不同的输出电压来提供给小车的各个模块。因此综上所述采用方案二,小车的电机驱动部分使用L298N芯片直流电机驱动模块。1.2.2 温度显示部分方
8、案一: 温度的显示通过数码管显示,数码管驱动简单,但是所能显示的字符数量有限有局限性方案二:用液晶来显示温度传感器采集到的温度,虽然操作比数码管要复杂一点,但是功能比数码管要强大很多,能够显示各种各样的字符 方案论证:本设计是要显示温度,并且要显示需要显示英文字符,数码管无法满足要求,因此采用1602液晶来做显示模块第2章 系统硬件构成 2.1系统设计原理本设计主要分为两部分:按键控制部分和温度检测部分。控制部分主要由电源电路,单片机最小系统,按键模块和电机驱动模块组成,遥控部分的系统框图如图2-1所示。小车部分由电源电路,单片机最小系统,显示电路,无线电木块,报警电路,超声波电路等电路模块组
9、成,小车部分的系统框图如图2-2所示。 2.2主要元器件简介 2.2.1 STC89C52RC简介 常用的单片机有很多种:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾华邦(Winbond)W78系列、荷兰PiliPs的PCF80C51系列、MicrochiP公司系列4位单片机、台湾义隆的EM-78系列等1。本次设计最终选用了STC89C52单片机。本系统采用最常用的STC89C52单片机,它是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压
10、,高性能CMOS 8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的STC89C52是一种高效微控制器。STC89C52单片机为很多嵌入式系统提供了一种灵活性高且价廉的方案。6引脚排列如图2-3所示。图2-3 STC89系列引脚排列2.2.2 液晶显示电路 该设计的显示部分采用LCD1602来显示超声波测距模块测得的距离。对于现实电路我们可以采用数码管,也可以采用液晶显示。液晶显示相对于数码管显示电路更简洁,显示更明了,故我们采用液晶显示电路。液晶又分字符型和点阵型,
11、我们使用的液晶是字符型液晶。LCD1602自带字符库,不需要查找代码,英文字符可直接使用。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的电位器,调节液晶的亮度。液晶显示电路如图2-11所示。图2-11 液晶显示电路 2.2.3 L298N芯片直流电机驱动模块该模块由L298N作为双H桥直流电机驱动芯片,驱动部分端子供电范围Vs:+5V+35V。如果在模块上取电压供电,则模块供电范围为Vs:+7V+35V。模块的驱动不封峰值电流Io为2A。其他相关参数见表2-1。模块的实物图见附录附件1(注:红色线框部分为电源接口)。表2-1 L298N芯片直流电机驱动模块产品参数逻辑部分端子供电范围Vss
12、5V7V(可板内取电5V) 逻辑部分工作电流范围036mA 控制信号输入电压范围低电平:0.3VVin1.5V 高电平:2.3VVinVss 使能信号输入电压范围低电平:0.3Vin1.5V(控制信号无效) 高电平:2.3VVinVss(控制信号有效) 最大功耗20W(温度T75时) 存储温度25130 驱动板尺寸82mm*57mm*33mm (带固定铜柱,散热片高度) 驱动板重量60g 其他扩展控制方向指示灯、 逻辑部分板内取电接口 2.2.4遥控部分独立按键电路 遥控部分的独立按键与单片机的接口设置为P1.2、P1.3、P1.4、P1.5,分别控制小车的前进、后退、左转弯、右转弯。独立按键
13、采用低电平触发,即当按下按键时给单片机一个低电平信号,单片机随后做出相应的处理,当按键松开时,单片机接收到一个高电平信号,单片机随后继续做出相应处理。控制部分的独立按键电路如图2-12所示。图2-12 控制部分独立按键电路第3章 软件的设计与说明 3.1软件设计系统功能的实现依赖于软、硬件的协同工作。主控芯片为STC89C52RC单片机。单片机控制软件实现遥控和小车的各项功能。程序编译采用Keil uVision4编程软件,Keil uVision4程序编译界面如图3-1所示。程序部分采用目前单片机最通用的C语言进行编程。程序的烧录软件采用STC_ISP_V479软件烧写编译好的HEX文件,S
14、TC_ISP_V479软件程序烧写界面如图3-2所示。图3-1 Keil uVision4编程软件界面图3-2 STC_ISP_V479软件程序烧写界面 3.2软件的说明 3.2.1 控制部分主程序流程遥控部分主程序流程图如图3-3所示。程序从主函数开始执行,独立按键模块初始化,同时在主函数中定义单片机口对应的按键按下时所发出的函数值。接下来判断是否有按键按下,如果有按键按下,则发送相应的按键对应的函数值,接着判断是否又有按键按下。如果未发现按键按下则在主函数中循环判断是否有按键按下。图3-3 遥控主程序流程图 3.2.2 温度检测显示部分主程序流程图 小车部分主程序流程图如图3-5所示。程序
15、从主函数开始执行,液晶显示模块初始化,按键模块初始化。各个模块初始化完毕后,单片机判断是否接受到了DS18B20采集的数据信号,如果接收到信号,处理相应的数值,如果没有接收到新的数值则返回继续判断是否接受到新的信号。接收到信号后,单片机对应的对液晶的读写进行命令。图3-5 温度检测显示部分流程图第4章 调试与总结 基于单片机的智能小车控制有许多的模块,在做整体设计之前首先是对每个模块的调试。只有在确保每个模块都正常的情况下才能进行总体的设计和总体的调试。每个模块都需要软硬件的调试才能确保模块的正常。 单片机的电路系统相对于简单一些,对于焊接只要多练习就不会出现问题,但是,单片机的电路系统中只要
16、出于一处的错误,则会对检测造成很大的不便,而且电路的交叉线较多,对于各种锋利的引脚都要注意处理,否则会刺破带有包皮的导线,则会对电路造成短路现象。 在本次单片机的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,主要问题在于电机不能正常速度驱动,原因出于电源电压不够造成的。解决方案:更换大功率电源。 4.1 调试的总结通过这次设计,掌握51单片机的原理,了解简单传感器组成原理,初步掌握传感器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与装配、调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解传感器各单元电路之间的关系及相互影
17、响,从而能正确设计、计算定时计数的各个单元电路。初步掌握传感器的调整及测试方法。提高动手能力和排除故障的能力。调试期间要多向同学老师请教,有问题就该虚心请教。 经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与对电路的分析能力,同时在软件的编程方面得到更高的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。参考文献1 徐国华.移动机器人的发展现状及其趋势J.机器人技术与应用,2001,(03):1102-1103,1150.2 彭宏业,段哲民编著.小型舞蹈机器人的驱动系统设计J.国外电子元器件.2005,(04):56-65.3 陈南主编.定位控制器的
18、设计与实现J.西安科技大学学报. 2003.4谭浩强C语言程序设计M北京:清华大学出版社,19985苏卫东,任思聪等温控箱数学模型的建立及其自适应PID控制J中国惯性技术学报,1995年,(3):4.6万福君. MCS-51单片机原理、系统设计与应用M. 北京:清华大学出版社,2008.7 彭宏业,段哲民编著.小型舞蹈机器人的驱动系统设计J.国外电子元器件.2005,(4).8 刘甘娜等编著.IBM-PC微机原理及接口技术J.西安:西安电子科技大学出版社,1998.9孙广清便携式温度传感标定装置D西北工业大学硕士学位论文,2007.10 鲍丽星,陈晓争一种高精度信号源的设计J南京航空航天大学,
19、2008,16(4):588-59011 党宏社.智能车辆系统发展及其关键技术概述J公路交通科技,2002.(4)12 林敏.简易数字化语音存储与回放系统J.仪表技术,2008,28(9):13-18.13 余祖俊.微机监测与控制应用系统设计, 北方交通大学出版社,2001.1214 温志明.运动控制系统分析与应用J,国防工业出版社,2008.215 WANG SH X,WU G N,JIANG W,et al.The principle and illumination applies of light emitting diodeJ.Light and Lighting, 2006,14(
20、5):21-23.16I.M Filanvsky,H.Baltes.CMOS Schmit Trigger DesignJ.IEEE Transactioms on Circuits and System-Fundamental Theory andApplications.1994,41(1):46-49.致 谢 在作品完成之际,我们要特别感谢严焰老师的热情关怀和悉心指导。在我们作品制作的过程中,老师们给了我们很多耐心的指导和启发,不仅让我学到了专业知识,还让我学到了很多做人的道理。特别是他们广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我们终生受益,在此表示真诚地感谢。
21、在作品的制作过程中,也得到了许多同学的宝贵建议,在此一并致以诚挚的谢意。感谢所有关心、支持、帮助过我们的朋友。 最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位领导老师表示衷心地感谢!由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。附录附件1 L298N电机驱动模块附件2 小车侧视图附件3 小车俯视图附件4 小车最终硬件图附件5 程序清单 # include #include# define uchar unsigned char# define uint unsigned intsbit key1=P12;sbit key2=P13;sbit key3=P14;
22、sbit key4=P15;sbit IN1 = P01;sbit IN2 = P02;sbit IN3 = P03;sbit IN4 = P04;sbit RS=P05; /液晶sbit RW=P06;sbit EN=P07;sbit DQ=P30;/ds18b20与单片机连接口unsigned char code str1=temperature: ;unsigned char code str2= ;uchar data disdata5;uint tvalue;/温度值uchar tflag;/温度正负标志 void delay(uint xms)int i,j;for(i=xms;i
23、0;i-)for(j=110;j0;j-);/*小车部分*/void qianjin()IN1=1; IN2=0;delay(5);IN3=1;IN4=0;void houtui()IN1=0; IN2=1;delay(5);IN3=0;IN4=1;void zuozhuan()IN1=1; IN2=0;delay(5);IN3=0;IN4=0;void youzhuan()IN1=0; IN2=0;delay(5);IN3=1;IN4=0;void tingzhi()IN1=0; IN2=0;delay(5);IN3=0;IN4=0;/*lcd1602程序*/void delay1ms(un
24、signed int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;ims;i+) for(j=0;j0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*写数据*/unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata=1; read_temp()
25、/*读取温度值并转换*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ds1820wr(0x44);/*启动温度转换*/ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0xbe);/*读取温度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a; if(tvalue0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1; tvalue=tvalue*(0.625);/温度值扩大10倍,精确到
26、1位小数return(tvalue);/*/ void ds1820disp()/温度值显示 uchar flagdat; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata3=tvalue%10+0x30;/小数位 if(tflag=0) flagdat=0x20;/正温度不显示符号 else flagdat=0x2d;/负温度显示负号:- if(disdata0=0x30) disdata0=0x20;/如果百位为0,不显示 if
27、(disdata1=0x30) disdata1=0x20;/如果百位为0,十位为0也不显示 wr_com(0xc0); wr_dat(flagdat);/显示符号位 wr_com(0xc1); wr_dat(disdata0);/显示百位 wr_com(0xc2); wr_dat(disdata1);/显示十位 wr_com(0xc3); wr_dat(disdata2);/显示个位 wr_com(0xc4); wr_dat(0x2e);/显示小数点 wr_com(0xc5); wr_dat(disdata3);/显示小数位 /*主函数*/void main() init_play();/初始化显示while(1) tingzhi(); P1=0X3C;read_temp();/读取温度 ds1820disp();/显示if(key1=0)qianjin();if(key2=0)houtui();if(key3=0)zuozhuan();if(key4=0)youzhuan();