【一套基于STM32F103的可用于自动循迹的智能小车设计14000字】_第1页
【一套基于STM32F103的可用于自动循迹的智能小车设计14000字】_第2页
【一套基于STM32F103的可用于自动循迹的智能小车设计14000字】_第3页
【一套基于STM32F103的可用于自动循迹的智能小车设计14000字】_第4页
【一套基于STM32F103的可用于自动循迹的智能小车设计14000字】_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

VI一套基于STM32F103的可用于自动循迹的智能小车设计摘要随着城市化进程的加快和自动控制技术的发展,智能车在我们的生活中无处不在。科学技术的进步和生活水平的提高使得人们的生活观念发生了巨大的变化,智能汽车的出现为人们的生活提供了巨大的便利,不管是从便捷性、安全性还是舒适性上,智能车都具有传统汽车无法比拟的优势。随着自动化控制技术在工程实践中的应用越来越广泛,自动驾驶、自动泊车、自动刹车等功能已经逐渐应用于当代汽车运行中。自动循迹系统在生活中随处可见,可以让人们的生活更加方便和舒适。在这种大环境下,具有自动循迹功能的智能汽车取代传统的人为驾驶的汽车也成为了必然的趋势。本文基于此种要求设计了一套基于STM32F103的可用于自动循迹的智能小车方案。该套设计方案包括STM32F103微处理器、灰度检测传感器、直流电器、舵机以及其它外围I/O设备。本设计方案采用STM32F103作为主控芯片,利用PWM对电机速度以及舵机转向进行控制,舵机控制小车的转向,通过电机控制小车的前进以及后退。在小车运动时,避障程序优先于循迹程序,在对设计出的硬件系统进行测试时,通过在平整路面上采用灰色胶带粘贴出一条线路观察设计的小车是否能进行循迹操作。在硬件设计的基础上提出了实现电机控制功能、小车的简单自动循迹以及避障功能的软件设计方案。论文首先叙述了研究背景及国内外发展现状,定义了系统功能并给出了系统设计方案,接着详细阐述了硬件设计和软件设计,最后通过实验验证了系统的可行性。本文所设计的循迹小车达到了设计要求,为实际应用提供了一定参考价值。关键词:智能小车,STM32,循迹,灰度检测传感器目录第1章绪论 11.1论文研究的背景及意义 11.2国内外研究现状 21.2.1国外研究现状 21.2.2国内研究现状 21.3本文主要研究内容及论文结构安排 3第2章系统方案论证 42.1系统需求 42.2可行性分析 42.2.1技术可行性分析 42.2.2社会可行性分析 42.3系统设计方案 42.4主控模块选型 62.5循迹传感器选择 72.6避障传感器选择 82.7电机模块选择 9第3章硬件电路的设计 123.1STM32F103内部结构 123.1.1系统总电路图 123.1.2系统时钟模块 133.1.3系统复位模块 143.1.4中断系统 143.2循迹模块 153.3电机驱动模块 163.4舵机驱动模块 183.5本章小结 18第4章系统软件设计 194.1系统设计软件 194.1.1AltiumDesigner 194.1.2KeilC51 194.2软件设计流程图 194.2.1主函数流程图 194.2.2循迹程序设计 204.2.3传感器模块流程图 214.2.4电机模块流程图 244.3本章小结 33第5章系统测试 345.1硬件实物图 345.2灰度传感器通电测试 355.3循迹及避障功能测试 365.4问题与解决方案 38第6章总结与展望 396.1总结 396.2展望 39参考文献 41

随着自动化控制技术在工程实践中的应用越来越广泛,机器人也出现在日常生活的方方面面,极大的改善了人们的生活水平[1-5]。功能众多的机器人可以自主的通过附加设备根据设计者嵌入处理器中的程序来完成各种任务,尤其在环境十分恶劣危险不适合人工前往的情况下,机器人拥有更大的发挥空间。除了军事、工业及医疗探险等传统应用场景外,机器人目前也已经在居民日常生活中得到了普及,如家庭服务型机器人等[6-12]。而智能小车可以说是机器人研究领域下的一个热门方向,拥有十分广阔的应用场景,多个学科的前沿技术在此交汇融合。作为科技含量需求最高的行业——航天工业在对月球和火星的探索上,也采用了高性能智能小车作为探索手段和工具,获得了巨大的收获[13]。随着微电子技术的发展,智能化技术开发朝着越来越快的方向发展,智能化程度也随之变得越来越高。为了满足当今人类的需求,智能化产品的应用场景也得到了很大的扩展。智能小车系统以汽车工业的飞速发展为背景,涵盖了电子,计算机,传感器等多个学科。其现如今已经广泛应用于考古,探测,国防,航空航天等多个领域,智能化产品的生产得益于智能化技术的发展。很多的发达国家还将智能机器人的设计竞赛作为创新教育的战略。在很大程度上讲,智能机器人技术是一个国家科技水平的体现,智能小车则是智能机器人的基础模型。在全国的各项智能机器人设计大赛中,智能小车的项目也占到了很大的比重,各大高校都比较重视对于智能小车的研究于开发,由此可见智能小车对于现代智能机器人的发展有着重要意义。小车隶属于轮式机器人,经常被应用于人类无法到达的环境下进行工作。在无人驾驶汽车,无人机,服务机器人等领域,轮式机器人都有广泛的应用。其中,无人驾驶汽车具有非常大的发展潜力。近几年国家对于无人驾驶汽车的研究投入也明显增加,政府部门也意识到无人驾驶技术会成为未来汽车工业发展的必然趋势。智能小车隶属于机器人领域中的轮式机器人(WMR)分支,西方发达国家对此已经投入了巨大的科研资金和人力资源,并获得了丰硕的成果。在上世纪美国与苏联的航天竞赛中,美国便将大量资金投入到WMR中,研发出了可以实现巡查、野外探索、防御、进攻和太空空间探索等功能不一的机器小车,其中技术含量最高也最被人所熟知便是火星“漫步者”探索车了,直到当前美国扔在该领域处领先地位。日本则注重于家庭服务式机器人的研究,如日本研究院设计的Ifbot机器人甚至可以与人类进行沟通,可以成为人们工作生活的伴侣。欧洲针对深海探索研制的智能机器人也拥有较好的表现[15]。国外很多大型公司投入大量资金用于无人驾驶汽车的研发,在这种环境下,无人驾驶汽车的普及离我们越来越近。国外的汽车工业发展相对成熟,他们拥有比较先进的自动化技术以及强大的生产力,很多无人驾驶车型已经投入了量产。在一些国家,政策法规也在促进着无人驾驶技术的发展。例如德国,部分国家的无人驾驶汽车已经在公路上投入使用,德国政府已经为宝马汽车公司发放了许可证,美国也为奥迪汽车公司发放了公路实验牌照。无人驾驶技术在部分发达国家的发展处于世界领先水平。国内虽对WMR研究较晚,但得益于深度学习技术的兴起,研究者们也基本实现了弯道超车,取得了非常多的成果。如最近的月球探索中,嫦娥五号月球探测器便通过智能探索车对月球表面土壤进行了采样,并与地面工作站进行实时视频音频通信,让国内民众体验到了科技的魅力[16]。而如今国家对智能行业的重视也让更多研究者相信,只要对WMR领域不断加强研究,中国机器人技术引领世界并不是一个飘渺的梦[17-19]。在我国,汽车制造的安全性和生产效率仍然需要人力资源的保证,无人驾驶技术在国内的发展相对滞后。在无人驾驶汽车方面,国内的利好政策很多,这为我国无人驾驶技术的发展提供了便利。近几年,国内在无人驾驶汽车方面的法律法规也不断完善。从我国的自动控制技术的发展状况来看,与世界先进水平还怎在一定的差距,还需要进一步的研究和实践。无人驾驶汽车极大的降低了交通事故发生的概率,同时也提高了汽车通行的效率,无人驾驶技术在我国拥有广阔的市场需求和发展前景。随着我国汽车工业的发展和自动化核心技术的革新,无人驾驶技术的普及指日可待。本课题主要研究内容是设计一款基于STM32的智能小车系统,系统通过灰度传感器用来对行驶路径上的灰色线条进行识别,通过红外测距传感器对路线中的障碍物进行检测,通过电机实现小车的前进、后退、左右转等功能。通过舵机实现红外传感器的转向。本文的主要结构分为六个章节:第1章主要是对本文所研究的基于STM32的智能小车系统的背景及意义进行了描述;第2章从如何设计该课题开始,首先对系统进行了总体架构的描述,然后针对系统中用到的各个模块进行了选型和分析,以节约成本和实用性为基础对各个模块进行介绍和选型,综合分析并确定本设计采用的具体硬件;第3章开始从硬件电路入手,对主控芯片以及各个模块进行介绍,尤其涉及了单片机的最小系统、时钟复位、传感器控制模块等;第4章描述了该项目在软件方面的设计,包括介绍了本项目中用到的开发软件和系统流程图等;第5章对项目成果进行展示和实验,主要是对系统的实际效果进行测试,判断是否满足本文研究要求;第6章对本文的总体设计进行了总结,并对于不足之处进行了分析。

自动循迹小车系统设计是一种通过循迹传感器来实现对灰白色路线进行自动循迹行走的智能小车的设计。为了实现该系统,需要分别对硬件和软件进行设计。在硬件设计上采用AltiumDesigner绘制电路图进行硬件模块的设计,软件设计上采用Keil进行程序编写同时系统采用JTAG接口将程序下载入主控芯片。本文设计主要为下位机的设计,针对下位机的开发主要就是电路图的绘制和相关传感器驱动的编写,通过Keil软件进行代码编写,由于系统所使用的传感器均为模块化的器件,因此在购买器件时均配送相应的实例测试代码,通过赠送的测试代码加以修改即可为本设计下位机使用。综上所述本文所设计的基于单片机的循迹小车系统在设计上存在较大的可行性。当今社会尤其是电动汽车近年来的兴起,汽车电子行业正处于蓬勃发展阶段,目前针对自动驾驶、自动刹车、自动判断路障等系统发展较为成熟,而且针对汽车辅助驾驶技术仍然处于当前研究的热点,因此本文所研发的循迹小车也具有一定的实际使用价值,若干年后可能实现无人驾驶货车会采用循迹的方式来实现,因此具有较强的社会可行性。本课题是基于STM32的智能循迹小车系统的设计,系统可以划分为主控模块、循迹模块、避障模块、电机模块、电源模块、舵机模块等。系统需要完成的工作是利用灰度传感器实现小车的循迹功能,利用红外测距传感器实现小车的避障功能,利用电机来控制小车的前进和后退和转弯。本文所设计的循迹小车的系统硬件框图如图2-1所示。图2-1系统硬件框图红外测距传感器用来检测小车前方障碍物的距离,并将检测到的数据传输给控制器,控制器进行数据处理并输出给电机,电机执行相应动作控制小车的启动和停止。灰度传感器通过检测小车前方的灰线来实现循迹功能,灰度传感器根据检测到的信息给控制器传输相应电平信号,控制器对信号进行处理后,给电机输出相应电平信号,控制电机的正、反转以及转速。循迹小车的系统方框图如图2-2所示。图2-2系统方框图在本系统的设计与实验中,主控模块作为核心器件相当于人类的大脑一样负责指令的发出与转发功能,所以主控芯片的选型尤为重要,既要考虑到资源够用又要考虑到价格成本。在本次设计中主要对以下芯片进行分析并最终做出选择。方案一:FPGA全称为现场可编程逻辑门阵列,属于专用集成电路中的半定制电路,可对其进行无限次擦除和读写操作。FPGA的出现使得定制芯片不足以及可编程逻辑门电路数目不足的问题得到了有效的解决,各种档次的芯片也为设计提供了更多的选择。FPGA具有多种分类方法,有国产和国外两大类。国产比较著名的FPGA厂商有紫光同创、上海安路、京微雅格、复旦微电子、易灵思等,国外我们常用且比较著名的FPGA厂商有Xilinx和Altera,目前这两家公司分别被AMD和Intel收购。方案二:STM32系列芯片是上世纪八十年代被ST公司首先提出的一种新兴处理器芯片的概念,而这种芯片的内部核心以ARM公司的芯片作为内核。在STM32概念被提出之后,该系列芯片迅速崛起风靡整个电子设计市场。在较长一段时间内STM32芯片占据了大部分的电子设计市场,其中以STM32F103和STM32F407系列最受追捧。而STM32也分为基础性和增强型,基础型芯片是目前较为常用的一种,而增强型的STM32芯片最高时钟频率可达72MHz,并且还可以进行超频使用。在性能提升的同时,功耗却能保持较低水平,经过专业测评运行相同程序时STM32的功耗极低。方案三:51单片机所有工科专业接触的第一类单片机,这是一类泛称,指的是所有兼容8051指令的单片机。Intel的8004单片机是该系列单片机的第一款,当时能实现的功能和性能都很有限,目前市场上比较常见的51单片机主要有Intel的80C、87C系列,ATMEL的89C、89S系列,Philips、华邦、Dallas、Siemens等,但最常用的应当属于国产宏晶的STC系列。虽然目前科学技术已经发展到较高的水平,但是51系列单片机因为其价格低廉在电子市场仍占据较为重要的地位,价格低廉的同时也就限制了其性能。通过对上述几种类型的单片机在性能、价格、功耗等方面的对比,结合本项目实际使用情况,决定选择STM32系列芯片作为本项目的主控芯片,其具体型号为STM32F103ZET6。其实物图如图2-3所示。图2-3STM32F103ZET6单片机实物图(1)红外循迹传感器TR5000是一款具有超高灵敏度的循迹传感器,该传感器的感应反射距离最长可达25mm,这对于一般智能小车应用完全足够,在工作电压上,该芯片支持3.3V~5V的电压输入,这也让该芯片可以兼容更多的系统。该芯片内部由LM393电压比较器对获取到的数据尽心个比较从而输出0或1来实现对所需识别物体的反馈,通过LM393比较器输出的波形平缓且杂波较少,最大电流不超过15mA,并且该传感器尺寸较小,选用该传感器不会造成所设计系统的体积过多增大。(2)灰度传感器WL-SEND8-V4灰度传感器是数字量灰度传感器中的第四代产品,该版本取代了传统的电位器会度传感器版本,在原有版本上该传感器增加了串口输出极大程度上节约了I/O口,该传感器上自带了一颗STM32的芯片,该芯片能够把检测到的原始数据通过混合算法和滤波算法让输出数据更加平稳,该传感器可直接接通显示屏用于对原始数据显示。为了让该传感器适应于更多场合和系统,在供电电源上支持3.3V/5V。传感器内部采用了高灵敏度的光敏对管,能够实现对不明显灰度值的精确判决,搭配遮光帽后系统将会更加灵敏,且可以有效避免光源对传感器的干扰。其实物图如图2-4所示。图2-4灰度传感器实物图本文经过对两种传感器的选择,决定选择WL-SEND8-V4灰度传感器来实现本文的循迹功能,该传感器在功耗和精准度上都具有TR5000所无法比拟的优势,同时该传感器可应用于各种单片机设计中,适应场景可应用于循迹赛车、旅游机器人、搬运机器人、工业AGV下车以及生产线的灰度识别上。红外测距传感器为了使得智能小车能够顺利地避开路线中的障碍物,本文决定采用E3FDS30C4红外测距传感器对路线进行检测,E3FDS30C4传感器可以通过漫反射的方式检测最多30cm的距离。该传感器在供电上支持5V-36V电压。当小车附近出现障碍物时,红外传感器会给主控芯片输送一个信号。当障碍物的距离<5cm时,红外传感器给主控芯片输送一个高电平,主控芯片控制电机停止正转,小车停止。该装置从适用性和经济性上都比较满足小车的设计需求,所以采用E3FDS30C4传感器作为小车避障模块的传感器,红外传感器实物图如图2-5所示。图2-5红外传感器实物图(1)舵机MG996-180舵机是电子设计中模拟转动的一种实物,顾名思义,该舵机能进行0-180度的旋转,主要应用于1:10和1:8平跑车、越野车、卡车、大脚车、攀爬车、双足机器人、机械手等设计中。在本设计中采用舵机来实现对红外测距传感器的方向控制。其实物图如图2-6所示。图2-6舵机实物图(2)电机由于涉及到驱动车辆行驶的情况,决定选择电机来进行控制。因此,在驱动模块采用L298N芯片来对电机进行驱动。L298N是一块小型集成电路,可以在不采用隔离电路的情况下直接对电机进行驱动,利用单片机的I/O端给驱动芯片提供不同的电平从而实现电机的正反转。虽然当前技术快速发展,步进电机、直流电机、异步电机也很普遍但本文仅做功能展示,所以选择了最简单且易于设计的直流电机。小车采用四个DQ-25W370直流电机分别对应四个轮子,为小车提供动力。该电机在供电上支持3V-24V,额定功率为3W,额定转速为500RPM,额定转矩为90NM。该型号的电机采用优质贵金属电刷配合精密耐高温材料,电刷耐磨性好,抗震动,转速稳。由于小车采用四个直流电机提供动力,所以对直流电机的体积有一定的要求,DQ-25W370直流电机刚好满足设计要求。电机实物图如图2-7所示。图2-7DQ-25W370直流电机2.8设计语言选择(1)汇编语言汇编语言是一种面向机器的传统程序设计使用语言,该语言也存在较多优点,如:方便读取存储状态和I/O状态;由于汇编语言属于机器语言,因此可以省略编译环节,直接被机器所执行;作为最底层语言,可扩展性较好。与此同时也存在较多的缺点,主要有:利用助记符来编写代码,入门难度大,代码冗杂,并且调试起来难度大;不利于后期维护;代码兼容性差。(2)C语言C语言于上世纪八十年代在贝尔实验室被开发出来,是一种面向过程的编程语言。C语言的设计由于更符合语言逻辑,因此在入门上较手。在硬件发达的今天,软件上的效率低可从硬件上得到弥补。由于C语言是结构式语言,语法限制不太严格,程序设计自由度大,所以在本文设计中采用C语言来对整个硬件系统的软件编程进行设计。2.9本章小结本章按照设计需求,对系统方案进行了总体设计,对系统所需的硬件进行选型并对选型依据进行分析,位置后硬件设计与软件设计做好充分准备。

STM32处理器对于智能小车来说就相当于大脑之于人体。STM32通过对各个模块的数据获取,并对所获取的数据进行一定的处理,从而对各个模块进行驱动使得小车做出相应的动作。电子设计爱好者可根据自身需求选择最合适的芯片来进行设计,且设计例程也越来越多,设计也越来越方便,芯片的尺寸也朝着低功耗、低电压、小尺寸的方向发展。STM32系列处理器分为2个系列,STM32F101属于标准型,工作频率设置在36MHZ,而STM32F103属于增强型,工作频率设置在72MHZ,带有更多的片内RAM以及外设资源,更利于软件的开发和升级。本文采用的主控芯片具有64KBSRAM、512KBFLASH、2个基本定时器,4个通用定时器,2个高级定时器,3个SPI,2个IIC,5个串口,1个USB,1个CAN,3个12位的ADC,1个12位的DAC,1个FSMC接口,112个通用I/O口,STM32的结构框图如图3-1所示。图3-1STM32结构框图STM32想要进行正常工作,最小系统是必须具备的,最小系统指的是存在主控芯片的情况下系统应当具备晶振电路和复位电路。除此之外,本系统还包含了电机驱动模块,舵机驱动模块以及循迹模块等。各个模块总连接图如图3-2所示。图3-2系统总连接图晶振电路一般又叫时钟电路,该电路对整个系统运转提供时钟参考,因此也被叫做主控时钟。系统时钟电路的主要作用就是提供节拍。晶振内部由石英晶体组成,通电时可以产生周期性的波形,在STM32系统中,STM32想要执行操作必须经过取指令、译码然后将译码后的信号发送到寄存器,然后通过指令交换。每个步骤都遵循着系统时钟,系统时钟不仅提供了参考时间也对各个步骤执行的先后顺序进行定义。本项目的时钟电路如图3-3所示。图3-3系统时钟电路由图3-3可以看出,本文所设计的系统在正常工作下的时钟频率为8MHz。需要注意的是,在进行时钟电路PCB设计或直接焊接时,电容与晶振的设计应尽可能靠近芯片,以减少对电路的影响。复位电路是用来对电路工作状态进行还原的电路,STM32电路原理图可知,该系列单片机为高电平复位,一般情况下是将RST端向上接一个10uF的电容接高电平,向下接一个10K电阻接地,在高电平与RST端接按键开关,也可不接开关。外接开关是为了在使用时可以随时复位。本项目复位电路如图3-4所示。图3-4系统复位电路由图3-4可以看出,该系统的复位电路通过10uF电容与地相连,通过10K电阻与电源相连,同时设置了复位开关,方便随时进行复位,同时该系统保持高电平复位,当开关按下后,电源和地形成通路则系统进入复位状态,若开关断开当电容充满电后也进入复位状态。中断系统的作用是在程序运行时对当前正在执行的程序或指令进行打断。在实际系统运行或调试过程中,常常存在由于不同原因导致必须中断当前程序的执行查看当前运行结果或转而去执行另一条指令的情况。设计中有软中断和硬中断两种实现方式,顾名思义就是分别通过软件或硬件来实现中断功能。引起中断的源头被称为中断源,也叫中断信号,在实际使用中主要为内部中断和外部中断两类,外部中断根据选择的引脚不同又分为外部中断0和外部中断1,这两种中断分别由电平和下降沿出发。通过TCON引脚的不同状态来对合适的中断类型进行选择。内部中断有定时器溢出中断和串行口中断源中断,定时器溢出中断是由系统内部的定时/计数器通过设置产生,串口源则直接通过串口输入产生。本文是基于STM32的循迹小车的设计,循迹模块作为本设计的核心,在第二章已经进行了选型,最终选择的型号为WL-SEND8-V4的灰度传感器,设计出的硬件接口图如图3-5所示。图3-5循迹模块接口电路图由图3-5可以看出,该模块的引脚1和引脚2分别接通VCC和GND,除了10引脚默认悬空外,其他引脚分别与单片机的SOUT1~SOUT7连接,也就是STM32的57、87、88、89、90、91、92引脚相连。灰度传感器是模拟传感器,有一只\t"/article/88/142/2019/_blank"发光二极管和一只\t"/article/88/142/2019/_blank"光敏电阻,安装在同一面上。灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏\t"/article/88/142/2019/_blank"电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测。接收到的信号经过电压比较器之后会被转化成STM32芯片能够识别的“0”,“1”信号,根据这些信号可以检测出道路信息。本文电机模块用于驱动小车进行前进和后退,前文描述了,电机模块需要通过L298N来进行驱动,因此关于电机接口与电机驱动模块电路图如图3-6所示。图3-6电机及电机驱动模块电路图由图3-6可以看出,系统中的电机均接入到L298N的输出端,这是因为单片机通过产生PWM波发送给L298N驱动芯片,驱动芯片对发送过来的命令进行解析并判断出应作出何种动作,然后反馈给电机让电机进行工作。每个驱动芯片需要5V电源进行供电。本文采用4个直流电机分别对应智能小车的四个轮子,为智能小车提供动力。对直流电机的控制采用PWM波控制,直流电机属于惯性原件,点击相当于一个大电感,它会阻碍电流电压的突变能力。所以当输入的方波频率足够大时,作用在其上面的电压为该脉冲的有效电压值。本文通过改变输入信号的占空比来控制电机的转速。一般情况下,电机控制使用H桥驱动,H桥电路一般由4个MOS管组成,改变4个MOS管的通断即可改变直流电机的转速和转向。LM298N属于直流电机驱动芯片,其中包含了两个H桥的高电压大电流的全桥驱动器,H桥驱动电路如图3-7所示。图3-7H桥驱动电路要使电机运转,必须使对角线上的一对三极管导通。当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经

Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动。电机正转如图3-8所示。图3-8电机正转H桥驱动电路如下图所示电流从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动。电机反转如图3-9所示。图3-9电机反转H桥驱动电路本文中的舵机的作用是用来控制小车的红外测距传感器的转动方向,同样对于舵机的控制也需要通过驱动芯片进行控制,舵机驱动模块电路如图3-10所示。图3-10舵机驱动电路由图3-10可以看出,舵机驱动模块使用的驱动芯片为LM2596S,该芯片输入和输出分别接通舵机的两个端口,同时该模块向外引出P8三端口元件分别与VCC、GND和STM32的DJ_CTR引脚相连。本章对系统的硬件部分进行了设计,根据整体的设计方案,对系统的各个模块进行了详细分析,并给出了各个模块的硬件电路原理图,为之后的程序设计以及系统调试做好基础。目前用于电路设计的软件主要有AD、PADS和Cadence,由于学校学习一般使用AD,所以本项目也在AD环境下对系统进行设计。AD是一款集成了电路原理图和PCB的整套设计,该软件能够使设计者在设计时减少很多后顾之忧,当熟练使用后,设计电路的质量和速度都将大幅提高。大多数的电子设计者都是从单片机进行入门学习单片机的设计的,STM32之所以能够实现所设计的功能主要是依靠软件控制逻辑对其进行控制,这也是我们常说的软硬件不分家的原因。单纯的硬件电路无法实现我们所需要的各种功能,而单纯的软件也只能在电脑中跑出所需要功能的逻辑。对于STM32的设计一般是采用C语言,本设计也选用C语言进行设计。但无论采用哪种方式都需要使用Keil软件来对代码进行编译并生成硬件可执行的文件,操作方便快捷,因此Keil也是大多电子设计爱好者都接触过较多的软件。Keil是由美国一家公司开发的而成,并在2005时被ARM收购,因此目前的Keil还可以用于STM32程序的编写。丰富的库函数和强大的集成式开发环境使得Keil软件被广大爱好者爱不释手,全Windows的操作环境为使用者提供了友好的界面。目前广泛使用的版本为Keil5,该版本于2013年10月发布。功能更加强大。该软件对于电脑的配置要求不高,这也在一定程度上降低了开发成本,所以多数情况下不会因电脑配置问题而导致无法运行该软件。系统启动后,首先进入初始化,初始化包含传感器模块的初始化和电机模块的初始化,初始化完成后系统的红外传感器对障碍物进行检测,小车与障碍物到达一定距离时,小车停止。当小车附近没有障碍物时,循迹传感器开始对灰白色路线进行检测,并按照灰白线进行自动循迹形式,通过灰度传感器传送给控制器的数据,控制器发出相应的前进或左右转命令,其主函数流程图如图4-1所示。图4-1主函数流程图小车在自动循迹时,主要利用一个红外测距传感器和一个灰度传感器进行路线判断。红外测距传感器由一个信号发射器和一个信号接收器组成。工作时,信号发射器发出一个红外信号,该信号遇到边界会反射回来,由接收器接收。若小车前方一定范围内有障碍物,则小车停止前进。当小车附近没有障碍物时,小车则根据灰度传感器的信号继续进行自动循迹功能。该程序流程如图4-2所示:图4-2循迹程序流程图小车循迹模块传感器仅有灰度传感器一种,而小车的行车轨迹和行驶状态均通过灰度传感器返回的值来进行确定,将统计得到的值发送给控制器,控制器控制小车如何行驶,该传感器设计流程图如图4-3所示。首先读取灰度的高低电平,统计高电平个数,取平均值之后与4.5做差,若偏差为0则表示小车中心在灰白色循迹线上,若偏差<0,小车向右偏移,若偏差>0,则向左偏移,通过控制左、右电机的转速,纠正误差。图4-3传感器模块流程图在路线的检测过程中,发光二极管的数量决定了小车对于路线捕捉的精确度。更多的检测模块会提高小车的精确度,但是随着检测模块的增多,成本也会增加。本设计选择使用具有7个传感模块的传感器安装在车头的位置,每个传感器的位置用数字标记,主要的情景如图4-4所示。图4-4循迹路况图在小车的前进过程中,将传感器的偏移作为输入,将轮子的转速作为输出,使得小车可以迅速的回到轨道上。当测距模块输出高电平时,小车停止。当编号为4的传感模块检测到灰白色线时,小车直行。当编号为4的传感模块未检测到白线时,3号模块输出高电平,则小车左转。5号模块输出高电平,则小车右转。当1,2号模块输出高电平时,则小车左大转。6,7号模块输出高电平时,则小车右大转。自动循迹模块部分程序如下:if(S8==0){motor_stop();}else{ if((S4==0&&S3==1&&S5==1)||(S4==0&&S5==0&&S3==0)||(S4==0&&S5==0&&S3==1)||(S4==0&&S5==1&&S3==0)) { motor_forward(); } if(S4==1&&S3==0&&S5==1) { go_left1(); } if((S2==0&&S3==1&&S4==1)||(S1==0&&S2==1&&S3==1)){ go_left(); } if(S4==1&&S3==1&&S5==0) { go_right1(); } if((S6==0&&S5==1&&S4==1)||(S7==0&&S6==1&&S5==1)) { go_right(); } }本文中电机驱动模块用于对主控芯片发送的命令进行接收处理并控制电机进行相应操作,当驱动接收到传感器发送过来的数据后,就会根据发送过来的数据来对电机进行操作,其设计流程图如图4-5所示。图4-5电机模块设计流程图各个端口状态与运动方向的关系如表4-6所示。表4-6各个端口状态与运动方向的关系电机IN1IN2停止00正转10反转01一114.2.5各个动作所对应的程序初始化后,输出PWM控制电机转速,例如:TIM_SetCompare2(TIM2,n);n越小占空比越大,直流电机转速越快,以下代码就是M2、M4电机输出PWM占空比更大,它所对应的电机转速就越快。

当四个电机都为正转,左前、左后两轮转速较慢,右前、右后两轮转速较快时,小车执行“左转”动作。该动作程序如下:。voidgo_left1(void){ TIM_SetCompare1(TIM3,400);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,150);//左out3、4对应右前轮IN3=1;IN4=0; TIM_SetCompare3(TIM3,400);//右out1、2对应左后轮IN5=1;IN6=0;TIM_SetCompare4(TIM3,150);//右out3、4对应右后轮IN7=1;IN8=0;}与上述程序同理,小车执行各个动作对应程序如下:直行:voidmotor_forward(void){TIM_SetCompare1(TIM3,300);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,300);//左out3、4对应右前轮IN3=1;IN4=0; TIM_SetCompare3(TIM3,300);//右out1、2对应左后轮 IN5=1;IN6=0; TIM_SetCompare4(TIM3,300);//右out3、4对应右后轮IN7=1;IN8=0;}右大拐:voidgo_right(void){TIM_SetCompare1(TIM3,200);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,400);//左out3、4对应右前轮IN3=0;IN4=1; TIM_SetCompare3(TIM3,200);//右out1、2对应左后轮IN5=1;IN6=0; TIM_SetCompare4(TIM3,400);//右out3、4对应右后轮 IN7=0;IN8=1;}左大拐:voidgo_left(void){TIM_SetCompare1(TIM3,400);//左out1、2对应左前轮IN1=0;IN2=1;TIM_SetCompare2(TIM3,200);//左out3、4对应右前轮IN3=1;IN4=0; TIM_SetCompare3(TIM3,400);//右out1、2对应左后轮IN5=0;IN6=1; TIM_SetCompare4(TIM3,200);//右out3、4对应右后轮IN7=1;IN8=0;}倒车:voidmotor_back(void){ TIM_SetCompare1(TIM3,200);//左out1、2对应左前轮IN1=0;IN2=1;TIM_SetCompare2(TIM3,200);//左out3、4对应右前轮IN3=0;IN4=1;TIM_SetCompare3(TIM3,200);//右out1、2对应左后轮 IN5=0;IN6=1; TIM_SetCompare4(TIM3,200);//右out3、4对应右后轮 IN7=0;IN8=1;}停车:voidmotor_stop(void){TIM_SetCompare1(TIM3,300);//左out1、2对应左前轮IN1=0;IN2=0;TIM_SetCompare2(TIM3,300);//左out3、4对应右前轮IN3=0;IN4=0; TIM_SetCompare3(TIM3,300);//右out1、2对应左后轮 IN5=0;IN6=0; TIM_SetCompare4(TIM3,300);//右out3、4对应右后轮 IN7=0;IN8=0;}掉头:voiddiaotou(void){TIM_SetCompare1(TIM3,500);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,500);//左out3、4对应右前轮IN3=0;IN4=1; TIM_SetCompare3(TIM3,500);//右out1、2对应左后轮 IN5=1;IN6=0; TIM_SetCompare4(TIM3,500);//右out3、4对应右后轮 IN7=0;IN8=1;}右拐:voidgo_right1(void){TIM_SetCompare1(TIM3,200);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,400);//左out3、4对应右前轮IN3=1;IN4=0; TIM_SetCompare3(TIM3,200);//右out1、2对应左后轮 IN5=1;IN6=0; TIM_SetCompare4(TIM3,400);//右out3、4对应右后轮 IN7=1;IN8=0;}原地左转:voidgo_left2(void){ TIM_SetCompare1(TIM3,200);//左out1、2对应左前轮IN1=0;IN2=1;TIM_SetCompare2(TIM3,200);//左out3、4对应右前轮IN3=1;IN4=0; TIM_SetCompare3(TIM3,200);//右out1、2对应左后轮 IN5=0;IN6=1; TIM_SetCompare4(TIM3,200);//右out3、4对应右后轮IN7=1;IN8=0;}原地右转:voidgo_right2(void){TIM_SetCompare1(TIM3,200);//左out1、2对应左前轮IN1=1;IN2=0;TIM_SetCompare2(TIM3,200);//左out3、4对应右前轮IN3=0;IN4=1; TIM_SetCompare3(TIM3,200);//右out1、2对应左后轮IN5=1;IN6=0; TIM_SetCompare4(TIM3,200);//右out3、4对应右后轮IN7=0;IN8=1;}本章主要是对于系统的软件部分进行设计,首先对于系统的主函数进行流程图设计,再对主程序和相关模块的子程序进行了分析,并对一部分子程序进行了注解,为后文的系统调试做好准备。智能小车系统设计由最初的方案设计和设计硬件电路图、编写软件程序,下载并录入程序至STM32等过程,从理论上来看已具备实际操作条件,但是成功并不是如此容易就出现在实际操作的过程中,因此在开始实际操作之前,对设备进行整体的调试和测试也是其中不能缺少的步骤,发现潜在隐患并及时改正,完善系统,从而达到设计的目的。本文是基于STM32的智能循迹避障小车的设计,本章节将对设计出的硬件系统进行功能测试。下面给出了系统实物的各个模块的实物硬件实物,实物如图5-1所示。图5-1硬件系统实物图由图5-1可以看出,实物中包含了前文所描述的各个部分。小车的前方安装了一个灰度传感器以及一个红外测距传感器,在小车前进时对前方的路线进行检测,从而为主控芯片提供输入信号。主控芯片对接收到的道路信息进行数据处理,并给电机驱动提供一个输出信号,四个轮子分别由四个直流电机单独控制。系统框架如图5-2所示。图5-2循迹系统框架图本文的循迹功能是通过灰度传感器来进行实现的,因此首先对系统供电观察灰度传感器的工作状态,测试效果如图5-3所示。图5-3灰度传感器通电测试在系统检测之前,首先检查电路的连接是否正确,是否存在短路的现象,正负极是否接反,若有问题应当及时改正。在确保了电路正确之后,将编译好的程序下载到STM32中,进行系统测试。由图5-3可以看出,系统通电后,灰度传感器同样被接通电源,此时灰度传感器的指示灯和相应的照明灯亮,表示该模块通电正常。下面开始对系统功能进行测试,本设计中功能共有循迹和避障两种,首先对循迹功能进行测试,测试选择的环境为模拟的场地,场地背景为绿色,贴上灰白色的线条,让小车进行自动循迹行走,将小车通电后放入场地上如图5-4所示。图5-4小车通电后放入场地图5-4为小车通电后的初始位置,根据循迹规则,小车将顺着灰白线自动循迹行走,通过演示视频可以看出小车的循迹路线,在本设计中尽可通过小车的位移来进行一定的演示,小车自动循迹的部分截图如图5-5所示。图5-5小车循迹功能测试图5-5中用红线对小车自动循迹走过的路线进行的绘制,可以看出小车能够实现正常的循迹功能,而本文小车还具有避障功能,因此下面对避障功能进行测试,由图5-5可以看出,用手放在小车前面,小车距离手掌一定距离后,此时小车停止不动,将手拿开后小车则继续循迹行走,手拿开后继续循迹的截图如图5-6所示。图5-6避障后自动循迹图5-6同样用红线绘制出了小车行驶路线,从上述功能测试可以看出,本文设计的系统在循迹和避障方面都满足了设计要求。这也说明了避障模块程序的优先级高于自动循迹模块程序的优先级。在系统调试中出现了很多问题,主要问题如下:(1)小车在通过一段直行路线之后,遇到第一个弯道时速度太大,容易跑飞出跑道路线。可在程序中对小车直行时的速度进行设置,降低小车的直行速度。小车在行驶过程中,当前方出现障碍物时,时常不能及时停止。当发生一次撞击时小车才能完全停止。由于红外测距传感器无法设置探测距离,而红外传感器的避障距离由电压决定。所以可以通过给红外传感器提高供电电压,来增加红外传感器输出高电平时的距离。本文通过对国内外智能小车技术问题展开研究,针对智能小车的国内外研究现状进行了较为详细的阐述,并对常用的几种设计方案进行介绍并对不同方案的优缺点进行了分析。通过方案论证、资料查阅结合实际使用情况,提出了基于单片机的智能循迹小车系统。为了完成本文系统,主要做了以下几点工作。1、本文所设计的基于单片机的智能循迹小车系统共分为两个部分,分别为硬件设计部分和软件设计部分,硬件设计部分需要对硬件电路进行设计,包含传感器的引脚分布等,软件设计则需要对驱动程序进行设计。2、在系统硬件设计部分主要由主控芯片和各类传感器构成,其中主控芯片为STM32微处理器,在进行STM32设计时应当首先对最小系统进行设计,然后在各个模块均采用了模块化的设计仅需要对接口进行设计,在电机模块还需要对相应的驱动进行电路设计,这样有效降低了设计难度。3、在软件设计方面主要为传感器模块的驱动程序设计,需要对传感器传输过来的数据进行计算和处理,然后将计算结果发送给单片机,单片机根据结果发送不同的指令给电机驱动芯片从而控制电机工作。综上所述,本文通过单片机对智能循迹小车系统进行了设计,验证了方案的可行性,但本设计仅对功能进行了设计,并未考虑实际使用时的一些情况,该项技术对于未来循迹小车的发展和研究方向提供了一定的参考价值,目前对于循迹小车的发展还有很长的路要走。本设计在传感器的采用以及避障模块设计还是存在一定的问题,灰度传感器在较大电压下工作时才能保证较高的灵敏度,该问题可以通过提高供电电压来改进。避障模块的红外测距传感器报警距离过小,且无法修改触发低电平的闸值,容易导致小车在停止前触碰到障碍物,该问题可以通过更换可调控闸值的红外传感器来解决。本文设计基本满足设计需求,但仍有诸多可以改进的地方,例如可以加入小车于手机的连接,使得用户可以实时对小车的路线情况进行监控。苏晓

温馨提示

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

评论

0/150

提交评论