资源描述
毕业论文(设计)题 目 自动循迹小车 院 系 电气与电子信息工程学院 专 业 自动化 年级 2013级 学生姓名 赖德鹏 学 号 130650108 指导教师 田巧玉 自动循迹小车专业 自动化学生 赖德鹏 指导教师 田巧玉 【摘 要】 本设计以LDC1000传感器探测金属为基础,以单片机控制技术为核心,实现小车自动探测金属轨道并正常行驶。同时加入前进距离和时间的记录,用户可通过单片机STC15F2K60S2控制传感器根据不同的金属轨道进行参数矫正。小车使用了L298N电机驱动以便于小车可以不通的速度匀速稳定的前进,最终实现集金属探测,实地矫正,参数的设定与数据显示于一身的智能循迹小车。此设计有体积小,功耗低,适用范围广,用户操作界面设计人性化等特点。 【关键词】 金属探测 参数可调 多功能显示 智能控制Automatic Vehicle Tracking【Abstract】 This design is based on the LDC1000 sensor to detect the metal, with the single-chip microcomputer control technology as the core, to realize the automatic detection of the metal track and normal driving. At the same time to join the advance distance and time records, the user can be controlled by a single chip microcomputer STC15F2K60S2 sensor based on different metal track parameters. The car uses a L298N motor drive for the car can get stable speed constant progress, and ultimately set the metal detection, field correction, intelligent vehicle tracking and data set parameters are displayed in a. This design has the characteristics of small size, low power consumption, wide application range, user-friendly design of user interface, and so on.【Key words】 Metal detection adjustable parameters multifunction display intelligent control 目 录绪论11 开发概述11.1 研究现状11.2 选题意义11.3 研究任务21.4 基本要求21.5 本文工作及内容安排22 模块方案论证32.1 概述32.2 模块的论证32.2.1 小车的比较与选择32.2.2 电动机的比较与选择32.2.3 电机驱动芯片的比较与选择32.2.4 传感器的比较与选择42.2.5 处理器芯片的比较与选择42.3 小车功能实现的设计与分析43 硬件部分设计53.1 电机驱动模块53.2 LDC1000传感器模块53.3 电源模块64 软件部分设计64.1 大体思路64.1.1 C语言简介64.1.2 单片机简介64.1.3 基于单片机在循迹小车系统中的应用介绍64.1.4 软件部分总述74.2 电机驱动程序控制84.3 LDC1000传感器模块94.3.1 LDC1000参数的计算94.3.2 确定Rp_Max值104.3.2 确定Rp_Min值104.4 PID算法104.5 行驶距离的计算114.6 主函数与中断115 综合测试方法、数据及结果分析115.1 测试方法115.2 测试数据115.3 结果分析126 成果展示12总结13参考文献15附录16致谢24 绪论在当前的环境中,随着科技的进步,智能化车辆或者与智能化车辆相关的产品已经开始作为各式各样自动控制系统中的重要设备之一,这其中主要包括了物流配送或者交通运输等系统。所以,自动化车辆越发地被人们重点关注,同时,也有越来越多的企业和工厂开始对智能车辆踊跃地进行研发和设计。智能化的小车是非常规范地将各个拥有高科技的系统融为一体的成果。不仅是智能化的小车包含了很多拥有高科技的系统,而这样的一个综合体又包含了更加多的高新技术。简单的来讲,智能小车就是将双腿变成了的多个轮子的移动机器人。而这个机器人其中就包括了对环境的探测,对行进路线的计算,以及包括了人类远程进行通信控制甚至是机器人自行地对车体进行控制等多种功能。而智能小车在对比其他的智能机器人时,可以更加平稳的运行,操作也比较简单,整个系统的设计也没有其他的机器人那么复杂。另外,由于智能小车的优点就在于控制简便,运行稳定,所以对智能小车的行驶的速度与方向之间的配合就有比较严格的要求。首先,小车可以通过传感器来获取当前道路状况,然后将传感器获取到的数据传输到处理器,处理器再结合小车当前的行驶状态,迅速地进行计算,对小车的行驶的方向和行车的速度进行快速的调整改变,进而对目标道路进行迅速准确的跟踪。1 开发概述1.1 研究现状移动机器人出现于20世纪06年代,当时斯坦福研究院(SRI)的Nils Nilssen和charles Rosen等人,在1966年至1972年中研制出了取名shakey的自主式移动机器人,目的是将人工智能技术应用在复杂环境下,完成机器人系统的自主推理、规划和控制1。从此,作为机器人学中的一部分,智能化车辆的数量开始不断的增多。1.2 选题意义随着科技的不断发展,人们也越发的开始关注一些研发人工智能产品的情况。智能小车可以在各种条件恶劣的情况下代替人们进行一些复杂的任务,例如排雷防爆,矿区检测,狭窄的地方进行货物搬运等。正是由于这种智能小车设备有非常多的运用前景,所以对智能小车的进行寻迹避障的研究设计就是目前首要的目标,因为小车需要正确的在规定的路线中行进并执行相应的任务。1.3 研究任务本设计是一种以STC15芯片为控制核心的自动寻迹小车系统。L298驱动电路通过单片机产生的PWM波来控制小车速度。利用LDC1000传感器对路面铁丝轨道进行分析检测,并将路面检测到的信号实时反馈给单片机,单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着铁丝轨迹自动行驶2。本设计还附带了按键功能,可以对LDC1000阈值及小车的启停等功能进行设置。1.4 基本要求设计并制作一个可以自动循迹的小车。循迹传感器自选,在规定的平面跑道自动按顺时针方向循迹前进,跑道的标示为一根0.9cm左右的细铁丝,用透明胶带将其粘贴在跑道上,跑道尺寸见图1-1,跑完一圈不得超过10分钟,小车运行时必须保持铁丝在车身垂直投影下,实时显示小车运行时间和距离3。图1-1铁丝轨道图1.5 本文工作及内容安排第一章讲解了智能小车当前研发的情况,阐明了系统实现的目的和意义,概述了本文的主要工作。第二章主要简单介绍了各个模块的论证方法,对系统有个整体框架。第三章介绍了电机驱动模块、LDC1000传感器模块和电源模块的硬件部分。第四章介绍了软件系统设计,电机驱动程序控制,LDC1000传感器程序控制,PID算法,行驶距离的计算。同时阐述了在主函数与中断中,将各个模块整合的方法。第五章介绍了此设计的最终测试的方法与测试的结果。2 模块方案论证2.1 概述本设计基于闭环测量、控制的原理,通过传感器实时监控小车的运动状态,然后将检测信号传输到微处理芯片。同时,微处理芯片对所接收到的信号进一步的分析和计算,并产生合适的脉冲宽度调制信号,也就是PWM波。PWM波传输到驱动电路,而直流电机的转动的状态和速度是通过驱动电路接收到的信号进而实现操控的。最后实现小车的前进后退、左右拐弯、自动探寻道路并定位,同时必要信息等功能。2.2 模块的论证根据题目设计要求,本设计是小车通过自动循迹的功能来达到跟随金属丝轨道前进的系统。其中系统整体包括小车的设计,电动机驱动模块,金属传感器模块,处理芯片模块,运行距离计算模块,按键模块,显示模块以及电源模块。2.2.1 小车的比较与选择根据设计要求,小车需要通过多个弯道,对车辆的平衡性,稳定性有较高的要求,采用两轮驱动的小车,转弯角度可以很好的控制,但是驱动力弱,平稳性差。采用四轮驱动的小车,驱动力强,平稳性好,能在复杂的路况上有很好的表现。虽然两轮驱动的小车更加利于在弯道的控制,但是不适用于所有的路况,所以我们将小车设计为四轮驱动。2.2.2 电动机的比较与选择电动机是小车主要的动力装置。而市面上的电动机的选择主要两种,分别是步进电机和直流电机两种。步进电机是以步阶方式分段移动,直流电机和无刷直流电机通常采用连续移动的控制方式4。所以步进电机对速度和移动距离的控制更加精确,但是移动速度相对缓慢,而无刷直流电机的速度快,但是控制困难。考虑到小车对于速度的要求大于控制的要求,所以我们选择无刷直流电机,在控制方面通过将程序的控制算法做得更加完善来弥补无刷直流电机控制的不足。2.2.3 电机驱动芯片的比较与选择电机驱动也是智能小车的模块中重要的组成之一,而对于电机驱动的选择有两种方案。方案一:采用由H桥(分立的三极管元件组成)构成的驱动。此种方案对直流电动机的方向和速度的控制利用PWM波调速的电路实现。可是采用的H桥是由分立的元件组成的电机逻辑驱动,驱动电路的稳定性容易变差,并且价格也不便宜。方案二:采用双桥电机驱动的芯片L298。L298是一款由双桥结构的直流、步进电机驱动器。同时,L298芯片集成度较高,还可以实现对两个直流电机进行同时驱动和控制。通过比较两种方案,L298电机驱动电路相对于由分立元件三极管组成的H桥的驱动,具有多种有点,例如使用元件少,可靠性不仅高,而且控制和操作可以更加模块化,并且L298芯片的价格低。所以,作为循迹小车的驱动芯片,L298芯片更加适合。2.2.4 传感器的比较与选择低成本的OHMIC开关传感器在灰尘等恶劣环境下不可靠,FSR压力传感器分辨率有限、不适合遥感、成本稍高,高端一些的超成波传感器不适合短距离传感,电容式传感器灵敏度高可针对被选择物的选择性不高,HALL传感器存在精度问题、需要磁体和校准,光学传感器在恶劣环境下不可靠,这些传感器都或多或少存在这样和那样的缺点5。而由德州仪器生产的LDC1000性能优越,无论低成本PCB线迹,或者是普通的金属块,甚至是人体的传感,LDC1000可以迅速检测并将数据传输到处理器显示出精确的结果。所以我们选择LDC1000作为循迹小车的金属传感器。2.2.5 处理器芯片的比较与选择关于处理器则有多种选择方案。首先,采用传统的C51单片机。C51单片机通用灵活,价格低廉,使用方便,但此C51的芯片是比较老的芯片,对于大量的数据处理能力较弱。第二,采用更加高级的STM32芯片。STM32芯片集成了绝大部分工控领域所需要的功能模块,官方也提供了大量的库函数,工作速度快,处理数据能力强。第三,采用STC15单片机芯片。STC15单片机计算性能强劲,可以简单灵便的对软件进行编程,而且可以实现最多6路PWM输出,自带晶振,更加利于控制小车的驱动。更加重要的是,STC15单片机加密性强,超强的抗干扰能力,可以试用于各种恶劣的环境,并且功耗更低。综合考虑,由于使用STM32芯片会造成资源浪费,所以我们选择更加适合小车控制的STC15单片机作为小车的处理器芯片。2.3 小车功能实现的设计与分析如何设计小车的运动方式是非常重要的。因为小车的运动方式就决定了小车对铁丝轨道的探测,前进的控制,以及显示小车行驶距离和时间等基本要求。小车是基于单片机设计的,而且设计智能小车的系统是一个闭环系统。首先,小车需要沿着设定好的路线前进,而且是铁丝构成的道路,所以小车就必须可以识别到目标道路,这就需要金属传感器可以不断的进行探测。同时,小车还应该具有可以实时监测是否偏离轨道,并可以纠正小车前进方向的功能,这部分功能就需要把传感器接收到的信号实时发送给处理器,处理器经过计算后发出PWM波,电机驱动接收到PWM波进行相应的操作,而电动机通过接收到的信号来进行前进或后退的动作,通过多个轮子的共同工作进而达到控制小车的前进后退左右运动,进而实现精确巡线行走。系统框图如图2-1所示。图2-1系统框图3 硬件部分设计3.1 电机驱动模块直流电动机中转子转动的原因是由于带电导体在磁场中受到了电磁力的作用,并且形成了电磁转矩,从而推动转子,使得电动机得以运行。直流电动机有如下两个个特点:1、外加电压加到线圈是通过了电刷和换向器。2、电磁转矩的方向不会变。电机的驱动芯片选用L298作为驱动芯片。工作稳定电机驱动信号由单片机提供,信号经过光耦隔离后,传至PWM控制芯片L298N,通过L298N的输出脚与两个电机相连。小车电机驱动模块电路图如附录1所示。电机驱动模块PCB硬件图如附录2所示。3.2 LDC1000传感器模块LDC1000芯片是采用四线制SPI的连接方式,而单片机芯片对LDC1000芯片的连接、控制以及读取数据是通过SPI连接(SDI、SDO、SCLK、CSB)实现的。而像Q表那样测试线圈的电感量并不同于LDC1000芯片的电感检测。LDC1000在各种环境条件下都可以很好的检测到外部金属,因为LDC1000可以很容易就可以实现非接触式的电感检测,只需要在LDC1000芯片的外部接上一个金属线圈就可以了。LDC1000原理图如附录3所示。3.3 电源模块电源是小车系统的动力组成,电源主要是给单片机芯片和外围电路提供5V电压,同时为小车的电动机提供12V电压。要想小车的控制和行驶稳定,电源的设计就需要考虑到可以达到直流稳压3.3V、5V和12V,并且电路纹波要小,尽量排除电源对芯片控制的干扰。电源原理图如附录4所示,电源PCB硬件图如附录5所示。4 软件部分设计4.1 大体思路4.1.1 C语言简介在单片机的程序编程和应用系统中,可以使用C语言和汇编语言编程。因为这两种语言是最接近机器语言的。而在较大规模的应用系统,应用软件开发的工作量是非常大的,所以,简介直观,运行效率高的语言是非常重要的。C语言编写的,与此相反,良好的便携性,并非常接近自然语言,可以用少量语言完成相同的功能,入门易,编程效率高,程序的可读性高,也可以将汇编语言嵌入C语言程序中,以满足有特殊要求的性能或操作6。因此,C语言在嵌入式系统中的开发是非常重要的。4.1.2 单片机简介单片机使用的是超大规模的集成电路技术,是一种集成的电路芯片。单片机不仅包括了有数据处理能力的中央处理器cpu、只读存储器rom、随机存储器ram、多种I/O接口、计时器/定时器以及中断系统等功能,有一些单片机还包括了脉宽调制电路、显示驱动电路、A/D转换器、模拟多路转换器等功能,把这些电路集成到一块硅片上就构成了一个小但是完全的微型计算机系统7。单片机在工控领域的应用非常广泛。4.1.3 基于单片机在循迹小车系统中的应用介绍单片机的芯片上集成了包括CPU,RAM,ROM,各种I/O接口和定时计数器的硬件,它拥有的指令可以运用于许多控制技术,同时还具有多种硬件的支持。因为它具有多个优良的特性,所以自问世以来它就被人们广泛应用。目前,单片机广泛应用于鼠标、机械键盘等电脑外设,手环、跑鞋等智能穿戴设备以及各种家用电器中。基于单片机的循迹小车系统不仅结构模块化,同时制作起来也非常方便。通过金属传感器探测到小车与轨道的相对位置,将数据传输到单片机芯片,芯片实时分析并计算小车行驶的方向,并且校正小车轮胎运行的速度,达到小车智能循迹的功能。另外,现在的人越来越离不开智能化的机器和设备,如:不管是人类对太空的探索,替代单调简单的重复性工作,还是在各种恶劣的环境中进行操作等都可以借助于智能化的可运动行走的设备。因此,智能小车作为最常用最普遍的的行走智能设备,未来必定会在工业和生活得到越来越多的使用,这样不仅高效,而且可靠。本文在分析目前市面上已经出现的智能小车的设计基础之上,充分的将单片机硬件与软件结合,以及将金属探测系统的自身特点、功能特性和设计的要求相结合,实现了利用金属轨道这一载体来导引小车运动。同时我们也充分借鉴了目前优秀的算法,形成一套准确度高,具有优良特性的自动循迹小车系统。4.1.4 软件部分总述小车进入轨道并开始工作后,金属探测器就开始不停地扫描,同时,将扫描的数据结果发送到处理器,而处理器一旦检测到传输过来的数据有变化,就计算并执行子程序,把相应的处理信号和PWM波传输到电机驱动,电机驱动再来控制电动机来改变小车当前的运行状态。同时,小车启动后就开始计算行驶距离并显示。整个程序最终可以实现以下目的;(1)通过按键控制启停以及相关参数设置;(2)搜寻铁丝并计时、测量距离然后实时显示;(3)实时纠偏并调整行驶方向;主程序流程图如图4-1所示:开始初始化参数设置前进、计时距离计算与显示小车是否偏移轨道Y判断偏移方向并矫正电机转动方向N继续运行图4-1主程序流程图4.2 电机驱动程序控制电机驱动通过脉冲宽度调制(PWM)来实现小车的转向。脉冲宽度调制是一种对模拟信号电平进行数字编码的方法,通过使用较高分辨率的计数器,方波的占空比被调制成用来对一个具体的模拟信号的电平进行编码,把电流源或电压用重复脉冲序列(通(ON)或断(OFF))加到模拟负载上去的8。而通过改变单片机程序中的I/O口输出PWM波的占空比可以调整转速。占空比是高电平脉冲与总脉冲的百分比。在一个周期中,增大占空比,就会增大高电平的比例,而最大电压与占空比的积就等于输出在电动机两端的电压。所以,要想电动机转动的速度很快,就需要增大电机两端的电压,也就是增大占空。电机驱动软件程序详见附录6。4.3 LDC1000传感器模块LDC1000是利用电磁感应的原理进行电感的检测的。若在一个线圈中加上一个交变电流,就会产生一个交变磁场在线圈周围。如果这个时候有金属物体进入到这个磁场之中,就会在金属物体表面产生一个电流方向与线圈电流的方向相反的涡流(感应电流),由于两种电流的方向相反,所以涡流产生的感应电磁场就会与线圈的电磁场方向相反9。LDC1000的技术主要有以下几个优势:1、拥有极高的分辨率,在位置传感应用中可达到微米级的分辨率。同时可以通过16位共振阻抗和24位电感值。2、设备可靠性高,使用寿命长。在不接触金属的情况下同样可以传感,同时也可以避免接触所受到异物的影响。3、在某些PCB版无法放置的地方,允许传感器与电子设备分开安放,具有更高的灵活性。4、采用成本更低的传感器和传导目标,不需要磁体。6、整个系统的功耗非常低,在标准工作时的功耗低于9mW。5、可以以压缩后的导电油墨或者金属薄片为目标。4.3.1 LDC1000参数的计算LDC1000的电感检测的原理是利用了电磁感应的技术。如果在一个PCB线圈中加上一个交变电流,就会产生一个交变磁场在线圈周围,如果这时有一个金属物体进入到这个电磁场中,就会在金属物体表面产生一个电流方向与线圈电流的方向相反的涡流,同时,线圈的电磁场方向与涡流产生的感应电磁场相反10。 (41) (42)Linf传感线圈的电感M(d)互感fSENSOR传感器振荡频率Y=Proximity Data/215,Proximity Data从寄存器0x21和0x22读取LDC1000的两个重要参数就是阻抗RP和电感L,与被探测金属的距离有关。同时,在应用中,需要配置合适的Rp范围。这是由于不同的测试距离和测试对象均会产生不同的损耗。LDC1000中可用于配置的有两个寄存器,它们分别为Rp_Min和Rp_Max。在应用中Rp值的合理配置非常重要,如果设置的Rp范围过小,那么Rp就会被钳位。如果设置的Rp范围过大,真实的Rp无法完全利用,在LDC1000的内部,就会浪费大量的ADC的资源。4.3.2 确定Rp_Max值增大LDC1000的外部线圈与金属物体之间的距离,这样使涡流的损耗最小。测试此时线圈的等效并联谐振阻抗Rp,LC谐振组件与LDC1000断开测试Rp。这里需要使用阻抗分析仪。在用户手册的table 7中找最接近Rp值乘以2的值。注意,Rp_Max寄存器虽然有8bit,但是table 7中只有32个值,所以只能使用0x00到0x1F的范围。例如用阻抗分析仪测试出Rp是18k,那么18k*2=36k,而table 7中与这个值最接近的是38.785k。4.3.2 确定Rp_Min值减小LDC1000的外部线圈与金属物体之间的距离,这样使涡流的损耗最大。测试此时线圈的等效并联谐振阻抗Rp,LC谐振组件与LDC1000断开测试Rp。这里需要使用阻抗分析仪。在用户手册的table 9中找最接近Rp值除以2的值。注意,Rp_Min寄存器虽然有8bit,但是table 9中只有32个值,所以只能使用0x20到0x2F的范围。上述方法中,金属物体与LC的距离的最大和最小的距离需要等设备的结构设计完成之后才可以决定。LDC1000传感器软件程序详见附录7。4.4 PID算法PID一般分为增量式PID和位置式PID,但是在小车系统里,一般使用增量式PID。小车的PID控制器的输出的不是绝对数值,而且位置式PID有非常大而且没有必要的计算量,所以通过增量PID算法控制的PWM波不是输出PWM的实际值,这样将会减轻处理器的负担,同时对PWM的控制也会更加高效准确。PID算法程序详见附录8。4.5 行驶距离的计算该设计采用光电测速模块,所用的测速码盘有20个小孔,所转一圈可以采集到20个脉冲,我们将轮胎的周长设计为20cm。所以,每采集到一个脉冲,小车也就向前运行了1cm。在单片机中,我们将这个脉冲传输到I/O口,通过单片机程序就可以计算出行驶的距离。4.6 主函数与中断整个程序使用模块化将各个模块的函数整合,并且采用中断使得各个程序有序的运行并使芯片保持高效的处理能力,并且程序提供了用户接口,使用户可以根据自身情况改变相应的参数。同时,单片机芯片通过循环程序实时处理按键和显示,与小车运行时的计算能力可以同时进行,保证芯片可以高效的运行。在整合各个函数模块的过程中,中断的处理至关重要。在中断函数中,必须要考虑到时间的计算,同时,各个模块处理的优先级和中断的开关,是需要综合考虑到小车运行的实际情况的。而在此设计中的程序,是可以很好的同时处理时间,金属探测,小车方向控制,速度控制,参数显示等功能,并且每一个功能独立且不会互相干扰,达到高效处理和运算的目的。中断函数详见附录9,主函数详见附录10。5 综合测试方法、数据及结果分析5.1 测试方法按照要求搭建实验环境,在地板上用铁丝铺设了如图1-1的轨道,并且考虑到各种可能发生的情形采取相应措施并进行测试。测量仪器如下:(1)秒表(误差0.01S):测量时间,结合电机上的码盘测量速度;(2)钢卷尺(误差1mm):测量车道的几何尺寸;(3)万用表:测量电池电压和信号电压。5.2 测试数据小车设置好相关参数后开始正常行驶,探测铁丝并沿着铁丝跑完全程。表5-1为秒表测得结果和LED显示结果。秒表测得时间LED显示时间第一次测试29s28s第二次测试30s29s第三次测试28s28s平均值29s28.3s表5-1秒表测得结果和LED显示结果5.3 结果分析小车上的LED显示器显示的时间与秒表测得的时间平均误差为0.7s,小车全程的行驶时间不会超过1min。小车行驶中车身平稳,转弯灵活,而且巡线精准。6 成果展示表6-1 小车成品俯视图表6-2 小车成品侧面图总结在这次的毕业设计中,从以开始的不熟悉系统设计各个步骤的设计方法,到查阅了大量资料和请教老师后,对整个系统设计有了一个了解,需要设计哪些模块,到对各个模块的软件设计有了明确规划后。我在这整个的过程之中,学习到了特别多的知识,特别是对此软件设计中需要用到单片机、电机驱动模块无线收发模块,电源模块对应的软件知识等,还掌握了一些常用的技能,比如在软件设计系统过程中出现的大量问题,需要经过慢慢的摸索和学习,又时还需要向老师和同学寻求帮助,找到问题的根源并把它解决掉。但是,能够在学习之中发现各种各样的问题,然后对这些问题进行分析,进而解决掉这些问题,这使我自己才能得到更多的收获和进步。经过这几个多月的设计,使得我收获颇丰,为我寨以后在软件设计方面打下基础,同时又将我大学四年所学到的知识梳理了一遍,把理论和实践结合到了一起,使这些知识在设计中得到运用,不再是书本上的东西,而成了自己的东西,更重要的是使我自己更加熟悉了整个设计的步骤和软件硬件的设计方法,为我以后的工作和学习中,给予了非常大的帮助。参考文献1 张黄鹏. 智能循迹小车的研究J. 科技致富向导, 2011(32):116-116.2 杨景昱. LDC1000传感器在硬币识别中的应用研究J. 电脑与电信, 2014(7):62-63.3 2016年TI杯大学生电子设计竞赛题C4 李艳萍, 王涛. 直流步进电机的智能控制系统J. 信息技术与信息化, 2004(3):72-73.5 胥京宇. 德州仪器电感数字转换器推动位置及运动传感的革新J. 世界产品与技术, 2013(10):52-52.6 朱涛. 基于STC89C52单片机的智能循迹小车设计J. 电脑知识与技术, 2011,07(11):7751-7753.7 顾群, 蒲双雷. 基于单片机的智能小车避障循迹系统设计J. 数字技术与应用, 2012(5):23-23.8 许兰香. PID控制的基本原理J. 科教导刊:电子版, 2014(6):138-138.9 蔡卫刚. 声音导引智能系统J. 电子设计工程, 2013,21(14):168-170.10 张波. 浅析直流电机传动的基本原理J. 数字技术与应用, 2011(6):28-28.11 Bishop R. Intelligent Vehicle Applications WorldwideJ. IEEE Intelligent Systems, 2000, 15(1):78-81.附录附录1:电机驱动模块电路图附录2:电机驱动模块PCB硬件图附录3: LDC1000原理图附录4:电源原理图附录5:电源PCB硬件图附录6:电机驱动软件程序uint Speed_Add(count)/加速度函数uchar j;count =20;for(j=0;j100;j+)count+; /占空比加1return count;/反回占空比值delay1ms(10);/大约10MS count加1一次,在这里可以自定义加到最大速度的时间uint Speed_Minus(count)/减速度函数uchar j;count=100;for(j=0;j100;j+)count-; /占空比减1return count; /反回占空比值delay1ms(10); /大约10MS count减1一次,在这里可以自定义减到最小速度的时间附录7:LDC1000传感器软件程序char spi_readBytes( char addr, char * SPIdata, unsigned char len)char txaddr,i,j;SCLK=1;CS=1;txaddr= addr | 0x80;/readCS=0;for(i=0;i8;i+) /send addrSCLK=0;SDI=txaddr & 0x80;SCLK=1;txaddr=txaddr1;for(j=0;jlen;j+)for(i=0;i8;i+)SPIdataj=SPIdataj1;SCLK=0;if(SDO)SPIdataj=SPIdataj | 0x01;SCLK=1;CS=1;return 0;char spi_writeByte(uchar addr, uchar SPIdata)uchar txaddr,i;SCLK=1;CS=1;txaddr= addr & 0x7f;/writeCS=0;for(i=0;i8;i+) /send addrSCLK=0;SDI=txaddr & 0x80;SCLK=1;txaddr=txaddr1;for(i=0;i8;i+) /send addrSCLK=0;SDI=SPIdata & 0x80;SCLK=1;SPIdata=SPIdataLastError = 0; /Error-1sptr-PrevError = 0; /Error-2sptr-Proportion = P_DATA; /比例常数 Proportional Constsptr-Integral = I_DATA; /积分常数 Integral Constsptr-Derivative = D_DATA; /微分常数 Derivative Constsptr-SetPoint =100; 目标是 100int IncPIDCalc(int NextPoint)int iError, iIncpid; /当前误差iError = sptr-SetPoint - NextPoint; /增量计算iIncpid = sptr-Proportion * iError /Ek项- sptr-Integral * sptr-LastError /Ek1项+ sptr-Derivative * sptr-PrevError; /Ek2项sptr-PrevError = sptr-LastError; /存储误差,用于下次计算sptr-LastError = iError;return(iIncpid); /返回增量值附录9:中断函数void timer0() interrupt 1TH0=(-755)/256;TL0=(-755)%256;proximtyData0=0;proximtyData1=0;spi_readBytes(LDC1000_CMD_PROXLSB,&proximtyData0,2);proximtyDataMAX = (unsigned char) proximtyData18) + proximtyData 0;a = proximtyDataMAX;proximtyData0=0;proximtyData1=0;spi_readBytes(LDC1000_CMD_PROXLSB,&proximtyData0,2);proximtyDataMAX = (unsigned char) proximtyData18) + proximtyData 0;b = proximtyDataMAX;/-pwm波if(time+=pwm_h)P10=!P10;P11=!P11;time=1;pwm_h=10-pwm_h;/-timecount+;if(count=1850)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;/-测速if(speed=0)speed_flag = 1;if(speed=1 & speed_flag=1)speed_flag = 0;cm+;/-蜂鸣器if(beep_flag = 1)beep=beep;elsebeep = 1;附录10:主函数void main()LCD1602_init();LDC1000_init();spi_readBytes(LDC1000_CMD_REVID, &orgVal0,12);TMOD=0x01;TH0=(-755)/256;TL0=(-755)%256;ET0=1;EA=1;TR0=1;P10=1;P11=1;pwm_h=5;while(1)/-读LDC1000的值run();/display();write_com(0x80);write_date(proximtyDataMAX/1000000+0x30);write_date(proximtyDataMAX/100000%10+0x30);write_date(proximtyDataMAX/10000%10+0x30);write_date(proximtyDataMAX/1000%10+0x30);write_date(proximtyDataMAX/100%10+0x30);write_date(proximtyDataMAX/10%10+0x30);write_date(proximtyDataMAX%10+0x30);致 谢经过这几个多月多的忙碌,毕业设计已接近尾声。首先在这理要感谢我的导师田巧玉老师。田巧玉老师在我做毕业设计的每一个阶段从选题到查阅资料,设计初稿的审稿到修改,中期检查到后来的终稿设计等这整个过程中给了我耐心的指导并给我提出了很多宝贵的意见和建议。在这个整个设计过程中,我负责的软件设计方面,因为设计之前对相关知识的掌握是很浅的,遇到了许多问题和困难,田老师给了我很大的支持和鼓励,耐心的指导我完成各个环节,帮助我克服了其中遇到的困难,整个毕业设计过程不断的在进步,不断完善对相关知识的掌握和应用让我受益颇多。由于学术水平有限,所写论文难免有不足的地方,恳请导师和同学的批评和指正。这几个月的设计过程中,我也从田老师身上学到的做事严格认真一丝不苟的态度,在这里我向田老师表示真诚的敬意和衷心的感谢!由对于即将要踏入工作岗位的我,田老师对工作认真的态度也是我永远学习的榜样。我还要感谢我的同组做硬件设计的搭档,他给了我很多帮助和参考。还要感谢我的同学室友们在我写论文的过程中给予我很多的素材,在排版的过程中给我最热心的帮助。感谢家人朋友,是他们给了我鼓励和支持,不断在生活中的照顾,让我顺利完成了学业。谢谢我亲爱的老师们和辅导员,谢谢你们的教导和照顾,让我这四年不断成长不断完善自己,让我度过了这四年充实而快乐的大学生活。最后再次对大家表示我最诚挚的谢意!
展开阅读全文