• 73.50 KB
  • 2022-04-22 11:27:17 发布

毕业论文:智能避障小车.doc

  • 40页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业论文:智能避障小车摘要避障是智能小车应具备的基本功能之一以P89C51RA芯片为核心采集前方障碍信息并对智能小车进行控制选用红外避障传感器检测智能小车前方的障碍物设计了智能小车的自动避障系统并阐述其工作原理该系统设计简单成本低实时性好在室内环境中取得了预期的实验结果使智能小车无碰撞到达目的地关键词P89C51RA智能红外避障传感器AbstractTheobstacleavoidanceisoneofthemainfunctionsthatanindependentlyintelligentcarriageshouldbeprovidedUsetheP89C51RAasakeycomponentcollectingtheenvironmentalinformationandcontrollingtheintelligentcarriageakindofobstacleavoidancesystemofintelligentcarriageisdesignedInthissysteminfraredobstacleavoidancesensorsareusedtodetectthebarrieswhicharefrontofdistancebetweentheintelligentcarriageandthebarriersThesystemsdesignissimpleandhaslowercostandbetterrealtimefeaturesAndatthesametimethissystemhasobtainedanticipatedexperimentalresultsintheindoorenvironmentThatistheintelligentcarriagecanarriveatthedestinationwithoutanycollisionKeywordsP89C51RAintelligentinfraredobstacleavoidancesensors 毕业论文:智能避障小车摘要避障是智能小车应具备的基本功能之一以P89C51RA芯片为核心采集前方障碍信息并对智能小车进行控制选用红外避障传感器检测智能小车前方的障碍物设计了智能小车的自动避障系统并阐述其工作原理该系统设计简单成本低实时性好在室内环境中取得了预期的实验结果使智能小车无碰撞到达目的地关键词P89C51RA智能红外避障传感器AbstractTheobstacleavoidanceisoneofthemainfunctionsthatanindependentlyintelligentcarriageshouldbeprovidedUsetheP89C51RAasakeycomponentcollectingtheenvironmentalinformationandcontrollingtheintelligentcarriageakindofobstacleavoidancesystemofintelligentcarriageisdesignedInthissysteminfraredobstacleavoidancesensorsareusedtodetectthebarrieswhicharefrontofdistancebetweentheintelligentcarriageandthebarriersThesystemsdesignissimpleandhaslowercostandbetterrealtimefeaturesAndatthesametimethissystemhasobtainedanticipatedexperimentalresultsintheindoorenvironmentThatistheintelligentcarriagecanarriveatthedestinationwithoutanycollisionKeywordsP89C51RAintelligentinfraredobstacleavoidancesensors 目录摘要IAbstractII目录I第一章绪论111小车避障系统设计的意义112小车避障系统1121主控系统2122机械系统3123电机驱动模块3124传感器系统4125电源电路的选型5126里程检测模块6127显示模块6第二章主控制单元721整体构思722主控制部分8221CPU介绍8222CPU功能11223CPU相关电路1123主程序设计12231关于定时与计数器12 232程序13第三章驱动单元1531直流电机的驱动原理1532直流电机的驱动电路15第四章躲避障碍物单元1741避障传感器电路17411近距离避障传感器17412远距离避障传感器1842避障方法19421前方有障碍物19422侧面有障碍物2143避障程序22第五章显示单元2351里程和时间显示2352显示模块硬件23521ZLG7289A介绍25522ZLG7289A串行接口27523ZLG7289A控制指令28第六章在系统编程3361在系统编程ISP介绍3362FLASHEPROM存储器3363ISP设计34 64单片机与PC机的连接35641连接介绍35参考文献37附录38结论49致谢50 第一章绪论11小车避障系统设计的意义自第一台工业机器人诞生以来机器人的发展人们不断探讨改造认识自然过程中科技发展要实现自动导引功能和避障功能就必须要感知导引线和障碍物导引线相给一个视觉功能CPU机器人要实现自动避障功能还可以扩展循迹等功能感知导引线和障碍物可以实现小车自动识别路线选择正确的行进路线并检测到障碍物自动躲避基于上述要求传感检测部分考虑到小车一般不需要感知清晰的图像只要求粗略感知即可所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当智能小车的执行部分是由直流电机来充当的主要控制小车的行进方向和速度单片机驱动直流电机一般有两种方案第一勿需占用单片机资源直接选择有PWM功能的单片机这样可以实现精确调速第二可以由软件模拟PWM输出调制需要占用单片机资源难以精确调速但单片机型号的选择余地较大考虑到实际情况本文选择第二种方案CPU使用P89C51RA单片机配合软件编程实现还有显示部分通过软件可以显示行使时间和路程121主控系统根据设计要求我认为此设计属于多输入量的复杂程序控制问题据此拟定了以下两种方案并进行了综合的比较论证具体如下方案一仅采用CPLD作为核心部件的方案 如图1-1所示选用一片CPLD如EPM7128LC84-15作为系统的核心部件实现控制与处理的功能CPLD具有速度快编程容易资源丰富开发周期短等优点可利用VHDL语言进行编写开发但CPLD在控制上较单片机有较大的劣势同时CPLD的处理速度非常快而小车的行进速度不可能太高那么对系统处理信息的要求也就不会太高在这一点上MCU就已经可以胜任了若采用该方案必将在控制上遇到许许多多不必要增加的难题为此我们不采用该种方案进而提出了第二种设想方案二仅采用单片机作为核心部件的方案如图1-2所示采用单片机作为整个系统的核心用其控制行进中的小车以实现其既定的性能指标充分分析我们的系统其关键在于实现小车的自动控制而在这一点上单片机就显现出来它的优势控制简单方便快捷这样一来单片机就可以充分发挥其资源丰富有较为强大的控制功能及可位寻址操作功能价格低廉等优点因此这种方案是一种较为理想的方案针对本设计特点多开关量输入的复杂程序控制系统需要擅长处理多开关量的标准单片机而不能用精简IO口和程序存储器的小体积单片机DAAD功能也不必选用根据这些分析我选定了P89C51RA单片机作为本设计的主控装置51单片机具有功能强大的位操作指令IO口均可按位寻址程序空间多达8K对于本设计也绰绰有余更可贵的是51单片机价格非常低廉在综合考虑了传感器两部电机的驱动显示等诸多因素后我们决定采用一片单片机充分利用P89C51RA单片机的资源122机械系统本题目要求小车的机械系统稳定简单而四轮运动系统具备以上特点驱动部分由于玩具汽车的直流电机功率较小而小车上装有电池电机电子器件等使得电机负担较重为使小车能够顺利启动且运动平稳在直流电机和轮车轴之间加装了三级减速齿轮显示部分将显示模块放置小车前部上方利于观察 电池的安装将电池放置在车体的正下方降低车体重心提高稳定性同时可增加驱动轮的抓地力减小轮子空转所引起的误差123电机驱动模块方案一采用继电器对电动机的开或关进行控制通过开关的切换对小车的速度进行调整此方案的优点是电路较为简单缺点是继电器的响应时间慢易损坏寿命较短可靠性不高方案二采用电阻网络或数字电位器调节电动机的分压从而达到分压的目的但电阻网络只能实现有级调速而数字电阻的元器件价格比较昂贵更主要的问题在于一般的电动机电阻很小但电流很大分压不仅回降低效率而且实现很困难方案三使用功率三极管作为功率放大器的输出控制直流电机线性型驱动的电路结构和原理简单成本低加速能力强采用由达林顿管组成的H型PWM电路用单片机控制达林顿管使之工作在占空比可调的开关状态下精确调整电动机转速这种电路由于工作在管子的饱和截止模式下效率非常高H型保证了简单的实现转速和方向的控制电子管的开关速度很快稳定性也极强是一种广泛采用的PWM调速技术这种调速方式有调速特性优良调整平滑调速范围广过载能力大能承受频繁的负载冲击还可以实现频繁的无级快速启动制动和反转等优点因此决定采用使用功率三极管作为功率放大器的输出控制直流电机124传感器系统方案一反射式红外发射接收装置只有物体反射红外光时才有信号输入其信号强度与小车距障碍物的距离成正比因此可利用信号强度作为避障依据红外探测器的选型与工作方式1红外探测器的选型 红外探测器以其发射功率大抗干扰能力强而在工业生产中有着广泛的应用红外探测器按其工作模式可大致分为主动式与被动式主动式红外探测器自带红外光源通过对光源的遮挡反射折射等光学手段可以完成对被探测物体位置的判别被动式红外探测器本身没有光源通过接受被探测物体的特征光谱辐射来测量被探测物的位置温度或进行红外成像直流直接驱动方式装置简单但检测距离和抗干扰能力都比较差交流调制方式由于可以采用交流耦合方式解决了放大器的直流漂移问题从而可以大大提高检测的距离同时由于环境光产生的干扰多数情况是信号的直流或低频分量可以由滤波器加以隔绝因此交流调试方式抗干扰能力也比较强缺点是系统相对复杂在本体中我们要利用红外探测器检测障碍物的距离显然选用主动式红外传感器比较合适系统的造价可以降低可靠性可以提高主动式红外传感器又可分为分立元件型透射遮挡型和反射型如图1-3示分立元件型发光管与接收管相互独立用户在使用时可以根据需要灵活的设定发光管与接受管的位置并可利用棱镜透镜等完成特殊的目的缺点是装置麻烦透射遮挡型和反射型通过塑料模具将发光管与接收管封装在一起非常方便用户使用在本题中对障碍物的检测我使用反射型2主动式红外探测器的工作方式选取主动式红外探测器常用的驱动方式可分为直流直接驱动方式和交流调制方式直流直接驱动方式装置简单但检测距离和抗干扰能力都比较差交流调制方式由于可以采用交流耦合方式解决了放大器的直流漂移问题从而可以大大提高检测的距离同时由于环境光产生的干扰多数情况是信号的直流或低频分量可以由滤波器加以隔绝因此交流调试方式抗干扰能力也比较强缺点是系统相对复杂 方案二采用反射式超声波换能器只有物体反射超声波时才有信号输入测量发射接收信号间的时间差T2-T1利用其可以得到障碍物的距离将该信息送给单片机单片机发出控制信号改变小车的转向使小车不与障碍物发生接触该方法适合较远距离障碍物检测反射式超声波换能器成本高电路设计复杂因为不要求检测的很远于是选自了反射式光电传感器在本题中对前方障碍物的检测因为要求检测距离较远受到环境光的干扰比较大因此我们选用抗干扰能力较强的交流调制工作方式而对小车侧面障碍物的检测由于要求检测距离较近外界干扰相对较弱为简化设计我们选用直流直接驱动方式125电源电路的选型方案一所有器件采用单一电源6节AA电池这样供电比较简单但是由于电动机启动瞬间电流很大而且PWM驱动的电动机电流波动较大会造成电压不稳有毛刺等干扰严重时可能造成单片机系统掉电缺点十分明显图1-4稳压电路方案二双电源供电将电动机驱动电源与单片机及其周边电路电源完全隔离利用光电耦合器传输信号这样做法虽然不如单电源方便灵活但可将电动机驱动所造成的干扰完全消除进一步提高系统稳定性126里程检测模块方案一由发光二极管和光敏二极管组成发射接收装置将一带四个孔的遮光塑料板贴于车轮将此装置固定车轮一侧车轮每转动一圈发射接收正对四次通过对接受脉冲计数从而得到车的里程安装困难 方案二采用霍尔集成片将磁铁安装于车轮上霍尔集成片安装在固定位置当磁铁与霍尔集成片正对时由于霍尔效应对产生脉冲计数从而得到车轮转数通过程序求出里程通过ZLG7289A显示经分析拟选用方案二127显示模块方案一通过单片机直接驱动LED通过8个IO口驱动八个LED8个IO口驱动LED的八段发光二级管此方法占用大量的IO口方案二使用ZLG7289A显示驱动芯片ZLG7289A是一片具有串行接口的可同时驱动8位共阴式数码管或64只独立LED的智能显示驱动芯片ZLG7289A内部含有译码器可直接接受BCD码或16进制码并同时具有2种译码方式此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等ZLG7289A采用串行方式与微处理器通讯串行数据从DATA引脚送入芯片并由CLK端同步有操作方便占用IO口少等优点因此选用方案二总结一下这次设计智能小车可以按指定路线运行自动区分直线轨道和弯路轨道在指定弯路处拐弯实现灵活前进转弯倒退等功能在轨道上划出设定的地图并且车速自动可调主要是以P89C51RA单片机为核心采用霍尔传感器进行里程统计红外传感器进行目标识别与避障使自动寻迹小车准确跟踪轨迹路线采用直流电机对车的转向进行控制由软件实现了小车自动行驶自动避障里程统计行驶时间显示并发出指示信息等功能第二章主控制单元21整体构思经过方案论证的过程之后我们选定了仅采用单片机作为核心部件的方案其系统总方框图如图2-1所示 具体的功能设置已通过该图做了直观的说明通过主控芯片控制各传感器输入的信号控制方式由软件来实现其中包括六个红外传感器用来检测障碍物四个传感器用来检测侧面障碍2个检测前方障碍还有一个霍尔传感器用来检测路程相关的信号除了处理这些信号单片机还通过IO口控制直流电机和LED的显示在功能和作用上我分成了四大部分主控驱动避障和显示部分总原理图见论文后附录2图2-1系统总原理框图22主控制部分221CPU介绍P89C51RA2xx包含8K可并行可编程的非易失性FLASH程序存储器并可实现对器件串行在系统编程ISP和在应用中编程IAP在系统编程ISPIn-SystemProgramming当MCU安装在用户板上时允许用户下载新的代码在应用中编程IAPIn-ApplicationProgrammingMCU可以在系统中获取新代码并对自己重新编程这种方法允许通过调制解调器连接进行远程编程片内ROM中固化的默认的串行加载程序BootLoader允许ISP通过UART将程序代码装入Flash存储器而Flash代码中则不需要加载程序对于IAP用户程序通过使用片内ROM中的标准程序对Flash存储器进行擦除和重新编程引脚如图2-2它的管脚描述如表2-1该器件可通过并行编程或在系统编程对一个Flash位进行编程从而选择6时钟或12时钟模式此外也可通过时钟控制寄存器CKCON中的X2位选择6时钟或12时钟模式另外当处于6时钟模式时片内外设可以选择一个机器周期6时钟或是12时钟可通过CKCON寄存器对每个外设的时钟源进行选择 该系列微控制器是80C51微控制器的派生器件是采用先进CMOS工艺制造的8位微控制器指令系统与80C51完全相同该器件有4组8位IO口3个16位定时计数器多中断源-4中断优先级-嵌套的中断结构1个增强型UART片内振荡器及时序电路图2-2引脚图新增的特性使得P89C51RA2成为功能更强大的微控制器从而更好地支持需要用到脉宽调制高速IO递增递减计数功能如电机控制等应用场合表2-1管脚描述名称管脚号类型名称和功能Vss20I地0V参考点Vcc40I电源提供掉电空闲正常工作电压P00-0739-32IOP0口P0口是开漏双向口可向其写入1使其状态为悬浮用作高阻输入P0也可以在访问外部程序存储器时作地址的低字节在访问外部数据存储器时作数据总线此时通过内部强上拉传送1P10-171-812345678IOIOIIIO IOIOIOIOP1口P1口是带内部上拉的双向IO口向P1口写入1时P1口被内部上拉为高电平可用作输入口当作为输入脚时被外部拉低的P1口会因为内部上拉而输出电流见DC电气特性P1口第2功能T2P10定时计数器2的外部计数输入时钟输出T2EXP11定时计数器2重装载捕捉方向控制ECIP12PCA的外部时钟输入CEX0P13PCA模块0捕获比较模式的外部IO管脚CEX1P14PCA模块1捕获比较模式的外部IO管脚CEX2P15PCA模块2捕获比较模式的外部IO管脚CEX3P16PCA模块3捕获比较模式的外部IO管脚CEX4P17PCA模块4捕获比较模式的外部IO管脚P20-2721-28IOP2口P2口是带内部上拉的双向IO口向P2口写入1时P2口被内部上拉为高电平可用作输入口当作为输入脚时被外部拉低的P2口会因为内部上拉而输出电流见DC电气特性在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址OVXDPTR此时通过内部强上拉传送1当使用8位寻址方式MOVRi访问外部数据存储器时P2口发送P2特殊功能寄存器的内容P27在编程擦除时必须为1续表2-1管脚描述名称管脚号类型名称和功能P30-P3710-17 1011IOIOP3口P3口是带内部上拉的双向IO口向P3口写入1时P3口被内部上拉为高电平可用作输入口当作为输入脚时被外部拉低的P3口会因为内部上拉而输出电流见DC电气特性P89C51RX2的P3口脚具有以下特殊功能RxDp30串行输入口TxDP31串行输出口12IP32外部中断013IP33外部中断11415IIT0P34定时器0外部输入T1P35定时器1外部输入16IP36外部数据存储器写信号17IP37外部数据存储器读信号RST9I复位当晶振在运行中只要复位管脚出现2个机器周期高电平即可复位内部有扩散电阻连接到Vss仅需要外接一个电容到Vcc即可实现上电复位ALE30O地址锁存使能在访问外部存储器时输出脉冲锁存地址的低字节在正常情况下ALE输出信号恒定为16振荡频率并可用作外部时钟或定时注意每次访问外部数据时一个ALE脉冲将被忽略ALE可以通过置位SFRauxililary0禁止置位后ALE只能在执行MOVX指令时被激活29O程序存储使能读外部程序存储当从外部读取程序时每个机器周期被激活两次在访问外部数据存储器无效访问内部程序存储器时无效 Vpp31I外部寻址使能编程电压在访问整个外部程序存储器时必须外部置低如果为高时将执行内部程序当RST释放后EA脚的值被锁存任何时序的改变都将无效该引脚在对FLASH编程时用于输入编程电压VppXTAL119I晶体1振荡反向放大器输入端和内部时钟发生电路输入端XTAL218O晶体2振荡反向放大器输出端注为了避免上电时的latch-up效应任意管脚Vpp除外上的电压最大不能高于Vcc05最低不能低于Vss-05222CPU功能在设计中将MCU资源分配如下P00-P03作为直流电机的4个驱动控制口设计中采用直接控制P14-P17连接ZLG7289控制数据的传输和显示P20-P25作为传感器信号的接入口P26-P27产生脉冲控制三极管从而使红外传感器产生红外线脉冲P31和P32即RXDTXD为ISP相关所用P35即计数器输入端作为霍尔传感器产生脉冲的接入端四个反射式光电传感器和红外线传感器用于障碍物检测检测到的红外避障信号由P2口输入再通过软件分析通过P1口输出相应的电机驱动信号控制小车实现相应的动作来达到避开障碍物的目的还有一个传感器便是霍尔传感器它检测到的脉冲送入P3口并进行记数通过程序计算出小车的里程并由LED显示出来单片机的P3口为复用口还可以根据实际情况扩展所需要的功能比如用于偱轨迹红外线传感器检测到的信号输入到P3口再通过软件完成相应的控制动作223CPU相关电路图图2-3时钟信号输入方式P89C51的时钟信号的应用有两种方式内部方式和外部方式原理图如图2-3所示在设计中采用的是内部方式 XTAL1是片内振荡器的反相放大器输入端XTAL2则是输出端使用外部振荡器时外部振荡信号应直接加到XTAL1而XTAL2悬空内部方式时时钟发生器对振荡脉冲二分频如晶振为12MHZ时钟频率就为6MH晶振的频率可以在1MH24MHz内选择电容取30PF左右图2-4CPU复位电路在振荡器运行时有两个及其周期24个振荡周期以51芯片便循环复位复位后P0P3口均置1引脚表现为高电平程序计数器和特殊功能寄存器SFR全部清零当复位脚由高电平变为低电平时芯片为ROM的00H处开始运行程序常用的复位电路图如图2所示TMOD的控制位CT进行选择这两个定时计数器有4种操作模式通过TMOD的M1和M0选择两个定时计数器的模式01和2都相同模式3不同如下所述而定时器2未用到就不赘述1模式0将定时器设置成模式0时类似8048定时器即8位计数器带32分频的预分频器此模式下定时器寄存器配置为13位寄存器当计数从全为1翻转为全为0时定时器中断标志位TFn置位当TRn1同时GATE0或1时定时器计数置位GATE时允许由外部输入控制定时器这样可实现脉宽测量TRn为TCON寄存器内的控制位如表2-2表2-2定时器计数器特殊功能寄存器TMODGATECM1M0GATECM1M0该13位寄存器包含THn全部8个位及TLn的低5位TLn的高3位不定可将其忽略置位运行标志TRn不能清零此寄存器 模式0的操作对于定时器0及定时器1都是相同的两个不同的GATE位TMOD7和TMOD3分别分配给定时器0及定时器12模式1模式1除了使用了THn及TLn全部16位外其它与模式0相同3模式2此模式下定时器寄存器作为可自动重装的8位计数器TLnTLn的溢出不仅置位TFn而且将THn内容重新装入TLnTHn内容由软件预置重装时THn内容不变模式2的操作对于定时器0及定时器1是相同的4模式3在模式3中定时器1停止计数效果与将TR1设置为0相同此模式下定时器0的TL0及TH0作为两个独立的8位计数器TL0占用定时器0的控制位CTGATETR0INT0及TF0TH0限定为定时器功能计数器周期占用定时器1的TR1及TF1此时TH0控制定时器1中断模式3可用于需要一个额外的8位定时器的场合定时器0工作于模式3时80C51看似有3个定时器计数器当定时器0工作于模式3时定时器1可通过开关进入退出模式3它仍可用作串行端口的波特率发生器或者应用于任何不要求中断的场合设计中仅用了定时器0和计数器1霍尔传感器检测的低电平信号直接由计数器1计数计数器设初值后形成5ms的中断时间和红外线脉冲的形成都利用了此中断详见程序总程序详见附录1232程序中断程序框图如图2-5软件设计主流程图如图2-6总程序清单见附录1 图2-5中断流程图图2-6主程序框图第三章驱动单元31直流电机的驱动原理直流电机是由直流电源供电输入电能输出的是机械能所示为一个典型的直流电机控制电路电路得名于H桥式驱动电路是因为它的形状酷似字母H4个三极管组成H的4条垂直腿而电机就是H中的横杠注意图1及随后的两个图都只是示意图而不是完整的电路图其中三极管的驱动电路没有画出来如图所示H桥式电机驱动电路包括4个三极管和一个电机要使电机运转必须导通对角线上的一对三极管根据不同三极管对的导通情况电流可能会从左至右或从右至左流过电机从而控制电机的转向要使电机运转必须使对角线上的一对三极管导通例如当Q1管和Q4管导通时电流就从电源正极经Q1从左至右穿过电机然后再经Q4回到电源负极该流向的电流将驱动电机顺时针转动另一对三极管Q2和Q3导通电流将从右至左流过电机电流将从右至左流过电机从而驱动电机沿另一方向转动Q9Q10Q11Q12构成H桥驱动电路控制着几个管子的通断就可以控制直流电机的正转反转当P00高电平P01低电平时Q9和Q11导表3-1IO的脉冲控制直流电机动作P03P02P01P00状态1001前行0110后退1010左转0101右转通电机正转具有良好的抗干扰性能反之电机反转当左轮前进右轮后退时车子便右拐弯反之左拐弯图3-2小车驱动 四个输出端具有较大的电流驱动能力当小车负载电池启动时每通道峰值电流能力可达22A经过测试在此设计中为了得到稳定的控制信号在单片机与直流电机之间添加一个反相器74LS04以提高控制端输出电流和反应速度因此提高控制灵敏性第四章躲避障碍物单元41避障传感器电路避障电路部分有六个传感器四个可以检测近距离障碍物的传感器检测到的信号送入到单片机的P20-P23口两个可以检测远距离障碍物的传感器检测到的信号送入单片机的P25和P26411近距离避障传感器图4-1反射式光电传感器电路为提高小车的精度系统采用个发射和接收一体的反射式红外光电传感器JY043作为检测元件红外线具有极强的反射能力应用广泛采用专用的红外发射管和接收管可以有效地防止周围可见光的干扰提高系统的抗干扰能力对于小车发射管发出同样的光强接收管接收到的光强不同因此输出的电压值也不同给定一个基准电压通过对不同输出电压值进行比较则电路的输出为高低电平当检测到时输出为高电平这样不仅系统硬件电路简单而且信号处理速度快LM393比较器与外部输入信号进行比较在此设计中发光二级管的功率为25V160Ω0156W通过调节R20可变电阻电位器来调节LM393中的比较电压通过比较器输出0-5V的电压被单片机口读入小车侧面的传感器安装位置如图4-2IO口检测到高电平1表示有信号有障碍物0为无信号无障碍物412远距离避障传感器 图4-3红外线传感器对前方障碍物的检测因为要求检测距离较受到环境光的干扰比较大因此我们选用抗干扰能力较强的交流调制工作方如图所示在发射端通过改变NPN三级管9013的开断使发光二级管产生50Hz到500Hz的脉冲在接端采用001u的滤波电容来阻止环境光的干扰输入信号通过LM358集成运放放大输出被单片机数据采集口读入小车正面的传感器安装位置请参看图4-4安装位置图图4-5LM358引脚图LM358内部包括有两个独立的高增益内部频率补偿的双运算放大器适合于电源电压范围很宽的单电源使用也适用于双电源工作模式在推荐的工作条件下电源电流与电源电压无关它的使用范围包括传感放大器直流增益模块和其他所有可用单电源供电的使用运算放大器的场合分子R为100K分母R为47K10K27K通过三位拨盘来调节LM358的防大倍数因此可调节测量的远近3在LM358的输出端增加一个发光二级管通过LM358的输出信号控制NPN三级管的通断来控制二级管是否发光从而我们可直观的观察到是否遇到障碍物42避障方法421前方有障碍物小车前行检测P2口如果前方或左前方有障碍物其避障效果如图4-6重复步骤可躲避正前方和左前方障碍物右前方有障碍物时上述图中步骤将左拐变为右转右转相应改为左转即可躲避右前方有障碍物后退 左拐后退右拐前进图4-6避障效果图422侧面有障碍物小车前行检测P2口如果左方有障碍物其避障效果如图4-7右方有障碍物时将图中步骤拐的方向改为反方向右拐前行左长无信号左拐前行并右拐越过障碍图4-7侧避障效果43避障程序避左前障碍物程序流程如图4-8图4-8避左前障碍程序框图第五章显示单元51里程和时间显示里程设计涉及到霍尔传感器它用来检测小车车圈上的磁铁在小车车圈上安装10片磁铁磁铁于磁铁间距为17mm通过单片机T1口计数器记录磁片个数一秒送ZLG7289A显示一次霍尔传感器的分析如下 按图5-1所示的各种方法设置磁体将它们和霍尔开关电路组合起来可以构成各种旋转传感器霍尔电路通电后磁体每经过霍尔电路一次便输出一个电压脉冲由此可对转动物体实施转数转速角度角速度等物理量的检测时间显示采用定时器0中断的方法定时器0工作方式1为16位付初值后能产生5ms的中断累计20次便为1秒送LED显示循环到60的时候秒存储单元就清零分单元由0加152显示模块硬件此设计采用的是广州周立功有限公司研发的串行接口8位LED数码管及64键的键盘智能控制芯片ZLG7289A此显示要求位与位之间扫描时间不能超过10ms同时要满足八位一次行扫描时间不能超过30ms连接如图5-25-2LED显示521ZLG7289A介绍ZLG7289A是串行接口8位LED数码管及64键键盘智能控制芯片ZLG7289A是一片具有串行接口的可同时驱动8位共阴式数码管或64只独立LED的智能显示驱动芯片该芯片同时还可连接多达64键的键盘矩阵单片即可完成LED显示、键盘接口的全部功能ZLG7289A内部含有译码器可直接接受BCD码或16进制码此外还具有多种控制指令如消隐闪烁左移右移段寻址等ZLG7289A具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口电特性Vcc50VFosc16MHz25℃如表5-1典型应用仪器仪表工业控制器条形显示器控制面板 特点串行接口无需外围元件可直接驱LED各位独立控制译码不译码及消隐和闪烁属性循环左移循环右移指令具有段寻址指令方便控制独立LED64键键盘控制器内含去抖动电路表5-1电特性符号参数测试条件最小典型最大单位Vcc电源电压455055VIcc工作电流不接LED35mAIcc工作电流LED全亮10mA60100mA逻辑输入高电平2055V逻辑输入低电平008V按键响应时间含去抖动时间101840mSKEY引脚输出电流7mAKEY引脚吸入电流10mAT1从CS下降沿至CLK脉冲时间2550250uST2传送指令时CLK脉冲宽度58250uST3字节传送中CLK脉冲时间间隔58250uST4指令与数据时间间隔1525250uST5读键盘指令中指令与输出数据时间间隔1525250uST6输出键盘数据建立时间58--uST7读键盘数据时CLK脉冲宽度58250uST8读键盘数据完成后DATA转为输入状态时间5uS表5-2ZLG7289A引脚功能说明 引脚名称说明12正电源35NC悬空4接地6片选输入端此引脚为低电平时可向芯片发送指令及读取键盘数据7CLK同步时钟输入端向芯片发送数据及读取键盘数据时此引脚电平上升沿表示数据有效8DATA串行数据输入输出端当芯片接收指令时此引脚为输入端当读取键盘数据时此引脚在读指令最后一个时钟的下降沿变为输出端9按键有效输出端平时为高电平当检测到有效按键时此引脚变为低电平10-16SG-SA段g-段a驱动输出17DP小数点驱动输出18-25DIG0-DIG7数字0-数字7驱动输出26OSC2振荡器输出端27OSC1振荡器输入端28复位端522ZLG7289A串行接口ZLG7289A采用串行方式与微处理器通讯串行数据从DATA引脚送入芯片并由CLK端同步当片选信号变为低电平后DATA引脚上的数据在CLK引脚的上升沿被写入ZLG7289A的缓冲寄存器ZLG7289A的指令结构有三种类型1不带数据的纯指令指令的宽度为8个BIT即微处理器需发送8个CLK脉冲2带有数据的指令宽度为16个BIT即微处理器需发送16个CLK脉冲3读取键盘数据指令宽度为16个BIT前8个为微处理器发送到ZLG7289A的指令后8个BIT为ZLG7289A返回的键盘代码执行此指令时ZLG7289A的DATA端在第9个CLK脉冲的上升沿变为输出状态并与第16个脉冲的下降沿恢复为输入状态等待接收下一个指令串行接口的时序如下图5-3图5-4图5-5图5-3纯指令时序图单字节命令图5-4带数据指令时序图命令字在前输入数据在后图5-5读键盘指令时序图命令字在前键值在后 523ZLG7289A控制指令ZLG7289A的控制指令分为二大类纯指令和带有数据的指令5231纯指令1复位清除指令D7D6D5D4D3D2D1D010100100当ZLG7289A收到该指令后将所有的显示清除所有设置的字符消隐闪烁等属性也被一起清除执行该指令后芯片所处的状态与系统上电后所处的状态一样2测试指令D7D6D5D4D3D2D1D010111111该指令使所有的LED全部点亮并处于闪烁状态主要用于测试3左移指令D7D6D5D4D3D2D1D010100001使所有的显示自右向左从第1位向第8位移动一位包括处于消隐状态的显示位但对各位所设置的消隐及闪烁属性不变移动后最右边一位为空无显示例如原显示为12345678其中第2位2和第4位4为闪烁显示执行了左移指令后显示变为2345678第二位3和第四位5为闪烁显示4右移指令D7D6D5D4D3D2D1D010100000与左移指令类似但所做移动为自左向右从第8位向第1位移动移动后最左边一位为空5循环左移指令D7D6D5D4D3D2D1D010100011 与左移指令类似不同之处在于移动后原最左边一位第8位的内容显示于最右位第1位在上例中执行完循环左移指令后的显示为23456781第二位3和第四位5为闪烁显示6循环右移指令D7D6D5D4D3D2D1D010100010与循环左移指令类似但移动方向相反5232带有数据的指令1下载数据且按方式0译码D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D010000a2a1a0DPXXXd3d2d1d0X无影响命令由二个字节组成前半部分为指令其中a2a1a0为位地址具体分配如下a2a1a0显示位00010012010301141005101611071118d0-d3为数据收到此指令时ZLG7289A按以下规则译码方式0进行译码如下表d0-d3十六进制 d3d2d1d17段显示00H0000001H0001102H0010203H0011304H0100405H0101506H0110607H0111708H1000809H100190AH1010-0BH1011E0CH1100H0DH1101L0EH1110P0FH1111空无显示小数点的显示由DP位控制DP1时小数点显示DP0时小数点不显示2下载数据且按方式1译码D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D011001a2a1a0DPXXXd3d2d1d0X无影响此指令与上一条指令基本相同所不同的是译码方式该指令的译码按下表进行d0-d3十六进制d3d2d1d17段显示00H0000001H0001102H0010203H0011304H0100405H0101506H0110607H0111708H1000809H100190AH1010A0BH1011B0CH1100C0DH1101D0EH1110E0FH1111F3下载数据但不译码D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D010010a2a1a0DPABCDEFG其中a2a1a0为位地址参见下载数据且译码指令A-G和DP为显示数据分别对应7段LED数码管的各段4闪烁控制D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D010001a2a1a0d8d7d6d5d4d3d2d1此命令控制各个数码管的消隐属性d1-d8分别对应数码管1-80闪烁1不闪烁开机后缺省的状态为各位均不闪烁 5消隐控制D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D010011000d8d7d6d5d4d3d2d1此命令控制各个数码管的消隐属性d0-d8分别对应数码管1-81显示0消隐当某一位被赋予了消隐属性后ZLG7289A在扫描时将跳过该位因此在这种情况下无论对该位写入何值均不会被显示但写入的值将被保留在将该位重新设为显示状态后最后一次写入的数据将被显示出来当无需用到全部8个数码管显示的时候将不用的位设为消隐属性可以提高显示的亮度注意至少应有一位保持显示状态如果消隐控制指令中d1--d8全部为0该指令将不被接受ZLG7289A保持原来的消隐状态不变6段点亮指令D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D011100000XXd5d4d3d2d1d0此为段寻址指令作用为点亮数码管中某一指定的段或LED矩阵中某一指定的LED指令中X无影响d0-d5段地址范围从00-3FH具体分配为第1个数码管的G段地址为00HF段为01HA段为06H小数点DP为07H第2个数码管的G段为08HF段为09H依此类推直至第8个数码管的小数点DP地址为3FH7段关闭指令D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D011000000XXd5d4d3d2d1d0段寻址命令作用为关闭熄灭数码管中的某一段指令结构与段点亮指令相同请参阅上文8读键盘数据指令 D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D000010101d7d6d5d4d3d2d1d0该指令与其它指令不同的是此命令的前一个字节为单片机传送指令而后一个字节则为返回的按键代码其范围为无键按下时在此指令的前半段的引脚处于高阻输入状态可以用来接收来自微处理器的指令在指令的后半段引脚从输入状态转为输出状态此时将输出键盘代码的值故微处理器连接到引脚的口应当有一个从输出态到输入态的转换过程当检测到有效的按键时脚将从高电平变为低电平并一直保持到按键结束在此期间如果接收到读键盘数据指令则输出当前按键的键盘代码如果在接收到读键盘数据指令时没有有效按键将输出ISP介绍ISP编程不需要将微控制器从系统中移出在系统编程特性包含了一系列内部的硬件资源与内部固件相结合可实现通过串口对P89C51RA2xx的远程编程固件由Philips提供并嵌入到每一个芯片当中Philips的在系统编程特性使嵌入式应用中的在电路编程成为可行并最大限度减小了额外的元件开销和电路板面积ISP功能使用芯片的5个管脚TxDRxDVccVss和Vpp用该特Vpp电压必须充分的去耦而且不能超过手册规定的最大值图6-1ISP的最小硬件配置62FLASHEPROM存储器P89C51RA2xxFlash存储器增加了EPROM所没有的电可擦除和编程特性对芯片的擦除操作将整个程序存储区都擦除擦除功能可实现对任意Flash块进行擦除在系统编程和标准的并行编程都是可行的片内产生的擦除和写入时序为用户提供了良好的编程接口Flash结构如图6-2P89C51RA2xx Flash存储器甚至在经过10000次擦除和编程之后仍然能可靠地保存存储器的内容存储单元的设计使擦除和编程结构最优化此外先进的沟道氧化工艺和低内部电场的结合使擦除和编程操作更加可靠BLOCK15BLOCK14BLOCK13BLOCK12BLOCK11BLOCK10BLOCK9BLOCK8BLOCK7BLOCK6BLOCK5BLOCK4BLOCK3BLOCK2BLOCK1BLOCK0图6-2Flash结构63ISP设计在系统中编程ISPISP是InSystemProgramming是Lattice半导体公司首先提出来的一种我们能在产品设计制造过程中的每个环节甚至在产品卖给最终用户以后具有对其器件电路板或整个电子系统的逻辑和功能随时进行组态或重组能力的最新技术对P89C51R2单片机系统而言即当MCU安装在用户板上时允许通过串口下载用户程序BOOTROM固件的说明菲利浦公司为P89C51Rd2在片内提供了一个名叫引导ROMBOOTROM的1K字节的固件固件上有引导装载程序可以接收主机经串口传来的命令和数据如经PC机的RS232口还有对FLASH进行串行擦除和写入等多种子程序这个固件是放在64KFLASH地址0FC00H0FFFFH相覆盖需要用特殊功能寄存器AUXR1的ENBOOT位进行固件和FLASH之间的切换ENBOOT10FC00H0FFFFH范围寻址到固件ENBOOT0地址在0FC00H0FFFFH范围寻址到FLASH如果系统寻址到0FC00H且进入固件则系统进入系统进入ISP准备接受上位机通过串口传送的命令而进行相应的擦除编程等操作BOOTROM 固件中已经固化有上述擦除和编程等子程序所以应用程序也可来调用各功能子程序为了调用的方便给各种功能子程序一个共用的函数调用入口名为PGMMTP地址为0FFF0HR0R1R2DPTRACC输出参数在ACC中进入BOOTROM固件进行编程操作的方式1在RST转入下降沿时PSEN腿被拉到低电平ALE腿浮空EA腿的电压5Vih结果ENBOOT位的被置1CPU寻址到FC00H进入BOOTROM系统进入ISP运行状态准备接受上位机通过串口传送的命令而进行相应的擦除编程等操作2在RST转入下降沿时STATUSBYTE非00值BOOTVECTOR0FCHENBOOT位的被置1CPU寻址到FC00H进入BOOTROM系统进入ISP运行状态准备接受上位机通过串口传送的命令而进行相应的擦除编程等操作3软件方式系统正常运行时STEP1使ENBOOT1SETBAUXR15SETP2关闭中断CLREISETP3使程序跳转到0FC00HLJMP0FC00HISP运行状态准备接受上位机通过串口传送的命令而进行相应的擦除编程等操作4编制下位机各编程功能子程序CALLPGMMTP按照具体要求进入IAP状态接受上位机通过串口传送的命令调用相应的功能子程序进行相应的擦除编程等操作PC机的连接641连接介绍在PC机系统内都装有异步通信适配器利用它可以实现异步串行通信该适配器的核心元件是可编程的Intel8250芯片它使PC机有能力与其他具有标准的RS-232C接口的计算机或设备进行通信而单片机本身具有一个全双工的串行口因此只要配以电平转换的驱动电路隔离电路就可组成一个简单可行的通信接口PC机和单片机最简单的连接是零调制三线经济型这是进行全双工通信所必须的最少线路因为单片机输入输出电平为TTL电平而PC机配置的是RS-232C标准接口二者的电气规范不同所以要加电平转换电路常用的有MC1488MC1489和232设计中采用MA232 232芯片的PC机和单片机串行通信接口电路如图6-3与PC机相连采用9芯标准插座图6-3PC机和单片机串行通信接口参考文献[1]谢自美·电子线路设计试验测试[M]·华中科技大学出版社2004[2]宗光华·机器人的创意设计与实践[M]·北京航空航天大学出版社2004[3]肖景和·红外线热释电与超声波遥控电路[M]·人民邮电出版社2003[4]靳桅·单片机原理及应用[M]·西南交通大学出版社2004[5]王毅编著·单片机器件手册[M]·人民邮电出版社1994[6]何立民·单片机应用系统设计[M]·北京航空航天大学出版社1995[7]软件Keiluvision2ISP89C51RA2xx说明书[8]丹尼斯克拉克机·器人设计与控制[M]·科学出版社2004[9]杨帮文·新编传感器实用宝典[M]·机械工业出版社2005[10]周坚编·单片机C语言轻松入门[M]·北京航空航天大学出版社2006[11]OppenheinAVSchaferR·Discrete-TimeSignalProcessing[M]·EnglewoodCliffsNJPrentice-Hall1989ProakisJGManolakisDG·IntroductontoDigitalSignalProcessing[M]·NewYorkMacmillanPublishingCompany1988·234附录智能小车源程序代码includeinclude defineucharunsignedchardefineaP10xf0definestopP10x0fsbitcsP14sbitclkP15sbitdioP16sbitp21P21sbitp22P22sbitp25P25sbitp24P24sbitp27P27sbitp28P28sbitp36P36sbitp37P37ucharfront9back6left10right5j10j20ucharshort_delay显示短延时ucharifori0i20ilong_delay显示长延时 ucharifori0i70ivoiddisplyucharx7289写数据函数ucharifori0i8iif_crol_xi0x80dio1接受指令elsedio0输出键值clk1short_delayclk0距离显示函数voidjuliddcs0short_delaydisply0x87 displydd10001001010cs1long_delaycs0short_delaydisply0x86displydd100010010cs1long_delaycs0short_delaydisply0x84displydd1000100cs1long_delaycs0short_delaydisply0x85displydd1000cs1long_delay 显示距离voidxianshivoidintdd距离单元J2TL1磁片计数ddj21710距离存储一圈17厘米juliddvoiddelayvoid上电延时步伐大小ucharifori0i0x35i小车驱动voidfxucharxucharyucharnucharii1forn0n--i0xdf控制节奏快慢doP1xdelaywhilei--fori10i14i1 i0xefdoP1yshort_delaywhilei--左和前方有障碍物voidbbvoidintk0dofxabackstop3fxaleftstop2fxabackstop3fxarightstop2fxafrontstop4kxianshiswitchP20x36case0x31break左和前有障碍case0x21break左和左前有障碍 case0x20break左前有障碍case0x02biyan_leftbreak左短有信号跳转到右避函数case0x04biyan_rightbreak右短有信号跳转到左避函数case0x10aabreak右前有障碍case0x14aabreak右和右前有障碍case0x34aabreak右和前有障碍case0x30break前有障碍defaultwhileP20x360fxaleftstop2fxafrontstop3kfxarightstop2右和前方有障碍物voidaavoidintl0dofxabackstop3fxarightstop2fxabackstop3 fxaleftstop2fxafrontstop4lxianshiswitchP20x36case0x31bbbreak左和前有障碍case0x21bbbreak左和左前有障碍case0x20bbbreak左前有障碍case0x02biyan_leftbreak左短有信号跳转到右避函数case0x04biyan_rightbreak右短有信号跳转到左避函数case0x10break'