您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页蓝牙智能遥控小车毕业设计论文

蓝牙智能遥控小车毕业设计论文

来源:爱go旅游网
江苏理工学院毕业设计论文

JIANGSU UNIVERSITY OF TECHNOLOGY

本科毕业设计(论文)

基于蓝牙遥控的多功能智能小车设计与制作

学院名称: 机械工程学院 专 业: 机械电子工程 班 级: 09机电2Z 学 号: 09324234 姓 名: 祁星 指导教师姓名: 李尚荣 指导教师职称: 讲师

二零一三年六月一日

江苏理工学院毕业设计论文

基于蓝牙遥控的多功能智能小车设计与制作

摘要:无线遥控的机器人小车在危险环境作业、人员搜集等应用中可发挥特殊的

作用。本次毕业设计选择基于蓝牙遥控的多功能智能小车为对象。设计了该系统的硬件电路原理图和PCB图,控制系统以STC12C5A60S2单片机为主控芯片,采用L293D为电机驱动芯片、蓝牙无线遥控模块、红外光电传感器模块、超声波发射与接收模块等构成外围扩展电路。将自制的控制电路、控制程序和四轮小车机械结构相结合,制作多功能机器人小车。实验调试实现了智能小车的蓝牙无线遥控、自动避障、自动循迹、自动测速、自动测距等功能。

关键词:单片机 ;蓝牙遥控 ;PWM调速;光电传感器

I

江苏理工学院毕业设计论文

Development of a smart remote control vehicle based on blue-tooth

communication

Abstract: Wireless remote control robot car could play a special role in the hazardous

environment operations and search & rescue personnel. A multi-function smart car with bluetooth remote control is selected as my graduation thesis subject. The design of the system hardware circuit schematic and PCB diagram is present in paper. The control system circuit is mainly consist of a STC12C5A60S2 MCU as the main chip, as well as a L293D chip for motor driving, a bluetooth wireless communication module for remote control, a infrared photoelectric sensor module for object detection, a ultrasonic transmitter and receiver module for distance measurement. The smart car is implemented by the combination of the self-control circuit, the control program code and four-wheel car mechanical structure. Experimental tests showed that some functions such as Bluetooth wireless remote control, automatic obstacle avoidance, automatic tracking route, auto-sensing objects and auto-detecting distance were completely achieved in the smart car.

Keywords: Single Chip Microcomputer; Blue-Tooth Remote control; PWM Speed

Regulation; Optical Electronic Sensor

II

江苏理工学院毕业设计论文

目录

第一章

前言 .................................................. 1

第二章 方案比较与论证 ......................................... 2

2.1总体方案设计 .............................................................................................................................................. 2 2.2无线模块设计 .............................................................................................................................................. 3 2.3显示模块设计 .............................................................................................................................................. 3 2.4测速模块设计 .............................................................................................................................................. 4 2.5调速模块设计 .............................................................................................................................................. 6 2.6循迹模块设计 .............................................................................................................................................. 7 2.7避障模块设计 .............................................................................................................................................. 8

第二章 智能车机结构分析 ...................................... 9

3.1底板设计 ...................................................................................................................................................... 9 3.2 电机与底板的连接支架设计 .................................................................................................................... 10 3.3整体装配图 ................................................................................................................................................ 11

第四章 控制系统电路设计 ....................................... 12

4.1 MCU的选型 ............................................................................................................................................... 12 4.2 电机驱动电路设计 .................................................................................................................................... 14 4.3 显示电路设计 .......................................................................................................................................... 16 4.4 蓝牙模块设计 .......................................................................................................................................... 18 4.5 电源电路设计 .......................................................................................................................................... 20 4.6 PCB图设计 ............................................................................................................................................... 21

第五章 蓝牙遥控小车程序设计 ................................... 24

5.1主程序设计 ................................................................................................................................................ 24 5.2电脑端蓝牙控制软件的设置..................................................................................................................... 26 5.3蓝牙模块参数设置 .....................................................................................................................................27

江苏理工学院毕业设计论文

5.4超声波测距程序设计 ................................................................................................................................ 28 5.5超声波避障程序设计 ................................................................................................................................ 29 5.6红外循迹程序设计 .................................................................................................................................... 30

第六章 调试结果分析 ........................................... 31

6.1 各模块功能调试 ........................................................................................................................................ 31 6.2 总结 ............................................................................................................................................................ 35

致谢 .......................................................... 36 参考文献 ...................................................... 37 附 录A ....................................................... 38 附 录B ....................................................... 39

江苏理工学院毕业设计论文

第一章 前言

随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。遥控小车起源于美国,由于政府对无线遥控小车研发的资助以及相关资助的推动作用,日本、美国、德国等工业大国在遥控小车技术上占据着明显优势。我国的无线遥控小车研究工作始于20世纪中后期,在国家的863、973等技术发展计划的重点支持下,国内已大范围地进行无线遥控小车的研究。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究,但是与国际先进还存在一定的差距。可见其研究意义很大。本设计就是在这样的背景下提出的。设计的智能电动小车能够实现无线遥控,串口通讯,实时检测速度,避障碍等功能。无线遥控实现方法包括蓝牙、红外、射频几种,其中蓝牙技术具有一定优势,目前在信息家电方面应用正在铺设。各种家电共用遥控,并可组网与公众互联网相接,共享有用信息。目前蓝牙技术实现无线遥控的短板在于传输距离短和芯片价格高方面。但随着科技发展,这些问题正在逐步得以解决。 无线遥控机器人有着广阔的应用前景。

根据题目的要求绘制电路原理图和PCB图,制作电路板;在Keil C编译环境下编写控制程序并调试,确定如下方案:在蓝牙无线遥控的基础上,加装光电红外传感器、超声波传感器、光敏电阻、温度传感器,实现对电动车的速度、位置、运行状况、运行环境的实时监测,并将测量数据传送至单片机进行处理,然后由单片机根据所检测到的各种数据,对电动车经行对应的控制并将计算出的数据送至上位机显示,实现真正的实时监控。

本次设计可以对电动车的运动状态进行实时监控,可满足对系统的各项要求。本设计采用STC系列中的STC12C5A60S2单片机。以单片机为控制核心,利用传感器检测道路上的各种信息,控制电动汽车的无线遥控、自动避障、自动记录时间、里程和速度、自动寻迹、寻光、自动测温等功能。

第1页 共55页

江苏理工学院毕业设计论文

第二章 方案比较与论证

本次毕业设计主要是针对无线遥控智能车进行分析、设计和制作。本次设计以STC12C5A60S2单片机为主控芯片,实现了智能车的无级调速功能、蓝牙遥控功能、自动避障功能、速度检测功能、光线检测功能、距离检测功能等。

2.1总体方案设计

蓝牙传输模块避障模块驱动模块MCU控制器循迹模块测速模块显示模块 图2.1系统原理框图

本小车是以STC12C5A60S2为主控制器。开始由电脑或者手机发送蓝牙无线信号来启动并复位小车,由超声波传感器或红外光电传感器进行障碍检测,通过单片机控制小车行驶、显示、避障和调速。智能车使用4WD驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双极式H型PWM脉宽调制技术实现快速、平稳地的调速;通过超声波传感器和红外光电传感器实现自动避障,自动循迹等功能;通过透射式光电传感器计量轮子旋转的圈数(也就是脉冲数)实现速度检测功能;最后通过蓝牙无线传输功能将智能车的行驶信息实时地传送给上位机,以实现实时监控功能。当然也可通过蓝牙无线遥控来控制小车的行驶状态。这就是本设计的总体设计思路。

第2页 共55页

江苏理工学院毕业设计论文

2.2无线模块设计

无线控制是为了能够实现对智能车的远程遥控,使小车可以在遥控状态下代替人类完成一些危险项目。目前短距离无线数据传输技术主要有两大类,一类是基于IrDA红外无线通信技术,另一类是基于ISM(Industrial Scientific Medical)频段射频通信技术。较为主流的几种通信技术之间既存在着相互竞争,但又在某些实际应用领域内相互补充、相互配合,究竟选择何种技术更优越,需要由具体的工作环境来决定。表2.1所示为四种短距离无线通讯技术主要性能参数。

表2.1 几种典型无线传输方案比较

通信距离 通信速率 通信频率或波长 频率申请 开发难易 模块成本

蓝牙技术 <100m <10Mb/s 2.4GHz 否 难 高 红外技术 <10m <16Mb/s WiFi技术 ISM射频技术 <300m <11Mb/s 2.4GHz <1000m <500kb/s 315、 433.868、 915和2400MHz 否 易 低 0.75um-24um 否 易 很低 否 难 较低 方案:通过表格可以看出,他们在近距离通讯领域都可以提供可靠的通信服务,但是同时他们的应用有着各自的技术架构的限制。在以上的几种中,我最终选择了蓝牙无线传输方式。

2.3显示模块设计

显示模块的主要功能是显示小车运动时的速度,位置及运动时间等信息。常用显示器件有LCD显示器、数码管,点阵屏等等。根据此次设计需要我提出了以下实现方案

第3页 共55页

江苏理工学院毕业设计论文

方案一:采用8位数码管显示,数码管电路和程序设计简单,但需要循环显示所以占用资源多。

方案二:采用1602LCD显示器显示。此方案采用集成显示模块,硬件电路更加简单,并且液晶显示器消耗电流小,更节能,同时软件实现也简单。

方案三:PC机显示。通过上位机的串口软件来实时监控智能车的行驶信息。软件实现简单,无需其他的外部硬件设计。

表2.2 几种典型显示方式比较

开发难易 模块成本 观察方式 数码管显示 易 很低 繁琐 LCD显示 易 低 繁琐 PC机显示 较难 高 方便 方案:通过表格可以看出,方案三更加简单方便,且在智能车行驶过程中,通过LCD来观察智能车行驶信息也不方便,所以我最终选择方案三为本设计中的显示方案。但为了以后的功能扩展,也附加了1602LCD显示功能。为了节约电能,单独使用了一个单刀双掷开关控制LCD的通断。

2.4测速模块设计

测速模块的功能是完成当前小车速度信息采集,并输出标准脉冲信号,供单片机处理,运算出小车实时速度。速度检测可用加速度传感器,光电编码盘,测速电机等实现。 方案一:磁式测速发电机

永磁式直流测速发电机是一种将转子速度转化为电气信号的机电式信号元件,是伺服系统中基本元件之一。作为测速、校正,解算元件,他被广泛应用于各种速度和位置控制系统中。永磁式测速发电机主要由定子、转子和电刷部件等组成。一般情况下自动控制系统对其元件的要求主要是高的精确度、灵敏度、可靠性等。因此永磁式直流测速发电机在电气性能方面应满足以下要求:

第4页 共55页

江苏理工学院毕业设计论文

(1) 输出电压和转速成线性关系 (2)温度变化对输出特性影响小 (3)输出电压波纹小

(4)正反转的输出特性应该一致 方案二:光电编码器

按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。工作时,光电码盘安装在转子端轴上,随着电机的转动,光电码盘也跟着一起转动,如果有一个固定光源照射在码盘上,则可利用光敏元件来接收到的光的次数就是码盘的编码数。若编码数为60,测量时间为t,测量到的脉冲数为N,则转速为n=N/(t*60)*60=N/t。

方案三:光电对射式

采用对射式红外传感器。在轮辐面板上均匀刻出槽孔,在轮子两侧固定相对的红外发射、接收器件。在过孔处接收器可以接收到信号。从而轮子转动时可以产生连续脉冲信号,通过对脉冲的计数进行车速测量。

表2.3 几种测速方案比较

测量精度 直流测速发电机 高 光电编码器 高 光电对射式 低 开发难易 模块成本 难 低 难 高 易 较低 方案:通过表格可以看出,方案三安装方便简单且精度比方案一的精度高,而方案二的成本太高,且开发难度较高,因此最终我选择方案三。

设计的方案是使用一块亚克力盘(如图2.3),在盘上刻出20格方槽。盘下方的凹形物为槽型光电耦合器,其两端高出部分的里面分别装有红外发射管和红外接收管。遮光盘在凹槽中转动时,缺口进入凹槽时,红外线可以通过,缺口离开凹槽红外线被阻挡。

第5页 共55页

江苏理工学院毕业设计论文

由此可见,车轮每转一周,红外光接收管均能接收到20个脉冲信号并直接送入单片机的中断口进行计数。为实现可逆记数功能,我在测距仪中并列放置了两个槽型光电耦合器,遮光盘先后通过凹槽可产生两个脉冲信号。根据两个脉冲信号发生的先后顺序与两个光电耦合器的位置关系,即可计算出智能车的行驶方向。

图2.2码盘图

2.5调速模块设计

方案一:串电阻调速系统。旋转变流系统由交流发电机拖动直流电动机实现变流,由发电机给需要调速的直流电动机供电,调节发电机的励磁电流即可改变其输出电压,从而调节电动机的转速。改变励磁电流的方向则输出电压的极性和电动机的转向都随着改变,所以G-M系统的可逆运行是很容易实现的。该系统需要旋转变流机组,至少包含两台与调速电动机容量相当的旋转电机,还要一台励磁发电机,设备多、体积大、费用高、效率低、维护不方便等缺点。且技术落后,因此搁置不用。

方案二:静止可控整流器。简称V-M系统。V-M系统是当今直流调速系统的主要形式。它可以是单相、三相或更多相数,半波、全波、半控、全控等类型,可实现平滑调速。V-M系统的缺点是晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难。它的另一个缺点是运行条件要求高,维护运行麻烦。最后,当系统处于低速运行时,系统的功率因数很低,并产生较大的谐波电流危害附近的用电设备。

方案三:脉宽调速系统。采用晶闸管的直流斩波器基本原理与整流电路不同的是,在这里晶闸管不受相位控制,而是工作在开关状态。当晶闸管被触发导通时,电源电压加到电动机上,当晶闸管关断时,直流电源与电动机断开,电动机经二极管续流,两端

第6页 共55页

江苏理工学院毕业设计论文

电压接近于零。脉冲宽度调制(Pulse Width Modulation),简称PWM。脉冲周期不变,只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速。

表2.4 几种调速方式的比较

开关特性 串电阻调速系统 低 静止可控整流器 低 脉宽调速系统 高 调速精度 低 较低 高 开发难易 易 难 易 模块成本 高 较低 低 PWM调速系统有下列优点:

(1)由于PWM调速系统的开关频率较高,仅靠电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速范围较宽,可达1:10000左右。由于电流波形比V-M系统好,在相同的平均电流下,电动机的损耗和发热都比较小。

(2)同样由于开关频率高,若与快速响应的电机相配合,系统可以获得很宽的频带,因此快速响应性能好,动态抗扰能力强。

(3)由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。 方案:根据以上综合比较,以及本设计中设计要求和直流电机调速的发展方向,本设计选用了方案三。

2.6循迹模块设计

探测路面黑线的原理:光线照射到路面并反射,由于黑线和白线的反射系数不同,可根据接收到的反射光的强弱来判断传感器和黑线相对位置。

方案一:采用可见光发光二极管和光敏二极管

第7页 共55页

江苏理工学院毕业设计论文

采用普通可见光发光管和光敏管组成的发射-接收电路。其缺点在于易受到环境光源的影响。即便提高发光管亮度也难以抵抗外界光的干扰。

方案二:采用反射式红外发射-接收器

采用反射式红外发射-接收器。直接用直流电压对发射管进行供电,其优点是实现简单,对环境光源的抗干扰能力强,在要求不高时可以使用。

方案:根据本题目中对探测地面的要求,由于传感器可以在车体的下部,发射、接收距地面都很近,外界光对其的干扰都很小。在基本不影响效果的前提下,为了简便起见,我选用了方案二。

2.7避障模块设计

方案一:超声波探测

采用超声波器件。超声波波瓣较宽,一个发生器就可以监视较宽的范围。其优点为抗干扰能力强,不受物体表面颜色的影响。

方案二:红外式探测

采用红外式发射、检测一体化模块。由于单个发射器的照射范围不能太小,因此不使用激光管。用波瓣较宽的脉冲调制型红外发射管和接收器。其优点是电路实现简单,但抗干扰性较弱。

表2.5 几种传感器的比较

检测范围(M) 环境要求 检测精度 开发难易 模块成本 超声波探测 0.02-4.5 高 高 难 高 红外式探测 0.01-0.5 低 低 易 低 方案:通过综合考虑,我最终选择了两个方案合用,即将超声波模块安装在小车车尾实现小车倒车壁障,在小车的两侧安装光电检测器来实现前行壁障。

第8页 共55页

江苏理工学院毕业设计论文

第二章 智能车机结构分析

在本次设计中,小车使用四轮驱动。四轮驱动式的结构中因为后轮的转动力矩的增大,所以在横向上的轮胎阻力要大于2轮驱动式的,因此四轮驱动式的车子不易发生方向偏移。而且四轮驱动的车子动力更大,爬坡能力更强。但存在一些不足,如:四轮驱动式的车子更加耗电,而且车体比一般的2轮驱动式的车体重。从整体的性能来看四轮驱动式结构的优势是很明显的。

3.1底板设计

图3.1 智能车底板图

底板是用来支撑车体的主要部件。同时也是用来固定车子零部件的,底板上主要有红外传感器安装槽、超声波传感器安装孔、电机定位槽和走线孔,其余的槽孔是用来留在日后扩展用的。每个器件的安装位置如图3.1所示。底板采用的是亚克力板材。安装方便,结构可靠稳定。

图3.2 底盘共振频率分析

第9页 共55页

江苏理工学院毕业设计论文

如图是电机底板的共振频率分析图,我是以底板边缘的四个安装孔为固定点,由于智能车的整车车体重500g,所以在底盘的中心处加5N的力,经过电脑的自动网格划分,通过软件的共振频率计算后得到图示的应力分布图。从图中可以看出,底板的中间部分是应力最集中的一块,也是最危险的一块,如果车体的振动频率过快,底板很可能会从中间层开始断裂,所以要对底板经行优化设计,减小底板的长度或者加大底板的厚度。

3.2 电机与底板的连接支架设计

图3.3 电机支架图

电机支架主要是用来将电机固定在底板上的,每个电机用两块支架板绑定固定,图示电机支架的工程图中,Ф4为支架的定位孔。它通过慒孔和Ф4圆孔来绑定电机,靠左右两侧的肩台与底板卡在一起。支架的材料也是亚克力板(PMMA)。

表3.1 机械零部件表格

零件 电机支架 螺丝螺母(M3) M3螺柱 码盘 数量 2片 若干 若干 4片 第10页 共55页

江苏理工学院毕业设计论文

3.3整体装配图

图3.4 整车装配图

图3.5 整车材料明细图

整体车体由车盘,轮子,电机,电机支架,测速码盘,托板组成。

在以往的智能小车设计中,大都会采用三轮式结构,前轮一般采用万向轮牵引,左右分别为驱动轮。虽然三轮式的结构简单易于操作,但是在小车行驶过程中的稳定性不足,且由于万向轮的径向阻力非常小,所以很容易偏向。因此在这次的设计中我采用了四轮驱动,虽然四轮驱动式结构相对于三轮式的结构更加复杂,但其稳定性得到明显加强,并且因为4个轮子都为驱动轮,其偏差更为离散,不一定是同侧的偏差方向一致,所以在小车前进过程中很难偏向。

第11页 共55页

江苏理工学院毕业设计论文

第四章 控制系统电路设计

一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等能不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统配置,既按照系统功能要求配置外围设备,在本设计中包括电机驱动模块﹑红外传感器模块、蓝牙模块﹑显示模块等,还要设计合适的接口电路。

4.1 MCU的选型

本设计中使用的是STC12C5A60S2单片机。STC12C5A60S2单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、PWM发生器、内置看门狗、内置8路高速10位A/D转换、独特波特率发生器、中断系统及特殊功能寄存器等。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。

图4.1 STC12C5A60S2引脚图

12131415161718192021221234567891011U4P1.4/ADC4P1.3/ADC3P1.2/ADC2P1.1/ADC1P1.0/ADC0P4.2/CCPOVCCP0.0P0.1P0.2P0.34443424140393837363534

P3.6/WRP3.7/RDXTAL2XTAL1GNDP4.0/SSP2.0P2.1P2.2P2.3P2.4P1.5/MOSIP0.4P1.6/MISOP0.5P1.7/SCLKP0.6P4.7/RSTP0.7P3.0/RXDP4.6/RST2STC12C5A60S2P4.3/SCLKP4.1/MOSIP3.1/TXDP4.5/ALEP3.2/INTOP4.4/NAP3.3/INT1P2.7E:\\单片机\\STC12C5A60S2-english.pdfP3.4/T0P2.6P3.5/T1P2.53332313029282726252423STC12C5A60S2

第12页 共55页

江苏理工学院毕业设计论文

表4.1 STC12C5A60S2硬件结构表 类型 参数 工作电压(V) Flash程序存储器字节 RAM字节 定时器T0、T1 PCA定时器 UART 独立波特率发生器 DPTR EPPROM PCA(16位)PWM(8位) A/D8路25万次每秒 I/O 看门狗 内置复位 外部可调门槛电压 外部中断 STC12C5A60S2 5.5-3.5 60k 1280 有 2 1 有 2 有 2路 10位 44 有 有 有 4路 STC89C51 RC 5.5-3.4 4k 512 有 无 1 无 无 有 无 无 40 有 无 无 4路 由上表可见,STC12C5A60S2单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的位处理器,它实际上是一个完整的1位微计

第13页 共55页

江苏理工学院毕业设计论文

算机,这个一位微计算机有自己的CPU、位寄存器、I/O口和指令集,计算速度比普通的8051快8 ~12倍。

4.2 电机驱动电路设计

L293D_EN1GNDR11KJ2J3J4J51212121L293D_IN123456L293D_IN278VCC_MotorEN1IN1OUT1GNDGNDOUT2IN2VCC2L293DVCC5vIN4OUT4GNDGNDOUT3IN3EN21615L293D_IN41413121110L293D_IN39R31KL293D_EN212U3VCC

图4.2 电机驱动电路图

本设计采用L293D芯片,L293是ST公司生产的一种高电压、小电流电机驱动芯片。该芯片采用16脚封装,内部是由双极性管组成的H桥电路。其输出电流为100mA,最高电流2A,最高工作电压36V,可以驱动感性负载,可以控制电机的正反转,且很容易被单片机控制。用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H桥电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。

图4.3 L293D内部结构图

第14页 共55页

江苏理工学院毕业设计论文

图示为L293d的内部结构图,L293d内置了与门、非门、三级管组成的两组电路,因为其排列形状像‘H’子母,所以称其为H桥路。通过控制三极管的通断就可以是电机旋转起来,而通过控制不同三极管的导通,电流的流向就会发生改变,电机的转向也就会发生变化。在图4.3中,使ENA与ENB两个使能端始终为1,通过控制IN1 ~IN4输入端的状态来改变电机的转向。

表4.2 L293D真值表

IN1 IN2 IN3 IN4 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 右电机 正 正 反 反 × 左电机 正 反 正 反 × 当IN1、IN2、IN3和IN4分别为1010时,T1、T4、T5和T8导通,左电机和右电机正转;

示例程序1:void Forward(unsigned char Speed_Right,unsigned char Speed_Left)//前进 {

L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0;

PWM_Set(255-Speed_Right,255-Speed_Left); }

脉宽调制器本身是一个由运算放大器和几个输入信号组成的电压比较器。运算放大器工作在开换状态,稍微有一点输入信号就可使其输出电压达到饱和值,当输入电压极性改变时,输出电压就在正、负饱和值之间变化,这样就完成了把连续电压变成脉冲电压的转换作用。加在运算放大器反相输入端上的有三个输入信号。一个输入信号是锯齿波调制信号,另一个是控制电压,其极性大小可随时改变,与锯齿波调制信号相减,从

第15页 共55页

江苏理工学院毕业设计论文

而在运算放大器的输出端得到周期不变、脉宽可变的调制输出电压。只要改变控制电压的极性,也就改变了PWM变换器输出平均电压的极性,因而改变了电动机的转向.改变控制电压的大小,则调节了输出脉冲电压的宽度,从而调节电动机的转速.只要锯齿波的线性度足够好,输出脉冲的宽度是和控制电压的大小成正比的。

示例程序2为脉宽调制函数,其中PWM_Set为PWM调速函数,本设计采用的是软件调速,Speed_Right、Speed_Left为用户给定的初值速度,速度值范围:0 ~255,数值越大,速度越快。在通常的程序中多是采用定时器为波特率发生器。而本次设计中采用的是MCU自带的PWM脉冲发生器,stc12c5a60s2有内置的一个计数器和比较寄存器CCAPnL和CL,CCAPnL用来存放一个0-255之间的一个数据,CL是一个计数器,当CL的值小于CCAPnL时,PWM引脚输出低电平脉冲,当CL的值大于CCAPnL时,PWM引脚输出高电平脉冲

示例程序2:void PWM_Set(unsigned char PWM0_DATA,unsigned char PWM1_DATA) { }

CCAP0L=PWM0_DATA;//装入比较初值 CCAP0H=PWM0_DATA;

CCAP1L=PWM1_DATA; //装入比较初值 CCAP1H=PWM1_DATA;

4.3 显示电路设计

本设计中采用LCD1602字符型液晶屏为下位机显示设备,在单片机的人机交流界面中,一般输出方式有:发光管、LED数码管、液晶显示器。液晶显示器显示质量高,由于液晶显示器每一个点在收到信号就一直保持那种色彩和亮度,恒定发光,因此,液晶显示器的画面质量高不会闪烁。由于液晶显示器都是数字式的,所以和单片机的接口更加简单可靠,操作方便。液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,因此,液晶显示器也有体积小,重量轻的优点。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就显示,这样即可以显示出图形。液晶显示器目前已被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

第16页 共55页

江苏理工学院毕业设计论文

S3GND双刀单柄开关LCD1LCD 1602LCD1602LCD_RSLCD_RWLCD_ELCD_DB0LCD_DB1LCD_DB2LCD_DB3LCD_DB4LCD_DB5LCD_DB6LCD_DB7VCCR91KU4P3.6/WRP3.7/RDXTAL2XTAL1GNDP4.0/SSP2.0P2.1P2.2P2.3P2.41234567891011P1.4/ADC4P1.3/ADC3P1.2/ADC2P1.1/ADC1P1.0/ADC0P4.2/CCPOVCCP0.0P0.1P0.2P0.3444342414039383736353412345678910111213141516VCCP1.5/MOSIP0.4P1.6/MISOP0.5P1.7/SCLKP0.6P4.7/RSTP0.7P3.0/RXDP4.6/RST2STC12C5A60S2P4.3/SCLKP4.1/MOSIP3.1/TXDP4.5/ALEP3.2/INTOP4.4/NAP3.3/INT1P2.7E:\\单片机\\STC12C5A60S2-english.pdfP3.4/T0P2.6P3.5/T1P2.533323130292827262524231213141516171819202122GNDVCCVORSRWEDB0DB1DB2DB3DB4DB5DB6DB7BLABLKSTC12C5A60S2

图4.4 LCD1602电路图

LCD的DB0—DB7口与单片机的P0口相连,RS连接到P2.7口,RW连接到P2.6口,使能端E口连接到P2.5口。P0口做为数据写入端。

表4.1 LCD引脚定义

符号 VSS VDD VL RS R/W E D0 D1 电源地 引脚说明 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读/写选择端(H/L) 使能信号 Data I/O Data I/O 第17页 共55页

江苏理工学院毕业设计论文

示例程序:

//****************写数据************************// void WriteDataLCM(unsigned char WDLCM) {

ReadStatusLCM(); //检测忙 LCM_Data = WDLCM; LCM_RS = 1; Delay10us(1); LCM_RW = 0; Delay10us(1); LCM_E = 0; Delay10us(1); LCM_E = 0; Delay10us(1); LCM_E = 1; Delay10us(1); }

4.4 蓝牙模块设计

蓝牙模块主要是为了实现上位机与下位机的数据传输,本设计是通过蓝牙转串口模块,实现上位机与下位机的无线通讯功能,所以本质上使用的是单片机串口通信。

串行通讯的特点是:数据按位顺序传送,最少仅需一根传输线即可完成,成本低但传送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。 串行通讯又分为异步通讯和同步通讯两种方式。在单片机中,主要使用异步通讯方式。

第18页 共55页

江苏理工学院毕业设计论文

蓝牙模块RSTUSB to UART TTL转换板PCPCUSB to TTLRXDTXDUSB口5VGNDAT5VTXDRXDGNDST 图4.5 USB与蓝牙模块相连

在本设计中采用WE-40C(如图4.6)蓝牙模块,设置一个为主机,另一个为从机。通过发送AT指令来控制智能车的前进、后退和转弯。WE-40C使用方便,可支持一对多通讯,也可通过AT指令来切换模块的主从模式。当蓝牙模块上电后红色指示灯闪烁,与另一蓝牙模快时,蓝色指示灯常亮。

图4.6 WE-40C蓝牙模块实物图

WE-40C特点:1.使用方便,两模块通电后自动连接,非常方便。

2.具备5V和3.3V两种接口。

3.支持分时一对多通讯,可绑定模块地址指定通讯。 4.主从一体化,可通过简单的AT指令任意切换主从模式。 5.带有9个扩展IO口(两个预留),既可输入也可输出。 6.发射通讯距离远,开阔地40米。

7.模块采用双PCB复合式设计,采用加厚板材(1.6mm)。

第19页 共55页

江苏理工学院毕业设计论文

WE-40C应用范围:

1.主要是用于代替串口线,包含TXD和RXD两组信号,可以直接接入单片机等带有串口的系统或设备,也可以通过MAX232芯片转换成RS232电平后使用。

2.单片机通过电脑蓝牙适配器和电脑连接,无线收发数据。

3.单片机和智能手机蓝牙连接,实现单片机和智能手机之间的无线串口通讯。

4.5 电源电路设计

VCC_Motor2U1GND5VOUTINU2GND5VOUTINGND123D1DIODEJ621S113500ma4USB_PowerGNDC2220UFGND5627.2VC1220UFGNDS2213456C3220UFGNDVCCF1GND1BLU_VCC23J1jump17.2V7.2V

图4.7 电源电路图

如图4.7中J6为电池接口,U1为ASM1117稳压芯片,C1、C2、C3为滤波电容,D1

为续流二极管,当小车断电时,电路板中会产生感应电流通过D1流向地端,这样减小了感应电流对元器件的损坏。S1,S2是电池供电和USB供电的切换开关,当S1拨到2,4位、S2拨到3,6位时小车由电池供电,当S1拨到3,6位、S2拨到2,4位时,小车由USB供电。VCC_Motor为电机驱动芯片电源,BLU_VCC为蓝牙通讯模块电源。

表4.2各电源模块分配

7.2V VCC VCC_Motor BLU_VCC 电池电源 MCU电源 电机驱动芯片电源 蓝牙通讯模块电源 第20页 共55页

江苏理工学院毕业设计论文

在电源电路设计中采用的AMS1117稳压芯片有可调版与多种固定电压版,设计用于提供1A输出电流且工作压差可低至1V。在最大输出电流时,AMS1117器件的压差保证最大不超过1.3V,并随负载电流的减小而逐渐降低。AMS1117的片上微调把基准电压调整到1.5%的误差以内,而且电流限制也得到了调整,以尽量减少因稳压器和电源电路超载而造成的压力。AMS1117应用高效线性稳压器后置稳压器,用于交换式电源 5V至3.3V线性稳压器电池充电器有源SCSI终端笔记本电源管理电池供电设备。本设计中是利用AMS1117将电池的7.2V电压转换为5V电压供给单片机和外围的传感器设备。如,红外传感器、蓝牙模块、超声波模块、电机驱动芯片。经测试在用此种供电方式下,单片机和传感器工作稳定,直流电机工作良好。

4.6 PCB图设计

电路原理图见附录A

在电路原理图设计好之后,根据布线原则对元器件进行布局,布线,最后铺铜、

滴泪。将设计好的PCB文件发给厂家进行生产制作,这就是整个电路板的制作过程。一般PCB基本设计流程如下:前期准备→PCB结构设计→PCB布局→布线→布线优化和丝印→网络和DRC检查和结构检查→制板。 (1)PCB布线工艺

焊盘、线、过孔的间距要求:

PAD and VIA : ≥ 0.3mm(12mil) PAD and PAD : ≥ 0.3mm(12mil) PAD and TRACK : ≥ 0.3mm(12mil) TRACK and TRACK : ≥ 0.3mm(12mil) 密度较高时:

PAD and VIA : ≥ 0.254mm(10mil) PAD and PAD : ≥ 0.254mm(10mil) PAD and TRACK : ≥ 0.254mm(10mil) TRACK and TRACK : ≥ 0.254mm(10mil)

(2)本设计中PCB布线工艺规则

① 线

第21页 共55页

江苏理工学院毕业设计论文

在本设计中,信号线宽为0.3mm(12mil),电源线宽为1.27mm(50mil);线与线之间和线与焊盘之间的距离大于等于0.33mm(13mil)。特殊情况下,当器件管脚较密,宽度较窄时,可按适当减小线宽和线间距。

② 焊盘(PAD)

在本设计中焊盘(PAD)与过渡孔(VIA)的设计规则是:插脚式电阻、电容和集成电路等,采用盘/孔尺寸1.6mm /0.8mm(63mil/32mil);插座、插针和二极管等,采用1.8mm/1.0mm(71mil/39mil)。PCB板上设计的元件安装孔径比元件管脚的实际尺寸大0.2~0.4mm左右。 ③ 过孔(VIA) 在本设计中过孔的尺寸为1.27mm/0.7mm(50mil/28mil)。 00000 图4.8 PCB图 制好板子后,购买元器件焊接板子。焊接板子之前先准备好恒温焊台、热风枪、吸锡丝、焊锡丝、助焊剂、镊子等工具。 焊接贴片IC芯片的步骤:

1、将芯片平放在PCB板上,将芯片引脚对准焊盘然后用手指按住;

第22页 共55页

江苏理工学院毕业设计论文

2、然后将芯片的两个对角焊牢; 3、在芯片的四周上适量的焊锡;

4、将PCB板向着焊接引脚的方向下倾斜45度,用松香去掉烙铁头端

多余的焊锡;

5、把粘有松香的烙铁头放在有焊锡的部分;

6、来回拖拉烙铁,将焊锡均匀的布在芯片的引脚上;

7、重复上述步骤焊接芯片的另外的引脚,如果发现引脚间有多余的焊锡就用吸锡丝将多余的焊锡吸掉;

图4.9 PCB板实物图

第23页 共55页

江苏理工学院毕业设计论文

第五章 蓝牙遥控小车程序设计

在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。 5.1主程序设计

开始各模块初始化开串口中断发送欢迎标语检测是否有障碍Y停车并返回字符串提示N定时器中断程序流程图N检测串口是否有数据NY判断接受数据定时器1中断每隔1S中断一次根据不同的数据返回相应的提示字符串并驱动小车停车等待根据公式计算速度将速度值发送到上位机

将速度值转化为字符串格式发送到缓存区

图5.1 主程序流程图 图5.2 定时器中断流程图

程序见附录B

第24页 共55页

江苏理工学院毕业设计论文

图5.1为蓝牙遥控小车的程序流程图,从图中可以看出,小车可以实现蓝牙遥控功能,且在小车行驶过程中,自动检测障碍并提示控制人员。也可以自动测试行驶速度,将速度值送至上位机显示。

在主程序中最主要的一段程序是串口通讯程序,串口通讯函数如下例程1,单片机的串口通讯是为了实现上位机与下位机的数据传输,单片机是通过管脚RXD和管脚TXD与外界通讯的,SUBF是串行口的缓冲寄存器,单片机与上位机的通信数据都是临时存放在SUBF寄存器中的,通过软件的读写操作就可以实现单片机与外设之间的数据通讯了。

串口通讯的初始化主要是对SCON、TCON、TMOD、IE几个寄存器的设置; SCON SM0 SM1 SM2 SM3 REN TB8 RB8 TI RI 串行口控制寄存器 定时器/计数器控制寄存器 定时器/计数器工作方式设置寄存器 中断允许控制寄存器 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TMOD GATE C/T M1 M0 GATE C/T M1 M0 IE

EX0 ET0 EX1 ET1 ES ET2 -- EA 示例程序1:

void Send_Char(unsigned char DATA) {

ES=0;//关闭串口中断

flag1=0;

SBUF=DATA; //将数据发送出去,可以在电脑串口工具的接收区观察 while(!TI);//数据发送完毕之后,T1会置1 TI=0;

ES=1;//重新允许串口中断 }

第25页 共55页

江苏理工学院毕业设计论文

5.2电脑端蓝牙控制软件的设置

软件的设置:1设置波特率,串口号,数据位,停止位,校验位;

2绑定键值;

3设置发送间隔(一般设置在19ms内,收发数据会稳定些); 4开始监听键盘;

图5.3 上位机软件设计

运行电脑上的控制端,打开软件后,设置以上参数后,这里主要是设置按键的绑定值:W绑定十六进制0X33,0X33在程序中对应的是前进标志符;A绑定十六进制0X11,0X11在程序中对应的是左转标志符;D绑定十六进制0X22,0X22在程序中对应的是右转标志符;S绑定十六进制0X44,0X44在程序中对应的是后退标志符;设置完参数后点击开始,数据接收界面时会显示欢迎信息,提示已经入蓝牙控制模式。此时该软件就会通过蓝牙与小车连接,这时就可以随心所欲的遥控小车了(当然遥控距离有限制)。

第26页 共55页

江苏理工学院毕业设计论文

5.3蓝牙模块参数设置

通过串口通讯软件和AT指令对蓝牙主从模块参数经行设置,先上电,然后手动按下AT Mode按钮,进入后Status灯慢闪。这时就可以对蓝牙模块的参数经行自定义设置了:

1、设置配对密码:命令格式【AT+PSWD=<4位密码>】,查询当前密码格式【发送AT+PSWD?】

2、设置串口参数:命令格式【AT+UART=<波特率?>,<几位停止位?>,<几位校验位?>】,查询当前串口参数【发送AT+UART?】

3、模块主从机设置:命令格式【AT+ROLE=<0或1或2>】,查询当前蓝牙模块角色【AT+ROLE?】

0:从机(Slave),被动连接。

1:主机(Master),主动搜索周围的蓝牙从机,并发起连接。和从机连接成功之后便建立起了一条透明的数据传输通道。

2:回环:被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备。

4、修改模块名称:命令格式【AT+NAME=<蓝牙模块的名称>】,查询蓝牙模块名称【AT+NAME?】

第27页 共55页

江苏理工学院毕业设计论文

5、绑定蓝牙串口模块地址:命令格式【AT+BIND=<模块地址>】 6、设置蓝牙串口的连接模式:命令格式【AT+CMODE=<0或1>】

0:指定蓝牙地址的连接模式。 1:任意地址连接模式。

注意:在发送AT指令时,最后要要加上回车符。 5.4超声波测距程序设计

开始初始化延时100ms启动超声波模块检测物体距离是否超出范围NY将距离值转换为字符串送至上位机显示显示超出范围 图5.4超声波测距流程图

程序见附录B

采用单片机IO口触发模块trig(控制端),给至少10us的高电平信号。触发trig端之后,模块自动发送8个40khz的方波,模块再自动检测是否有信号返回。如果有信号返回,模块echo端输出一个高电平,高电平持续的时间就是超声波从发射到返回的

第28页 共55页

江苏理工学院毕业设计论文

时间。单片机计算echo端高电平的时间,计算距离并显示。试距离=(高电平时间*声速(340M/S))/2。 5.5超声波避障程序设计

程序见附录B

开始初始化检测按键是否按下NY启动小车启动超声波模块检测是否有障碍NY右转延时50ms直行

图5.5 超声波避障流程图

第29页 共55页

江苏理工学院毕业设计论文

5.6红外循迹程序设计

开始初始化检测按键是否按下Y N 启动小车左侧检测到黑线右侧检测到黑线两侧检测到黑线没有检测到黑线左转右转停车加速前行

图5.6 红外循迹流程图

程序见附录B

第30页 共55页

江苏理工学院毕业设计论文

第六章 调试结果分析

6.1 各模块功能调试

1、蓝牙遥控调试及结果分析

在小车上电后WE-40C蓝牙模块上的Status工作状态指示灯会快速闪烁,当主

从模块配对成功进行通讯时,蓝牙模块上的Link连接指示灯常亮且Status状态指示灯会间断闪烁。在非开阔地的环境下对不同的距离的通讯情况经行测试,通过电脑端串口工具控制小车直行,观察小车的极限距离为多少。统计本次调试的结果表明,WE-40C蓝牙模块的有效通讯距离为0m到25,在此范围内电脑与小车通讯正常

表6.1 距离对通讯的影响

距离 (M) 通讯 状态

5 10 15 20 25 30 无法通讯 35 无法通讯 正常 正常 正常 正常 正常 2、 红外避障调试及分析

在进行红外避障时,首先要调节红外传感器的灵敏度,如果发现传感器在距离障碍物很远时就检测到了障碍,就将滑动电阻调大些,降低红外线的发射频率;如果发现传感器在距离障碍物很近时才检测到了障碍,就将滑动电阻调小些,提高红外的发射频率。总之将传感器的检测范围调在20-30CM以内。

上电运行后,放到没有障碍物的空地上,小车直走。当前方没有障碍物的的时候车就一直直走。如果前方遇到障碍物,则小车做后退—右转运动。直至前方没有障碍物,这时小车恢复直走。如果左方有障碍物,则小车右转。直至左边没有障碍物,这时小车恢复直走。如果右方有障碍物,则小车左转。直至右边没有障碍物,这时小车恢复直走。如果前面没有障碍物,则先执行直走。也就是说如果前方没有障碍物,即使其他任意方向都有障碍则小车依然直走。

以程序中的一段程序为例:

while(Left_InSen==0 && Right_InSen==1)

{

L_flag++;

第31页 共55页

江苏理工学院毕业设计论文

Forward(0,200); Delay1ms(10); if(L_flag==150) {

L_flag=0;

Stop();

Delay1ms(300);

Back(Back_R_DATA,Back_L_DATA); Delay1ms(500); Stop();

Delay1ms(300); Forward(20,250);

Delay1ms(400);

Forward(Forward_R_DATA,Forward_L_DATA);

}

上述程序中Left_InSen和Right_InSen是左右传感器的状态标志位,当

(Left_InSen==0 && Right_InSen==1)时,就是指左边传感器检测到物体,那这时小车就执行右转指令。程序中是通过L_flag标志位判断小车是否被障碍物卡住的

if(L_flag==150)在标志位自加到150次时,说明小车右转1.5s后依然检测到障碍物,这时执行下一段程序。如果小车被障碍物卡住了,就先停车,300ms后倒车,倒车500ms后,再次停车300ms,右转400ms后,小车继续前进。这里的300ms停车时间是为了给小车电机换向的缓冲时间。

在调试时,小车发生没有发生误判断动作,

3、 循迹功能调试及分析

循迹功能中使用的是红外传感器,在调节传感器时,始终保持红外检测距离在20CM以内。上电后,当小车对着轨迹中间行驶时,左右传感器都没检测到黑线,小车高速直行;当小车偏轨道左侧时,左侧的传感器检测到黑线,小车低速右转;当小车偏轨道右侧时,右侧的传感器检测到黑线,小车低速左转;当小车的左右红外传感器都检测到黑线时,小车停车。

第32页 共55页

江苏理工学院毕业设计论文

以下程序是循迹程序中的主程序:

while(Left_InSen==0 && Right_InSen==0)

Forward(Forward_R_DATA,Forward_L_DATA);//前进

while(Left_InSen==0 && Right_InSen==1)//如果右边传感器检测到黑线,小

车右转。

Turn_Right(150,170); //右转

while(Left_InSen==1 && Right_InSen==0)//如果左边传感器检测到黑线,小

车左转。

Turn_Left(170,150); //左转

while(Left_InSen==1 && Right_InSen==1)//如果两边传感器都检测到黑线,

小车停止。

程序中Left_InSen和Right_InSen是左右红外传感器的状态标志位。在进行循迹功能调试时,小车经常会冲出跑道。通过降低小车直行的速度,解决了这一问题。

4、超声波测距功能调试及分析 void Conut(void) {

time=TH0*256+TL0; TH0=0; TL0=0;

S=time*0.54;//先算出一共的时间是多少微秒 S=S*0.17;//小车距离障碍物的距离 }

程序中,time变量是用来计算超声波从发射到接收总共用了多长的时间。S则是用来计算声波行驶路程,最终将S的值取出送至LCD或者上位机显示。

取值函数:

disbuff[0]=S%10; disbuff[1]=S/10%10; disbuff[2]=S/100%10; disbuff[3]=S/1000;

第33页 共55页

江苏理工学院毕业设计论文

当然超声波测距在实际测量中是有误差的,影响这一误差的因素很多。后来通过反复的测验测出误差在3CM左右,在程序中只要将最后算出的S值再减去3CM。

5、 小车速度精度调试及分析

测试小车的测速精度,本设计是通过透光式红外传感器测量整车速度,在不同的路程内,用秒表测出小车的行驶时间,再用路程/时间得出实际的车速。再将实际车速与单片机计算出的速度经行比较得出小车自动测速的误差。

表6.2光电传感器的测速精度

测试距离(M) 测量值(CM/S) 实际值 (CM/S) 误差值 (CM/S) 平均误差(CM/S) 1 17 2 18 3 16 5 17 10 16 13 19 20 17 25 8 25 7 23 7 23 6 7.1 25 9 24 5 25 8 6、 调试过程中遇到的困难及解决方法

(1)在蓝牙无线遥控过程中,当遇到障碍物,电脑端提示频率刷新过快。 解决方法:在主函数里加上障碍检测标志位,当第一次检测到障碍物时将标志位置位,在下一次的扫描中判断标志位是否与之前的相等,若相等则不发送字符串。

(2)在蓝牙无线遥控过程中有显示乱码的现象

解决方法:用十六进制编辑软件HexEdit打开c51.exe,将80FBFD改为80FBFF。 (3)在循迹检测时,小车会驶出预定的轨道并出现无法检测到黑线的情况。 解决方法:调节红外传感器的灵敏度即可

(4)在测速时,由于忘了设置外部中断的触发方式,采用了默认的电平触发,这样做单片机就会一直处于中断状态,从而导致小车无法行驶。

解决方法:将外部中断触发方式设置成下降沿触发,解决了这一问题。

第34页 共55页

江苏理工学院毕业设计论文

6.2总结

随着时间的流逝,我的毕业设计也接近尾声。这一个月,我开心过,每一次的调试成功都会给我带来莫大的鼓舞和动力。

当然这次毕业设计并不是非常完美,还有一些地方需要后续的改进,比如小车的遥控方式可以改成更先进的无线互联网远程控制方式。如果将小车接入互联网,那只要使用者有台电脑或手机等移动终端,就可以在全球各地对小车进行远程遥控,相比蓝牙遥控无线互联网遥控就显得很有优势了。当然成本也是很高的。还有小车的轮子可以改成坦克式的履带轮,这样小车的越障碍能力会更强,更能适应崎岖的道路。当然车子可以在以后再做大些,在上面安装机械臂,这样就可以更加方便地控制小车进行一些生产作业。当然,没有任何事物可以做到完美无缺的,我相信只要我们不断努力去完善,那做出来的产品才会更出色。

第35页 共55页

江苏理工学院毕业设计论文

致谢

历时一个月的设计过程中,我首先边查资料,边在焊接小车的线路板。在焊接过程中,我感觉到即使是一个简单的电路,要想很轻松的焊好,也不是很容易的事情。有时是“虚焊”的原因,有时可能是阻值选错。这使我深深感受到理论与实际间的差距。通过这样的设计,提高了我的动手能力。每天在实验室除了焊接线路板,还可以上机编程,使我软件调试知识也提高了。

本设计采用的是STC12C5A60S2单片机,这主要是因为该单片机的稳定性比较好和执行指令的速度很快。还可以采用其它系列的单片机。经过自己不断的搜索努力以及李老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,李老师严谨的治学态度和热忱的工作作风令我十分钦佩,他的指导使我受益非浅。在此对李尚荣老师表示深深的感谢。

通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学四年的学习成果。虽然在这次设计中对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这一个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。

由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。

第36页 共55页

江苏理工学院毕业设计论文

参考文献

1 何立民,单片机应用系统设计[M],,92京:航天航空大学出版社,44~57 2 李广弟,单片机基础[M],北京:北京航空航天大学出版社,2001年 3 何希才,新型实用电子电路400例[M],电子工业出版社,2000年 4赵负图,传感器集成电路手册,第一版[M],化学工业出版社,2004年

5张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版[M],哈尔滨工业大学出版社,2003年,24~27,410~416

6马长芳,资丽芳,通信原理[M],北京:科学出版社,2005年 7陈万寿,通信电源系统[M],北京:人民邮电出版社,2008年11月 8富军,单片机开关电源,北京:电子工业出版社,2007年7月 9Michael Miller,蓝牙技术起跳,北京:电子工业出版社,2002年1月

10郭洁,蓝牙技术原理与协议,北京:北京交通大学出版社,清华大学出版社,2002年8月

11李永龙,李祖枢,王牛.直流电机双闭环调速系统(DLM)的建模与辨识[J],控制理论与应用,2008,25(6):78-85

12王洪锋,夏明飞,王坚.单片机与微机的远距离串行通信[J],电力自动化设备,2002,22(5),59-67

13蔡自兴.智能控制及移动机器人研究进展[J],中南大学学报,2005,36(5),121-127

第37页 共55页

江苏理工学院毕业设计论文

附 录A

GNDVCC103pFC8GNDD+D-VCCU7GND4321500maF2GND33pFC933pFC6R12R11R10C1227R27R1K5GNDGND0.1U470UF/16VC111516171819202122232425262728u5DPDMVO_33GNDNCVDD_5GNDGP0GP1NCGND_APLL_TESTOSC1OSC2VCCEE_DATAEE_CLKSHTD_NCTS_NDCD_NDSR_N10UFC4S4NCGNDRI_NRXDVDD_325RST_NDTR_NTXDS51413121110987654321J10J910KR8GNDCON5CON5GNDCON3J14J11口VCC1红外线传感器接GNDVCCCON4速度测试端口VCCKEY_3TXD2RESETGNDL293D_IN2L293D_IN12LED2D2Header 11X2222018161412108642P22119171513119753110KR531GNDCON3J16GND111098765432133pFC1033pFC7接口P3.5/T1P3.4/T0P3.3/INT1P3.2/INTOP3.1/TXDP4.3/SCLKP3.0/RXDP4.7/RSTP1.7/SCLKP1.6/MISOP1.5/MOSIU42红外线传感器GNDVCC22.1184MHZX2E:\\Header 11X2P1单片机GNDCON3J17R4接口10K3红外线传感器GNDVCCGNDHeader 11X2P4STC12C5A60S2\\STC12C5A60S2-english.pdfSTC12C5A60S2P2.5P2.6P2.7P4.4/NAP4.5/ALEP4.1/MOSIP4.6/RST2P0.7P0.6P0.5P0.4VCC2324252627282930313233VCCCON554321J15口超声波接CON3J12P3CON3J13VCCHeader 11X221191715131197531222018161412108642接口VCC口5LCD_E4红外线传感器GND红外线传感器接GNDLCD_RWLCD_RS33KR67.2VVCCGND10KR7GND987654321GNDCON9J8P4.4P4.5P4.1VCCVCCVCCGNDGNDGNDGNDKEY_1KEY_2103pFC5GND8765432174LS148VCCGNDA1A2EI7654U6A00123GSEOVCC910111213141516KEY_3VCCGNDS31KR9VCCLCD1双刀单柄开关100KVCCLCD 1602GNDRP2100KVCCLCD1602RP3S11S10S9S8S7S6GND图4.8 电路原理图

第38页 共55页

J612GND500maF1USB_PowerGNDDIODED1GND220UFC251S16432jumpJ1VCC_Motor7.2VU1S2GND220UF7.2VC1GND220UFC3VCCGNDU27.2VGND10KR2VCCRG1PhotosensorJ71234GNDTXD2RXD2VCCJ2J3VCC_Motor1KR1L293D_IN2L293D_IN1L293D_EN187654321L293DVCC2IN2OUT2GNDGNDOUT1IN1EN1U3EN2IN3OUT3GNDGNDOUT4IN4VCC5v910111213141516L293D_IN3L293D_IN4VCCGND1KR3L293D_EN2J4J5GND江苏理工学院毕业设计论文

附 录B

图1 整车实物图

主程序

/****************************************** ******************************************* 程序名称:蓝牙无线遥控避障 设计者:祁星(09机电2Z) 指导老师:李尚荣 学院:机械工程学院

****************************************** *******************************************/ #include #include

#include //包含前面讲到的PWM头文件,此头文件导入后能产生1KHZ的PWM信号

#include

#define Forward_L_DATA 200 #define Forward_R_DATA 200 #define Back_L_DATA 190 #define Back_R_DATA 190 #define Turn_Left_L_DATA 230 #define Turn_Left_R_DATA 230 #define Turn_Right_L_DATA 230 #define Turn_Right_R_DATA 230

/***自定义一些数据,这些数据对应软件上的数据设置**/ #define leftdata 0x11

第39页 共55页

江苏理工学院毕业设计论文

#define rightdata 0x22 #define forwarddata 0x33 #define backdata 0x44

/*******L293D逻辑电平口定义******/ sbit L293D_IN1=P1^5; sbit L293D_IN2=P1^6; sbit L293D_IN3=P1^1; sbit L293D_IN4=P1^0; sbit L293D_EN1=P1^3; sbit L293D_EN2=P1^4;

/*****左传感器和右传感器接线定义***/ sbit Left_InSen=P2^3; sbit Right_InSen=P2^0;

/******寄存器地址赋值******/ sfr AUXR=0x8e; sfr BRT=0x9c;

/******全局变量定义******/

unsigned char SBUF_DATA,flag1,flag2,flag3,flag4,Last_SBUF_DATA; unsigned int count1=0; unsigned int speed; char s[10]; //存放速度值的缓冲区 /*******函数声明*******/

void SendString(unsigned char *pt); void Send_Char(unsigned char DATA);

//—————————————延时1ms函数———————————— void Delay1ms(unsigned int i) { unsigned char j,k; do{ j = 44; do{ k = 100; do{ _nop_(); }while(--k); }while(--j); }while(--i); }

/*************************电机控制函数******************/ void Forward(unsigned char Speed_Right,unsigned char Speed_Left)//前进 { L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0;

PWM_Set(255-Speed_Right,255-Speed_Left); }

第40页 共55页

江苏理工学院毕业设计论文

void Back(unsigned char Speed_Right,unsigned char Speed_Left)//后退 { L293D_IN1=0; L293D_IN2=1; L293D_IN3=0; L293D_IN4=1;

PWM_Set(255-Speed_Right,255-Speed_Left); }

void Turn_Left(unsigned char Speed_Right,unsigned char Speed_Left)//左转 {

L293D_IN1=1; L293D_IN2=0; L293D_IN3=0; L293D_IN4=1; PWM_Set(255-Speed_Right,255-Speed_Left); }

void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left)//右转 {

L293D_IN1=0; L293D_IN2=1; L293D_IN3=1; L293D_IN4=0; PWM_Set(255-Speed_Right,255-Speed_Left); }

void Stop(void) //停止 {

L293D_IN1=0; L293D_IN2=0; L293D_IN3=0; L293D_IN4=0; PWM_Set(0,0); }

/****************发送字符串函数****************/ void SendString(unsigned char *pt) {

while(*pt) Send_Char(*(pt++)); }

/****************发送字符函数****************/ void Send_Char(unsigned char DATA) {

ES=0;//关闭串口中断 flag1=0;

SBUF=DATA; //将数据发送出去,可以在电脑串口工具的接收区观察

第41页 共55页

江苏理工学院毕业设计论文

while(!TI);//数据发送完毕之后,T1会置1 TI=0;

ES=1;//重新允许串口中断 }

/****************************串口中断函数****************************/ void serial() interrupt 4 { flag1=1;//如果产生了中断,说明单片机串口接收到数据,串口中断标志置1 SBUF_DATA=SBUF; //存放接收到的数据 RI=0;//中断标志 }

/****************************障碍检测函数**************************/ void jiance(void) { if(Left_InSen==0&& Right_InSen==1) //如果左边传感器检测到物体,提示左边有障碍物 { if(flag2!=1) { Delay1ms(500); flag2=1; SendString(\"\\r\\n左方有障碍物...\\r\\n\\r\\n\"); } } else { flag2=0; } if(Left_InSen==1&& Right_InSen==0) //如果右边传感器检测到物体,提示右边有障碍物 { if(flag3!=1) { Delay1ms(500); flag3=1; SendString(\"\\r\\n右方有障碍物...\\r\\n\\r\\n\"); } } else { flag3=0; } if(Left_InSen==0&& Right_InSen==0) //如果前方传感器检测到物体,提示前方有障碍物 { if(flag4!=1)

第42页 共55页

江苏理工学院毕业设计论文

{ Delay1ms(500); flag4=1; SendString(\"\\r\\n前方有障碍物...\\r\\n\\r\\n\"); } } else { flag4=0; } }

/****************************主函数***********************/ void main(void) {

PWM_ini(); TMOD|=0x10; TMOD&=0x1F; TH1=(65536-36815)/256; TL1=(65536-36815)%256; // 20ms TR1=1; ET1=1; EX0=1; IT0=1; // SCON=0x50;//设置串口工作在方式1,允许串口接收数据 BRT=0xff; AUXR=0x11; ES=1; //允许串行中断 EA=1; //开总中断 SendString(\"已经进入蓝牙无线控制模式,\\r\\n\\r\\n请按下对应的键盘按键,无线遥控小车。\\r\\n\");

while(1) {

jiance();

if(flag1==1) //如果产生过中断,证明串口接收到了数据 { flag1=0; if(SBUF_DATA!=Last_SBUF_DATA) { switch(SBUF_DATA) { case leftdata: SendString(\"小车正在左转...\\r\\n\\r\\n\");break;

第43页 共55页

江苏理工学院毕业设计论文

case rightdata: SendString(\"小车正在右转...\\r\\n\\r\\n\");break; default: break; } } switch(SBUF_DATA) { case leftdata: Turn_Left(Turn_Left_R_DATA,Turn_Left_L_DATA);break; case rightdata: Turn_Right(Turn_Right_R_DATA,Turn_Right_L_DATA);break; case forwarddata: Forward(Forward_R_DATA,Forward_L_DATA);SendString(\"小车正在前进...\\r\\n\\r\\n\");SendString(s); break;

case backdata: Back(Back_R_DATA,Back_L_DATA);SendString(\"小车正在后退...\\r\\n\\r\\n\");SendString(s);break; default: break; } Last_SBUF_DATA = SBUF_DATA; Delay1ms(30); } else Stop(); } }

void int0() interrupt 0 { count1++; }

void timer1() interrupt 3 { static unsigned char n=0; TH1=(65536-36815)/256; TL1=(65536-36815)%256; // 20ms n++; if(n>=50) { n=0; speed=(float)count1*1.0053096; count1=0; sprintf(s,\"speed:%3dcm/s\\r\\n\\r\\n\short)speed);//将速度转化为字符串送到S数组中 } }

超声波测距程序

第44页 共55页

江苏理工学院毕业设计论文

/****************************************** ******************************************* 程序名称:超声波测距

设计者:祁星(09机电2Z) 指导老师:李尚荣 学院:机械工程学院

****************************************** *******************************************/ #include #include

#include \"LCD1602display.h\" #define TX P4_0 #define RX P2_2

sbit P4_0=0xc0;//P4口地址 void Delay400Ms(void);

unsigned char code Range[] =\"==Range Finder==\"; unsigned char code ASCII[13] = \"0123456789.-M\"; unsigned char code table[]=\"Distance:000.0cm\"; unsigned char code table1[]=\" Out of range\"; unsigned char disbuff[4]={0,0,0,0}; void Count(void);//距离计算函数

unsigned int time=0; //用于存放定时器时间值 unsigned long S=0; //用于存放距离的值 bit flag =0; //量程溢出标志位 /********距离计算程序***************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=time*0.54;//先算出一共的时间是多少微秒 S=S*0.17;//小车距离障碍物的距离 if((S>=5000)||flag==1) //如果S大于5米,超出了测量范围 { flag=0;

DisplayListChar(0, 1, table1); } else {

disbuff[0]=S%10; disbuff[1]=S/10%10; disbuff[2]=S/100%10; disbuff[3]=S/1000; DisplayListChar(0, 1, table); DisplayOneChar(9, 1, ASCII[disbuff[3]]); DisplayOneChar(10, 1, ASCII[disbuff[2]]);

第45页 共55页

江苏理工学院毕业设计论文

DisplayOneChar(11, 1, ASCII[disbuff[1]]); DisplayOneChar(12, 1, ASCII[10]); DisplayOneChar(13, 1, ASCII[disbuff[0]]); } }

void zd0() interrupt 1 {

flag=1; //中断溢出标志 RX=0; }

/********超声波高电平脉冲宽度计算程序***************/ void Timer_Count(void) { TR0=1; //开启计数 while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 Conut(); //计算 }

/***********************

启动超声波模块*********************************/ void StartModule() { TX=1; Delay10us(2); TX=0; }

/*************主程序********************/ void main(void) {

unsigned long a; Delay1ms(400); //启动等待,等LCM讲入工作状态 LCMInit();//LCM初始化 Delay1ms(5); DisplayListChar(0, 0, Range); DisplayListChar(0, 1, table); TMOD=0x01;//设T0为方式1 EA=1; TH0=0;

TL0=0; ET0=1; TR0=0; while(1) { Delay1ms(100); RX=1; StartModule();

第46页 共55页

江苏理工学院毕业设计论文

for(a=5500;a>0;a--) { if(RX==1) {

Timer_Count(); } } }

}

超声波避障程序

/****************************************** ******************************************* 程序名称:超声波避障

设计者:祁星(09机电2Z) 指导老师:李尚荣 学院:机械工程学院

****************************************** *******************************************/ #include #include

#include \"LCD1602display.h\"

#include \"STC12C5A60S2_PWM.h\" #define TX P4_0 #define RX P2_2

#define Forward_L_DATA 220 #define Forward_R_DATA 220 sbit P4_0=0xc0; //P4口地址

/*****按照原图接线定义******/ sbit L293D_IN1=P1^5; sbit L293D_IN2=P1^6; sbit L293D_IN3=P1^1; sbit L293D_IN4=P1^0; sbit L293D_EN1=P1^3; sbit L293D_EN2=P1^4; void Delay400Ms(void);

unsigned char code Range[] =\"==Range Finder==\"; unsigned char code ASCII[13] = \"0123456789.-M\"; unsigned char code table[]=\"Distance:000.0cm\"; unsigned char code table1[]=\" Out of range\";

unsigned char disbuff[4]={0,0,0,0};//用于分别存放距离的值0.1mm、mm、cm和m的值 void Count(void);//距离计算函数

unsigned int time=0;//用于存放定时器时间值

第47页 共55页

江苏理工学院毕业设计论文

unsigned long S=0;//用于存放距离的值 bit flag =0; //量程溢出标志位 bit turn_right_flag;

void Forward(unsigned char Speed_Right,unsigned char Speed_Left)//向前 { L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0;

PWM_Set(255-Speed_Right,255-Speed_Left); }

void Stop(void) //停车 {

L293D_IN1=0; L293D_IN2=0; L293D_IN3=0; L293D_IN4=0; PWM_Set(0,0); }

void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left)//右转 {

L293D_IN1=0; L293D_IN2=1; L293D_IN3=1; L293D_IN4=0; PWM_Set(255-Speed_Right,255-Speed_Left); }

/********距离计算程序***************/ void Conut(void) { time=TH1*256+TL1; TH1=0; TL1=0; S=time*0.54;//先算出时间是多少微秒 S=S*0.17; //实际的路程是将计算的结果除以2 if(S<=100) { if(turn_right_flag!=1) { Stop(); Delay1ms(50); } turn_right_flag=1; Delay1ms(50); Turn_Right(230,230); }

第48页 共55页

江苏理工学院毕业设计论文

else { turn_right_flag=0; Forward(Forward_R_DATA,Forward_L_DATA); } if((S>=5000)||flag==1) //超出测量范围 { flag=0;

DisplayListChar(0, 1, table1); } else {

disbuff[0]=S%10; disbuff[1]=S/10%10; disbuff[2]=S/100%10; disbuff[3]=S/1000; DisplayListChar(0, 1, table); DisplayOneChar(9, 1, ASCII[disbuff[3]]); DisplayOneChar(10, 1, ASCII[disbuff[2]]); DisplayOneChar(11, 1, ASCII[disbuff[1]]); DisplayOneChar(12, 1, ASCII[10]); DisplayOneChar(13, 1, ASCII[disbuff[0]]); } }

/********************************************************/ void zd0() interrupt 3 //T1中断用来计数器溢出,超过测距范围 {

flag=1; //中断溢出标志 RX=0; }

/********超声波高电平脉冲宽度计算程序***************/ void Timer_Count(void) { TR1=1; //开启计数 while(RX); //当RX为1计数并等待 TR1=0; //关闭计数 Conut();//计算 }

/***********************启动模块*********************************/ void StartModule() { TX=1; Delay10us(2); TX=0;

第49页 共55页

江苏理工学院毕业设计论文

}

/*************主程序********************/ void main(void) {

unsigned char i; unsigned int a; Delay1ms(400);//启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化 Delay1ms(5); DisplayListChar(0, 0, Range); DisplayListChar(0, 1, table); TMOD=TMOD|0x10; EA=1; TH1=0;

TL1=0; ET1=1; PWM_ini(); turn_right_flag=0;

B: for(i=0;i<50;i++) //判断S6是否按下 { Delay1ms(1); if(P3_7!=0 || P3_6!=0 || P3_2!=0)//当S6按下时,启动小车 goto B;//跳转到标号B,重新检测 } while(1) { RX=1; StartModule();

for(a=7510;a>0;a--) { if(RX==1) { Timer_Count(); } } } }

红外循迹程序

/****************************************** ******************************************* 程序名称:红外循迹 设计者:祁星(09机电2Z) 指导老师:李尚荣 学院:机械工程学院

****************************************** *******************************************/

第50页 共55页

江苏理工学院毕业设计论文

#include

#include #include

#define Forward_L_DATA 170 #define Forward_R_DATA 170

/*****按照原图接线定义******/ sbit L293D_IN1=P1^5; sbit L293D_IN2=P1^6; sbit L293D_IN3=P1^1; sbit L293D_IN4=P1^0; sbit L293D_EN1=P1^3; sbit L293D_EN2=P1^4;

/*****左传感器和右传感器接线定义***/ sbit Left_InSen=P2^4; sbit Right_InSen=P2^3;

///***蜂鸣器接线定义*****/ //sbit BUZZ=P1^7;

void Delay1ms(unsigned int i);

void Forward(unsigned char Speed_Right,unsigned char Speed_Left)//直行 { L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0;

PWM_Set(255-Speed_Right,255-Speed_Left); }

void Turn_Left(unsigned char Speed_Right,unsigned char Speed_Left)//左转 {

L293D_IN1=1; L293D_IN2=0; L293D_IN3=0; L293D_IN4=1; PWM_Set(255-Speed_Right,255-Speed_Left); }

void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left)//右转 {

L293D_IN1=0; L293D_IN2=1; L293D_IN3=1; L293D_IN4=0; PWM_Set(255-Speed_Right,255-Speed_Left); }

第51页 共55页

江苏理工学院毕业设计论文

void Stop(void) //刹车 {

L293D_IN1=0; L293D_IN2=0; L293D_IN3=0; L293D_IN4=0; PWM_Set(0,0); }

/******************************

主函数*******************************************/ void main(void) { unsigned char i;

PWM_ini();//PWM初始化

B: for(i=0;i<50;i++) { Delay1ms(1); if(P3_7!=0 || P3_6!=0 || P3_2!=0)//当S6按下时,启动小车 goto B; //跳转到标号B,重新检测 } // BUZZ=0;

// Delay1ms(50); // BUZZ=1; while(1) { while(Left_InSen==0 && Right_InSen==0) Forward(Forward_R_DATA,Forward_L_DATA);//前进 while(Left_InSen==0 && Right_InSen==1)//如果右边传感器检测到物体,小车右转。 Turn_Right(150,170); //右转 while(Left_InSen==1 && Right_InSen==0)//如果左边传感器检测到物体,小车左转。 Turn_Left(170,150); //左转 while(Left_InSen==1 && Right_InSen==1)//如果两边传感器都检测到物体,小车停止。 { Stop();

// BUZZ=0; // Delay1ms(50); // BUZZ=1;

// Delay1ms(100); } }

第52页 共55页

江苏理工学院毕业设计论文

}

void Delay1ms(unsigned int i) { unsigned char j,k; do{ j = 44; do{ k = 100; do{_nop_();} while(--k); }while(--j); }while(--i); }

第53页 共55页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务