基于Stm32开发板的智能玩具小车的设计与实现_第1页
基于Stm32开发板的智能玩具小车的设计与实现_第2页
基于Stm32开发板的智能玩具小车的设计与实现_第3页
基于Stm32开发板的智能玩具小车的设计与实现_第4页
基于Stm32开发板的智能玩具小车的设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I摘要摘要:随着当今时代的科学技术的发展,计算机技术也迎来了高速发展时期。在嵌入式领域,各种各样的智能设备和生活家居出现,都说明了我们正朝着物联网的时代前进。嵌入式技术的使用遍布生活中的方方面面,我想把嵌入式技术应用到玩具小车上面,让传统的玩具也可以变得智能,变得更加有趣味性。智能玩具小车以STM32作为核心开发板,应用了PWM脉宽调制技术、红外遥控技术、智能循迹技术以及超声波避障技术,使用到的关键硬件有L293D芯片、红外信号接收器、ST188红外光电传感器、舵机云台以及超声波传感器。小车主要有驱动行驶模块、红外遥控模块、智能循迹模块和超声波摇头避障模块。智能小车基本实现三大运动效果,第一是通过红外遥控器控制小车前进后退等运动。第二是小车可以在黑色轨迹上循迹行驶,自己根据黑色轨迹转弯和前进。第三是小车遇到障碍物时,通过超声波确定与障碍物的距离,并通过超声波寻找没有障碍物的安全路线。关键词:STM32、PWM技术、L293D芯片、超声波传感器

AbstractAbstract:Withthedevelopmentofscienceandtechnologyintoday’sera,computertechnologyhasalsousheredinaperiodofrapiddevelopment.Intheembeddedfied,avarietyofsmartdevicesandhomefurnishingsshowthatwearemovingtowardstheeraoftheinternetofthings.Embeddedtecnologyiswidelyusedinallaspectsoflife.Iwanttoapplyembeddedtechnologytotoycars,sothattraditionaltoyscanbecomemoreintelligentandinteresting. TheintelligenttoycartakesSTM32asthecoredevelopmentboard,andusesPWMtechnology,infraredremotecontroltechnology,intelligenttrackingtechnologyandultrasonicobstacleavoidancetechnilogy.ThekeyhardwareusedincludesL293Dchip,infraredsignalreceiver,ST188infraredphotoelectricsensor,steeringenginecloudplatformandultrasonicsensor.Thecarmainlyincludesdrivingmodule,infraredremotecontrolmodule,intelligenttrackingmoduleandultrasonicshakingheadobstacleavoidancemodule.Thecarmainlyincludesdrivingmodule,infraredremotecontrolmodule,intelligenttrackingmoduleandultrasonicshakingheadobstacleavoidancemodule.Thefirstistocontrolthecarforwardandbackwardbyinfraredremotecontrol.Thesecondisthatthecarcanfollowtheblacktrack,turningandmovingaccordingtotheblacktrack.Thirdly,whenthecarencountersobstacles,thedistancebetweenthecarandtheobstaclesisdeterminedbyultrasound,andthesaferoutewithoutobstaclesisfoundbyultrasound.Keywords:STM32,PWMtechnology,L293Dchip,ultrasonicsensor目录TOC\o"1-3"\f\h\z\u第1章绪论 11.1研究的背景和意义 11.1.1智能玩具小车的研究背景分析 11.1.2智能玩具小车的研究意义 11.2国内外发展状况 21.2.1国内智能玩具小车的发展状况 21.2.2国外智能玩具小车的发展状况 21.3智能玩具小车的环境介绍 31.3.1智能玩具小车的开发环境 31.3.2智能玩具小车的硬件环境 3第2章需求分析 42.1系统功能需求 42.2系统功能模块 42.2.1红外遥控小车运动模式 42.2.2智能循迹行驶模式 52.2.3超声波避障行驶模式 5第3章智能小车的系统设计 63.1驱动行驶模块 63.1.1PWM脉宽调制技术 63.1.2L293D芯片 73.2红外遥控模块 83.2.1红外信号发射装置 83.2.2红外信号接收装置 93.3智能循迹模块 103.3.1ST188红外光电传感器 103.3.2循迹模块电路设计 113.4超声波摇头避障模块 113.4.1小车的舵机 113.4.2超声波传感器 12第4章智能小车的系统实现 134.1红外遥控小车运动程序 134.1.1程序流程图 134.1.2重要代码编写 144.2小车智能循迹程序 164.2.1程序流程图 174.2.2重要代码编写 174.3小车超声波避障程序 194.3.1程序流程图 204.3.2重要代码编写 20第5章系统程序测试 235.1红外遥控小车运动程序调试 235.1.1红外遥控小车运动程序测试内容 235.1.2红外遥控小车运动程序测试过程 235.2小车智能循迹程序调试 245.2.1小车智能循迹程序测试内容 245.2.2小车智能循迹程序测试过程 245.35.3小车超声波避障程序调试 245.3.15.3.1小车超声波避障程序测试内容 245.3.25.3.2小车超声波避障程序测试过程 24参考文献 26致谢 27PAGE28绪论研究的背景和意义智能玩具小车的研究背景分析随着智能时代的到来,社会各个产业的智能化已然成为一种趋势。比如智能电冰箱、智能空调、智能穿戴到工业上的参加生产的机械手、机器人再到街边巡逻的机器人,生活中的方方面面都充斥着智能化的气息。玩具小车的智能化趋势也是日益增加,传统的玩具小车说带来的趣味性在智能玩具小车的比较下暗淡无关。智能化的玩具小车在这个技术高速发展的时代背景下融合的技术越来越多,比如wifi、蓝牙控制,红外线技术,超声波避障以及各种传感器。这大大提高了玩具小车的功能复杂性和游戏时的趣味性,变得更加受孩子的喜爱和父母的青睐。伴随中国的二胎政策的开放,未来大多数的中国家庭里不只有一个独生子女,对于玩具的市场需求会比较大。在家长的眼里,一款好玩而又智能的玩具无疑是最佳选择。孩子在游戏时便能接触到智能化的东西,从而可能激发起内心的求知欲,进而努力学习知识。近些年来,嵌入式的发展越来越快,涉及的领域也非常广泛,应用非常普遍。在嵌入式领域里,STM32开发板具有着一定的地位,其高性能、低功耗的优势成了众多企业追捧的原因,也是我选择它的原因。传统的单片机芯片8051是一种只有8位元的单芯片微控制器,40个引脚,并且I/O口有限,需要重复利用。而STM32芯片是基于ARM的32位微控制器,64个引脚以及多个物理中断,内置睡眠模式减少功能损耗。STM32芯片取代传统的8051芯片是技术发展的结果,也是嵌入式的时代需求。基于STM32研究开发一款玩具小车,既能满足对于小车的性能需求也能够实现玩具小车的多功能性。智能玩具小车的研究意义在这个智能时代,伴随着嵌入式技术的高速发展,智能玩具的出现成为一种发展趋势。我希望孩子在玩智能玩具小车的时候能够爱不释手,在把玩玩具的同时能够接触到嵌入式的东西,从而去追问去学习其中的知识,让学习嵌入式技术的人越来越年轻。又或者把它当成一种业余爱好,在捣弄小车的同时培养他的动手能力和创新意识。国内外发展状况国内智能玩具小车的发展状况当今我们处在一个智能化快速发展的时代,我们身边小孩子们玩的玩具也在慢慢的变得越来越智能化。这也是计算机和微电子技术高速发展的结果。目前市场上出现的智能玩具产品多采用了智能芯片、WiFi技术、人机交互、语音识别等先进技术,让传统的玩具变得耳目一新,受到广大孩子的喜爱。智能玩具小车也是一样,在传统的玩具小车上融合了传感器、超声波等先进技术,趣味性大大加强。目前在国内,智能玩具车存在着很大的市场空间,因为大多数的家庭里的儿童玩具车都是传统的模型车。在价格方面,由于有些技术的成本,导致智能玩具车的价格往往比传统的玩具车高出好几倍,这也是智能玩具车的只能是少数孩子手中玩具的原因。20世纪80年代,一些智能小车的研究才从我国开始,经过几十年的发展,我国的智能小车取得了一定的发展成果的。我国第一辆无人车于1992年研制出来。我国智能小车比赛也是相当的繁荣和丰富。智能车辆竞赛也被教育部指定为大学生竞赛项目之一。智能小车的研究涉及传感器技术、机械结构、智能控制等多个学科的知识。未来国内的智能小车发展会有很大的空间。国外智能玩具小车的发展状况1972年,第一台智能小车Shakey在美国研制成功。从20世纪70年代开始,美国等西方发达国家便投入大多的资金进行智能小车的研究,主要方向是军事、高速公路和城市环境。在80年代初,欧洲在进行前车距控制、视觉增强、道路环境的感知和传感器技术融合等方面取得了较大的进步。 美国卡内基梅隆大学机器人研究所研制的NavLab-5智能车,已经能够完成传感器信息融合,图像理解和车体横向控制等功能。该大学研制的类似于行星探测车“流浪号”的智能车具有多种环境感知力,并且能在沙漠中进行自主控制和几千公里以外的人工控制。意大利Parma大学研制的ARGO试验车应用立体视觉检测和定位车辆行驶前方障碍,通过单目图像来得到前方道路的几何参数,并且通过I/O板来获得车辆速度和其他数据。国外的智能小车起步比国内要早很多,技术也比较成熟一点。从目前阶段来看,智能车所能达到的智能化和自主化水平还比较低,还有很多方面需要改进和完善。智能玩具小车的环境介绍智能玩具小车的开发环境(1)操作系统:Window10(2)开发软件:Keil5(3)烧录方式:USB转串口CH340驱动智能玩具小车的硬件环境(1)ZYSTM32核心板、STM32F103RCT6芯片(2)Arduino转接板(3)两个电机、5号2节电池盒、红外遥控器(4)小车底板、2节14500mA锂电池、锂电池充电器(5)舵机云台、超声波模块、4P杜邦线、蓝牙模块、红外接收模块

需求分析系统功能需求为了给用户带来更多的趣味性的美好体验,智能玩具小车设定了三种娱乐模式,分别是红外遥控小车运动模式、智能循迹模式以及超声波避障模式。涉及的功能有红外遥控功能、小车驱动行驶功能、循迹航行功能、超声波避障功能。丰富的功能模块带来更加愉悦的游戏体验。系统功能模块智能玩具小车有三种功能模式,分别是红外遥控小车运动模式、智能循迹行驶模式以及超声波避障行驶模式。这三种模式都用到了一个基本且重要的驱动行驶功能,它是小车运动效果的呈现。红外遥控功能是红外遥控小车运动模式最主要的功能。循迹航行功能是智能循迹行驶模式最主要的功能,它决定着小车的自动循迹效果。超声波避障功能在超声波避障行驶模式中起到了关键的作用,它用来为小车检测前方的障碍物和寻找安全路线。图2.1系统功能模块图红外遥控小车运动模式该模式下用户可以通过红外遥控器操纵小车运动,让小车前进、后退、左转、右转等运动。从红外遥控器发出信号后,由小车上的红外接收器接收并进一步处理,这就是红外遥控功能。小车的驱动行驶功能是小车的动力源泉,小车的种种运动都由它来调配。智能循迹行驶模式这是一个比较智能且自动的模式,用户只需按下启动键,小车便可以绕着黑色轨迹自动行驶。这个模式涉及的循迹航行功能就是小车可以识别黑色线条,并根据黑色线条做出相应的运动调整,让小车循迹行驶。超声波避障行驶模式在这个模式下,小车启动后便会直线行驶,当遇到障碍物时,小车利用超声波判断与障碍物的距离,并利用超声波找出最佳避障路线。该模式涉及到的超声波避障功能主要是超声波传感器发出超声波并接收反弹回来的回波来判断小车与障碍物的距离从而实现避障行驶。

智能小车的系统设计驱动行驶模块智能小车采用左右两个轮子独立驱动,由两个电机控制轮子的转动。那么对于电机的控制采用PWM脉冲宽度调制技术和L293D电机驱动芯片的相互配合,从而实现对于电机转动方向和转速的良好控制。比如让小车实现向左转弯,可以调节左边车轮反转,右边的车轮正转,利用左右轮子间的差速从而实现转弯。PWM脉宽调制技术PulseWidthModulation(PWM)即脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。随着技术的发展,出现了多种PWM技术,如相电压控制PWM、脉宽PWM法、随机PWM、SPWM法等等。PWM技术的一大优点是从主控制器到被控系统信号都是数字形式的,无需进行数模转换,可使信号保持为数字形式,可最大程度的降低系统噪音。产生PWM信号有两种方式,一种是在固定的时间内,通过改变频率来得到PWM信号。这种恒定占空比但频率不同的脉冲信号,在信号输入时很容易产生震动从而产生噪音,所以在电机控制中比较不常用这种方法。另外一种是在固定时间内,通过改变占空比来得到频率恒定但占空比不同的PWM信号。产生的信号波形如图3.1所示。图3.1PWM信号波形PWM技术的原理图3.2所示,在晶体三极管的基极输入PWM脉冲,在ON的时间内,由于输入是高电平,此时三极管处于导通状态,电机可以转动。而在OFF时间内,由于输入是低电平,此时三级管处于关闭状态,此时电机将停转。但由于续流二极管的存在,在由ON的时间切换到OFF时间内,电机线圈内部将储存部分能量,能够提供给电机使之能够在PWM脉冲的OFF区间,能继续维持运转状态。这样通过控制占空比的大小便可以控制电机工作的时间从而控制电机的转速了。图3.2PWM技术原理L293D芯片L293D芯片是ST公司生产的一种高电压、小电流的电机驱动芯片,工作时最高电压可高达36V,输出电流大,峰值电流可高达2A,持续工作电流可高达1A。芯片集成了H型桥式驱动电路,可以稳定地控制电机的转速和转动方向。它可直接用于驱动一些大功率感性负载,如直流和步进电机、继电器等,可通过对芯片控制信号输入端进行逻辑设定就可实现电机驱动电压的极性转换,即实现方向变化的调整,并且L293D芯片具有工作时发热量较低,体积较小,且单芯片可独立控制两个电机。图3.3是L293D芯片连接电机的电路图。图3.3L293D芯片与电机连接的电路图如图3.4所示,芯片有OUTPUT1、2、3、4四个输出端口,每两个输出端控制着一个直流电机。其中引脚ENA、ENB、INPUT1、INPUT2、INPUT3、INPUT4六个端口为控制信号的输入端,配合控制着两个直流电机的正转、反转、刹车、停止等状态。ENA和ENB是与主控制器PWM的输出信号相连接,也就决定着电机转与不转。当ENA或ENB输入为高电平状态,则电机处于运动状态,若输入为低电平状态,则电机处于停止状态。那么电机的转动方向控制还需要其他四个引脚输入信号的配合。图3.4电机工作状态控制注:1表示高电平由上表可以看出,EN端的输入电平决定电机的转动,而INPUT1和INPUT2端决定着电机朝哪个方向转动,当它们是相同电平时电机就处于刹车状态,轮子不会转动。那么电机停止状态与刹车状态的区别就是轮子会由于惯性还会转动。红外遥控模块红外遥控技术是一个比较成熟也比较老的技术。在市场上可以看到它应用的地方也是非常广泛。红外遥控技术主要通过红外线来传播信号,但是在我们的生活中有太多影响红外线的因素,比如太阳光、白织灯、蜡烛等等。所以需要对红外线进行调制,使红外线以一定的频率闪烁。实现红外遥控需要红外线信号发送装置以及红外线接收器,从而才能实现信号的发送到信号的接收,再对接收到的信号进行处理,解析出其中传递的指令信息。红外信号发射装置智能小车采用的信号发送装置是车载MP3遥控器,型号是HS-021,可遥控的距离在十米以内,如图3.5所示。图3.5车载MP3遥控器红外信号接收装置智能小车采用的红外线的接收器时是HS0038B系列标准红外遥控接收器。PIN二极管和前置放大器安装在引线框架上,环氧树脂包装设计为红外滤光片。解调后的输出信号可以直接由微处理器解码,如图3.6所示。图3.6红外接收器如下图3.7-3.8所示,红外遥控器发送信号,红外接收器接收到信号后,对其进行解调,然后将信号指令由RECVA4端输出到ArduinoUNOR3转接板上进行处理。图3.7红外遥控电路图3.8ArduinoUNO芯片引脚图智能循迹模块智能小车的车头底部装有两个ST188红外光电传感器,通过这两个传感器识别路面上的黑色轨迹,然后将路面情况形成信号反馈到主控制器,再由控制器去操控小车的运动。ST188红外光电传感器ST188红外光电传感器由高发射功率的红外光电二极管和高灵敏度的光电晶体管组成。它采用非接触检测的方式,检测的距离在4到13毫米之间。A、K是红外发射二极管的正负极,C、E是接收管的正负极,如图3.9-3.10所示。图3.9ST188实物图图3.10ST188内部电路图ST188传感器AK之间接的是一个高发射功率红外光电二极管,CE之间接的是一个高灵敏度的光敏三极管。工作时,由发光二极管向地面发射红外光,当遇到黑线时,绝大部分的红外光被吸收,发射回来的红外光比较微弱,这时光敏三极管处于截止状态,所以输出电压为电源电压,是高电平。遇到白色地面时,红外光的反射率很高,三极管处于饱和导通状态,输出端相当于接地,是低电平。循迹模块电路设计当左路传感器探测到黑色轨迹,那么INA+端输入的是高电压,则INB+端输入的是低电压,经过电压比较器LM393的处理后,则由OUTA输出高电平,左路指示灯便亮起,在控制器的作用下,小车实现左转,如图3.11-3.12所示。图3.11循迹模块电路图图3.12方向指示灯电路图超声波摇头避障模块超声波避障模块相当于智能小车的“眼睛”,小车前行时,向正前方释放超声波,若有障碍物,超声波便会反弹回来,经过一系列的处理后,小车便可以知道自己与障碍物之间的距离,从而调整运动状态。小车通过摇头,便可以改变超声波侦测方向,可以为小车找出没有障碍的前进方向。小车采用北京汉库的HG14-M舵机和HC-SR04超声波传感器。小车的舵机HG14-M舵机采用的是传统PWM协议,控制比较复杂,但是该产品已经产业化价格比价便宜,而且转动角度可达到185度。舵机根据控制器发送的PWM信号来控制云台转动的幅度,通过调整PWM信号实现超声波不同方向的侦测,如图3.13所示。图3.13HG14-M舵机实物图超声波传感器超声波传感器又叫做超声换能器,是一种可以将电能转化为声能,也可以将声能转化为电能的装置。它可以发出超声波也可以接收超声波,如图3.14所示。图3.14HC-SR04超声波传感器实物图HC-SR04工作时用电压为5V,感应角度范围在15度以内,探测的距离范围在2CM到450CM。传感器上面有四个接口,分别是Vcc、Trig、Ecoh、Gnd。其中Trig是超声波信号触发输入端,Ecoh是回响信号输出端。HC-SR04超声波传感器工作时,由控制器发出一个10us的高电平信号从Trig端输入,超声波模块收到触发信号后,模块内部会发出八个40kHz周期电平信号,便触发超声波同时开启回波检测。当检测到回波时,便由Ecoh端输出回响信号。小车与障碍物的距离就等于从发出信号到收到回响信号的时间间隔乘以声速(340m/s)然后再除以2。

智能小车的系统实现红外遥控小车运动程序在这个程序之中红外遥控功能模块尤为重要,它是实现小车遥控控制的关键。当红外遥控器按下向外发出红外信号时,小车上的红外接收器怎么实时接收信号并对信号进行处理都是程序中比较重要的部分。首先将一些运动封装成各个对应的函数,当小车需要做什么运动时就直接调用对应的函数。由于每个运动函数都有差异,需要调节好电机的一些参数,然后不断的调整测试。其次对红外信号接收器进行初始化配置和初始化PWM。最后封装红外信号处理函数,根据红外信号的解析格式,对接收到的信号进行内容解析处理。程序流程图按下启动键启动智能小车,智能小车静止不动等待遥控信号输入,这时操纵者拿着遥控器按下上面的按键便会发出红外线信号,这时智能小车上的红外线信号接收器便会将收到的信号传到处理器,将红外线信号进行解调等一系列操作,最后在对信号进行匹配,若是匹配成功,说明是有效信号。然后调用相应的运动函数,比如前进、后退、左转、右转等等,如图4.1所示。图4.1红外遥控小车程序流程图重要代码编写下面列举小车的前进、左转、左旋转等运动函数,前进函数要保持左右轮子的转速一致,方向往前。小车前进时,右轮子顺时针方向转动,左轮子逆时针方向转动。左转函数要保持左轮子静止不动,右轮子顺时针转动。左旋转函数则要保持两个轮子的转动的方向不同,实现左旋转,左轮子要往后转动,右轮子要往前转动。voidZYSTM32_run(signedcharspeed,inttime)//前进函数{signedcharf_speed=-speed;SetMotorSpeed(1,f_speed);//左轮//速度为负数时,轮子逆时针转动 SetMotorSpeed(0,speed);//右轮//速度为正数时,轮子顺时针转动 delay_ms(time);//延时函数,时间为毫秒}voidZYSTM32_Left(signedcharspeed,inttime)//左转函数{ SetMotorSpeed(1,0);//左转时左轮子的速度为0,即不转动 SetMotorSpeed(0,speed);//右轮子转动 delay_ms(time);//延时函数,时间为毫秒}voidZYSTM32_Spin_Left(signedcharspeed,inttime)//左旋转函数{ SetMotorSpeed(1,speed);//左轮子的速度为正数,左轮子顺时针旋转 SetMotorSpeed(0,speed);//右轮子的速度也为正数,右轮子也顺时针转动 delay_ms(time);//延时函数}红外信号处理函数,对接收到的红外信号按一定的格式进行解析,然后得到遥控识别码。u8Remote_Scan(void){ u8sta=0;u8t1,t2; if(RmtSta&(1<<6))//得到一个按键的所有信息 { t1=RmtRec>>24; //得到地址码 t2=(RmtRec>>16)&0xff; //得到地址反码 if((t1==(u8)~t2)&&t1==REMOTE_ID)//检验遥控识别码及地址 { t1=RmtRec>>8; t2=RmtRec; if(t1==(u8)~t2)sta=t1;//键值正确 } if((sta==0)||((RmtSta&0X80)==0))//按键数据错误或者遥控没有按下 { RmtSta&=~(1<<6);//清除接收到的有效按键标识 RmtCnt=0; //清除按键次数计数器 } }returnsta;}主函数的编写intmain(void){ u8key; delay_init(); TIM4_PWM_Init(7199,0);//PWM的初始化 Remote_Init(); //红外接收的初始化ZYSTM32_brake(500); while(1) { key=Remote_Scan(); //红外信号处理函数 switch(key) { case98:ZYSTM32_run(60,100);break; //前进函数 case2:ZYSTM32_brake(100);break; //停止函数 case194:ZYSTM32_Right(60,100);break; //右转函数 case34:ZYSTM32_Left(60,100);break; //左转函数 case224:ZYSTM32_Spin_Left(60,100);break;//左旋转函数 case168:ZYSTM32_back(40,100);break; //后退函数 case144:ZYSTM32_Spin_Right(60,100);break;//右旋转函数 } }}小车智能循迹程序在这个程序中,程序的关键在于小车底部的红外探头对于黑色轨迹的识别信号以及得到信号后对于小车转动角度的调整。首先要对红外探头进行简单初始化配置,配置完后小车的探头便可以识别黑色轨迹。然后封装好处理函数,这必须经过测试来调整转动幅度。比如当小车的右边探头检测到黑线时,说明小车接下来要跑的轨迹可能是一个小幅度的转弯也可能是一个大幅度的转弯,如果将右转函数的时间参数设置的过长则可能会转出轨道。程序流程图当启动智能小车时,小车底部的两路红外循迹探头便开始工作。当智能小车接收到探头发射出的红外光时两路转向指示灯亮起,小车直线前进,当遇到黑色轨迹时,底部的循迹探头会将信号返回给处理器。如果是左路的探头探测到黑线,那么小车经过处理器的处理后,小车的左转指示灯便不会闪烁,随后小车便会进行左转,然后继续前进,如图4.2所示。图4.2小车智能循迹程序流程图重要代码编写按键判断函数voidkeysacn(){intval;val=KEY;//读取按键值while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键没有被按下时,一直循环{val=KEY;//让循环跑空}while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键按下时{delay_ms(10); //延时10毫秒val=KEY;//读取数字端口pc2口的电平值赋给Valif(val==1)//第二次判断按键是否被按下{BEEP_SET; //蜂鸣器响while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)) //判断按键是否被松开BEEP_RESET; //蜂鸣器停止}else BEEP_RESET;//蜂鸣器停止}}循迹函数voidSearchRun(void){ if(SEARCH_L_IO==WHITE_AREA&&SEARCH_R_IO==WHITE_AREA)//如果左右探头都收到红外线反射回来的光线 ctrl_comm=COMM_UP;//控制指令选项为COMM_UP elseif(SEARCH_L_IO==BLACK_AREA&&SEARCH_R_IO==WHITE_AREA)//如果右路探头接收到反射回来的信号,左探头没有接收到反射回来的光线 ctrl_comm=COMM_LEFT;//控制指令选项为COMM_LEFT elseif(SEARCH_R_IO==BLACK_AREA&SEARCH_L_IO==WHITE_AREA)//如果左探头接收到反射回来的信号,右头没有接收到反射回来的光线 ctrl_comm=COMM_RIGHT;//控制指令选项为COMM_RIGHT elsectrl_comm=COMM_STOP;//其他情况下控制指令为COMM_STOP if(ctrl_comm_last!=ctrl_comm)//如果上一条指令和现在的指令不同 { ctrl_comm_last=ctrl_comm; switch(ctrl_comm) { caseCOMM_UP:ZYSTM32_run(50,10);break;//直走前行 caseCOMM_DOWN:ZYSTM32_back(50,10);break;//后退 caseCOMM_LEFT:ZYSTM32_Left(50,10);break;//左转 caseCOMM_RIGHT:ZYSTM32_Right(50,10);break;//右转 caseCOMM_STOP:ZYSTM32_brake(10);break;//停止运动 default:break; } }}主函数的编写intmain(void){ delay_init(); KEY_Init();//按键配置初始化函数 IRSearchInit();//与探头相关的GPIO配置 TIM4_PWM_Init(7199,0);//初始化PWM ZYSTM32_brake(500); keysacn(); //按键判断函数 while(1) { SearchRun();//黑线循迹函数 }}小车超声波避障程序在这个程序中,小车通过超声波检测前行路上的障碍物和寻找没有障碍物的路线都是利用同样的原理。利用定时器来计算从超声波发出到接收到超声波之间的时间,从而得到障碍物与小车的距离。首先要先简单的初始化超声波传感器和舵机的配置,然后封装计算距离的函数。有了障碍物与小车的距离后,当小车和障碍物距离比较小的时候,小车便会停下来寻找避开障碍物的路线。程序流程图智能小车启动后,超声波传感器开始工作,小车直线前进,当前进路线有障碍物时,超声波反弹回来,再由超声波传感器接收,经过处理后,小车便能知道与障碍物的距离。遇到障碍物,小车停下来,舵机带动云台左右摇头,寻找规避路线,然后小车转向,继续前进,如图4.3所示。图4.3超声波避障程序流程图重要代码编写通道1中断函数voidEXTI1_IRQHandler(void){ delay_us(10); //延时10usif(EXTI_GetITStatus(EXTI_Line1)!=RESET) { TIM_SetCounter(TIM2,0); TIM_Cmd(TIM2,ENABLE);//开启定时器 while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));//等待低电平 TIM_Cmd(TIM2,DISABLE); //关闭定时器 UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/200.0;//计算距离 EXTI_ClearITPendingBit(EXTI_Line1);//清除EXTI1标志位 }}计算小车与障碍物距离函数intUltrasonicWave_StartMeasure(void){intu_temp; GPIO_SetBits(TRIG_PORT,TRIG_PIN);//从trig端输入>10us的高电平delay_us(20); //延时20usGPIO_ResetBits(TRIG_PORT,TRIG_PIN); u_temp=UltrasonicWave_Distance*10;//小车与障碍物的距离 returnu_temp;}主函数重要代码intfront_detection()//云台旋转测距{ SetJointAngle(90);//云台旋转的角度 delay_ms(100);//延时100毫秒 returnUltrasonicWave_StartMeasure();//返回障碍物与小车的距离}intleft_detection(){ SetJointAngle(175); delay_ms(300); returnUltrasonicWave_StartMeasure();}intright_detection(){ SetJointAngle(5); delay_ms(300); returnUltrasonicWave_StartMeasure();}while(1)//主函数循环 { Q_temp=front_detection();//得到正前方障碍物距离 if(Q_temp<60&&Q_temp>0)//当距离大于0小于60毫米时做以下处理 { ZYSTM32_brake(500); //小车停止前进 ZYSTM32_back(60,500); //后退函数 ZYSTM32_brake(1000); L_temp=left_detection();//云台左转测距 delay_ms(500); R_temp=right_detection();//云台右转测距 delay_ms(500); if((L_temp<60)&&(R_temp<60)) { ZYSTM32_Spin_Left(60,500);//左旋转函数 } elseif(L_temp>R_temp) { ZYSTM32_Left(60,700);//左转 ZYSTM32_brake(500); } else { ZYSTM32_Right(60,700);//右转 ZYSTM32_brake(500); } } else { ZYSTM32_run(60,10);//前进直走 } }系统程序测试系统测试用例系统模块用例编号用例说明前置条件输入预期结果测试结果红外遥控小车运动1.1遥控小车小车正常启动,红外遥控器正常工作在遥控器上按下向前运动的按键按下按键后小车做直线前进运动小车直线前进,小车遥控正常1.2小车前进后退运动小车正常启动,遥控功能正常在遥控器上先后按下前进后退运动的按键小车先做直线前进运动,在按下后退的键后,小车直线后退小车前进和后退运动正常1.3小车左转弯、右转弯运动小车正常启动,遥控功能正常在遥控器上先后按下左转弯、右转弯运动的按键按下左转弯按键后,小车左转弯运动,按下右转弯按键后,小车右转弯运动小车左转弯和右转弯运动正常1.4小车左旋转、右旋转运动小车正常启动,遥控功能正常在遥控器上先后按下左旋转、右旋转运动的按键按下左转弯按键后,小车左转弯运动,按下右转弯按键后,小车右转弯运动小车左旋转和右旋转运动正常1.5小车停止运动小车正常启动,遥控功能正常在遥控器上按下停止运动的按键小车停止运动按下停止键后,小车静止小车智能循迹2.1探头探测黑线小车正常启动将黑线放在探头下方小车的左右转弯指示灯熄灭指示灯熄灭,探头可以探测黑色路线2.2小车循迹左转小车正常启动,探头可以探测黑线让小车绕黑色轨迹左转左转指示灯熄灭,小车贴着轨迹实现左转弯小车实现循迹左转2.3小车循迹右转小车正常启动,探头可以探测黑线让小车绕黑色轨迹右转右转指示灯熄灭,小车贴着轨迹实现右转弯小车实现循迹右转超声波避障行驶3.1超声波避障小车正常启动让小车向墙壁前进在靠近墙壁时,小车停下来小车实现超声波避障3.2舵机云台摇头寻路小车正常启动,超声波避障正常让小车向墙壁前进在靠近墙壁时,小车停下来,然后左右摇动云台,接着避开障碍,向一条没有障碍物的路行驶达到预期效果表5.1系统测试用例表红外遥控小车运动程序调试红外遥控小车运动程序测试内容(1)红外遥控器发出信号后,小车是否能接收到红外信号并对信号进行正确解析。(2)小车封装的运动函数能否实现各自运动的预期效果。(3)电机的运动速率和方向有没有控制正确。红外遥控小车运动程序测试过程测试1:启动小车后,用红外遥控器遥控小车,小车没有任何反应,在原地一动不动。测试2:小车启动后,遥控小车,小车正常运动,但是有些按键与运动不一致,有一两个按键没有对应的运动效果。测试3:小车启动后,用遥控器遥控小车,小车按原先设置的按键做对应的运动效果,但是在做左右旋转的时候,小车的运动效果不对。测试4:小车启动后,小车能通过遥控器正常操作,对应的运动效果正常。遥控器的控制很顺畅。小车智能循迹程序调试小车智能循迹程序测试内容(1)两路红外探头能否正常识别黑色轨迹。(2)在循迹转弯时能否实现弯道正常过弯不至于跑出线路。(3)两路转弯指示灯能否指示正常过弯。小车智能循迹程序测试过程测试1:小车启动后,放入黑色轨迹行驶,转弯指示灯正常亮起,过弯时转动幅度过大,跑出弯道。测试2:小车启动后,当左路探头遇到黑线时,左转指示灯正常工作,转弯时还是跑出轨道。测试3:小车启动后,在直线的轨道时正常行驶,过弯时正常转弯并回到轨道上,小车实现绕轨道行驶。小车超声波避障程序调试小车超声波避障程序测试内容(1)小车的超声波传感器能否探测障碍物并计算与障碍物的距离。(2)小车的舵机云台能否实现设定角度摇头。(3)小车遇到障碍物时能否规避障碍物,找到安全路线。小车超声波避障程序测试过程测试1:小车启动后,直线行驶,遇到障碍物直接撞了上去。测试2:小车启动后,小车直线运动,在靠近障碍物时小车停了下来,云台左右摇动,然后不动了。测试3:小车启动后,小车直线行驶,遇到障碍物时,在障碍物前停了下来,云台按设定角度摆动,接着小车转弯避开障碍物。

参考文献[1]杜春雷ARM体系结构与编程清华大学出版社[2]MarkAllenWeissDataStructuresandAlgorithmAnalysisinC机械工业出版社[3]屈微、王志良STM32单片机应用基础与项目实践清华大学出版社[4]廖建尚、郑建红、杜恒基于STM32嵌入式接口与传感器应用开发[5]StepenPrataCPrimerPlus人民邮电出版社[6]StepenPrataC++PrimerPlus人民邮电出版社[7]Anonymous.FutureoffersfreeSTM32NucleoboardsinEurope[J].ElectronicsWeekly,2014[8]AnalysisonironlossofswitchedreluctancemotorunderPWMmode[J].COMPEL-Theinternationaljournalforcomputationandmathematicsinelectricalandelectronicengineering,2018:448-464[9]G.DurgaPrasad,V.Jegathesan,V.Moorthy.MinimizationofPowerLossinNewfangledCascadedH-BridgeMultilevelInverterusingIn-PhaseDispositionPWMandWaveletTransformBasedFaultDiagnosis[J].AinShamsEnginee-RingEngineeringJournal,2016,

致谢通过两个多月以来的努力终于完成了这篇论文,在创作的过程中我遇到了各种各样的问题,有到创作缓慢的时候,也有头脑灵现的时候。之所以研究智能小车跟我的两段经历有关。在大三的时候,我上过一个课外扩展的课程,学校请外边培训机构的老师给我们上课。那是我第一次接触到智能小车,也是我第一次将代码实现具体操作的经历,让我觉得很神奇,也感受到了代码的魅力。第二段经历跟我的实习经历有关,我在广州的一个机器人公司里面工作,操作机器人运动,控制机器人内部通讯等等都让我感觉在玩一个小型的智能车一样。所以我想自己也可以去研究一下。在这里我要感谢所有帮助过我的人和与我有过这方面交流的人,还有参考书籍的作者们,他们的书籍让我学到了很多知识,给了我很多帮助。我还要感谢三年来和我同住一个宿舍的舍友们,还有传授我知识的老师们,也感谢我的大学,让我度过人生一段重要的时光。最后,我的论文里难免会有些不足的地方,希望大家可以指正。再次感谢一路走来帮助过我的人。

电脑不启动故障诊治了解电脑启动的过程在诸多电脑故障中,无法正常启动是最令用户头痛的事了。笔者长期从事维护电脑的工作,在这个方面积累了一些经验,现在就将这些经验整理归纳出来与朋友们分享。本文将以家用电脑和windows98操作系统为基础,介绍电脑无法正常启动故障的诊治。要想准确地诊断电脑不启动故障,首先要了解的起动过程,当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还没有完全稳定,主板控制芯片组会根据CMOS中的CPU主频设置向CPU发出一个Reset(重置)信号,让CPU初始化,电压完全稳定后,芯片组会撤去Reset信号,CPU马上从地址FFFF0H处执行一条跳转指令,跳到系统BIOS中真正的启动代码处。系统BIOS首先要做的事情就是进行POST(PowerOnSelfTest,加电自检)。POST的主要任务是检测系统中的一些关键设备(电源、CPU芯片、BIOS芯片、定时器芯片、数据收发逻辑电路、DMA控制器、中断控制器以及基本的64K内存和内存刷新电路等)是否存在和能否正常工作,如内存和显卡等。自检通过后,系统BIOS将查找显示卡的BIOS,由显卡BIOS来完成显示卡的初始化,显示器开始有显示,自此,系统就具备了最基本的运行条件,可以对主板上的其它部分进行诊断和测试,再发现故障时,屏幕上会有提示,但一般不死机,接着系统BIOS将检测CPU的类型和工作频率,然后开始测试主机所有的内存容量,内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘参数和访问模式等。标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中已安装的即插即用设备。每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。最后系统BIOS将更新ESCD(ExtendedSystemConfigurationData,扩展系统配置数据)。ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是Windows最基本的系统文件。IO.SYS首先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作,一切顺利结束,电脑正常启动。根据故障现象诊治了解电脑启动的过程,故障就好判断了,下面我们就根据故障现象开始诊治了:现象一:系统完全不能启动,见不到电源指示灯亮,也听不到冷却风扇的声音。这时,基本可以认定是电源部分故障,检查:电源线和插座是否有电、主板电源插头是否连好,UPS是否正常供电,再确认电源是否有故障,最简单的就是替换法,但一般用户家中不可能备有电源等备件,这时可以尝试使用下面的方法(注意:要慎重):先把硬盘,CPU风扇,或者CDROM连好,然后把ATX主板电源插头用一根导线连接两个插脚(把插头的一侧突起对着自己,上层插脚从左数第4个和下层插脚从右数第3个,方向一定要正确),然后把ATX电源的开关打开,如果电源风扇转动,说明电源正常,否则电源损坏。如果电源没问题直接短接主板上电源开关的跳线,如果正常,说明机箱面板的电源开关损坏。现象二:电源批示灯亮,风扇转,但没有明显的系统动作。这种情况如果出现在新组装电脑上应该首先检查CPU是否插牢或更换CPU,而正在使用的电脑的CPU损坏的情况比较少见(人为损坏除外),损坏时一般多带有焦糊味,如果刚刚升级了BIOS或者遭遇了CIH病毒攻击,这要考虑BIOS损坏问题(BIOS莫名其妙的损坏也是有的),修复BIOS的方法很多杂志都介绍过就不重复了;确认CPU和BIOS没问题后,就要考虑CMOS设置问题,如果CPU主频设置不正确也会出现这种故障,解决方法就是将CMOS信息清除,既要将CMOS放电,一般主板上都有一个CMOS放电的跳线,如果找不到这个跳线可以将CMOS电池取下来,放电时间不要低于5分钟,然后将跳线恢复原状或重新安装好电池即可;如果CPU、BIOS和CMOS都没问题还要考虑电源问题:PC机电源有一个特殊的输出信号,称为POWERGOOD(PG)信号,如果PG信号的低电平持续时间不够或没有低电平时间,PC机将无法启动。如果PG信号一直为低电平,则PC机系统始终处于复位状态。这时PC机也出现黑屏、无声响等死机现象。但这需要专业的维修工具外加一些维修经验,因此,建议采用替换法;电源没有问题就要检查是否有短路,确保主板表面不和金属(特别是机箱的安装固定点)接触。把主板和电源拿出机箱,放在绝缘体表面,如果能启动,说明主板有短路现象;如果还是不能启动则要考虑主板问题,主板故障较为复杂,可以使用替换法确认,然后更换主板。现象三:电源指示灯亮,系统能启动,但系统在初始化时停住了,而且可以听到嗽叭的鸣叫声(没有视频):根据峰鸣代码可以判断出故障的部位。ccid_page/AwardBIOS1短声:说明系统正常启动。表明机器没有问题。2短声:说明CMOS设置错误,重新设置不正确选项。1长1短:说明内存或主板出错,换一个内存条试试。1长2短:说明显示器或显示卡存在错误。检查显卡和显示器插头等部位是否接触良好或用替换法确定显卡和显示器是否损坏。1长3短:说明键盘控制器错误,应检查主板。1长9短:说明主板FlashRAM、EPROM错误或BIOS损坏,更换FlashRAM。重复短响:说明主板电源有问题。不间断的长声:说明系统检测到内存条有问题,重新安装内存条或更换新内存条重试。AMIBIOS1短:说明内存刷新失败。更换内存条。2短:说明内存ECC较验错误。在CMOS中将内存ECC校验的选项设为Disabled或更换内存。3短:说明系统基本内存检查失败。换内存。4短:说明系统时钟出错。更换芯片或CMOS电池。5短:说明CPU出现错误。检查CPU是否插好。6短:说明键盘控制器错误。应检查主板。7短:说明系统实模式错误,不能切换到保护模式。8短:说明显示内存错误。显示内存有问题,更换显卡试试。9短:说明BIOS芯片检验和错误。1长3短:说明内存错误。内存损坏,更换。1长8短:说明显示测试错误。显示器数据线没插好或显示卡没插牢。现象四:系统能启动,有视频,出现故障提示,这时可以根据提示来判断故障部位。下面就是一些常见的故障提示的判断:一、提示“CMOSBatteryStateLow”原因:CMOS参数丢失,有时可以启动,使用一段时间后死机,这种现象大多是CMOS供电不足引起的。对于不同的CMOS供电方式,采取不同的措施:1.焊接式电池:用电烙铁重新焊上一颗新电池即可;2.钮扣式电池:直接更换;3.芯片式:更换此芯片,最好采用相同型号芯片替换。如果更换电池后时间不长又出现同样现象的话,很可能是主板漏电,可检查主板上的二极管或电容是否损坏,也可以跳线使用外接电池,不过这些都需要有一定的硬件维修基础才能完成。二、提示“CMOSChecksumFailure”CMOS中的BIOS检验和读出错;提示“CMOSSystemOptionNotSet”,CMOS系统未设置;提示“CMOSDisplayTypeMismatch”,CMOS中显示类型的设置与实测不一致;提示“CMOSMemorySizeMismatch”,主板上的主存储器与CMOS中设置的不一样;提示“CMOSTime&DateNotSet”,CMOS中的时间和日期没有设置。这些都需要对CMOS重新设置。三、提示“KeyboardInterfaceError”后死机原因:主板上键盘接口不能使用,拔下键盘,重新插入后又能正常启动系统,使用一段时间后键盘无反应,这种现象主要是多次拔插键盘引起主板键盘接口松动,拆下主板用电烙铁重新焊接好即可;也可能是带电拔插键盘,引起主板上一个保险电阻断了(在主板上标记为Fn的东西),换上一个1欧姆/0.5瓦的电阻即可。四、自检过程中断在xxxKCache处这表示主板上Cache损坏,可以在CMOS设置中将“ExternalCache”项设为“Disable”故障即可排除。同理,在自检主板部件时出现中断,则可以认为该部件损坏,解决方法一般可以在CMOS中将其屏蔽,如果不能屏蔽该部件最好更换主板。五、提示“FDDControllerFailure”BIOS不能与软盘驱动器交换信息;提示“HDDControllerFailure”,BIOS不能与硬盘驱动器交换信息。应检查FDD(HDD)控制卡及电缆。六、提示“8042GateA20Error”8042芯片坏;提示“DMAError”,DMA控制器坏。这种故障需要更换。七、提示“DisplaySwitchNotProper”主板上的显示模式跳线设置错误,重新跳线。八、提示“KeyboardisLock...Unlockit”键盘被锁住,打开锁后重新引导系统。九、IDE接口设备检测信息为:“DetectingPrimary(或Secondary)Master(或Slave)...None”表示该IDE接口都没有找到硬盘,如果该IDE口确实接有硬盘的话,则说明硬盘没接上或硬盘有故障,可以从以下几方面检查:1、硬盘电源线和数据线是否接触不良,或换一根线试试;2、CMOS设置有无错误,进入CMOS将“PrimaryMaster”、“PrimarySlave”、“SecondaryMaster”三项的的“TYPE”都设置成“Auto”;3、替换法确认硬盘本身有故障。十、IDE接口设备检测信息下面显示“Floppydisk(s)fail(40)”出错信息表示CMOS所指定的软盘驱动器有问题。判断和解决的方法与硬盘相似。现象五:系统不能引导。这种故障一般都不是严重问题,只是系统在找到的用于引导的驱动器中找不到引导文件,比如:BIOS的引导驱动器设置中将软驱排在了硬盘驱动的前面,而软驱中又放有没有引导系统的软盘或者BIOS的引导驱动器设置中将光驱排在了硬盘驱动的前面,而光驱中又放有没有引导系统的光盘,这个都很简单,将光盘或软盘取出就可以了,实际应用中遇到“DiskBootFailure,InsertSystemDiskAndPressEnter”的提示,多数都是这个原因。如果是硬盘不能引导的话一般有两种情况:一种是硬盘数据线没有插好,另一种就是硬盘数据损坏。前者一般多会出现硬盘容量检测不正确和引导时出现死机的现象;后者则是干脆找不到引导文件或提示文件损坏。前者只需重新连接好数据线即可;后者则需要用win98的启动软盘或启动光盘启动,根据实际情况来定:一、提示“Invalidpartitiontable”或“NotFoundany[activepartition]inHDDDiskBootFailure,InsertSystemDiskAndPressEnter”,这说明找不到硬盘活动分区,需要对硬盘重新分区。二、提示“Missoperationsyste”,说明硬盘活动分区需要重新格式化(formatc:/s)。三、提示“InvalidsystemdiskReplacethedisk,andthenpressanykey”或显示“StartingWindows98…”时出现死机,说明硬盘上的系统文件丢失了或损坏,使用“sys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论