资源描述
江海职业技术学院学位论文江海职业技术学院毕 业 设 计毕业设计题目: 姓 名学 号 : 所在系 (部): 专 业 及班级: 指 导 教 师: 完 成 日 期: 第3页中 文 摘 要智能车辆是集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统,是智能交通系统的一个重要组成部分。它在军事、民用、太空开发等领域有着广泛的应用前景。随着电子工业的发展,智能技术广泛运用于各种领域,运用于智能家居中的产品更是越来越受到人们的青睐。本系统在硬件设计方面,以Arduino单片机为控制核心,以超声波传感器检测前方障碍物,从而自动避障。在软件方面,利用C语言进行编程,通过软件编程来控制小车运转。根据家庭各种房间家具的布局不同而使用不同的路径,从而使得家居中常用到的智能清扫小车智能化,人性化。该小车能自动避障,有一定的实用价值。关键词 :单片机;智能清扫小车;自动避障江海职业技术学院学位论文目录第一章 绪论11.1 选题背景11.2 智能小车研究现状21.3 课题主要内容4第二章 智能小车总体结构52.1 方案综述52.2 主控单元方案比较与选择52.3 避障单元方案比较与选择62.4 “小车”的必要的信息7第三章 智能小车的触觉、眼睛83.1 智能小车内部检测原理83.2 电机电流、电压检测103.3 超声波测距11第四章 智能小车的脚234.1 轮系结构详述234.2 直流电机 H 桥驱动电路264.3 电机控制信号.28第五章 智能小车的大脑295.1 Arduino单片机简介295.2 Arduino单片机引脚简介305.3 Arduino编程软件33第六章 智能小车控制流程及程序356.1 控制流程35参考文献36致 谢37第38页第一章 绪论随着科技进步,现代工业技术发展越来越体现出机电一体化的特征。无论是在金属加工、汽车技术、工业生产等等方面,机器设备表现了所谓智能化、集成化、小型化、高精度化的发展趋势。 1.1 选题背景随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义很大。本设计就是在这样的背景下提出的,指导教师已经有充分的准备。本题目是结合科研项目而确定的设计类课题。设计的智能电动小车应该能够实现适应能力,能自动避障,可以智能规划路径。智能化作为现代社会的新产物,是以后的发展方向,他可以按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或是更高的目标。同遥控小车不同,遥控小车需要人为控制转向、启停和进退,比较先进的遥控车还能控制器速度。常见的模型小车,都属于这类遥控车;智能小车,则可以通过计算机编程来实现其对行驶方向、启停以及速度的控制,无需人工干预。操作员可以通过修改智能小车的计算机程序来改变它的行驶方向。因此,智能小车具有再编程的特性,是机器人的一种。中国自1978年把“智能模拟”作为国家科学技术发展规划的主要研究课题,开始着力研究智能化。从概念的引进到实验室研究的实现,再到现在高端领域(航天航空、军事、勘探等)的应用,这一过程为智能化的全面发展奠定基石。智能化全面的发展是实现其对资源的合理充分利用,以尽可能少的投入得到最大的收益,大大提高工业生产的效率,实现现有工业生产水平从自动化向智能化升级,实现当今智能化发展由高端向大众普及。从先前的模拟电路设计,到数字电路设计,再到现在的集成芯片的应用,各种能实现同样功能的元件越来越小为智能化产物的生成奠定了良好的物质基础。智能小车,是一个集环境感知、规划决策,自动行驶等功能于一体的综合系统,它集中地运用了计算机、传感、信息、通信、导航、人工智能及自动控制等技术,是典型的高新技术综合体。1.2 智能小车研究现状智能车辆作为智能交通系统的关键技术,是许多高新技术综合集成的载体。智能车辆驾驶是一种通用性术语,指全部或部分完成一项或多项驾驶任务的综合车辆技术。智能车辆的一个基本特征是在一定道路条件下实现全部或者部分的自动驾驶功能,下面简单介绍一下国内外智能小车研究的发展情况。1.2.1 国外智能车辆研究现状国外智能车辆的研究历史较长,始于上世纪50年代。它的发展历程大体可以分成三个阶段:第一阶段 20世纪50年代是智能车辆研究的初始阶段。1954年美国Barrett Electronics 公司研究开发了世界上第一台自主引导车系统AGVS(Automated Guided Vehicle System)。该系统只是一个运行在固定线路上的拖车式运货平台,但它却具有了智能车辆最基本得特征即无人驾驶。早期研制AGVS的目的是为了提高仓库运输的自动化水平,应用领域仅局限于仓库内的物品运输。随着计算机的应用和传感技术的发展,智能车辆的研究不断得到新的发展。第二阶段 从80年代中后期开始,世界主要发达国家对智能车辆开展了卓有成效的研究。在欧洲,普罗米修斯项目于1986年开始了在这个领域的探索。在美洲,美国于1995年成立了国家自动高速公路系统联盟(NAHSC),其目标之一就是研究发展智能车辆的可能性,并促进智能车辆技术进入实用化。在亚洲,日本于1996年成立了高速公路先进巡航/辅助驾驶研究会,主要目的是研究自动车辆导航的方法,促进日本智能车辆技术的整体进步。进入80年代中期,设计和制造智能车辆的浪潮席卷全世界,一大批世界著名的公司开始研制智能车辆平台。第三阶段 从90年代开始,智能车辆进入了深入、系统、大规模研究阶段。最为突出的是,美国卡内基.梅隆大学(Carnegie Mellon University)机器人研究所一共完成了Navlab系列的10台自主车(Navlab1Navlab10)的研究,取得了显著的成就。目前,智能车辆的发展正处于第三阶段。这一阶段的研究成果代表了当前国外智能车辆的主要发展方向。在世界科学界和工业设计界中,众多的研究机构研发的智能车辆具有代表性的有:德意志联邦大学的研究 1985年,第一辆VaMoRs智能原型车辆在户外高速公路上以100km/h的速度进行了测试,它使用了机器视觉来保证横向和纵向的车辆控制。1988年,在都灵的PROMRTHEUS项目第一次委员会会议上,智能车辆维塔(VITA,7t)进行了展示,该车可以自动停车、行进,并可以向后车传送相关驾驶信息。这两种车辆都配备了UBM视觉系统。这是一个双目视觉系统,具有极高的稳定性。荷兰鹿特丹港口的研究 智能车辆的研究主要体现在工厂货物的运输。荷兰的Combi road系统,采用无人驾驶的车辆来往返运输货物,它行驶的路面上采用了磁性导航参照物,并利用一个光阵列传感器去探测障碍。荷兰南部目前正在讨论工业上利用这种系统的问题,政府正考虑已有的高速公路新建一条专用的车道,采用这种系统将货物从鹿特丹运往各地。日本大阪大学的研究 大阪大学的Shirai实验室所研制的智能小车,采用了航位推测系统(Dead Reckoning System),分别利用旋转编码器和电位计来获取智能小车的转向角,从而完成了智能小车的定位。另外,斯特拉斯堡实验中心、英国国防部门的研究、美国卡内基梅隆大学、奔驰公司、美国麻省理工学院、韩国理工大学对智能车辆也有较多的研究。1.2.2 国内智能车辆研究现状相比于国外,我国开展智能车辆技术方面的研究起步较晚,开始于20世纪80年代。而且大多数研究处在于针对某个单项技术研究的阶段。虽然我国在智能车辆技术方面的研究总体上落后于发达国家,并且存在一定得技术差距,但是我们也取得了一系列的成果,主要有:(1)中国第一汽车集团公司和国防科技大学机电工程与自动化学院与2003年研制成功我国第一辆自主驾驶轿车。该自主驾驶轿车在正常交通情况下的高速公路上,行驶的最高稳定速度为13km/h,最高峰值速度达170km/h,并且具有超车功能,其总体技术性能和指标已经达到世界先进水平。(2)南京理工大学、北京理工大学、浙江大学、国防科技大学、清华大学等多所院校联合研制了7B.8军用室外自主车,该车装有彩色摄像机、激光雷达、陀螺惯导定位等传感器。计算机系统采用两台Sun10完成信息融合、路径规划,两台PC486完成路边抽取识别和激光信息处理,8098单片机完成定位计算和车辆自动驾驶。其体系结构以水平式结构为主,采用传统的“感知-建模-规划-执行”算法,其直线跟踪速度达到20km/h,避障速度达到5-10km/h。智能车辆研究也是智能交通系统ITS的关键技术。目前,国内的许多高校和科研院所都在进行ITS关键技术、设备的研究。随着ITS研究的兴起,我国已形成一支ITS技术研究开发的技术专业队伍。并且各交通、汽车企业越来越加大了对ITS及智能车辆技术研发的投入,整个社会的关注程度在不断提高。交通部已将ITS研究列入“十五”科技发展计划和2010年长期规划。相信经过相关领域的共同努力,我国ITS及智能车辆的技术水平一定会得到很大提高。可以预计,我国飞速发展的经济实力将为智能车辆的研究提供一个更加广阔的前景。我们要结合我国国情,在某一方面或某些方面,对智能车进行深入细致的研究,为它今后的发展及实际应用打下坚实的基础。1.3 课题主要内容本课题南京嵌入之梦工作室的fira智能小车平台,选择通用、价廉的Arduino单片机为控制平台,通过细化设计要求,结合传感器技术和电机控制技术相关知识实现小车的各种功能。设计完成以由超声波测距、自动避障组成的硬件模块结合软件设计组成多功能智能小车,共同实现小车的前进倒退、转向行驶,自动根据超声波检测前方障碍物距离,进行导航,检测障碍物后停止等功能,实现智能控制,达到设计目标。图1.1 小车外形图第二章 智能小车总体结构2.1 方案综述本课题设计主要是制作一款能进行智能判断并能做出正确反应的小车。小车具有以下几个功能:自动避障功能。作品既可以对高端智能化进行剖析,也可以作为高级智能玩具发展对象,同时可成为大学生学习嵌入式控制系统的应用实例。本设计以两直流电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元Arduino单片机处理数据后完成相应动作,以达到自身控制。电机驱动电路采用H桥驱动模块,驱动2个直流电机;测距、避障采用超声波传感器完成,最后由控制单元处理数据后通过编程有序合理的将各模块信号整合在一起并完成相应动作,实现了智能控制,相当于简易机器人。根据设计的作品要达到的效果,本系统以Arduino单片机为核心控制器,主要由电源模块、电机驱动模块、测距、避障模块构成。系统的结构框图如下图1所示。Arduino单片机驱动电路直流电动机轮子超声波传感器电源图2.1 系统结构框图2.2 主控单元方案比较与选择按照题目要求,控制器主要用于控制电机,通过相关传感器对路面的轨迹信息进行处理,并将处理信号传输给控制器,然后控制器做出相应的处理,实现小车的自动循迹和自动避障。 方案一:可以采用ARM为系统的控制器,优点是该系统功能强大,片上外设集成度搞密度高,提高了稳定性,系统的处理速度也很高,适合作为大规模实时系统的控制核心。方案二:采用Arduino单片机作为系统控制的方案。Arduino单片机算术运算功能强,软件编程灵活、自由度大,功耗低、体积小、技术成熟,成本也比ARM低。考虑到性价比问题,本设计选择 用Arduino单片机做控制器。2.3 避障单元方案比较与选择方案一:用超声波传感器进行避障。超声波传感器的原理是:超声波由压电陶瓷超声波传感器发出后,遇到障碍物便反射回来,再被超声波传感器接收。但使用超声波模块的成本比较高。因此我们考虑其它的方案,超声波传感器实物图如下图2所示:图2.2 超声波传感器方案二:用漫反射式光电开关进行避障。光电开关的工作原理是根据光线发射头发出的光束,被物体反射,其接收电路据此做出判断反应,物体对红外光由同步回路选通而检测物体的有无。当有光线反射回来时,输出低电平。当没有光线反射回来时,输出高电平。考虑到在日常的家居生活中,只需要简单检测障碍物,让智能小车顺利绕过障碍,回到预定的设定路径便可,并没有十分复杂的环境,为了使用方便,便于操作和调试,我们最终选择了方案一。2.4 “小车”的必要的信息 电机参数: 额定电压 4.5V 空载电流 8595mA 空载转速 9800rpm +/10% 堵转电流 1100mA 堵转力矩 50g/cm (最大) 减速箱: 1:48 结构参数 车轮直径 65mm 码盘齿数 60 个 码盘等效直径 42mm 脉冲精度 3.4mm/脉冲(单边沿采集,可用倍频方式提高精度) 轮距 约 59.5mm 外形尺寸 约 75x75x75mm 重量 约 240g (不含电池) 最快运动速度: 选用 1:48减速箱 约 695mm/s 最大力矩: 选用 1:48减速箱 约 2.4kg/cm 第三章 智能小车的触觉、眼睛3.1 智能小车内部检测原理智能小车驱动检测电路:实现电机驱动、码盘采样、电机电流检测功能,两侧独立设计,方便检修。 3.1.1 轮速、车距检测小车采用红外光电耦合器检测轮子转的圈数,即可算得小车行车距离;同理,单位时间内的计数值,即可求得轮子转速。本车有两只轮子,分别由两只直流电动机驱动。由于红外检测具有反应速度快、定位精度高,可靠性强以及可见光传感器所不能比拟的优点,故采用红外光电码盘测速方案。红外光电耦合器见图3.1,为直射式光电传感器。图3.1 红外光电耦合器由测距轮,遮光盘,红外光电耦合器及凹槽型支架组成的。利用开模的优势,在车轮上的遮光盘设计了 60个齿,可以用直射式光电采样器方便的得到脉冲信号,比反射式采样更加可靠。 测距轮安装在车轮上,这样能使记数值准确一些(见图3.2)。遮光盘有一缺口,盘下方的凹形物为槽型光电耦合器,其两端高出部分的里面分别装有红外发射管和红外接收管。遮光盘在凹槽中转动时,缺口进入凹槽时,红外线可以通过,缺口离开凹槽红外线被阻挡。由此可见,测距轮每转一周,红外光接收管均能接收到一个脉冲信号经过整形器后送入计数器或直接送入单片机中。单片机通过计数值,即可求得小车的大概行驶距离,根据单位时间内的计数值,也可求得转速。单片机通过分别对两个轮子的转速值,进行比较,即可判断出左、右轮的转速快慢程度。背面正面遮光盘图3.2 轮子结构为实现可逆记数功能,我们在测距仪中并列放置了两个槽型光电耦合器,遮光盘先后通过凹槽可产生两个脉冲信号。根据两个脉冲信号发生的先后顺序与两个光电耦合器的位置关系,即可计算出玩具车的行驶方向(前进或后退)。遮光盘及槽型光电耦合器均安装在不透光的盒子里,以避免外界光线的干扰,使电路不能正常工作。直射型光电晶体管图3.3 实际电路板测距原理:将遮光码盘安装在电机轴上,当电机转动时,遮光码盘也随之转动,同时安装在码盘一侧的红外发光二极管点亮,在码盘的另一侧设有红外三极管,用于接收红外发光二极管发出的红外线信号。由于光栅随电机高速转动,则红外线三极管接收到的就是一系列脉冲信号。将该信号传输到单片机的内部计数器计数,根据预先实测的数据换算关系即可计算出电动机车的行车距离。具体电路同图2.5 行车距离检测电路所示:图3.4 码盘检测电路为了避免在变换状态时产生“毛刺”,整形电路是利用运放设计了“施密特”电路,用回差消除之。 之所以用运放,而不是直接使用施密特触发器,是因为这样可以方便的改变回差大小。3.2 电机电流、电压检测 3.2.1 电流检测电路: 图3.5 电流检测电路电流的取样电阻为 0.22 欧姆(见 H 桥驱动电路的 R5),按上图参数,放大倍数 11 倍,电机电流最大 1.1A 左右,所以实际的输出信号应在 02.66V ,如使用 3.3V供电的单片机,其 AD输入范围为 03.3V,考虑电机的电流偏差和器件的偏差,留些余量。 电路中C2作用是减小电机电流波动的影响,是针对 125Hz 的 PWM频率设计的,如提高PWM的频率,此参数应该相应修改。 本设计中未采用,简述之。3.2.2 电压检测电路: 图3.6 电压检测电路电压采用简单的分压处理,设计了一个跟随器以减少 AD输入阻抗对分压的影响。电池的电压应在46V,分压后为23V,符合 AD输入不大于 3.3V的要求。 本设计中未采用,简述之。3.3 超声波测距由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。 为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。3.3.1 超声波测距原理1、 超声波发生器 为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。 2、压电式超声波发生器原理 压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。 3、超声波测距原理 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。 测距的公式表示为:L=CT 式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。 超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。通过分析超声波测距误差产生的原因,提高测量时间差到微秒级,以及用LM92温度传感器进行声波传播速度的补偿后,我们设计的高精度超声波测距仪能达到毫米级的测量精度。 3.3.2 超声波传感器简介本毕业设计超声波传感器为外购件,其硬件原理仅作简要说明:图3.7 超声波检测原理电路框图中,单片机为核心控制部分,根据设定的工作方式,产生 40kHz方波,经过驱动电路驱动超声波发生器发出一簇信号。单片机此时开始计时。 接收回路为谐振回路,将收到的微弱回波信号检出,送信号放大电路放大,收到产生脉冲输出送单片机中断端,单片机收到中断信号后停止计时,计算出距离值,保存等待读出或直接经 UART 送出。接收过程中,单片机定时控制放大电路的增益,逐渐提高,以适应距离越远越弱的回波信号。 3.3.3 超声波传感器接口说明核心器件为 STC12LE4052、TL852、16mm超声波收、发器。采用 5V供电,因为 5V是最常见的工作电压,便于日后将传感器应用于装置中。 为了减小干扰,选用了 3.3V供电的单片机,使用目前常用的 1117-3.3三端稳压器将 5V降到 3.3V,减小电源扰动的影响,增加可靠性。 小车利用超声波传感器测距,测量值采用的是小车主控芯片与该智能传感器串行通讯获得,以下为串行通讯的有关协议、命令说明。传感器的工作由通讯命令控制,上电状态为待命状态。 工作分为“自动测量”和“单轮测量”两种模式。 “自动测量”时,传感器按一定周期自动完成测量过程,并保存测量数据。 “自动测量”又分为“被动数据返回”和“主动数据返回”两种方式。 “被动数据返回”方式下,传感器只将测量结果保存下来,等待系统读取。“主动数据返回”方式下,传感器每完成一次测量均立即将数据发送给系统。 “自动测量”可以设置测量周期。 “单轮测量”为接收到命令后开始测量,并返回数据,测量命令可设置测量次数、数据处理方式,传感器按要求返回,增加测量的可靠性。 通讯协议及命令定义: 基本通讯格式:(和圆梦小车及无线接口兼容) 标准 UART格式 19200 8 N 1 帧格式: 帧头(2字节) 接收方地址(1字节) 发送方地址(1 字节) 帧长(1字节) 命令(1字节) 数据域(N字节) 校验和(1字节) 其中: 帧头 由 2 个特殊的字节 0x55 0xAA 构成; 接收方地址 通讯对象的“名字”,在有线通讯时也许多余,但无线时就需要了。发送方地址 告诉接收方,便于接收方回答。 帧长 命令和数据域字节之和, 命令 说明操作内容,详见下面的定义 数据域 与命令配合,表达一个完整的含义。 校验和 从命令开始到数据域结束所有字节的算术和,取最低字节的反码。命令定义: 为了便于调试,保留小车中设计的读写内存命令。 命令一 :读内存,实现读指定地址开始的 N 个字节,地址用两字节表示。 命令字 0x01 数据域 低地址(1字节) 高地址(1字节) 读字节数(1字节) 地址与硬件的对应关系: 0x0000 0x00FF 对应 STC12LE4052 的 256字节内部 RAM(idata); 0x0100 0x7FFF 保留,为大 RAM的单片机预留; 0x7F80 0x7FFF 对应 STC12LE2052的 128字节 SFR; 0x8000 0x87FF 对应 STC12LE2052 的 2K FlashROM(Code);0x8700 0xFFFF 保留,为大 ROM的单片机预留; 例:要读地址 0x56起始的 3字节内部 RAM数据,命令帧如下: 0x55 0xAA XX XX 0x04 0x01 0x56 0x00 0x03 0xA5 返回数据帧为: 帧头 发送方地址 自己的地址 帧长 命令 低地址 高地址 读字节数 N字节数据 校验和 返回帧中将命令及附属信息(地址、读字节数 )包含在内,虽然有些冗余,但保证了信息的完备性,不需要接收时还要查找原来读的是什么?为通讯需求日渐复杂提供方便。 命令二:写内存,实现写指定地址开始的 N 个字节,地址用两字节表示。 命令字 0x02 数据域 低地址(1字节) 高地址(1字节) 写字节数(1字节)数据(N字节) 其地址与硬件的关系与读命令相同。返回数据帧为: 帧头 发送方地址 自己的地址 帧长 命令 低地址 高地址 写成功字节数 校验和 通过“写成功字节数”来告之发送方是否写成功,如果为“0”,表示写操作失败。 命令三:设置工作模式,设置测量模式,并启动测量。 命令字 0x03 数据域 工作模式(1字节) 工作参数(1字节) 其中: 工作模式 高 4位为主模式,低 4位为子模式; 工作参数 与工作模式对应,自动测量时为测量周期,单位 10ms;单轮测量时为测量的次数,暂定最多为 8次。 返回数据帧为: 帧头 发送方地址 自己的地址 帧长 命令 测量数据 校验和对于自动模式,测量数据返回一个字节“0”,说明 OK。 对于单轮测量模式,测量数据为工作模式中所要求的数据。 自动模式对应的子模式: a) 自动数据返回 每测完一个数据都返回,命令位置返回工作模式; b) 被动数据返回 内部只是测量、保存数据,等待读数据命令读回,读数据命令实际上只对自动模式的被动数据返回有效。 单轮测量对应的子模式: a) 无数据处理返回 只是将命令中要求测量的数据全部返回 b) 剔除最大最小值返回 将测量数据中最大、最小值剔除,返回数据比指定数少 2个,当指定的测量次数小于 3 时,强制切换到“无数据处理模式”;c) 平均值返回 将指定的测量数据平均后返回,只有一个平均值; d) 剔除最大最小后平均值返回 先剔除最大最小值,剩下的再取平均值,当数据数小于 4时,强制切换到“剔除最大最小值” 模式。 上述返回帧中命令位置返回数据处理方式。 命令四:读测量数据,对于自动测量方式的被动数据返回模式,需要此命令。 命令字 0x04 数据域 读最近几次的数据(1 字节) 返回数据帧为: 帧头 发送方地址 自己的地址 帧长 命令 测量数据 校验和 通讯是个过程,包含等待处理,所以需要定义状态变量,以控制处理的内容和方式。 通讯分为两个状态:一是什么也没有收到;二是收到了帧头,等待帧结束。因此可以用位标志 g_bStartRcv 来表示,为“假”表示没有收到帧头,为“真”表示收到帧头,正在收剩余的内容。通讯部分实现以下功能: 1) 接收数据 2) 判断帧格式 3) 解析命令,执行相应操作 4) 返回数据3.3.4 本设计超声波通讯方式本设计采用的方式为单轮测量,通讯较为简便,但控制精度不高,为静态测量,因此,小车对前方突然产生的变化不能及时监测。如要实时监测需要采用自动测量,但大大增加了编程难度。程序如下: int iFlashTime = 500; sum=0; SendData0=0x55; SendData1=0xAA; SendData2=0x01; SendData3=0x02; SendData4=0x03; SendData5=0x03; SendData6=0x23; SendData7=0x08; sum=SendData5+SendData6+SendData7; SendData8=sum; for(i=0;i9;i+) Serial.print(SendDatai); delay(100); n=Serial.available (); for(i=0;in;i+) RecvDatai=Serial.read(); i=0; if(RecvData0=0x55 )i+; if(RecvData1=0xAA )i+; if(RecvData2=0x02 )i+;if(i=3) sum=0; for(k=5;k120) BackLine(20); elseif(distant40) TurnRight(20); else WalkLine(20); Serial.flush();第四章 智能小车的脚4.1、轮系结构详述 4.1.1动力选择 选用成熟的减速机构和标准的 130直流电机(见上面图示) 4.1.2 驱动方式 FIRA小车一般设计为差分驱动,前后对称的形式,即不分前后,以增加对抗时的灵活性,因为不用“转身”了。 这样就要求车轮中置,如下图: 图4.1 这种驱动方式,需要前后 2个支点,这样就形成了 4点共面问题,如场地稍有不平,就会导致一个驱动轮悬空,小车打转。 用 4个支点来保证小车的平稳(见上面小车的底部视图)。 4.1.3 车轮安装 由于减速箱的输出轴是塑料的,强度有限,且有一定晃动间隙,不利于车轮上的码盘采样,必须设计另一个轮轴支点,以增加车轮的稳定性。另外,还增加了一个侧盖(见上面侧盖图),为轮轴提供了一个支点,由于结构允许,还设计了滚珠槽(注意侧盖中的圆环和轮毂中的圆环),以改善转动性能。 侧盖固定于上、下基架上,等于给上、下基架增加了 4个固定点,使小车更加坚固。 小车很小,空间有限,如再挤占留给用户的控制器空间,用户自己设计控制器时就很困难。这样处理,既解决了驱动板的安装,又增加了侧盖的强度,同时将有效空间全部留给了用户。以下为车轮、驱动板、侧盖的装配示意: 图4.2 轮系安装关系图4.1.4 电池选择和安装 本智能小车选择 7#镍氢充电电池,而不选流行的锂充电电池,是由于锂电池规格特殊,很难有标准尺寸,会给使用者带来麻烦,7# 电池短期内还没有淘汰的迹象,所以还是作此选择。 没有像玩具和模型那样,提供做好的电池组,是因为在使用中发现,通常不是电池组内所有电池都同时失效,这样会给用户带来不必要的损失,所以还是用电池盒。 电池安装位置设计在小车底部,降低了重心,使小车更加平稳。 4.1.5 轮系主要构成 基架:作为小车的主结构,实现电机固定、电池盒放置、线路板安装等基础功能。 减速电机:提供小车动力,选用标准设计的减速箱和 130 电机,以保证良好的性价比。 图4.3 减速机 车轮:为了提供足够的速度,设计了小车结构中允许的最大直径车轮,外径 65mm(按目前所选用的减速电机,最快速度约 65cm/s),同时设计了采样码盘,便于实现速度反馈和行走距离检测。车轮采用橡胶轮胎,并刻有防滑槽,以降低打滑的可能。轮胎宽度 7.5mm,设计成平面以增加摩擦力。 图4.4 车轮电池盒盖:用于固定电池盒,同时提供小车的 4个支点,以维持小车平衡。 图4.5 电磁盖板上的支点4.2直流电机 H 桥驱动电路 4.2.1脉冲宽度调制(PWM)脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。 基本原理:随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。 模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在0V,5V这一集合中取值。 模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。 尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。 通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。4.2.1 H桥驱动电路 图4.6 电机驱动原理电路供桥电压为 5V。这也是用 MOS 管带来的好处,因为桥臂压降小,所以用 4 节充电电池即可驱动,这样既便于充电,又减轻了小车的自重。 控制逻辑电路电压 VCC 接控制单片机的工作电压,可选择 3.3V 或 5V。 4.3电机控制信号4.3.1 控制信号定义电机控制信号共三根:Ctrl1为 PWM 控制信号。Ctrl2和 Ctrl3 组合,得到电机的四个工作状态:正转 反转 刹车 惰行。 4.3.2 控制逻辑控制逻辑如下: 图4.7 控制逻辑图第五章 智能小车的大脑这是学习单片机应用的平台,而单片机的种类众多,除了流行的 8位机:51、AVR、PIC系列,还有日渐被接受的 16位机 MSP430系列,以及最近升势很猛的 ARMCortexM系列,这些单片机各有优势,无法说谁好谁坏,完全取决于学习者的需求和喜好,此外还有越来越接近 MCU的DSP,所以我将这个权力交还给用户。 而且我认为:所谓单片机应用学习,最核心的就是能自己消化一个 MCU,根据控制需求自己分配 MCU 的资源,编写相应的程序,使之能按自己的想法工作。这才是掌握单片机应用的关键! 5.1 Arduino单片机简介Arduino单片机,是一块基于开放源代码的USB接口Simple i/o接口板(包括12通道数字GPIO,4通道PWM输出,6-8通道10bit ADC输入通道),并且具有使用类似Java,C语言的IDE集成开发环境。 让您可以快速使用Arduino语言与Flash或Processing等软件,作出互动作品。 图5.1 Arduino单片机Arduino可以使用开发完成的电子元件例如Switch或sensors或其他控制器、LED、步进马达或其他输出装置。Arduino也可以独立运作成为一个可以跟软件沟通的接口,例如说:flash、processing、Max/MSP、VVVV 或其他互动软件。Arduino开发IDE接口基于开放源代码原,可以让您免费下载使用开发出更多令人惊艳的互动作品。 Arduino单片机特色:1、开放源代码的电路图设计,程序开发接口免费下载,也可依需求自己修改。 2、使用低价格的微处理控制器(ATMEGA8或ATmega128)。可以采用USB接口供电,不需外接电源。也可以使用外部9VDC输入 3、Arduino支持ISP在线烧,可以将新的“bootloader”固件烧入ATmega8或ATmega128芯片。有了bootloader之后,可以通过串口或者USB to Rs232线更新固件。 4、可依据官方提供的Eagle格式PCB和SCH电路图,简化Arduino模组,完成独立运作的微处理控制。可简单地与传感器,各式各样的电子元件连接(EX:红外线,超音波,热敏电阻,光敏电阻,伺服马达,等) 5、支持多种互动程序,如:Flash、Max/Msp、VVVV、PD、C、Processing等 6、应用方面,利用Arduino,突破以往只能使用鼠标,键盘,CCD等输入的装置的互动内容,可以更简单地达成单人或多人游戏互动。5.2 Arduino单片机引脚简介Arduino的数字I/O被分成两个部分,其中每个部分都包含有6个可用的I/O管脚,即管脚2到管脚7和管脚8到管脚13。在数字电路中开关(switch)是一种基本的输入形式,它的作用是保持电路的连接或者断开。Arduino从数字I/O管脚上只能读出高电平(5V)或者低电平(0V),因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino能够读取的高/低电平。解决的办法是通过上/下拉电阻,按照电路的不同通常又可以分为正逻辑(Positive Logic)和负逻辑(Inverted Logic)两种。Arduino的优势在于对数字信号的识别和处理,但我们所生活的真实世界并不是数字(digital)化的,简单到只要用0和1就能够表示所有的现象。例如温度这一我们已经司空见惯的概念,它只能在一个范围之内连续变化,而不可能发生像从0到1这样的瞬时跳变,类似这样的物理量被人们称为是模拟(analog)的。Arduino是无法理解这些模拟量的,它们必须在经过模数转换后变成数字量后,才能被Arduino进一步处理。像温度这样的数据必须先被转换成微处理器能够处理的形式(比如电压),才能被Arduino处理,这一任务通常由各类传感器(sensor)来完成的。例如,电路中的温度传感器能够将温度值转换成0V到5V间的某个电压,比如0.3V、3.27V、4.99V等。由于传感器表达的是模拟信号,它不会像数字信号那样只有简单的高电平和低电平,而有可能是在这两者之间的任何一个数值。至于到底有多少可能的值则取决于模数转换的精度,精度越高能够得到的值就会越多。Arduino所采用的ATmega8微处理器一其有6个模数转换器(ADC,Analog to Digital Converter),每一个模数转换器的精度都是10bit,也就是说能够读取1024(210 = 1024)个状态。在Arduino的每一个模拟输入管脚上,电压的变化范畴是从0V到5V,因此Arduino能够感知到的最小电压变化是4.8毫伏(5/1024 = 4.8mV)。图5.2 Arduino单片机引脚定义就像模拟输入一样,在现实的物理世界中我们经常需要输出除了0和1之外的其他数值。例如,除了想用微控制器找开或者关闭电灯之外,我们还会想控制灯光的亮度,这时就需要用到模拟输出。由于Arduino的微控制器只能产生高电压(5V)或者低电压(0V),而不能产生变化的电压,因此必须采用脉宽度调制技术(PWM,Pulse Width Modulation)来模仿模拟电压。PWM是一种开关式稳压电源应用,它是借助微处理器的数字输出来对模拟电路进行控制的一种非常用效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。简而言之,PWM是一种对模拟信号电平进行数字编码的方法,它通过对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等但宽度不相等的脉冲,而这些脉冲能够被用来代替正弦波或其它所需要的波形。在Arduino数字I/O管脚9、10和11上,我们可以通过analogWrite()函数来产生模拟输出。该函数有两个参数,其中第一个参数是要产生模拟信号的引脚(9、10或者11);第二个参数是用于产生模拟信号的脉冲宽度,取值范围是0到255。脉冲宽度的值取0可以产生0V的模拟电压,取255则可以产生5V的模拟电压。不难看出,脉冲宽度的取值变化1,产生的模拟电压将变化0.0196V(5/255 = 0.0196)。图5.3 Arduino单片机引脚功能表在许多实际应用场合中我们会要求在Arduino和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。在PC机上上最常见的串行通信协议是RS-232串行协议,而在各种微控制器(单片机)上采用的则是TTL串行协议。由于这两者的电平有很大的不同,因此在实现PC机和微控制器的通信时,必须进行相应的转换。完成RS-232电平和TTL电平之间的转换一般采用专用芯片,如MAX232等,但在Arduino上是用相应的电平转换电路来完成的。根据Arduino的原理图我们不难看出,ATmega的RX和TX引脚一方面直接接到了数字I/O端口的0号和1号管脚, 另一方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用Arduino与PC机通信时,可以用串口线将两者连接起来;当我们需要用Arduino与微控制器(如另一块Arduino)通信时,则可以用数字I/O端口的0号和1号管脚。串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在Arduino语言可以使用Serial.begin()函数来简化这一任务。为了实现数据的发送,Arduino则提供了Serial.print()和Serial.println()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。5.3 Arduino编程软件Arduino 语言是建立在 C/C+基础上的,其实也就是基础的 C 语言,Arduino 语言只不过把 AVR 单片机(微控制器)相关的一些寄存器参数设置等都函数化了,不用我们去了解他的底层,让不太了解 AVR 单片机(微控制器)的朋友也能轻松上手。图5.4 编程界面Arduino 语言是以 setup()开头,loop()作为主体的一个程序构架。官方网站是这样描述 setup()的:用来初始化变量,管脚模式,调用库函数等等,此函数只运行一次。loop()函数是一个循环函数,函数内的语句周而复始的循环执行,功能类似 c 语言中的“main();”。第六章 智能小车控制流程及程序6.1 程序流程图开始超声波测距障碍物很近继续直线前进停车检距后退,转弯停车检距参考文献1、嵌入之梦家园 当圆梦小车遇上 Arduino http:/user.qzone.qq.com/ 2、 Arduino使用教程 http:/ www.dfrobot.cn 3、马潮等 ATmega8原理及应用手册 清华大学出版社4、谭浩强 C程序设计 清华大学出版社5、 何希才 新型实用电子电路400例 电子工业出版社6、 赵负图 传感器集成电路手册,第一版 化学工业出版社7、 陈伯时 电力拖动自动控制系统,第二版 机械工业出版社8、嵌入之梦家园 超声波测距传感器DIY www.embedream.com9、嵌入之梦家园 圆梦小车第四代 www.embedream.com10、Arduino Homepage Arduino Nano user manual www.arduino.cc论 文 小 结珍贵的三年的大专生活已接近尾声,感觉非常有必要总结一下大专三年的得失,从中继承做得好的方面改进不足的地方,使自己回顾走过的路,也更是为了看清将来要走的路。在学习知识这段时间里,我与老师建立了浓厚的师生情谊。老师们的谆谆教导,使我体会了学习的乐趣。我与身边许多同学,也建立了良好的学习关系,互帮互助,克服难关。现在我已经接近毕业,正在做毕业设计,更锻炼了自我的动手和分析问题能力,受益匪浅。通过三年的大专生活,我学到了很多知识,更重要的是有了较快掌握一种新事物的能力。思想变成熟了许多,性格更坚毅了。认识了许多同学和老师,建立起友谊,并在与他们的交往中提升了自身素质,认清了自身的一些短处并尽力改正。回顾三年,本人在思想觉悟上始终对自己有较高的要求,能用科学发展观来认识世界认识社会,能清醒的意识到自己所担负的社会责任,对个人的人生理想和发展目标,有了相对成熟的认识和定位。 在专业课程的学习上,根据自身专业方向的要求,有针对性的认真研读了有关核心课程,为自己的学习工作打下扎实基础;并涉猎了一部分其他课程,开阔视野,对本专业方向的应用背景以及整个学科的结构有了宏观的认识。在学习工作上,根据导师的指导,研读了大量论着,逐步明确了发展方向,通过自身不断的努力,以及与师长同学间的探讨交流,取得了一些比较满意的成果。在这期间,综合分
展开阅读全文