单片机智能小车设计-学位论文.doc

上传人:可**** 文档编号:93224944 上传时间:2023-07-01 格式:DOC 页数:28 大小:820.50KB
返回 下载 相关 举报
单片机智能小车设计-学位论文.doc_第1页
第1页 / 共28页
单片机智能小车设计-学位论文.doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《单片机智能小车设计-学位论文.doc》由会员分享,可在线阅读,更多相关《单片机智能小车设计-学位论文.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、广东职业技术学院毕业综合实践报告 题 目: 单片机智能小车设计 类 型: 专 业: 班 级: 学生姓名: 指导教师: 完成时间: 2016 摘要智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现。智能小车,也称为轮式机器人,是一种以汽车电子为背景,涵盖智能控制、模式识别、传感技术、计算机、机械等多学科的科技创意性设计。一般主要由路径识别、速度采集以及车速控制等模块组成。本次设计的简易智能小车,采用STC89C51单片机作为小车的检测和主控芯片,充分利用了自动检测技术、单片机最小系统、液

2、晶显示模块电路、串口无线通信,以及声光信号的控制、电机的驱动电路。通过keil C软件编程,不断调试,最终实现小车的无线控制,壁障等功能。关键词:智能小车 单片机 无线控制 壁障引言 随着自动化的发展,自动化开始向复杂的系统控制和高级的智能控制系统发展,并广泛的应用到各个领域中,实现更大规模的自动化。智能小车,也称为轮式机器人,是一种以汽车电子为背景,涵盖智能控制、模式识别、传感技术、计算机、机械等多学科的科技创意性设计。一般主要由路径识别、速度采集以及车速控制等模块组成。智能小车最适合在那些人类无法工作的环境中工作,该技术可以应用于无人驾驶机动车,无人生产线,服务等领域。尤其是危险和未知的环

3、境下,智能小车的优势更为明显。本文所研究的智能小车主要有无线控制,壁障等多种功能,初步实现智能化,可作为智能化研究的模型,具有较大的研究空间,适合于多种领域的智能化研究及开发。目录第一章 主控系统及驱动系统51.1 主控芯片的选择51.2 驱动系统51.2.1 电机及驱动芯片的选择51.2.2 电机驱动模块6第二章 无线控制系统72.1 无线模块设计7 2.2 通讯模块82.2.1 蓝牙模块82.2.1 接受数据子程序82.2.2 发送数据子程序8第三章 壁障系统93.1 壁障模块93.1.1 超声波模块93.1.2 红外传感器93.1.3 壁障实现过程10第四章 温度传感系统114.1 温度

4、传感器简介114.2 读温度子程序12第五章 LCD 液晶显示系统.145.1 LCD1602液晶显示屏简介145.1.1 LCD1602引脚说明145.2 LCD1602操作155.3 LCD1602显示子程序16第六章 小车速度控制系统.176.1 车速控制原理176.2 车速控制子程序177.1 流程图18附录19第一章 主控系统及驱动系统1.1 主控芯片的选择单片机是智能小车的核心部件,一方面它要接收各种传感器送来的信号和PC机发送的数据;另一方面要对接受到的信号进行处理,显示其信息,同时控制电机进行相应动作。在单片机实现的功能中,使用查询方式获取传感器返回的信息,即读取传感器返回信号

5、,需要单片机有较快的处理速度,使小车对信息的获取及处理是实时准确的,实现小车的快速反应与及时避障。同时在能够满足小车设计的速度及接口数的要求的同类型单片机中,要考虑选择价格低廉的机型,在保证了控制准确性及实时性的基础上,能够不提高成本。如今比较普遍的单片机有51系列。8051单片机应用普遍、工具多、易上手、片源广、价格低,但是速度慢、功耗大,适合民用,商用。能够满足智能小车对I/O口的需求,对信息的处理速度快,微秒级别的反应。采用keil软件进行编程,单片机的C语言编程与标准C语言语法是几乎一样的,简单易学。因此AT89C51成为主控芯片。1.2 驱动系统1.2.1 电机及驱动芯片的选择小车采

6、用四轮驱动,在多沙或者较滑的环境中驱动能力较为强,直线行驶能力强。电机采用普通直流电机。直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无级快速启动、制动和反转;能满足各种不同的特殊运行要求。L298N是一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况

7、下允许或禁止器件工作,有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机,通过5、7脚和10、12脚控制两台直流电机的正反转。表1-1为L298N的各个引脚说明。图1-1引脚名称功能1;15SENSING ASENSING B电源检测端,不用时可以接地2;3OUT 1;OUT21Y1和1Y2输出端4VS功率电源电压,此引脚与地必须连接100nF的电容器5;7Input 1;Input 21A1和1A2输入端,TTL电平兼容6;11ENABLE 1;EN

8、ABLE 2输入使能端,TTL电平兼容输入,低电平禁止输出8GNDGND接地9VSS逻辑电源电压,此引脚与地必须连接100nF的电容器10;12Input 3;Input 42A1和2A2输入端,TTL电平兼容13;14OUT 3;OUT42Y1和2Y2输出端表1-11.2.2 电机驱动模块电机驱动模块如图1-2所示,由于L298N第9脚为TTL逻辑电平输入,同时单片机工作电压也为5V,所以利用LM7805三端稳压器件,将输入端的VCC(7V36V)转为5V输出。通过控制输入端IN14可以控制电机的正反转,通过控制使能端高低电平可以控制输出的允许和禁止,同时可以用来做PWM调制,从而达到改变小

9、车的车速。右边的8个二极管有保护芯片的作用,当电机正常运作到关闭时,在关闭的瞬间会产生与正常工作时相反的自感电流,此时便需要通过二极管来释放电流到芯片供电端或者接地端。此驱动模块只能驱动两个电机,由于本文是采用四轮驱动,所以需要两个模块合并,但其中工作原理一致。图2-2第二章 无线控制系统2.1 无线模块设计无线控制是为了能够实现对智能车的远程遥控,使小车可以在遥控状态下代替人类完成一些危险项目。进过整理得出得出如表2-1所示三种短距离无线通讯技术。通讯距离通讯速率控制难易模块成本红外技术10 m16 Mb/s易极低蓝牙技术100 m10 Mb/s一般高WIFI技术300 m0;i-) DQ

10、= 0; dat=1; DQ = 1; if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/void WriteOneChar(uchar dat) uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*读取ds18b20当前温度*/void ReadTemperature(void)int temp1,temp2;uchar a=0,b=0;Init_DS18B20();WriteOneChar(0xCC)

11、; WriteOneChar(0x44);delay_18B20(100); Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE); delay_18B20(100);a=ReadOneChar(); b=ReadOneChar(); temp1=b4; temp1室温整数值temp2=a&0x0f; temp=(b*256+a)4); xs=temp2*0.0625*10;第五章 液晶显示系统5.1 LCD1602液晶显示屏简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*

12、2行等的模块。本论文使用的模块为16*2液晶显示屏,实物图如图5-1所示。能够显示小车所采集到的各种数据:温度,车速档位,与前方障碍物的距离,小车行驶状态(前进,后退,左转,右转)。图 5-1lcd1602的各个引脚说明如表5-1所示编号符号引脚说明编号符号引脚说明1VSS电源地6E使能信号2VDD电源正极714D0D7数据3VL液晶显示偏压15BLA背光源正极4RS数据/命令选择16BLK背光源负极5R/W读/写选择表5-15.1.1 LCD1602引脚说明第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度

13、过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。5.2 LCD1602操作1602液晶模块内部的控制器共有11条控制指令,如表5-2所示:序号指令

14、RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3输入模式00000001I/DS4显示开/关控制0000000DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF000000010写数到CGRAM或DDRAM)10读出的数据内容11从CGRAM或DDRAM读数11读出的数据内容表5-2 控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:

15、清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显

16、示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。5.3 LCD1602显示子程序 void lcd_w_c(uint com)lcdrs=0;delay(3);P0=com;delay(3);lcden=1;delay(3);lcden=0;写命令子函数:向LCD1602写入各种控制命令void lcd_w_d(uint dat)lcdrs=1;delay(3);

17、P0=dat;delay(3);lcden=1;delay(3);lcden=0;写数据子函数:向LCD1602写入要显示的内容void init()lcden=0;lcdrw=0;lcd_w_c(0x38);lcd_w_c(0x0c);lcd_w_c(0x01); lcd_w_c(0x06);LCD1602设置初始化:设置两行显示、5*8点阵,光标不闪烁,数据指针自动加一,清屏第六章 小车速度控制系统6.1 车速控制原理智能小车在不同的环境下对车速的要求是不一样的,例如在陡峭或光滑的环境中,或者在小车需要运载一些重要货物时,则需要小车行驶速度较为缓慢。智能小车驱动芯片L292N芯片为方便车速

18、控制,提供了两个输入使能端:ENABLE 1,ENABLE 2。为了控制小车移动的速度,本论文采用了PWM(Pulse Width Modulation):脉冲宽度调制,利用微处理器的数字输出来对模拟电路进行控制,改变使能端的导通时间,改变占空比,从而改变电源的输出电压,降低或者提升电机的转速。利用51单片机的定时器功能可以改变占空比,将51定时器的工作模式设定在工作方式1,采用定时器0计时,每当计时溢出时则进入定时器0中断,经过判断是否改变导通状态,导通时间越长,小车的车速就越大,反之,导通时间越短,则小车的车速就越小。6.2 车速控制子程序void timer1() interrupt 1

19、TH0=(65536-5000)/256;TL0=(65536-5000)%256;if(count=pwm)en3=1;en4=1;en1=1;en2=1;elseen3=0;en4=0;en1=0;en2=0;count+;if(count=cycle) count=0;第七章 智能小车流程图7.1 流程图智能小车流程图如图7-1所示图 7-1附录#include#define uchar unsigned char#define uint unsigned intsbit trig=P37; /定义超声波模块的制动引脚sbit echo=P36; /定义超声波模块的回响引脚sbit lc

20、drs=P27;sbit lcdrw=P26;sbit lcden=P25;sbit en1=P23;sbit en2=P22;sbit en3=P21;sbit en4=P35;sbit ir_left=P33;sbit DQ=P20; /定义ds18b20通信端口 uchar flag,pwm=0,cycle=10,count,i,receive,qian,bai,shi,ge,send,send1,go,num; uint k;uchar code table=0123456789;uchar code speed=Speed:;uchar code move=MOVE ON;uchar

21、 code back=BACK ;uchar code left=TURN LEFT ;uchar code right=TURN RIGHT;uchar code stop=STOP ;uchar code ult=Ultrasonic:;uchar code temperature=Temperature:;uchar code aut=Enter Auto Contorl;int xs,temp; /定义整数和小数/延时函数(100us左右)void delay_ult()uchar x;for(x=0;x100;x+); void delay(uint k)uchar i,j;for(

22、i=0;ik;i+)for(j=0;j110;j+);/*ds18b20延迟子函数*/void delay_18B20(unsigned int i)while(i-);void lcd_w_c(uint com)lcdrs=0;delay(3);P0=com;delay(3);lcden=1;delay(3);lcden=0;void lcd_w_d(uint dat)lcdrs=1;delay(3);P0=dat;delay(3);lcden=1;delay(3);lcden=0;/*超声波测距函数*/uint ultrasonic()uint time;trig=1; /给制动引脚一个高

23、于60us的脉冲delay_ult();trig=0;while(!echo); /等待回响引脚置高while(echo)time+;time=time/1.5;return time;/*自动壁障子程序*/void auto_control()go=1;send1=1;/k=ultrasonic();send1=1; /将send1置为1if(k0;i-) DQ = 0; / 高电平拉成低电平时读周期开始 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/void Writ

24、eOneChar(uchar dat) uchar i=0; for (i=8; i0; i-) DQ = 0; /从高电平拉至低电平时,写周期的开始 DQ = dat&0x01; /数据的最低位先写入 delay_18B20(5);/60us到120us延时 DQ = 1; dat=1; /从最低位到最高位传入/*读取ds18b20当前温度*/void ReadTemperature(void)int temp1,temp2;uchar a=0,b=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44);/ 启动

25、温度转换delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp1=b4; /低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值temp2=a&0x0f; /小数的值temp=(b*256+a)4); /当前采集温

26、度值除16得 实际温度值xs=temp2*0.0625*10;/小数位,若为0.5则算为5来显示 xs小数/*初始化函数*/void init()trig=0;/拉低制动引脚echo=0;/拉低回响引脚P1=0;TMOD=0x21;/设置定时器T0工作方式2(16位定时器)lcden=0;lcdrw=0;lcd_w_c(0x38);/工作方式lcd_w_c(0x0c);/光标设置lcd_w_c(0x01); /清屏lcd_w_c(0x06);/输入方式设置TH0=(65536-5000)/256;/定时器T0赋初值TL0=(65536-5000)%256;TH1=0xf3;/设置串口波特率为4

27、800(12M晶振)TL1=0xf3;SM0=0;/设置串口工作方式2(10位异步通信)SM1=1;PCON=0x80;REN=1;/串口接受允许标志位EA=1;/开启总中断ES=1; /开启串口中断ET0=1;/打开定时器0中断TR0=1;/启动定时器T0TR1=1;/启动定时器T1/*LCD1602显示子程序*/void display()lcd_w_c(0x80);for(i=0;i6;i+)lcd_w_d(speedi);lcd_w_d(tablepwm);switch(P1)case 0x55:lcd_w_c(0x80+0x40);for(i=0;i7;i+)lcd_w_d(movei);lcd_w_d( );lcd_w_d( );break; case 0xaa:lcd_w_c(0x80+0x40);for(i=0;i9;i+)lcd_w_d(backi);break;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁