毕业设计(论文)-基于ATMega128单片机的声控小车驱动程度设计.doc_第1页
毕业设计(论文)-基于ATMega128单片机的声控小车驱动程度设计.doc_第2页
毕业设计(论文)-基于ATMega128单片机的声控小车驱动程度设计.doc_第3页
毕业设计(论文)-基于ATMega128单片机的声控小车驱动程度设计.doc_第4页
毕业设计(论文)-基于ATMega128单片机的声控小车驱动程度设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计说明书(论文) 第 31 页 共 31 页1 绪论1.1研究背景传感器网络是基于无线局域网,由“侦测”功能发展起来的网络架构模式,与传统的网络技术之间存在较大的区别。无线传感器网络的概念是基于一个简单的等式:传感技术加上中央处理器,再联合无线通信技术就形成了数以千计的潜在应用可能12。无线传感器网络(wireless sensor network,wsn)是一类全新的信息获取和处理技术,由大量具备传感、数据收集、处理和无线通信能力而体积小、成本低的传感器节点(sensor node)构成。 在无线传感器网络中,每个节点的功能都是相同的,大量传感器节点被布置在整个被观测区域中,各个传感器节点将自己所探测到的有用信息通过初步的数据处理和信息融合后传送给用户,数据传送的过程是通过相邻节点的接力传送的方式传送回基站,然后通过基站以卫星信道或者有线网络连接的方式传送给最终用户。因此,节点在网络中可以充当数据采集者、数据中转站或类头节点的角色。作为数据采集者,数据采集模块收集周围环境的数据(如温度、湿度等),通过通信路由协议直接或间接将数据传输给远方基站或汇节点;作为数据中转站,节点除了完成采集任务外,还要接收邻居节点的数据,将其转发给距离基站更近的邻居节点或者直接转发到基站或汇节点;作为类头节点,节点负责收集该类内所有节点采集的数据,经数据融合后,发送到基站或汇节点19。1.2国内外研究现状及应用无线传感器网络的最初研究来源于美国军方,美国国防先进研究计划局(darpa)于2001年资助加州伯克力大学开发无线传感器系统。美国自然科学基金委员会2003年制定了传感器网络研究计划,投资3400万美元用于支持该方面的基础研究。英国、日本、意大利等国家的一些大学和研究机构也纷纷开展了该领域的研究工作。研究取得了一些初步的研究成果。目前国内无线传感器网络尚处于研究阶段,清华大学、中科院沈阳自动化研究所、中科院合肥智能所等单位已开始进行这方面的研究。无线传感器网络应用领域非常广泛。比如当需要对诸如温度、光通量、位移以及噪声等环境参数进行不间断地传感、测试和无线信号传输时,可以考虑在相关领域中配置智能化的无线传感器网络,通过对环境待测参数的传感数据分析来达到检测目的,这一技术已经应用到国防军事、动物的习性观测、材料结构健康监测、交通管理、医疗卫生、灾害监测等领域中12。1.3课题研究目的和任务传感器网络的应用中,低功耗节点的设计具有举足轻重的作用,这是传感器网络得以实现的硬件基础。传感器节点分为静态节点和移动节点,目前研究的主要是基于静态传感器节点构建的传感器网络。无线传感器网络的一般设计方案是在一个较大的区域内,布置一定数量的传感器节点,区域内用一个基站(b-station,即pc机)管理各个节点,各传感节点经过一定路由后将数据传输到基站。由静态传感节点(s-node)组建的无线传感网络,其节点可按照自组织方式组建网络,按照设定的路由协议选择其中一个或几个作为汇聚节点(sink),经过汇聚节点将数据传输到基站。由静态传感器节点和移动传感器节点(m-node)动态构建的无线传感器网络,可设计网络拓扑结构为星型,网络内所有静态节点以移动节点为汇聚节点,将数据传输给移动节点,移动节点处理后传输给基站。数据传输是由移动节点控制的,移动节点进入传感器节点区域后,发送射频信号,激活各静态节点后建立链接,各节点以自己的节点id号依次将数据传输给移动传感器节点,最终传输到基站。静态传感器节点在配置后,自身不能改变所处位置,感知范围有限;而且由于能耗原因容易使节点脱离网络,改变原有的网络拓扑结构,以致造成信息不能按原有路径传输。移动传感器节点可以依据需要自主移动,动态构建网络以提升网络性能。因而移动传感器节点可以与静态传感器节点一起被配置在特定的场合,以完成许多复杂的任务,如移动目标跟踪、动态信息采集、灾情预警、搜救、军事领域的情报探测等20。课题侧重移动传感器网络节点驱动程序设计,同时完成相应的通信试验。通过对本课题的研究,较好地掌握移动传感器节点的设计,熟悉基于单片机的驱动程序的设计,掌握单片机应用软件的编制与调试,掌握通信驱动程序设计,完成软硬件的联调。这样可以为以后的进一步的更实用性的研究打下基础。在理解传感器网络技术的基础上,参考有关文献,了解通信电路设计的一般方法,在此基础上,完成基于atmega128及cc1000、cc2420射频芯片的通信节点设计(完成驱动程序设计),设计具有移动功能的传感器节点,驱动电机能够进行按指令的运动,熟悉使用c语言,进行驱动程序设计、调试。本文首先介绍软件设计的一般方法,通过比较得出合适的设计方法。简单介绍有关硬件电路设计后结合对小车驱动板电路进行相关分析,结合atmega128单片机c语言编程的特点和要求,着重给出了小车运动方向控制、运动速度控制、运动距离控制的程序设计方法,并给出了驱动程序和主函数的衔接和调用关系,从而完成软件设计。2 硬件电路设计2.1主要元件介绍2.1.1 atmega128单片机atmega128为基于avr risc结构的8位低功耗cmos微处理器。由于其先进的指令集以及单周期指令执行时间,atmega128的数据吞吐率高达1mips/mhz,从而可以缓减系统在功耗和处理速度之间的矛盾。avr内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算逻单元(alu)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的复杂指令集微处理器高10倍的数据吞吐率。atmega128具有如下特点:128k字节的系统内可编程flash(具有在写的过程中还可以读的能力,即rww)、4k字节的eeprom、4k字节的sram、53个通用i/o口线、32个通用工作寄存器、实时时钟rtc、4个灵活的具有比较模式和pwm功能的定时器/计数器(t/c)、两个usart、面向字节的两线接口twi、8通道10位adc(具有可选的可编程增益)、具有片内振荡器的可编程看门狗定时器、spi串行端口、与ieee1149.1规范兼容的jtag测试接口(此接口同时还可以用于片上调试),以及六种可以通过软件选择的省电模式。空闲模式时cpu停止工作,而sram、t/c、spi端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作,寄存器的内容则一直保持;省电模式时异步定时器继续运行,以允许用户维持时间基准,器件的其他部分则处于睡眠状态;adc噪音抑制模式时cpu和所有的i/o模块停止运行,而异步定时器和adc继续工作,以减少adc转换时的开关噪声;standby模式时振荡器工作而其他部分睡眠,使得器件只消耗极少的电流,同时具有快速启动能力;扩展standby模式则允许振荡器和异步定时器继续工作。器件是以atmel的高密度非易失性内存技术生产的。片内isp flash可以通过spi接口、通用编程器,或引导程序多次编程。引导程序可以使用任何接口来下载应用程序到应用flash存储器。在更新应用flash存储器时引导flash区的程序继续运行,实现rww操作。通过将8位risc cpu与系统内可编程的flash集成在一个芯片内,atmega128为许多嵌入式控制应用提供了灵活而低成本的方案。atmega128是一个很复杂的微处理器,其i/o数目为avr指令集所保留的64个i/o的超集。为了保持对atmega103的兼容性,atmega103的i/o位置在atmega128得到了保留。多数添加的i/o位于扩展的i/o空间$60到$ff(即位于atmega103的内部ram空间)。这些地址可以通过指令ld/lds/ldd和st/sts/std来访问,而不是in/out指令。对于atmega103用户而言,内部ram可能还是个问题。此外,由于中断向量的增加,若程序使用了绝对地址可能也是个问题。为了解决这些问题,atmega128设置了一个熔丝位m103c。此熔丝位编程后就可以使atmega128工作于atmega103兼容模式。此时扩展i/o空间将无法使用,而内部ram正好与atmega103的一致。同时扩展的中断向量也被取消了。2.1.2无线数据传输模块cc1000、cc2420射频芯片是无线数据传输中的无线波的输出部分。在此项目中,无线传输使用的硬件为cc1000,但是cc1000是一个简单的串行的数据输入输出的无线频射芯片,无法实现完整的数据的传输和控制,需要外围的芯片加以控制,实现数据的正常发送和接收,所以在本项目中使用的用cc1000的集成的txd-1000微功率无线数据传输模块,其结构示意图如图2.1所示: 图2.1 txd-1000外部结构示意图tdx-1000微功率无线数据传输模块有以下的特点:1.微功率发射,功率10mw。无须向无线电管理委员会申请频点,使用安装方便,载频频率315mhz,433mhz。2.高抗干扰能力和低误码率。基于fsk的调制方式,并采用了前向纠错信道编码技术,提高了数据抗突发干扰和随机干扰的能力,在信道误码率为10-2时,可得到实际误码率10-510-6。3.传输距离远。在视距情况下,可靠传输距离不低于 100m。4.数据传输格式:8n1,一个起始位,8个数据位,一个停止位。5.数据传输速率:从1200bps9600bps(定货时需确定)6.功耗低、。接收情况下,耗电量10ma,发射电流:30ma(10mw)。7.可靠性高。采用单片射频集成电路及单片mcu,外围电路少,可靠性高,故障率低。8.体积小、重量轻tdx-1000的通信信道是半双工的,最适合点对多点的通信方式,这种方式首先需要设1个主站,其余为从站,所有站都编一个唯一的地址。通信的协调完全由主站控制,主站采用带地址码的数据帧发送数据或命令,从站全部都接收,并将接收到的地址码与本地地址码比较,不同则将数据全部丢掉,不做任何响应;地址码相同,则证明数据是给本地的,从站根据传过来的数据或命令进行不同的响应,将响应的数据发送回去。这些工作都需要上层协议来完成,并可保证在任何一个瞬间,通信网中只有一个电台处于发送状态,以免相互干扰。tdx-1000也可以用于点对点通信,使用更加简单,在对串口的编程时,只要记住其为半双工通信方式,时刻注意收发的来回时序就可以了。2.1.3节点(小车)驱动电路图2.2为小车的电机驱动原理图:图2.2小车电机驱动电路图在图2.2中,mot1和mot2输入高低电平即可在j1处得到正反向电压,后面的电路是由两个cmos管和两个二极管构成的通断电路,motsp输入pwm就可在j2处接上电机,用于速度的控制。小车共有两组电机控制电路,四轮驱动,其中每个电机带动两个轮子,这两个轮子位于小车的同一侧,这样一样,就可以很方便地控制小车转向了。2.2硬件电路的模块化设计根据传感器节点小车的工作要求,硬件电路设计成以下几个模块,各模块之间的联系如下图2.3所示:图2.3 硬件模块连接示意图在图2.3中:(1) 电源模块要为单片机提供3.3v的正常工作电压。由于供电源来自小车的4节5号电池,约是6v的电压,这就需要一个或多个稳压芯片来提供电压支持。(2) 通过jtag接口和avr studio编程环境可以进行片上调试和isp下载。(3) 单片机输出的电机控制信号通过电机驱动模块放大和处理后,传输到电机驱动板上。(4) 无线串行通信模块则由两组串行通信线组成,能够满足有线,无线两种模式的通信和调试要求。(5) led指示灯和按键开关模块则能够起到节点小车运行和传感器等部件的简单控制和指示作用。(6) 预留i/o口是为传感器所预留的接口,同时也能够适应系统对不同i/o设备的支持需求。(7) 单片机周围的简单电路,包括接地电容,感应电容和接插件等。节点小车控制板就可以分为以上7个模块,各模块之间相互作用,协同工作,就基本能满足对于无线传感器节点小车的设计要求了。3 无线传感器网络节点软件设计3.1无线传感器网络节点软件设计概述3.1.1无线传感器网络的特点无线传感器网络具有很多自身的特点:(1)电源能量有限 (2)通信能力有限 (3)计算能力有限 (4)传感器数量多、分布范围广、网络节点密度高 (5)网络动态性强 (6)以数据为中心,分布协同计算。这些特点决定了传感器网络的系统设计和软件设计的特殊要求,因此,我们在设计节点时,针对无线传感器网络的特点,除了必要的在硬件设计上优化外,还要在不影响整体性能的基础上,对软件进行优化,尽量让网络高效的运行。3.1.2无线传感器网络节点软件的性能指标(1)轻量级13 微小的传感器节点在长期运行中总共可以利用的资源非常有限,这些节点上的软件必须是轻量级的。(2)模块化 模块化的软件设计有利于软件的更新和维护,个别模块或组件的更新相对于整个更新开销要小得多。(3)局部化协作算法 局部化算法是仅通过与临近界点交换信息而实现全局目标的分布式算法。(4)以数据为中心 传感器网络的应用目的决定了传感器网络以数据为中心的特点,其软件应该具有网络内的数据处理和查询的机制,以最有效的方式获得并利用数据,满足不同应用的需求。(5)自适应 应用需求的变化和网络动态性要求具有自适应性,通过自我调整有效地使用有限资源,提高系统的服务生命期。3.1.3无线传感器网络节点软件性能需考虑的因素(1)能源有效性/生命周期 传感器网络的生命周期是指从网络启动开始提供服务到不能完成最低功能要求为止所持续的时间。(2)响应时间 传感器网络的响应时间是指当观察者发出请求到其接收到回答信息所需要的时间。(3)感知精度 传感器网络的感知精度是指观察者接收到的感知信息的精度。(4)伸缩性 传感器网络伸缩性表现在传感器网络数量、网络覆盖区域、生命周期、时间延迟、感知精度等方面的可扩展极限,其中传感器数量、覆盖范围是两个重要的伸缩性指标。(5)容错性 传感器网络中的传感器节点经常会由于周围环境或电源耗尽等原因而失效。(6)安全性 保证数据和系统安全性是很多应用的客观要求,安全包括保密性、身份认证、抗攻击能力等方面。(7)成本和部署容易度 成本和部署是最终影响传感器网络实际应用的一个重要因素,只有节点成本降低到一定程度,才有可能实现其大规模的应用。3.2软件设计方法的选择3.2.1应用软件开发的基本原则(1)自顶向下的系统结构开发原则这种方法的基本思想是,对一个复杂系统进行分解,由高度抽象到逐步具体的方法,形成一个树形结构。在树形结构中,每一层次都设计成独立的模块,每个模块又都可以调用它的下属模块,因此,这是一种逐层分解的方式,也称为层次结构。这种系统结构的优点是,关系明了、简单,各层次中的模块之间联系比较少,各模块相对独立,易于理解,便于修改。(2)模块化结构开发原则这种方法是将系统分成若干模块,但整体结构并不要求是树形结构,允许网状结构(即一个模块可以被两个或两个以上的模块所调用)的存在。这种系统结构的特点是结构比较灵活,整个系统类似搭积木一样,独立性强,提供了系统开发的可靠性。3.2.2几种常用的软件设计方法介绍(1)非自动形式的开发方法这种方法是一种人工方式的开发方法,是目前使用最为广泛的方法。它主要有5种方法,下面着重介绍一下系统流程图(system flowchart)法。系统流程图(system flowchart)法采用自顶向下的功能分割手段,对一个复杂系统进行逐层分解。这种方法主要用于事务系统的系统分析和系统设计。在这种方法中,一般采用一种称为“事务处理流程图”的工具(也称为系统流程图)来描述系统分析和系统设计的结果。描述内容包括系统中数据的流动,对数据的加工处理,各数据之间的组成和相互关系等。由于这种方法比较直观,既反映了系统的逻辑结构,又反映了数据与加工的某些物理特征,因而十分简练、明确地描述了整个系统的全貌和某些细节(如数据结构、加工内容、文件记录形式等)。但这种方法的缺点是开发工作量大,也不容易维护。除了系统流程图(system flowchart)法外还有:结构化分析方法(sa方法)、结构化设计方法(sd方法)、数据结构法(jackson方法)、层次输入-处理-输出方法(hipo方法)等。(2)半自动形式的开发方法该方法是在软件开发过程中部分地使用软件开发工具。常用的有以下两种方法:srem方法、psl/psa方法。(3)自动形式的系统开发方法这种方法主要以hos(higher order software公司)方法为代表,可用于自动进行系统分析和系统设计,并能进行自动编程7。另外,软件开发新技术有:原型方法、瀑布模型、面向对象技术等。3.2.3确定后的软件设计方案经过分析,决定采用非自动形式开发方法中的系统流程图法设计软件。我们设计的节点为一个具有一定功能的小车,功能的实现并不是很复杂,所以,我们认为运用直观明了的系统流程图法是比较合理,虽然该方法在理论上具有开发工作量大,而且不容易维护的缺点,但是这次的设计工作量不是很大,这种顾虑是没有必要的。4 节点驱动程序设计4.1主程序及无线通信程序设计简介图4.1和4.2分别为主函数流程图和数据发送程序流程图:图4.1主函数流程图 图4.2数据发送流程图各流程图说明:(1)图4.1为主函数流程图,运行时,首先要进行初始化,初始化内容包括调用串口初始化程序进行串口的初始化,设置b口和d口的相关位的数据传输方向并进行复位。然后发送新地址申请数据帧,进入一个无限循环,在该循环中调用小车驱动函数car_move,并且该循环是允许中断的。(2)图4.2为数据发送流程图,在数据发送时,首先,读取所需发送数据的长度,数据内容和目的地址,然后通过相应的算法在数据上加上帧头和帧尾。然后进入数据发送过程,发送时,先关中断,判断udre,为0等待,直到为1时,把数据帧以串行形式发送给txd-1000,数据以字节发送,发送完一个字节,判断一次数据帧是否发送完成,未完成,就发送下一个数据字节,完成,则完成本次发送,并打开中断。数据帧的数传输中,需要关中断,防止有新中断的进入,破坏一个数据帧的完整发送。图4.3为数据接收程序流程图: 图4.3 数据接收流程图从图4.3中可以看出,当输入缓冲器满时,单片机产生19号中断,进入中断调用子程序,在进入该子程序后,为防止新的高优先级中断的进入,中断子程序首先进行关中断操作。在接收新数据前,首先判断上一条指令是否被取走,如果没被取走则等待。在数据帧接收过程中,首先判断数据帧是否已经接收过,如果接收过,则表明此帧为重复帧,丢弃此帧,只有在发现数据帧为新帧时,节点才处理此帧。而新旧数据帧判断的依据为时间序列,如果节点所时间序列小于数据帧的时间序列时,表明为新数据帧,否则为旧帧。当接收到新数据帧时,接收节点进入数据处理阶段。首先把数据帧中的时间序列记录下来,以供查验。然后接收的是目的地址,接收节点和己地址进行对比判断是否为自己的数据,是则接收数据,生成校验位,并和数据帧的校验位比较,判断所接收的数据是否正确。如果不是自己的地址,就判断跳针数,如果跳针数没有超出跳针数上限的话,修改原数据帧的跳针数,使跳针数加1,然后转发数据帧,如果达到了数据帧的上限则丢弃数据帧。在接收完数据后,程序进行开中断。4.2驱动程序总体设计4.2.1运动指令运动方式、速度、距离小车(节点)的驱动程序所要实现的功能为:(1)能够识别运动方式指令并做出响应这些运动方式分别为:前进、后退、左转45度/90度、右转45度/90度、左后转45度/90度、右后转45度/90度。(2)能够识别运动速度指令并做出响应指令中给出要求小车运动速度的信息,这个运动速度不能超过小车最大的运动速度,否则以最大速度运行。(3)能够根据距离指令的要求运动相应的距离4.2.2驱动程序流程图 图4.4为小车驱动程序流程图:图4.4小车驱动程序流程图说明:从数据接收程序中接受到的最终运动指令为全局变量unsigned char order_out10中的order_out0、order_out1、order_out2,其中order_out0指明运动方式,如前进、后退、左转等;order_out1指明运动速度;order_out2指明运动距离。全局变量order_ok为新运动指令就绪标志位,进入函数car_move后首先读取order_ok的值,为0说明暂时没有可执行的指令,返回到主函数;为1则说明有新的指令传来,保存所有新的指令数据:order_out0保存到变量control,order_out1保存到变量speed,order_out2保存到变量distance,同时把order_ok清零,说明数据已经取走,接下来根据control的值进入对应的运动形式,运动结束后回到主函数。这样,一次调用car_move函数过程结束。4.3各功能模块的实现4.3.1硬件电路中用于控制小车的i/o口介绍小车的驱动控制电平以及pwm波来源于atmega128的i/o口,硬件电路设计时将pb2、pb3分别控制左轮的mot1、mot2(记为motl1、motl2),pb5、pb6分别控制右轮的mot1、mot2(记为motr1、motr2)。pb4、pb7设置为pwm波发生接口,分别由t/c0和t/c2提供pwm波,由于小车的pwm速度控制接口设置成了左右轮共用一个,故在程序设计时仅用pb4口(t/c0产生波形,由pb4口输出)。每个端口都有三个i/o存储器:数据寄存器portx、数据方向寄存器ddrx和端口输入引脚寄存器pinx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚寄存器为只读寄存器。当ddrx中的某一位为“1”时,则该引脚被定义为输出,此时可通过读取pinx寄存器来得到该引脚的输出电平;当ddrx中的某一位为“0”时,则表示该引脚被定义为输入,此时如果portx中的对应位为“1”的话,表示该引脚输入时带内部上拉电阻。当寄存器sfior的上拉禁止位pud置位时所有端口的全部引脚的上拉电阻都被禁止。4.3.2节点(小车)运动方向控制的实现(1)小车向前、向后运动的实现小车前进程序的基本设计思想是:当接受到命令时,pb2、pb3设置为0和1(左轮向前运动);pb5、pb6也设置为0和1(右轮向前运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序一段时间让小车运动,再将pb2、pb3、pb5、pb6全部置0,小车停止运动。向后运动的设计思想和前进很类似:当接受到命令时,pb2、pb3设置为1和0(左轮向后运动);pb5、pb6也设置为1和0(右轮向后运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序一段时间让小车运动,再将pb2、pb3、pb5、pb6全部置0,小车停止运动。前进程序流程图如图4.5:图4.5小车前进程序流程图控制前进的程序段如下:#include#include#includevoid delay_1ms(void) unsigned int i; for(i=0;i150;i+) /*delay_1ms()为1ms延时函数*/void delay_nms(unsigned int n) unsigned int j; for(j=0;jn;j+) delay_1ms(); /*delay_nms为nms延时函数*/void step0(unsigned char speedx,unsigned char distencex) unsigned int t1;ddrb|=0xfc; /*b口的6,5,3,2位设置为输出,用于控制电机转向;4位和7位设置为输出,用于产生pwm波形*/ portb|=0x48,portb&=0xdb; /*使得pb6、pb3置位,pb5、pb2复位*/ tcnt0=0x00; /*设置计数初始值*/ ocr0=(unsigned char)speedx*255/5; /*根据速度设置占空比,设小车最大速度为5m/s*/ tccr0=0b01100010; /*启动计数器,设置为8分频*/ t1=(unsigned int)1000*distencex/speedx; delay_nms(t1); /*延时,让小车运动指定的距离*/ portb&=0x93; /*关闭电机驱动电平*/ tccr0=0b01100000; /*关闭计数器,pwm波形停止产生*/ /*step0为小车的前进函数*/(2)左(右)转45度、90度左转基本设计思想是:当接受到命令时,pb2、pb3设置为0和0(左轮不运动);pb5、pb6设置为0和1(右轮向前运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序,利用运行延时程序的长短来实现进行的是45度转向还是90度转向。再将pb2、pb3、pb5、pb6全部置0,关闭t/c0,小车停止运动。右转基本设计思想是:当接受到命令时,pb2、pb3设置为0和1(左轮向前运动);pb5、pb6设置为0和0(右轮不运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序,利用运行延时程序的长短来实现进行的是45度转向还是90度转向。再将pb2、pb3、pb5、pb6全部置0,关闭t/c0,小车停止运动。(3)左(右)后转45度、90度左后转基本设计思想是:当接受到命令时,pb2、pb3设置为0和0(左轮不运动);pb5、pb6设置为1和0(右轮向后运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序,利用运行延时程序的长短来实现进行的是45度转向还是90度转向。再将pb2、pb3、pb5、pb6全部置0,关闭t/c0,小车停止运动。右后转基本设计思想是:当接受到命令时,pb2、pb3设置为1和0(左轮向后运动);pb5、pb6设置为0和0(右轮不运动),根据有关命令参数开启t/c0产生pwm波,从pb4口输出;然后运行延时程序,利用运行延时程序的长短来实现进行的是45度转向还是90度转向。再将pb2、pb3、pb5、pb6全部置0,关闭t/c0,小车停止运动。小车转向时仅有一组轮子在运动,转向完毕后,不应该让它立即运动,因为如果这样的话,在转向速度比较大时,小车可能会翻车。这里所说的让小车转向后立即前进或者后退是指保持小车的一组轮子运动而另外一组不运动一段时间后,并不关闭运动的那组电机控制电平,而是立即开启先前不运动的那组电机。所以考虑多种因素后,设计想让小车在转向完成后停止1s左右在继续前进或者后退。小车左转45度再前进的流程图如下图4.6所示:图4.6小车左转45度再前进流程图4.3.3小车运动速度的控制设计(1)pwm速度控制原理脉宽调制(pwm)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽宽度调制式(pwm)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。简而言之,pwm是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。pwm信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(on),要么完全无(off)。电压或电流源是以一种通(on)或断(off)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用pwm进行编码。(2)pwm速度控制的优点模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。pwm的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。对噪声抵抗能力的增强是pwm相对于模拟控制的另外一个优点,而且这也是在某些时候将pwm用于通信的主要原因。从模拟信号转向pwm可以极大地延长通信距离。在接收端,通过适当的rc或lc网络可以滤除调制高频方波并将信号还原为模拟形式。总之,pwm既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。(3)小车速度控制的实现小车电机的正常工作电压是不能改变的,于是可以考虑利用pwm波来控制流入电机内部的电流。t/c0是8位的定时计数器,它有4种工作模式,分别是:普通模式,ctc(比较匹配时清除定时器)模式,快速pwm模式,相位修正pwm模式。针对本课题的实际情况,选择t/c0工作于相位修正pwm模式比较好。相位修正pwm模式(wgm01:0=1)为用户提供了一个获得高精度相位修正pwm波形的方法。此模式基于双斜线操作。计时器重复地从bottom计到max,然后又从max倒退回到bottom。在一般的比较输出模式下,当计时器往max计数时若发生了tcnt0于ocr0的匹配,oc0将清零为低电平;而在计时器往bottom计数时若发生了tcnt0于ocr0的匹配,oc0将置位为高电平。工作于反向输出比较时则正好相反。与单斜线操作相比,双斜线操作可获得的最大频率要小。但由于其对称的特性,十分适合于电机控制。相位修正pwm模式的pwm精度固定为8比特。计时器不断地累加直到max,然后开始减计数。在一个定时器时钟周期里tcnt0的值等于max。相位修正pwm模式的时序图如下图4.7所示:图4.7相位修正pwm模式的时序图图4.7中,tcnt0的数值用柱状图表示,以说明双斜线操作。该图同时说明了普通pwm的输出和反向pwm的输出。tcnt0斜线上的小横条表示ocr0和tcnt0的匹配。工作于相位修正模式时pwm频率可由下式公式获得:变量n表示预分频因子(1、8、32、64、128、256或1024)。t/c0的时钟问题:t/c0可以由内部同步时钟或外部异步时钟驱动,clkt0缺省设置为mcu时钟clki/o,当assr的as0置位时,时钟源取自连接于tosc1和tosc2的振荡器。t/c0控制寄存器(tccr0)如图4.8图4.8 t/c0控制寄存器(tccr0)foc0在非pwm模式才有效,在使用pwm时要将其清零。com01:0设置比较匹配输出模式,当t/c0工作于相位修正pwm模式,com01:0=0b10时,在升序计数时发生比较匹配将清零oc0;降序计数时发生比较匹配将置位oc0,此时的pwm波占空比(ocr0值)0xff。cs02:0用于选择t/c的时钟源,当cs02:0=0b000时,表示无时钟,t/c不工作;当cs02:0=0b010时,t/c的时钟源频率为clktos/8(来自预分频器)。t/c寄存器tcnt0如图4.9图4.9 t/c寄存器tcnt0通过t/c寄存器可以直接对计数器的8位数据进行读写访问。对tcnt0寄存器的写访问将在下一个时钟阻止比较匹配。在计数器运行的过程中修改tcnt0的数值有可能丢失一次tcnt0和ocr0的比较匹配。输出比较寄存器ocr0如图4.10图4.10 输出比较寄存器ocr0输出比较寄存器包含一个8位的数据,不间断地与计数器数值tcnt0进行比较。匹配事件可以用来产生输出比较中断,或者用来在oc0引脚上产生波形。异步状态寄存器assr如图4.11图4.11 异步状态寄存器assras0异步t/c0as0为“0”时t/c0由i/o时钟clki/o驱动;为“1”时由连接到tosc1引脚的晶体振荡器驱动。改变as0有可能破坏tcnt0、ocr0、tccr0的内容。pwm波形发生程序void pwm_test(unsigned char speedx) ddrb|=0xfc; /*b口的6,5,3,2位设置为输出,用于控制电机转向;4位和7位设置为输出,用于产生pwm波形*/tcnt0=0x00; /*设置计数初始值*/ ocr0=(unsigned char)speedx*255/5; /*根据速度设置占空比,设小车最大速度为5m/s*/ tccr0=0b01100010; /*启动计数器,设置为8分频*/ delay_nms(5000); /*延时5m*/ tccr0=0b01100000; /*关闭计数器,pwm波形停止产生*/4.3.4小车运动距离的控制与实现由于条件的限制,小车的运动距离控制只能由软件实现。可根据既定速度和距离,算出小车需要运动的时间,运动算定的时间后,令小车停止运动。 程序段如下:void distence_test(unsigned char speedx,unsigned char distencex) unsigned int t1; ddrb|=0xfc; /*b口的6,5,3,2位设置为输出,用于控制电机转向;4位和7位设置为输出,用于产生pwm波形*/ portb|=0x48,portb&=0xdb; /*使得pb6、pb3置位,pb5、pb2复位(左右轮均运动)*/ tcnt0=0x00; /*设置计数初始值*/ ocr0=(unsigned char)speedx*255/5; /*根据速度设置占空比,设小车最大速度为5m/s*/ tccr0=0b01100010; /*启动计数器,设置为8分频*/ t1=(unsigned int)1000*distencex/speedx; /*使得t1值强制为unsigned int */ delay_nms(t1); /*延时,让小车运动指定的距离*/ portb&=0x93; /*关闭电机驱动电平*/ tccr0=0b01100000; /*关闭计数器,pwm波形停止产生*/这样的距离控制不是很精确,因为小车的速度除了受电流占空比的影响外还受电机的端电压、运动的环境(比如地面起伏程度,地面光滑程度、风力大小等)等影响。要想做到更精确,可以考虑引进速度负反馈,或者是电压负反馈。4.4项目调试imagecraft的iccavr是一种使用符合ansi标准的c语言来开发mcu程序的一个工具。它有以下几个特点:1.iccavr是一个综合了编辑器和工程管理器的集成工作环境(ide)。2.源文件全部被组织到工程之中,文件的编辑和工程的构建也在这个环境中完成。3.工程管理器还能直接产生可以直接使用的intel hex格式文件。4.iccavr是一个32位的程序支持长文件名。项目调试除了需要iccavr外,还需要运用avr studio。在程序调试过程中,使用iccavr进行c语言程序的编译链接,生成可下载调试的文件。调试时先新建一个工程,然后在该工程中添加程序文件,再在project菜单的下拉菜单中点击options,在target标签中的device configuration中选择atmega128,接着进行程序的编译,检查程序中是否语言错误,编译通过后,在project菜单下拉菜单中点击make project,生成可下载文件。接着用avr studio将文件的下载到单片机。在下载文件时,先建立与单片机的连接,连接选择为jtag ice的atmegal128,用相应的串口。在文件下载时,载入片子的是hex格式的文档,而调试时用的是cof格式的文件。下载时注意atmega103的兼容模式的选择问题,防止因兼容的问题造成某些口的无法正常的工作。硬件电路中在连接控制板和驱动板时发现驱动板上少了由mos管和二极管构成的h桥结构,这就意味着该驱动板不支持pwm调速功能,与原先的驱动板原理图不符。这样原先设计的pwm调速程序无法进行调试,是本次设计的一大遗憾。由于驱动板上只有4根控制左右轮子正反向运行的控制线,连接在驱动板的前端i/o口上,所以只能进行运动方向控制调试,在基本确定硬件电路运转正常后进行驱动程序的调试。由于第一次编写基于atmega128单片机的c语言程序,语法上难免会很完善。遇到的第一个问题是i/o端口定义数据方向后置/复位问题。比如在设置d口的6、7位为输出后,执行如下语句:“portd|=0xc0;portd&=0x3f”,预想功能是让6、7口先置位再复位(d口的6、7位接有发光二极管,低电平有效),但是却没能按着预想情况实现,经测试,只执行了语句“portd|=0xc0”,虽然后来经过分析觉得语句“portd|=0xc0;portd&=0x3f”写法不妥,却让我们发现了一个问题:在给同一个端口的某些位赋值时,必须只用一句程序,中间不能用分号隔开,如欲让b口的3位复位,2口置位,程序应该如下:“portb|=0x04,portb&=0xf7;”,若写成“portb|=0x04;portb&=0xf7;”是会出错的。由于小车不能调速,距离控制的实现就比较困难了,一种想法是测出小车的最大速度或者平均速度,把小车的运动看做匀速运动,但是正如前文提到的,小车的运动速度受外界环境的干预极大,所以说距离控制功能做不到很完善。小车不能调速的另外一个弊端应当是转向问题了。设计程序时,是把小车的速度降低到一定值后再进行转向的,因为过大的转向速度要么使得小车翻倒,要么使其下盘不稳,造成转向偏移。在调试过程中驱动部分遇到的最大的问题时延时函数问题,延时函数达不到很好的准确度,这也是用c语言写延时函数存在的一大弊端。结 论课题时在对凌阳科技大学的声控小车研究的基础,对声控小车进行改造,加上无线数据传输和控制的控制板,实现数

温馨提示

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

评论

0/150

提交评论