范文一:毕业设计论文 红外避障小车
学校
毕业设计(论文) 题目:
姓名
学号
专业
年级
指导教师
完成时间
任 务 书
目的:
本毕业设计是红外蔽障小车的设计,通过设计使学生系统的熟 悉和掌握单片机控制系统设计方面的内容体系、开发流程和程序设 计, 培养学生具有综合运用所学的理论知识去开拓创新及解决实际问 题的能力。 培养学生掌握设计题的思想和方法, 树立严肃认真的工作 作风、培养学生调查研究、查阅技术文献、资料、手册以及编写技术 文献的能力。 同时是为了掌握电路设计的方法和技巧。 如何将学习到 的理论知识运用到实际当中去, 怎样能够活学活用, 深入的了解电子 元器件的使用方法, 了解各种元器件的基本用途和方法, 能够灵活敏 捷的判断电路中出现的故障, 学会独立设计电路, 积累更多的设计经 验 ,加强焊接能力和技巧,完成基本的要求。并能完美的完成这次 实训。
目录
一、 任务书 ...............................P1
二、 引言 ..............................P2
二、 要求与发挥 ...........................P4
三、 设计摘要 .............................P6
四、 模块方案比较 .......................P7
1. 避障模块
2. 驱动模块
3. 控制模块
五、 程序设计 .........................P9
1.程序流程图
2.程序编写
六、 工作原理 .........................P13
七、 结论 ............................P13
八、 参考文献 ........................P14
九、 毕业设计(论文)成绩评定表 .....P15
任务:
利用单片机、红外实现避障,要求具有下述功能:
1. 小车前进可以避开(前、左、右) 20cm 的障碍物;
2. 实现下车前进时,不碰障碍物;
3. 具有声音播报功能。
引言
随着微电子技术的不断发展, 微处理器芯片的集成程度越来越高, 单片机已可以在一块芯片上同时集成 CPU 、存储器、定时器、并行和 串行接口、看门狗、前臵放大器、 A/D转换器、 D/A转换器等多种电 路, 这就很容易将计算机技术与测量控制技术结合, 组成智能化测量 控制系统。 这种技术促使机器人技术也有了突飞猛进的发展, 目前人 们已经完全可以设计并制造出具有某些特殊功能的简易智能小车。 发挥:
1. 利用超声波测距
2. 红外寻迹可以控制小车行走的路迹
3. 红外发射接收器,用遥控来控制小车的行走方向
工作日程安排:
设计(论文)要求 :
要求提供以下设计资料,并装订成册:
1. 摘要 (所做的设计如有特别之处 ) ;
2. 单片机外部接线图,以及其它相关的电路图;
3. 单片机控制电路元件明细表;
4. 完整的程序资料,驱动电路的程序及注解;
5. 电气元件明细表;
6. 操作原理简要说明;
7. 在实验室进行模拟调试所需的补充资料;
8. 模拟调试的结果是否满足控制要求 (要有老师的鉴定结论和签名 ) 。
学生开始执行任务书日期 200 年 月 日 指导教师签名:
年 月 日 学生送交毕业设计(论文)日期: 200 年 月 日 教研室主任签名:
年 月 日 学生签名:
年 月 日
摘要
针对题目的要求, 我们设计了一款简易的红外避障小车。 该电路设计 分别以驱动模块,单片机控制显示模块组成。为了达到题目的要求, 我们以 ATMEGA16-L 为核心控制器件,以 LM298驱动电机控制系统和 红外监测系统设计而成。
关键词:ATMEGA16-L; 红外避障检测电路;驱动电路。
整体构思:
一 . 模块方案比较
1. 壁障模块
在壁障模块中,可以选择超声波壁障。其优点是反应速度灵敏, 距离远,受外界干扰小。但是,在本设计中,题目所要求是距离是 20cm , 如果利用超声波传感器进行壁障的话, 由于空间小声波在小空 间不同方向里会进行多次反射, 左右前后的传感器之间相互干扰, 使 控制中心不能明确判断出那个方位遇到了障碍物, 从而动作紊乱, 不 能实现要求。
使用红外接收头和发射管配合,利用 38k 频率解决灵敏度问题。 38K 调制和发射电路。使用一个定时器的快速 PWM 模式产生 38K 调制
信号, 通过剩余的四个施密特触发器 (有 2个已经用在光电编码部分) 缓冲,推动 8050三极管和红外发光管来发射已经调制的红外线。其 中 2个 1N4148接单片机 IO 脚, 控制左右红外发光管轮流发射。 后面 串接的可见光 LED 是为了方便用户调试而设臵的, 让用户知道当前是 否在发射红外线。通过调节 PWM 的占空比,调节红外发光管的亮度, 从而实现调节感知障碍物距离的功能。但是实际测试结果不尽人意。 灵敏度太高。加衰减电路比较麻烦,调试不易。且价格也贵。
利用红外传感器, 其优点是对近距离的障碍物反应速度灵敏, 不 同方位的传感器之间信号不会相互干扰, 造成误动作。 缺点是距离近, 易受到自然光的干扰。 经过两种传感器性能对比与题目要求的综合考 虑分析,最终选择红外传感器作为小车的眼睛,进行壁障。
LM567是一种廉价的音频锁相环集成电路,利用它可以构造性能较好 的反射式光电传感器。
如下页图所示, 由 LM567的内部振荡器提供方波信号, 点亮探头 的 LED ,由探头的光敏管接收反射光。经三极管放大,转换成电压信 号后送到 LM567的内部鉴相器 2(输出鉴相器) 同步解调, 然后由 LM567内部的比较器转换为数字输出。
并联负反馈放大电路有着稳定的增益和低的输入阻抗, 能消除光 敏管结电容的影响,获得良好的高频特性。
100R 电位器 用于调节放大器增益以调节灵敏度。
这个电路的缺点是当多个探头同时使用时因为频率接近,一旦 相邻单元的光斑出现部分重合就会有差拍干扰造成输出抖动。另外,
567输出鉴相器的参考信号是从振荡电容端引出的,与发射和接收信 号几乎是正交的,解调效率非常低,前级需要高倍放大。
意探头的连线要短, 如果连线较长要分别屏蔽, 最好把电路板跟探头 做在一起。否则发射管连线上大幅度的脉冲信号会感应耦合到接收 端, 导致在没有接收光的情况下也误认为收到了光信号, 这种同频干 扰无法用电路板上的设计来消除
电路图如下图:
但为了使用方便,改用成品。
(成品如下图)
2. 驱动模块
在电机驱动模块中, 由于电机的功率不大, 我们可以选择使
用电桥驱动,电路图如下:
其优点是电路简单,成本高。但是由于缺少保护电路,只要控 制出现错误,就很容易烧坏晶体管, 晶体管的价格也不菲,便宜货又 电流太小,不足以承受小车的功率,使整个电路瘫痪。
然而,使用集成电路 LM298,由于集成程度高,内包含稳定的 数字电路, 就算在编写程序的时候错误或者其他原因使控制端口同时 输出通过一种电平,不容易烧坏芯片,使整个电路瘫痪。 同时芯片还 有使能端, 容易控制, 且稳定。 特有的 PWN 调制功能端, 使电机更容 易控制。 也使得程序在减速的过程特别是保持左右电机速度平衡的程 序编写上变得更加简洁容易。
15脚 Multiwatt 封装的 L298N ,内部同样 4通道逻辑驱动电路。 可以方便的驱动两个直流电机,或一个两相步进电机。
L298N
可接受标准 TTL 逻辑电平信号 VSS , VSS 可接 4. 5~7 V电压。 4脚 VS 接电源电压, VS 电压范围 VIH 为+2. 5~46 V。输出 电流可达 2. 5 A,可驱动电感性负载。 1脚和 15脚下管的发射极分别 单独引出以便接入电流采样电阻,形成电流传感信号。 L298可驱动 2个电动机, OUT1, OUT2和 OUT3, OUT4之间可分别接电动机,本实验 装臵我们选用驱动一台电动机。 5, 7, 10, 12脚接输入控制电平,控 制电机的正反转。 EnA , EnB 接控制使能端,控制电机的停转。
经过综合分析考虑, 最终决定使用 LM298作为本设计的驱动
芯片。其电路连接图如下:
3. 控制模块
我们经常使用的单片机要 AT89S51,ATMEGA16-1, 凌阳单片机等。 在我们的应用中,用到最多的就是 AT89S51和 ATMEGA16-1。 AT89S51比较通用, 能使用 C 语言进行程序的编写, 方便阅读。但是,其集成 程度低, 功能单一,需要使用到其它功能时,只能通过扩展外电路来 实现,使得整个电路复杂,成本高,稳定性低。同时, I/O口输出功 率小,一般器件都需要加驱动才能够正常使用。
而 ATMEGA16-L 集成程度高, 内集成了 A/D等其它功能模块, 在 进行电路设计时,可以大大节省了成本,提高了整体电路稳定性。同 时输出功率大,一般器件无需驱动电路,就可以直接使用。
ATmega16是基于增强的 AVR RISC结构的低功耗 8 位 CMOS 微控 制器。 由于其先进的指令集以及单时钟周期指令执行时间, ATmega16
的数据吞吐率高达 1 MIPS/MHz,从而可以缓减系统在功耗和处理速 度之间的矛盾。
ATmega16 AVR 内核具有丰富的指令集和 32 个通用工作寄存器。 所有的寄存器都直接与算逻单元 (ALU) 相连接, 使得一条指令可以在 一个时钟周期内同时访问两个独立的寄存器。 这种结构大大提高了代 码效率,并且具有比普通的 CISC 微控制器最高至 10 倍的数据吞吐 率。
因此选用高性能的 ATmega16 AVR单片机进行设计,以下是控制 板的电路。
其电路连接图如下:
此图为 AVR ATmega16L的原理图。
二 . 程序设计 1. 程序流程图
上电运行后, 放到没有障碍物的空地上, 小车直走。当前方没有障 碍物的的时候车就一直直走。 如果前方遇到障碍物, 则小车做左转运 动。直至前方没有障碍物,这时小车恢复直走。
如果前方有障碍物的时候,左边同时也有障碍物,则小车右转。 直至左边没有障碍物或者前方没有障碍物。 这时小车恢复左转, 或者 直走。如果前面没有障碍物,则先执行直走。
如果前方,左方,右方均有障碍物,则小车后退,直至前方,左 方,右方任一方向没有障碍, 则此时小车开始以前方,左方,右方的 优先级开始执行转向。 也就是说如果前方没有障碍物, 即使其他任意
方向都有障碍则小车依然直走,如果前方有障碍,左边没有则右转, 前方左方都有障碍,则小车右转。否则小车后退。
2. 程序编写
//======================================
/*硬件分布
PC0 前进 | PD0 检测前
PC1 左转 | PD1 检测左
PC2 右转 | PD2 检测右
PC3 退后 |
PB3 PWN左右平衡校准输出
*/
//======================================
#include #include #include #define uchar unsigned char #define OC0_OUT_EN DDRB |= 0b00001000 int w; int num; /* 要显示的数字 */ /*--------------------------------------------------------------------*/ void timer0_init(void) { TCCR0 = (1<><><><><> TCNT0 = 0x00; //设臵 TC0计数寄存器初值 OCR0 = 0x08; //输出比较寄存器初值,设臵该值可 用于调节占空比 } /*--------------------------------------------------------------------*/ /*=================================*/ uchar key_p(void) { uchar keyval; keyval = PIND; //定义输入口 keyval = (~keyval)&0xff; //keyval = keyval >>3; // switch(keyval) { case 0: return 0; case 1: return 1; case 2: return 2; case 3: return 3; case 7: return 7; default:return 0; } return 0; } //========================================= void zw(void) { while(1) { num = key_p(); //返回 key_p 的值给 num 。 //PORTC=0xff; if(num==0){PORTC=9;}//前方无障碍 直走 else{ if(num==1){PORTC=5;}//前方有障碍 左转 else{ if(num==3){PORTC=10;}//前方和左边有障碍 右转 else{ if(num==7){PORTC=6;}//前方和左边 , 右 边都有障碍 后退 } //delay_ms(1); } } } } //========================================= int main(void) { DDRC = 0xff; DDRD = 0; // 输入方式为 D 口输入。 PORTD=0XFF; OC0_OUT_EN; //为允许 PWM 工作, 需设臵 PB3为 输出 timer0_init(); SEI(); zw(); return 0; } 三 . 工作原理 当检测到障碍物时, 红外光敏二极管接收到反射回来红外光, 其 输出立即发生高低点平转换, 该信号经放大器放大后送到单片机进行 分析处理。然后将处理后的结果发送到电机驱动模块,进行校正。控 制其向右转,向左转和后退。 避障与寻迹的设计原理是相同的, 区别 在于传感器的灵敏度不同, 蔽障的灵敏度要比寻迹的灵敏度高, 只要 小车前方有障碍物, 红外线通过障碍物反射到光敏管, 传感器输出低 点平, 发送到单片机进行处理, 然后单片机处理后驱动 lm298去控制 小车运行和方向。 四 结论 1. 本设计制作完成了题目要求的基本部分, 达到了预期的目标。 我们 通过各种方案的讨论及尝试,再经过多次的整体软硬件结合的调试, 不断地对系统进行优化,小车完成了各项功能。 参考文献 《单片机应用技术》 《单片机原理与应用》 《 8051单片机程序设计与实例》 《 MCS-51单片机实验指导》 《单片机 c 语言指导》 毕业设计(论文)成绩评定表 摘 要 本文论述了基于单片机的智能循迹小车的控制过程。智能循迹是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹小车是一个运用传感器、单片机、电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能够自动实现循迹导航的高新科技。该技术已经应用于无人驾驶机动车,无人工厂,仓库,服务机器人等多种领域。 本设计采用STC89C52单片机作为小车的控制核心;采用TCRT5000红外反射式开关传感器作为小车的循迹模块来识别白色路面中央的黑色引导线,采集信号并将信号转换为能被单片机识别的数字信号;采用驱动芯片L298N构成双H桥控制直流电机,其中软件系统采用C程序,本设计的电路结构简单,容易实现,可靠性高。 关键词:单片机;自动循迹;驱动电路 Abstract This paper discusses the intelligent tracing electric trolley control process. Automatic tracing is used to make the car indentify route automatically , and choosing the right route, based on the automatic guide robot system. Intelligent tracing electric trolley is an advanced technology to realize automatic tracing navigation. It is out of human management but under the designed mode that use of the use of a transducer, single chip, motor drive and automatic control .This technology has been applied in unmanned vehicle, unmanned factory, warehouse, service robot and many other fields. During the design of Intelligent tracing electric trolley, STC89C52 single clip is used as the control core; at the same time with TCRT5000 reflective infrared transducer switch to identify the black guide line at the central of the white road, which used as the car tracing module, it can gather the signal and transfer it into digital signal that can be recognized by single chip. And the driving chip L298N constitute the double H bridge constitute of driving chip L298N can control direct current motor. Among which the software system is using C program. In a nutshell, the design of the circuit has the advantages of simple structure, easy implementation, and high reliability. Key words:single chip microcomputer; automatic tracing; driving circuit II 目 录 1 绪 论 .................................................................................................................................... 1 1.1 智能循迹小车概述 ................................................................................................... 1 1.1.1 循迹小车的发展历程回顾 ............................................................................ 1 1.1.2 智能循迹分类 ................................................................................................ 2 1.1.3 智能循迹小车的应用 .................................................................................... 3 1.2 智能循迹小车研究中的关键技术 ........................................................................... 4 2 智能循迹小车总体设计方案 .............................................................................................. 5 2.1 整体设计方案 ........................................................................................................... 5 2.1.1 系统设计步骤 ................................................................................................ 5 2.1.2 系统基本组成 ................................................................................................ 5 2.2 整体控制方案确定 ................................................................................................... 6 3 系统的硬件设计 .................................................................................................................. 8 3.1 单片机电路的设计 ................................................................................................... 8 3.1.1 单片机的功能特性描述 ................................................................................ 8 3.1.2 晶振电路 ........................................................................................................ 9 3.1.3 复位电路 ........................................................................................................ 9 3.2 光电传感器模块 ..................................................................................................... 10 3.2.1 传感器分布 .................................................................................................... 11 3.3 电机驱动电路 ......................................................................................................... 12 3.3.1 L298N引脚结构 .......................................................................................... 13 3.3.2 电机驱动原理 .............................................................................................. 13 3.3.3 小车运动逻辑 .............................................................................................. 15 4 系统的软件设计 ................................................................................................................ 16 4.1 软件设计的流程 ..................................................................................................... 16 4.2 本系统的编译器 ..................................................................................................... 17 5 系统的总体调试 ................................................................................................................ 22 5.1 硬件的测试 ............................................................................................................. 22 5.2 系统的软件调试 ..................................................................................................... 22 结 论 ...................................................................................................................................... 24 致 谢 ...................................................................................................................................... 25 参考文献 .................................................................................................................................. 26 附录A 原理图及PCB图 ..................................................................................................... 27 附录B 程序代码 .................................................................................................................. 32 附录C 硬件实物图 .............................................................................................................. 37 IV 1 2 1 绪 论 进入二十一世纪,随着计算机技术和科学技术的不断进步,机器人技术较以往已经有了突飞猛进的提高,智能循迹小车即带有视觉和触觉的小车就是其中的典型代表。 1.1 智能循迹小车概述 智能循迹小车又被称为Automated Guided Vehicle,简称AGV,是二十世纪五十年代研发出来的新型智能搬运机器人。智能循迹小车是指装备如电磁,光学或其他自动导引装置,可以沿设定的引导路径行驶,安全的运输车。工业应用中采用充电蓄电池为主要的动力来源,可通过电脑程序来控制其选择运动轨迹以及其它动作,也可把电磁轨道黏贴在地板上来确定其行进路线,无人搬运车通过电磁轨道所带来的讯息进行移动与动作,无需驾驶员操作,将货物或物料自动从起始点运送到目的地。 AGV的另一个特点是高度自动化和高智能化,可以根据仓储货位要求、生产工艺流程等改变而灵活改变行驶路径,而且改变运行路径的费用与传统的输送带和传送线相比非常低廉。AGV小车一般配有装卸机构,可与其它物流设备自动接口,实现货物装卸与搬运的全自动化过程。此外,AGV小车依靠蓄电池提供动力,还有清洁生产、运行过程中无噪音、无污染的特点,可用在工作环境清洁的地方。 1.1.1 循迹小车的发展历程回顾 随着社会的不断发展,科学技术水平的不断提高,人们希望创造出一种来代替人来做一些非常危险,或者要求精度很高等其他事情的工具,于是就诞生了机器人这门学科。世界上诞生第一台机器人诞生于1959年,至今已有50多年的历史,机器人技术也取得了飞速的发展和进步,现已发展成一门包含:机械、电子、计算机、自动控制、信号处理,传感器等多学科为一体的性尖端技术。循迹小车共历了三代技术创新变革: 第一代循迹小车是可编程的示教再现型,不装载任何传感器,只是采用简单的开关控制,通过编程来设置循迹小车的路径与运动参数,在工作过程中,不能根据环境的变化而改变自身的运动轨迹。 支持离线编程的第二代循迹小车具有一定感知和适应环境的能力,这类循迹小车装有简单的传感器,可以感觉到自身的的运动位置,速度等其他物理量,电路是一个闭环反馈的控制系统,能适应一定的外部环境变化。 第三代循迹小车是智能的,目前在研究和发展阶段,以多种外部传感器构成感官系 1 统,通过采集外部的环境信息,精确地描述外部环境的变化。智能循迹小车,能独立完成任务,有其自身的知识基础,多信息处理系统,在结构化或半结构化的工作环境中,根据环境变化作出决策,有一定的适应能力,自我学习能力和自我组织的能力。为了让循迹小车能独立工作,一方面应具有较高的智慧和更广泛的应用,研究各种新机传感器,另一方面,也掌握多个多类传感器信息融合的技术,这样循迹小车可以更准确,更全面的获得所处环境的信息[1]。 1.1.2 智能循迹分类 AGV从发明至今已经有50多年的历史,随着应用领域范围的不断扩大,其种类和形式也变得更加多样化。一般根据行驶的导航方式将智能循迹小车分为以下几种类型: (1)电磁感应式 电磁感应式引导一般在地面上,沿预定路径埋电线,当高频电流通过导线,电线周围产生电磁场流动, AGV小车上安装两个对称的电磁感应传感器,他们收到的电磁信号差异可以反映的AGV偏离程度路径的程度。 AGV自动化控制系统,基于这种偏差值,以控制车辆的转向,连续的动态的闭环控制设置能够保证AGV对设定路径的稳定自动跟踪。在目前商业用途的AGV中,特别是大型和中型小车,绝大多数都采用电磁感应导航。 (2)激光式 安装有可旋转的激光扫描器的AGV,可安装在墙壁或有高反射激光定位标志的支柱上或者路径上运行,AGV依靠激光扫描器发射激光束,然后接收由四周定位标志反射回的激光束,车载计算机,计算出当前车辆的位置和运动方向,通过内置的数字地图和校准位置相比,以实现自动处理。目前,这种AGV类型的应用比较广泛。基于同样的原理,如果激光扫描仪被红外线发射器,或超声波发射取代,激光制导的AGV小车可以转变为红外引导和超声引导的AGV。 (3)视觉式 视觉引导式AGV是的迅速发展和比较成熟的AGV,这种AGV配备CCD摄像机,传感器和车载电脑,在车载计算机中设置有AGV欲行驶路径周围环境图像数库。在AGV的行驶过程中,相机得到的图像与图像数据库进行比较,以确定当前位置和车辆周围的图像信息并对驾驶下一步作出决定。这种AGV小车并不需要设置任何的人工物理路径,所以在理论上具有灵活性,在计算机图像采集,存储和处理技术飞速发展的今 2 天,这种类型的AGV实用性越来越强。此外,还有铁磁陀螺惯性引导式AGV、光学引导式AGV等多种形式的AGV[2]。 1.1.3 智能循迹小车的应用 智能循迹小车发展历史及主要应用场所如下: (1)仓储业 1954年,来自美国南卡罗来纳州的Mercury Motor Freight公司成为第一批把AGV小车的应用到仓库的使用者,来实现出入库货物的自动处理。至今世界上有超过2100个厂家把大约2万台大型或小型的AGV小车应用到自己的仓库中。中国的海尔集团在2000年把9台AGV小车投产到了自己的仓库区,形成一个灵活的AGV自动数据库处理系统,轻松地完成了每天至少33500的储存和装卸货物的任务。 (2)制造业 在制造业的的生产线中AGV小车大显身手,快速,精确,灵活的完成材料的运送任务。由多台AGV小车组成的物流运输处理系统,较人工搬运系统来说更灵活,运输路线可以根据生产过程及时调整,使一条生产线,生产十几个产品,大大提高了生产的灵活性,企业的竞争力。在1974年瑞典的沃尔沃卡尔马的汽车组装厂,提高了运输系统的灵活性,使用以AGV小车为载运工具的装配线,采用该装配线后,减少了20%装配时间、减少了39%组装错误,减少了57%投资资金回收时间以及减少了5%的员工费用。目前,在世界主要的汽车生产厂家,如通用、丰田、克莱斯勒、大众AGV小车已被广泛应用。近年来,作为CIMS(Computer Integrated Manufacturing Systems,直译为基于计算机的现代集成制造系统)的基础搬运工具,AGV已经深入到机械加工,家电制造,微电子制造,烟草等行业,生产业和加工业已成为AGV小车使用最广泛的领域。 (3)邮局、图书馆、港口码头和机场 在邮局,图书馆,码头和机场候机楼等人口密集的公众场所,存在着大量的物品的运送工作,充满不定性和动态性强的特点,搬运过程往往也很单一。AGV有着可并行工作、自动化、智能化和处理灵活的特点,可以很好的满足这些场合的运输要求。1983年瑞典的大斯得哥尔摩邮局,1988年日本东京的多摩邮局,1990年中国上海的邮政相继开始使用AGV小车来完成邮品的搬运工作。在荷兰的鹿特丹港口,50辆被称为“院子里的拖拉机”的AGV小车每天都在把集装箱从船边运送到几百米以外的仓库中。 (4)烟草、医药、化工、食品 对于处理一些需要在清洁、安全、无排放污染等其他特殊环境要求的产品生产如 3 烟草、制药、食品、化工等产品时应考虑AGV小车的应用。在全国许多卷烟企业,如青岛颐中集团、玉溪红塔集团、红河卷烟厂、淮阴卷烟厂,应用激光引导式AGV完成托盘货物的搬运工作。 (5)危险场所和特种行业 在军事方面,以AGV小车为基础有着自动驾驶和检测功能的设备,可用于战场侦察和扫雷,英国军方正在开发MINDER侦察系统,这是一种具有地雷探测、销毁和路线验证能力自动型侦察车。在钢铁厂,AGV小车负责炉料运输,大大降低了工人们的劳动强度。在核电厂的核储存地点使用AGV小车,以避免辐射的危险。AGV小车可在黑暗环境中,准确、可靠的运输物料[3]。 1.2 智能循迹小车研究中的关键技术 现在全世界越来越多的国家都在做着研究智能化、多样化的自动汽车导航的工作。自动汽车导航是一个非常复杂的系统,它不仅应具有正常的运动功能的成分,而且还应具有任务分析,路径规划,信息感知,自主决策等类似人类的智能行为。 人类可以利用自己的听觉、视觉、味觉、触觉等功能获取事物的信息,人类的大脑再根据已经掌握的知识对这些信息进行综合分析,从而全面了解认知事物。这样一个认识事物、分析事物和处理信息的过程称之为信息融合过程。多传感器信息融合的基本原理就是模仿人类大脑的这个过程,得到一个对复杂对象的一致性解释或结论。多传感器信息融合是协调多个分布在不同地点,相同或不同种类的传感器所提供的局部不完整观测量信息加以综合,协调使用,消除可能存在的冗余和矛盾,并加以互补,以减少不确定性,得到对物体或环境的一致性描述的过程[4]。 多传感器信息融合具有许多性能上的优点:(1)增加了系统的生存能力;(2)减少了信息的模糊性;(3)扩展了采集数据覆盖范围;(4)增加了可信度;(5)改善了探测性能; (6)提高了空间的分辨力;(7)改善了系统的可靠性(8)信息的低成本性[5]。 本文主要由五章组成,第1章为绪论,主要讲述循迹小车的发展历程及在目前所应用领域中的作用。第2章为总体规划智能循迹小车系统的设计,包含主系统流程图。第3章是系统的硬件设计,其中包含单片机电路的设计,光电传感器模块和电机驱动电路。 第4章为系统的软件设计,主要介绍的是软件实现过程的框图。第5章是对硬件和软件的调试,最终保证了系统的正常运行。 4 2 智能循迹小车总体设计方案 2.1 整体设计方案 本系统采用简单明了的设计方案。通过高发射功率红外光电二极管和高灵敏度光电晶体管组成的传感器循迹模块判断黑线路经,然后由STC89C52通过IO口控制L298N驱动模块改变两个直流电机的工作状态,最后实现小车循迹。 2.1.1 系统设计步骤 (1)根据设计要求,确定控制方案。 (2)利用Protel 99se设计合理的硬件原理图。 (3)画出程序流程图,使用C语言进行编程,运用WAVE 6000进行模拟调试。 (4)将各元件焊接在PCB板上,并将程序烧录到单片机内。 (5)进行调试以实现控制功能。 2.1.2 系统基本组成 智能循迹小车主要由STC89C52单片机电路、TCRT5000循迹模块、L298N驱动模块、直流电机、小车底板、电源模块等组成。 图2.1智能循迹小车控制系统结构框图 (1)单片机电路:采用STC89C52芯片作为控制单元。STC89C52单片机具有低成本、高性能、抗干扰能力强、超低功耗、低电磁干扰,并且与传统的8051单片机程序兼容,无需改变硬件,支持在系统编程技术。使用ISP可不用编程器直接在PCB板上烧录程序,修改、调速都很方便。 (2)TCRT5000循迹模块:采用脉冲调制反射式红外发射接收器作为循迹传感器,调 5 制信号带有交流分量,可减少外界的大量干扰。信号采集部分就相当于智能循迹小车的眼睛,由它完成黑线识别并生产高、低平信号传送到控制单元,然后单片机生成指令来控制驱动模块来控制两个直流电机的工作状态,来完成自动循迹。JY043W型光电管和电压比较器LM393为核心部分,再加上必要的外围电路。 (3)L298N驱动模块:采用L298N作为电机驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片 L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便,稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。 (4)直流电机:采用双直流电动机。直流电动机的控制方法比异步电动机简单,只需给电机两条控制线加上适当的电压就能使电机旋转,在正常工作电压范围,电压越高直流电机转速越高。直流电动机调速方法分为两种:一种是直接调整电压,另一种通过PWM调速。PWM调速就是使加在直流电机两端的电压波形为矩形波,改变矩形波的占空比就能实现电压的改变,从而实现电机转速的改变。 (5)电源模块:由三个串联1.5V干电池作为电源。通过7805稳压芯片稳压,通过0.1uF和470μF电容进行滤波。 2.2 整体控制方案确定 图2.2为循迹小车的系统控制框图。引导线是小车跟踪的目标,检测系统检测车的相对路径,然后将此信息输入到单片机,单片机处理此信息后,将控制命令输出到驱动模块,以控制小车的直流电机,保证小车快速平稳地沿预先设定好的路线行驶。 图2.2智能循迹小车系统控制框图 采用3个1.5V的可充电池组作为主电源。STC89C52单片机作为主控制器。因为小车电机内部装有减速齿轮组,所以不需考虑调速功能,采用电机驱动芯片L298N控 6 制直流电机,而不使用步进电机。L298N是利用TTL电平进行控制,通过改变芯片控制端的输入电平,即可以对电机进行正转、反转和停止操作,亦能满足直流减速电机的要求,用该芯片作为电机驱动具有的操作方便、稳定性好等优点。用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。这样单片机和循迹传感器组成了一个带有反馈信号的系统。 7 3 系统的硬件设计 3.1 单片机电路的设计 一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路;二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、A/D、D/A转换器等。 3.1.1 单片机的功能特性描述 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜。单片机内部也有和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件。 单片机是一种集成电路芯片,采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 本课题选择了STC公司的生产的STC89C52单片机。STC89C52是一种低功耗、高性能CMOS8位微控制器,是带8K字节闪烁可编程可檫除只读存储器。一个芯片上拥有8位CPU,并且在系统可编程Flash。STC89C52提供给为众多嵌入式控制应用系统高灵活、超有效的解决方案。 STC89C52具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KB EEPROM,两个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。此外,空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 表3.1 STC89C52单片机和AT89S52单片机的对比 序存储空间 数据存储空间 EEPROM存储空间 是否可以直接使用串口下载 STC89C52单片机 AT89S52单片机 8K字节 512字节 内带4K字节 可以 8K字节 256字节 无 不可以 8 3.1.2 晶振电路 在STC89S52单片机上内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。在1和XTAL2引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。从XTAL1接入,如图3.2所示。由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有要求。 本设计选用的是12MHZ无源晶振、2个22pF电容,使得一个机器周期是1μs。晶振的作用是为系统提供基本的时钟信号,而两个电容则是起到并联谐振的作用,如果没电容,振荡电路会因为没有回路而停振,电路不能正常工作。 图3.2 单片机晶振电路图 3.1.3 复位电路 复位电路的作用是在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。施密特触发电路是一种波形整形电路,当任何波形的信号进入电路时,输出在正、负饱和之间跳动,产生方波或脉波输出。不同于比较器,施密特触发电路有两个临界电压且形成一个滞后区,可以防止在滞后范围内之噪声干扰电路的正常工作。如遥控接收线路,传感器输入电路都会用到它整形。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。 本设计采用的电容值为10μF的电容和电阻采用1.5KΩ和200Ω的电阻。如图 3.3 9 所示上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作[6] [7]。 图3.3 单片机复位电路图 3.2 光电传感器模块 循迹光电传感器原理,就是利用黑线对红外线不同的反射能力通过光敏二极管或光敏三极管,接收反射回的不同光强信号,把不同光强转换为电流信号,最后通过电阻,转换为单片机可识别的高低电平。光电传感器实现循迹的基本电路如3.4所示。 图3.4 循迹传感器电路图 循迹传感器工作原理:TC端是传感器工作控制端,为高电平时,发光二极管不工作,传感器休眠,为低电平时,传感器启动。Signal 端为检测信号输出,当遇到黑线, 10 黑线吸收大量的红外线,反射的红外线很弱,光敏三极管不导通,Signal输出高电平;当遇到白线,与黑线相反,反射的红外线很强,使光敏三极管导通,Signal输出低电平。 这种探测方法,即利用红外线在不同颜色的表面特征,具有不同的反射性能,汽车行驶过程中接收地面的红外光。当红外光遇到白色路线,地板发生漫反射,安装在小型车的反射光接收器接收;如果是遇到黑色路线,红外光将被黑线吸收,安装在小车上的接收管没有收到红外光。控制器会根据是否收到反射的红外光为判断依据来确定的黑线的位置和小车的路线。红外探测器距离通常是不应超过15厘米的。红外发射和接收红外线感应器,可以使自己或直接使用集成红外探头。调整左右传感器之间的距离,两探头距离约等于黑线宽度最合适,选择宽度为3 – 5厘米的黑线。该传感器的灵敏度是可调的,传感器有时遇到黑线却不能送出相应的信号,通过调节传感器上的可调电阻,适当的增大或减小可改变灵敏度。另外,循迹传感器的放置也是有讲究的,有两种方法,一种是两个都是放置在黑线内侧紧贴黑线边缘,第二种是都放置在黑线的外侧,同样紧贴黑线边缘。本设计采用第二种方法。 单片机烧录程序后,就可以执行循迹指令了。如果小车向前行驶时向左偏离了黑线,那么右边传感器会产生一个高电平,单片机判断这个信号,然后向右拐回到黑线。两传感器输出信号为低电平时,小车前进。如果小车向右偏离黑线,左边传感器产生一个高电平,单片机判断这个信号,然后向左拐。这样,小车一定不会偏离黑线。若两个光电传感器同时输出的信号为高电平,即单片机判断的都为高电平时,小车向前直走。 3.2.1 传感器分布 传感器通过信号采集,向单片机提供信息。因此传感器合理的布局很重要,传感器布局需要考虑小车行驶过程中信息检测的准确度和前瞻性,能使在相同数量的传感器下,获得更多的数据。传感器的布局一般有以下三种:一字型布局,M型布局和活动型布局。 一字型布局即所有传感器在同一直线上。一字型布局分为等距排布型和非等距排布型。等距排布型不利于采集准确的弯道信息。考虑到弧度信息采集的连贯性,非等距排布采用等角原则,即在垂直平分线上方处某点,以等角的引射线与直线的交点就是传感器的分布点,此种方法检测连贯简单,更容易控制小车。 M型布局即传感器的布局成M型,M型布局最适合检测多弯道的轨迹。由于传感器不在同一直线上,故小车转弯时,左右两边后部的传感器有较大的采样空间,两边前端的传感器则对采集的信号有更好的前瞻性,M型中间底部的传感器择更好的确定小 11 车的位置。整个布局有利于在弯道处提高小车速度。但相对一字型布局,M型布局容易产生不稳定信号,从而产生信号震荡,影响小车行驶的稳定性。 活动型布局采用矩阵模式,将传感器排布成矩阵形状,通过对不同位置传感器采集到信息的选择来适应各种不同的跑道。这样对不同路况有更强的适应性。 此种方案可调性大,但此种方法需要较多传感器,冗余较大,比较笨重,增加小车的重量,不利于小车的加减速。 最终决定采用M型布局方法来对4个传感器进行布局,这种布局方法的前瞻性最好。 3.3 电机驱动电路 本设计采用L298N电机专用驱动芯片带动两个12V的直流电动机。 直流电机由定子和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器等组成。 其中L298N是ST公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部包含4通道逻辑驱动电路。可以驱动两个直流电机或驱动两个二相电机,也可单独驱动一个四相电机,输出电压最高可达50V。直接通过电源来调节输出电压,直接通过单片机的IO端口提供信号,使得电路简单,使用更方便。L298N可接受标准的TTL逻辑电平信号VSS,VSS通常接4.5~7V的电压。4脚VS接电压源,VS可接电压范围VIH为2.5~46V。L298N芯片输出电流可达2.5 A,可驱动电感负载。 L298N是一个内部有两个H桥的高电压大电流全桥式驱动芯片,可以用来驱动直流电动机、步进电动机。使用标准逻辑电平信号控制,直接连接单片机管脚,具有两个使能控制端,使能端在不受输入信号影响的情况下不允许器件工作。L298N有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作。 12 3.3.1 L298N引脚结构 图3.5 L298N 驱动芯片 表3.3 L298N引脚编号与功能 引脚编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 名称 电流传感器A 输出引脚1 输出引脚2 电机电源端 输入引脚1 使能端A 输入引脚2 逻辑地 逻辑电源端 输入引脚3 使能端B 输入引脚4 输出引脚3 输出引脚4 电流传感器B 功能 在该引脚和地之间接小阻值电阻可用来检测电流 内置驱动器A的输出端1,接至电机A 内置驱动器A的输出端2,接至电机A 电机供电输入端,电压可达46V 内置驱动器A的逻辑控制输入端1 内置驱动器A的使能端 内置驱动器A的逻辑控制输入端2 逻辑地 逻辑控制电路的电源输入端为5V 内置驱动器B的逻辑控制输入端1 内置驱动器B的使能端 内置驱动器B的逻辑控制输入端2 内置驱动器B的输出端1,接至电机B 内置驱动器B的输出端2,接至电机B 在该引脚和地之间接小阻值电阻可用来检测电流 3.3.2 电机驱动原理 电路的形状很像字母H。四个三极管就是H桥的四条垂直线,而电机就是H中的横线。 图3.6 L298N内部H桥驱动电路 13 图3.6为一个典型的直流电机的控制电路。被命名为“H桥驱动电路”主要是因为电路的形状很像字母H。四个三极管就是H桥的四条垂直线,而电机就是H中的横线。 如图所示,H桥电机驱动电路包含四个三极管和一个电机。电机运转,必须遵循导通对角线上的一对三极管。基于不同三极管对的导通情况可以控制电机的转向,电流可可以从左至右流过电机,也可以从右至左流过电机。 如图3.6所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右流过电机,然后再经Q4回到电源负极,该流向的电流将驱动电机顺时针转动。 下面分析另一对三极管Q2和Q3,当两个三极管同时导通的情况下,电流将从右至左流过电机。从而驱动电机沿逆时针方向转动。 驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值,该电流仅受电源性能限制,可能烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。 图3.7 所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了四个二极管来保护电路。四个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。 采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。如果DIR-L信号为“0”,DIR-R信号为“1”,并且使能信号是“1”,那么三极管Q1和Q4导通,电流从左至右流经电机;如果DIR-L信号变为:“1”,而DIR-R信号变为“0”,那么Q2和Q3将导通,电流则反向流过电机。 图3.7 L298N驱动芯片和直流电机接线图 14 3.3.3 小车运动逻辑 表3.4 小车运动逻辑 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 0 正转 正转 正转 反转 反转 停止 正转 反转 停止 正转 反转 正转 前行 右转 以右电机为中心原地右转 左转 后退 以左电机为中心原地左转 电机控制逻辑如下:以电机A为例,当使能端EN A为高电平时,如果输入引脚IN1为低电平而输入引脚IN2为高电平,电机A反转;如果输入引脚IN1为高电平而输入引脚IN2为低电平,电机A正转。 15 4 系统的软件设计 4.1 软件设计的流程 目前,52系列单片机使用的编程语言主要有汇编语言和C语言这两种。 最接近机器的语言是汇编语言,其常用来编制与系统硬件相关的程序,如访问I/O口、中断处理程序等,它是一种最快而又最有效的语言,在对于程序的空间和时间要求很高的场合中 使用汇编语言是最佳的选择,然而汇编语言也有其自身的缺点,比如程序开发周期较长、浮点运算处理复杂、程序移植性差等不利因素。 在程序设计过程中C语言编程设计思想被称为模块化程序设计思想。有的时候为了有效地完成任务,把所要完成的任务分割成若干个相互独立但相互又仍然有所联系的模块,这些模块使得任务变得相对简单,对外的数据交换相对简单、容易编写、容易检测,容易阅读和维护。 本设计采用C语言来编译程序。模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。因此,软件的设计上,运用了模块化程序的结构对软件进行设计,使得程序变得更加直观易懂。程序的主要模块有:主程序、定时溢出中断服务程序、外部中断服务程序。 随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。掌握这一软件的使用对于使用51系列单片机的学者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会事半功倍。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势[8]。 16 4.2 本系统的编译器 Keil编译器软件 Keil C51单片机软件开发系统可用于编辑C或汇编源文件。然后分别由C51编译器编译生成目标文件(.OBJ)。目标文件与库文件一起经LIB51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。 打开Keil软件后,出现如图4.1所示界面。 图4.1 Keil 软件主界面 点击Project--New Project。可以新建一个工程,如图4.2所示。 图4.2 Keil软件新建工程界面 17 点击会出现的对话框中选择工程存在路径(如图4.3所示),单击“保存”后,出现界面。在此界面上选择电路板上所用的单片机型号(如图4.4所示),单击“确定”。 图4.3 保存路径界面 图4.4 选择电路板上所用的单片机型号界面 设置完成后,软件会提示是否将8051上电初始化程序添加入工程。这个一般选“否”。这样就建立好了一个空的51工程(如图4.5所示)。 18 图4.5 建立空的51工程界面 点击File--New,便建立了一个空的文本框(如图4.6所示)。 图4.6 建立空文本框界面 到现在为止,就可以开始在里面输入代码了。保存时注意:如果是用C语言写的程序,则将文本保存成*.c(如图4.7所示)。 图4.7 保存文本改写界面 19 将写完的程序添加到工程里面,如图4.8所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group ?Source Group 1?。在打开的对话框中,选择刚存的文件路径和对应的扩展名。此时,程序就添加进了这个工程。 图4.8 添加工程界面 下一步,就开始编译刚输入进去的代码。接着,Keil会打出下面的提示:0 Error(s), 0 Warning(s).建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:在Project Workspace里Target 1上右击,选择“Options for Target ?Target 1”。出现如图4.9所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。现在再点击重新编译,就会在工程所在文件夹里生成HEX文件[9] [10]。 图4.9 生成HEX文件界面 20 软件设计系统主程序流程图如图4.10所示。 图4.10 系统主程序流程图 21 5 系统的总体调试 5.1 硬件的测试 按照之前设计好的智能循迹小车原理图,详细计算系统中各个元件的参数,选择相应器件,制作实际电路板。然后选取万用表的200欧姆档来测试电路板。用红、黑表笔来测试电路板上每条走线,如果测量的电阻值非常小时,证明走线没有断开,当其电阻值很大时,证明该条走线断了,应该重新制作走线,使电路板在电气上得到正确地连接。 (1)晶振电路的测试 在单片机正常运行的必要条件是单片机系统的时钟稳定正常。实际中,因为各种原因导致系统时钟不正常而出现系统无法正常运行的情况时有,因此系统时钟是否振是通电检查的首要环节。在系统通电的状况下,用万用表的直流电压档(20V),分别测量XTAL1和XTAL2引脚的电压,看是否正常,在调试过程中,测得电压XTAL1引脚应为2.05V,XTAT2应为2.15V。 (2)复位电路的测试 复位不正常也会导致系统不能工作。如果复位引脚始终为高电平,系统将始终处于复位状态;如果始终为低电平,不能产生复位所需的高电平信号脉冲,则系统也可能无法正常工作。单片机正常工作时,RST复位引脚应为0V,按下复位按键时,复位引脚为高电平5V左右[11]。 5.2 系统的软件调试 在软件调试中,使用功能强大且的WAVE 6000软件进行软件编译与调试,使用Microcontroller ISP Software及其配套的单片机对程序进行烧录。软件调试的流程是这样的:先分别对主要的功能程序模块进行模拟仿真调试;然后再将各程序模块组织起来进行统调[12]。 软件的烧录:第一步:安装并运行Microcontroller ISP Software软件;第二步:点击Options栏的select device选项;这时出现一个对话窗口,按图选择后,点击OK按键,如出现所示窗口,则说明电脑与开发板没连接好或单片机没插好等,需重装检查硬件连接,如果没有出现则说明初始化成功。 第三步:点击File栏的Load Buffer选项打开已经编译好的HEX文件。点击载入,出现对话框点确定,再点击图“A”字图标,出现对话框后,按软件默认选项,点击“OK” 22 -“OK”―“OK”烧录完成;否则重新检查硬件连接后再重新烧录。 通过软件检查出程序中出现了许多的问题。经过多次的模块子程序的修改,一步一步的完善程序,来解决出现的问题。在软件的调试过程中主要遇到的问题如下: (1) 在测试中遇到小车遇到黑线电机不动. 解决:首先使用试测仪对电路进行测试,观察是否存在漏焊、虚焊、或电子元件损坏。 (2)输入程序后,小车循迹不灵敏,还有就是当拐弯度数过大,小车速度过快的时候,小车偶尔偏离轨道。 解决:首先通过调节传感器上的可调电阻,适当的增大或减小电阻可改变灵敏度。可以解决循迹不迅速的问题。 23 结 论 本课题研究的内容主要是智能小车的循迹系统。以实验组装小车为基础,使用了4个光电传感器来探测周围环境,同时对采集到的数据信息进行融合。取得了以下成果: (1)小车可以实现按照预定轨道在无外部环境影响或改变时,小车将一直沿着黑色标记线运动。 (2) 经过二十次的测试证明,当四个循迹传感器呈M型布局时最适合检测多弯道的轨迹。由于传感器不在同一直线上,故小车转弯时,左右两边后部的传感器有较大的采样空间,两边前端的传感器则对采集的信号有更好的前瞻性。整个布局有利于在弯道处提高小车速度。但相对一字型布局,M型布局容易产生不稳定信号,从而产生信号震荡,影响小车行驶的稳定性。 (3)小车保留了扩展功能。循迹小车在完成设计预想的前提下,主要考虑了车体结构设计的简单化,降低了制作成本,使之更具有普及性。由于设计要求并不复杂,没有在电路中增加冗余的功能,但是保留了各种硬件接口和软件子程序接口,方便以后的扩展和进一步的开发。 智能循迹小车属于应用开发项目,涉及了多种学科,由于本课题的试验性和不完善性。智能循迹小车在以下两个方面还有提升的空间: (1)环境信息采集功能:环境信息采集的实时性和完整性。 (2)增加避障控制功能:包括避障的精确性和灵活度这两个指标。 24 致 谢 在论文完成之际,谨向刘义杰老师致以最诚挚的感谢。本文的研究工作从始至终都得到了刘老师的热心指导和关心。从刘老师的身上,我不但学到了老师在课上传授的专业知识,而且也学到了怎样自学,更学到了许多做人的道理。所谓“送人一鱼,仅供一饭之需;而授之以渔,则终生受用无穷。” 感谢学长们的指导,是他们耐心的讲解,让我明白了制作毕业论文的思路和方法,在最后还给我提出了许多宝贵的建议让我毕业设计的整个过程少走了很多弯路,让我的论文得以顺利完成。 感谢家人,他们的支持和理解,让我能够安心完成毕业设计,是我最坚强的后盾。 最后感谢在百忙之中抽出时间评阅论文的各位老师和学者。由于知识水平有限,错误在所难免,恳请各位老师批评指正。 谢谢大家! 25 参考文献 [1] 罗志增,蒋静坪编著.循迹小车感觉与多信息融合[M].北京:机械工业出版社,2003:1-10. [2] 蔡自兴编著. 中国的智能循迹小车研究[J]. 莆田学院学报, 2002,9 (3):36-39. [3] 吴林编著. 智能循迹小车主题型号工作的回顾[J]. 循迹小车技术与应用,2001:6-9. [4] 欧青立,何刻忠等编著.室外智能循迹小车的发展及其关键技术研究[J].循迹小车,2000,22(6):519-526 [5] 杨鹃.多信息融合技术在移动循迹小车避障系统中的应用[D]. 哈尔滨:哈尔滨理工大学.2007. [6] 恒盛杰资讯编著.Protel电路板设计从入门到精通. 第1版. 中国青年出版社.2006:1-148 [7] 江思敏,陈明编著.Protel电路设计教程. 第1版. 清华大学出版社,2006:1-296 [8] 陈晓莉,张俊涛.KEIL C51单片机仿真器的设计. 第二版. 陕西科技大学出版社,2006:19-20. [9] 杨素行编著.模拟电子技术基础简明教程.第2版.高等教育出版社,2005:532-547 [10] 余孟尝编著.数字电子技术基础简明教程. 第2版. 高等教育出版社. 1999:1-361 [11] 李全利,迟荣强编著.单片机原理及接口技术.第1版.高等教育出版社,2004:14-191 [12] 王守中编著.51单片机开发入门与典型实例.第1版. 人民邮电出版社,2007:103-108 26 附录A 原理图及PCB图 系统总设计电路图 27 单片机原理图 TCRT5000 传感器模块原理图 28 L298电机控制驱动模块原理图 29 PCB图: 单片机PCB图 30 L298N电机驱动模块PCB图 31 附录B 程序代码 /智能循迹小车的#C程序/ #include /*********************第一部分*********************/ //以下是电机驱动芯片L298N 管脚位声明 sbit PWM1=P1^0; //电机A/B使能端 sbit PWM2=P1^1; sbit IN1=P1^2; //电机控制端 sbit IN2=P1^3; sbit IN3=P1^4; sbit IN4=P1^5; sbit RP1=P2^0; //传感器管脚位声明 sbit RP2=P2^1; sbit RP3=P2^2; sbit RP4=P2^3; int count1,count2; //用于中断计数 //延时函数,延时z秒 void delay(int z) { int x,y; for(x=z;x>0;x--p for(y=124;y>0;y--); } /*********************第二部分 电机控制子函数*********************/ void forward1() //电机1前进 { IN1=0; IN2=1; } void forward2() //电机2前进 32 { IN3=0; IN4=1; } void back1() //电机1后退 { IN1=1; IN2=0; } void back2() //电机2后退 { IN3=1; IN4=0; } /*********************电机的速度控制 用PWM调速*********************/ void speed(int cnt1,int sd1,int cnt2,int sd2) { if(cnt1 if(cnt2 /**************电机的前进、左转、右转控制***************/ void turn(int cnt1,int sd1,int cnt2,int sd2) { forward1(); 33 forward2(); speed(cnt1,sd1,cnt2,sd2); } /*********************电机的后退控制*********************/ void back(int cnt1,int sd1,int cnt2,int sd2) { back1(); back2(); speed(cnt1,sd1,cnt2,sd2); } /*********************第三部分 主函数*********************/ void main() { int num=0; TMOD=0x01; //中断模式设置 EA=1; TH0=(65536-1000)/256; //定时 1ms TL0=(65536-1000)%256; ET0=1; TR0=1; turn(count1,250,count2,250); //使小车冲上黑色轨道 delay(350); //延时等待小车冲上黑色轨道 while(1) { if(RP1==1&&RP2==1&&RP3==1&&RP4==1) back(count1,50,count2,50); //1111 当四个LED都没检测到黑线时,小车后退 if(RP1==1&&RP2==0&&RP3==0&&RP4==1) turn(count1,200,count2,200); //1001 当第二、第三个LED检测到黑线时,小车前进 if(RP1==0&&RP2==1&&RP3==1&&RP4==0) 34 turn(count1,150,count2,150); // 0110 当第一、第四个LED检测到黑线时,小车 减速前进 /*********************小车左转*********************/ if(RP1==0&&RP2==1&&RP3==1&&RP4==1) turn(count1,0,count2,150); // 0111 当只有第一个LED检测到黑线时,小车左 转 if(RP1==1&&RP2==0&&RP3==1&&RP4==1) turn(count1,80,count2,150); // 1011 当第二个LED检测到黑线时,小车偏左转 if(RP1==0&&RP2==0&&RP3==1&&RP4==1) turn(count1,0,count2,100); // 0011 当第一、二个LED检测到黑线时,小车左 转 if(RP1==0&&RP2==0&&RP3==0&&RP4==1) turn(count1,0,count2,200); // 0001 当第一、二、三个LED检测到黑线时,小 车左大转 /*********************小车右转*********************/ if(RP1==1&&RP2==1&&RP3==0&&RP4==1) turn(count1,150,count2,80); // 1101 当第三个LED检测到黑线时,小车偏右转 if(RP1==1&&RP2==1&&RP3==1&&RP4==0) turn(count1,180,count2,0); // 1110 当第四个LED检测到黑线时,小车右转 if(RP1==1&&RP2==1&&RP3==0&&RP4==0) turn(count1,100,count2,0); // 1100 当第三、四个LED检测到黑线时,小车右 转 if(RP1==1&&RP2==0&&RP3==0&&RP4==0) turn(count1,200,count2,0); // 1000当第二、三、四个LED检测到黑线时,小 车右大转 /****************小车检测到全黑情况的处理****************/ if(RP1==0&&RP2==0&&RP3==0&&RP4==0) { if(num==0) { 35 back1(); // 0000 当四个LED第一次检测到黑线时,左轮后退 右轮前进,小车左转 forward2(); delay(100); //延时100ms,等待小车转过弯道 } if(num>0 && num<> { turn(count1,200,count2,200); // 0000 当四个LED再次检测到黑线的次数小于6次时 //即到达黑线时小车前进速度大于后退速度 } if(num>=6) { PWM1=0; PWM2=0; //当四个LED第六次检测到黑线时,小车停止 } num++; } } /*************第四部分 中断服务函数*************/ void time0()interrupt 1 { TH0=(65536-1000)/256; //定时1ms TL0=(65536-1000)%256; count1++; count2++; if(count1>=500) //周期是500ms count1=0; if(count2>=500) //周期是500ms count2=0; } 36 附录C 硬件实物图 自动循迹小车 TCRT5000 循迹传感器模块 L298N 电机驱动模块 37 单片机电路 38 学校 毕业设计(论文)题目:专业年级指导教师 完成时间 任务书 目的: 本毕业设计是红外蔽障小车的设计,通过设计使学生系统的熟悉和掌握单片机控制系统设计方面的内容体系、开发流程和程序设计,培养学生具有综合运用所学的理论知识去开拓创新及解决实际问题的能力。培养学生掌握设计题的思想和方法,树立严肃认真的工作作风、培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。同时是为了掌握电路设计的方法和技巧。如何将学习到的理论知识运用到实际当中去,怎样能够活学活用,深入的了解电子元器件的使用方法,了解各种元器件的基本用途和方法,能够灵活敏捷的判断电路中出现的故障,学会独立设计电路,积累更多的设计经验,加强焊接能力和技巧,完成基本的要求。并能完美的完成这次实训。 目录 一、 二、 二、 三、...............................P1任务书任务书...............................P1..............................P2引言引言..............................P2...........................P4要求与发挥要求与发挥...........................P4.............................P6设计摘要设计摘要.............................P6 四、.......................P7模块方案比较模块方案比较.......................P7 避障模块1. 1.避障模块 2. 驱动模块2.驱动模块 3. 控制模块3.控制模块 五、程序设计.........................P9程序设计.........................P9 1. 程序流程图1.程序流程图 2. 程序编写2.程序编写 六、 七、 八、 九、工作原理.........................P13工作原理.........................P13结论............................P13结论............................P13........................P14参考文献参考文献........................P14毕业设计(论文)成绩评定表.....P15毕业设计(论文)成绩评定表.....P15 任务: 利用单片机、红外实现避障,要求具有下述功能: 1. 小车前进可以避开(前、左、右)20cm的障碍物; 2. 实现下车前进时,不碰障碍物; 3. 具有声音播报功能。 引言 随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能小车。发挥: 1.利用超声波测距 2.红外寻迹可以控制小车行走的路迹 3.红外发射接收器,用遥控来控制小车的行走方向 工作日程安排: 序号 1毕业设计各阶段的名称设计单片机外部接线图,以及其它相关电路连接。日期09.11.23-09.11.2 4 2设计单片机程序,驱动电路的程序及注解。09.11.25-09.11.2 8 3编制设计的元件明细表09.11.29-09.11.2 9 4编制电路元件明细表09.11.29-09.11.3 5编写操作原理说明09.11.31-09-11.3 1 6 7 8 9编写在实验室进行硬件和软件的调试以及所需的补充资料在创新实验室做模拟调试编写摘要将设计资料装订成册,交给指导教师,准备答辩10.1.1-10.1.310.1.4-10.1.610.1.7-10.1.710.1.10 设计(论文)要求: 要求提供以下设计资料,并装订成册: 1. 摘要(所做的设计如有特别之处) ; 2. 单片机外部接线图,以及其它相关的电路图; 3. 单片机控制电路元件明细表; 4. 完整的程序资料,驱动电路的程序及注解; 5. 电气元件明细表; 6. 操作原理简要说明; 7. 在实验室进行模拟调试所需的补充资料; 8. 模拟调试的结果是否满足控制要求(要有老师的鉴定结论和签名) 。 学生开始执行任务书日期200年月日指导教师签名: 年 学生送交毕业设计(论文)日期:200年月日月日教研室主任签名: 年 学生签名: 年月日月日 摘要 针对题目的要求,我们设计了一款简易的红外避障小车。该电路设计分别以驱动模块,单片机控制显示模块组成。为了达到题目的要求,我们以ATMEGA16-L 为核心控制器件,以LM298驱动电机控制系统和 红外监测系统设计而成。 关键词:ATMEGA16-L;红外避障检测电路;驱动电路。 整体构思: 一. 模块方案比较 壁障模块1. 1.壁障模块 在壁障模块中,可以选择超声波壁障。其优点是反应速度灵敏,距离远,受外界干扰小。但是,在本设计中,题目所要求是距离是20cm,如果利用超声波传感器进行壁障的话,由于空间小声波在小空间不同方向里会进行多次反射,左右前后的传感器之间相互干扰,使 控制中心不能明确判断出那个方位遇到了障碍物,从而动作紊乱,不能实现要求。 使用红外接收头和发射管配合,利用38k 频率解决灵敏度问题。38K 调制和发射电路。使用一个定时器的快速PWM 模式产生38K 调制信号,通过剩余的四个施密特触发器(有2个已经用在光电编码部分)缓冲,推动8050三极管和红外发光管来发射已经调制的红外线。其中2个1N4148接单片机IO 脚,控制左右红外发光管轮流发射。后面串接的可见光LED 是为了方便用户调试而设置的,让用户知道当前是否在发射红外线。通过调节PWM 的占空比,调节红外发光管的亮度,从而实现调节感知障碍物距离的功能。但是实际测试结果不尽人意。灵敏度太高。加衰减电路比较麻烦,调试不易。且价格也贵。 利用红外传感器,其优点是对近距离的障碍物反应速度灵敏,不同方位的传感器之间信号不会相互干扰,造成误动作。缺点是距离近,易受到自然光的干扰。经过两种传感器性能对比与题目要求的综合考虑分析,最终选择红外传感器作为小车的眼睛,进行壁障。 LM567是一种廉价的音频锁相环集成电路,利用它可以构造性能较好的反射式光电传感器。 如下页图所示,由LM567的内部振荡器提供方波信号,点亮探头的LED,由探头的光敏管接收反射光。经三极管放大,转换成电压信号后送到LM567的内部鉴相器2(输出鉴相器)同步解调,然后由LM567内部的比较器转换为数字输出。 并联负反馈放大电路有着稳定的增益和低的输入阻抗,能消除光 敏管结电容的影响,获得良好的高频特性。 100R 电位器用于调节放大器增益以调节灵敏度。 这个电路的缺点是当多个探头同时使用时因为频率接近,一旦相邻单元的光斑出现部分重合就会有差拍干扰造成输出抖动。另外,567输出鉴相器的参考信号是从振荡电容端引出的,与发射和接收信号几乎是正交的,解调效率非常低,前级需要高倍放大。 意探头的连线要短,如果连线较长要分别屏蔽,最好把电路板跟探头做在一起。否则发射管连线上大幅度的脉冲信号会感应耦合到接收端,导致在没有接收光的情况下也误认为收到了光信号,这种同频干扰无法用电路板上的设计来消除 电路图如下图: 但为了使用方便,改用成品。(成品如下图) 驱动模块2. 2.驱动模块 在电机驱动模块中,由于电机的功率不大,我们可以选择使 用电桥驱动,电路图如下: 其优点是电路简单,成本高。但是由于缺少保护电路,只要控制出现错误,就很容易烧坏晶体管,晶体管的价格也不菲,便宜货又电流太小,不足以承受小车的功率,使整个电路瘫痪。 然而,使用集成电路LM298,由于集成程度高,内包含稳定的数字电路,就算在编写程序的时候错误或者其他原因使控制端口同时输出通过一种电平,不容易烧坏芯片,使整个电路瘫痪。同时芯片还 有使能端,容易控制,且稳定。特有的PWN 调制功能端,使电机更容易控制。也使得程序在减速的过程特别是保持左右电机速度平衡的程序编写上变得更加简洁容易。15脚Multiwatt 封装的L298N,内部同样4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。 L298N 可接受标准TTL 逻辑电平信号VSS,VSS可接4.5~7V 电压。4脚VS 接电源电压,VS电压范围VIH 为+2.5~46V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。 经过综合分析考虑,最终决定使用LM298作为本设计的驱动芯片。其电路连接图如下: 3. 控制模块3.控制模块 我们经常使用的单片机要AT89S51,ATMEGA16-1,凌阳单片机等。在我们的应用中,用到最多的就是AT89S51和ATMEGA16-1。AT89S51 比较通用,能使用C 语言进行程序的编写,方便阅读。但是,其集成程度低,功能单一,需要使用到其它功能时,只能通过扩展外电路来实现,使得整个电路复杂,成本高,稳定性低。同时,I/O口输出功率小,一般器件都需要加驱动才能够正常使用。 而ATMEGA16-L 集成程度高,内集成了A/D等其它功能模块,在进行电路设计时,可以大大节省了成本,提高了整体电路稳定性。同时输出功率大,一般器件无需驱动电路,就可以直接使用。 ATmega16是基于增强的AVR RISC 结构的低功耗8位CMOS 微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega16AVR 内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10倍的数据吞吐率。 因此选用高性能的ATmega16AVR 单片机进行设计,以下是控制板的电路。 其电路连接图如下: 此图为AVR ATmega16L 的原理图。 二. 程序设计 程序流程图1. 1.程序流程图 上电运行后,放到没有障碍物的空地上,小车直走。当前方没有障碍物的的时候车就一直直走。如果前方遇到障碍物,则小车做左转运动。直至前方没有障碍物,这时小车恢复直走。 如果前方有障碍物的时候,左边同时也有障碍物,则小车右转。直至左边没有障碍物或者前方没有障碍物。这时小车恢复左转,或者直走。如果前面没有障碍物,则先执行直走。 如果前方,左方,右方均有障碍物,则小车后退,直至前方,左方,右方任一方向没有障碍,则此时小车开始以前方,左方,右方的优先级开始执行转向。也就是说如果前方没有障碍物,即使其他任意 方向都有障碍则小车依然直走,如果前方有障碍,左边没有则右转,前方左方都有障碍,则小车右转。否则小车后退。 程序编写2. 2.程序编写 //====================================== /*硬件分布 PC0前进 PC1左转 PC2右转 PC3退后|PD0检测前|PD1检测左|PD2检测右| PB3PWN 左右平衡校准输出 */ //====================================== #include #include #include #defineuchar unsigned char #defineOC0_OUT_EN int w; int num; /*要显示的数字*/DDRB |=0b00001000 /*--------------------------------------------------------------------*/ void timer0_init(void) { TCCR0= (1<><><><><> TCNT0=0x00; OCR0=0x08; //设置TC0计数寄存器初值//输出比较寄存器初值,设置该值可用于调节占空比 } /*--------------------------------------------------------------------*/ /*=================================*/ uchar key_p(void) { uchar keyval; keyval =PIND; //定义输入口 keyval =(~keyval)&0xff; //keyval=keyval >>3;// switch(keyval) { case 0: case 1: case 2: case 3: case 7:return 0; return 1; return 2; return 3; return 7; default:return0; } return 0; } //=========================================void zw(void) { while(1) { num =key_p();//返回key_p的值给num。//PORTC=0xff; if(num==0){PORTC=9;}//前方无障碍直走else{ if(num==1){PORTC=5;}//前方有障碍左转else{ if(num==3){PORTC=10;}//前方和左边有障碍 右转 else{ if(num==7){PORTC=6;}//前方和左边,右 边都有障碍后退 } //delay_ms(1); } } } } //=========================================int main(void) { DDRC =0xff; DDRD =0; //输入方式为D 口输入。 PORTD=0XFF; OC0_OUT_EN; 输出 timer0_init(); SEI();//为允许PWM 工作,需设置PB3为 zw(); return 0; } 三. 工作原理 当检测到障碍物时,红外光敏二极管接收到反射回来红外光,其输出立即发生高低点平转换,该信号经放大器放大后送到单片机进行分析处理。然后将处理后的结果发送到电机驱动模块,进行校正。控制其向右转,向左转和后退。避障与寻迹的设计原理是相同的,区别在于传感器的灵敏度不同,蔽障的灵敏度要比寻迹的灵敏度高,只要小车前方有障碍物,红外线通过障碍物反射到光敏管,传感器输出低点平,发送到单片机进行处理,然后单片机处理后驱动lm298去控制小车运行和方向。 四结论 1. 本设计制作完成了题目要求的基本部分,达到了预期的目标。我们通过各种方案的讨论及尝试,再经过多次的整体软硬件结合的调试,不断地对系统进行优化,小车完成了各项功能。 参考文献 《单片机应用技术》 《单片机原理与应用》 《8051单片机程序设计与实例》 《MCS-51单片机实验指导》 《单片机c 语言指导》 毕业设计(论文)成绩评定表课题名称 学生姓名 指导组 教师姓名 (职称)学号专业 序 号 1 2 3 4 5 6 7 8评审项目评分标准满分评分答辩 指导教师评语: 答辩(评定)小组意见: 毕业设计(论文)成绩: 评定小组签名: 摘要 AVR 单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评。这里介绍的是如何用ATmega16单片机来实现壁障小车的毕业设计。本系统以设计题目的要求为目的,采用ATmega16单片机为控制核心,利用超声波传感器检测道路上的障碍,控制电动小汽车的自动避障,快慢速行驶,并可以自动显示行驶速度,自动寻光功能。整个系统的电路结构复杂,可靠性能高。实验测试结果满足要求,本文着重介绍了该系统的硬件设计方法。 采用的技术主要有: (1)通过编程来控制小车的速度; (2)超声波传感器的有效应用; (3)数码管显示电路的设计。 (4)光敏电阻的应用。 (5)模/数转换的应用 (6)PWM技术等。 目录 前言····························································3 1 单片机的选型·················································4 2 方案设计与论证···············································7 2.1 直流调速系统·············································7 2.2 检测系统·················································8 2.3电机转向系统············································10 2.4数码管显示系统··········································11 2.5 单片机外围电路··········································12 2.6超声波传感器············································14 3 软件系统设计················································16 3.1 ADC 数模转换的设计·······································16 3.2测距显示程序············································16 结论····························································21 附录····························································22 参考文献························································31 前言 随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义很大。本设计就是在这样的背景下提出的,设计的智能电动小车应该能够实时显示速度、具有自动寻光、避障功能,可程控行驶速度。 根据题目的要求,确定如下方案:在现有玩具电动车的基础上,加装光电传感器、超声波传感器,实现对电动车的速度、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。 这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。本设计采用AVR 系列中的ATmega16单片机。以单片机为控制核心,利用超声波传感器检测道路上的障碍,控制电动小汽车的自动避障,快慢速行驶,并可以显示速度,自动寻光功能。AVR是一款八位单片机,它的易用性和多功能性受到了广大使用者的好评。它是第三代单片机的代表。 本设计就采用了比较先进的AVR 为控制核心,AVR 采用CHOMS 工艺,功耗很低。该设计具有实际意义,可以应用于考古、机器人、医疗器械等许多方面。尤其是在足球机器人研究方面具有很好的发展前景;在考古方面也应用到了超声波传感器进行检测。所以本设计与实际相结合,现实意义很强。 1 单片机选型 ATmega16是基于增强的AVR RISC 结构的低功耗8 位CMOS 微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega16 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。 ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程的看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。 工作于空闲模式时CPU 停止工作,而USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式下则允许振荡器和异步定时器继续工作。 本芯片是以Atmel 高密度非易失性存储器技术生产的。片内ISP Flash 允许程序存储器通过ISP 串行接口,或者通用编程器进行编程,也可以通过运行于AVR 内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash 存储区(ApplicationFlash Memory)。在更新应用Flash 存储区时引导Flash 区(Boot Flash Memory)的程序继续运行,实现了RWW 操作。 通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内, ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega16 具有一整套的编程与系统开发工具,包括:C 语言编译器,宏汇编、 程序调试器/ 软件仿真器、仿真器及评估板。 ATmega16产品特性 高性能、低功耗的8位AVR 微处理器 先进的RISC 结构 131条指令 大多数指令执行时间为单个时钟周期 32个8位通用工作寄存器 全静态工作 工作于16MHz 时性能高达16MIPS 只需两个时钟周期的硬件乘法器 非易失性程序和数据存储器 16K 字节的系统内可编程Flash,擦写寿命: 10,000次 具有独立锁定位的可选Boot 代码区,通过片上Boot 程序实现系统内编程,真正的同时读写操作 512 字节的EEPROM,擦写寿命: 100,000次 1K 字节的片内SRAM 可以对锁定位进行编程以实现用户程序的加密 JTAG 接口( 与IEEE 1149.1 标准兼容) 符合JTAG 标准的边界扫描功能 支持扩展的片内调试功能 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 外设特点 两个具有独立预分频器和比较器功能的8位定时器/计数器 一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器 具有独立振荡器的实时计数器RTC 四通道PWM 8路10位ADC,8个单端通道,2个具有可编程增益(1x, 10x, 或200x)的差分通道 面向字节的两线接口 两个可编程的串行USART 可工作于主机/ 从机模式的SPI 串行接口 具有独立片内振荡器的可编程看门狗定时器 片内模拟比较器 特殊的处理器特点 上电复位以及可编程的掉电检测 片内经过标定的RC 振荡器 片内/片外中断源 33 6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的Standby 模式 ATmega16单片机的强大功能能够满足小车在行驶中的功能,有利于小车的稳定性,同时也减小的小车的外围硬件电路。所以采用ATmega16单片机作为小车 的主控芯片。 图1 ATmega16引脚图 2 方案设计与论证 根据题目的要求,确定如下方案:在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据通过数码管显示出来并实现对电动车的智能控制。 这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。 2.1直流调速系统 方案一:串电阻调速系统。 方案二:脉宽调速系统。 旋转变流系统由交流发电机拖动直流电动机实现变流,由发电机给需要调速的直流电动机供电,调节发电机的励磁电流即可改变其输出电压,从而调节电动机的转速。改变励磁电流的方向则输出电压的极性和电动机的转向都随着改变。 串电阻调速系统功耗比较大,而且不容易实现,控制也不灵活,所以不宜采用串电阻调速系统。 脉冲宽度调制(Pulse Width Modulation),简称PWM。脉冲周期不变,即通过改变脉冲宽度来进行直流调速。 PWM 调速系统有下列优点: 由于PWM 调速系统的开关频率较高,仅靠电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速范围较宽,可达1:10000左右。电动机的损耗和发热都比较小。 同样由于开关频率高,若与快速响应的电机相配合,系统可以获得很宽的频带,因此快速响应性能好,动态抗扰能力强。 由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。 根据以上综合比较,以及本设计中受控电机的容量和直流电机调速的发展方向,本设计采用了可逆PWM 技术进行调速。 脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。具体的电路如下图: 图2 脉宽调制系统图 2.2检测系统 检测系统主要实现光电检测,即利用光电传感器tcrt5000进行速度的检测,利用光敏电阻实现寻光功能。 2.2.1 速度检测: 本系统采用反射式红外线光电传感器tcrt5000用于检测小车行驶的速度,玩具车轮子上是由黑白相间组成的tcrt5000传感器放到靠近车轮的位置。 TCRT5000传感器的工作原理与一般的红外传感器一样,一传一感.TCRT5000具有一个红外发射管和一个红外接收管.当发射管的红外信号经反射被接收管接收后,接收管的电阻会发生变化,在电路上一般以电压的变化形式体现出来,而经过ADC 转换或LM324等电路整形后得到处理后的输出结果.电阻的变化起取于接收管所接收的红外信号强度,常表现在反射面的颜色和反射面接收管的距离两二方面.硬件参考原理图如下: 图3 TCRT5000原理图 这样当小车转动的时候,当转到白线的时候有tcrt5000会产生高电平,当转到黑线时高电平消失,所以在小车行驶的时候变产生了方波脉冲,把方波脉冲送给单片机进行处理,最终通过数码管显示出来。 2.2.2寻光检测 寻光检测主要是通过光敏电阻,光敏电阻主要的功能把光照的变化通过电阻的形式显示出来,当光照强度增强时光敏电阻的阻值减小。本设计就是通过检测电阻的大小来判断光的强弱,具体的方法是把两路的光敏电阻分别与一个固定阻值的电阻串联通过检测光敏电阻两端的电压来判断光的强弱,具体的原理如下图: 图4 光敏电阻系统原理图 2.3电机转向系统 本设计的壁障小车有两个电机,一个是作为小车的动力电机,驱动小车前进的,另一个是作为小车的转向电机,控制小车转向的。转向电机的硬件电路类似于调速系统,但是还是有一定的区别的。根据我个人的经验在调速电路上装上一个小型的继电 器在稍加改动就形成了转向电路,经过多次的实验最终确定下来,硬件电路如下图: 图5 电机转向系统原理图 它的原理是有一条输入线input,用单片机控制继电器的常开或常闭来实现导通的 线路,当左边的线路导通时电机两端的电压为正5V,当右边的线路导通时电机两端的电压为负5V,所以实现了电机的转向。 2.4数码管显示系统 本设计显示电路是采用的四位数码管,由于要减小单片机的IO 接口所以在数码管的断码处加上了一个串并转换器74HC164, 74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164 是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。 图6 74hc164 74HC164的输出与数码管的八位断码相连,数码管的位码与单片机相连,单片机要 把显示的数据通过一个IO 接口串行送给74HC164,通过74HC164转化成并行送入数码管显示,具体的原理如下图: 图7 显示原理图 2.5单片机外围电路 2.5.1晶振电路 ATmega16单片机内部具有RC 震荡电路,有1M,2M,4M,8M 的震荡电路,但是由于 再给单片机下载程序时必须要由外部提供震荡,所以在设计ATmega16外围电路时必须要有晶振电路,这样才能给ATmega16下载进去程序。ATmega16最大支持的晶振频率为20M,晶振过大有可能导致单片机不支持从而运行部起来,晶振过小可能满足不了系统的需求,通过综合考虑最终选择16M 的晶振作为单片机的时钟晶振。具体的电路如下图: 图8 晶振电路 2.5.2 下载方式 ATmega16的下载方式有很多种,最主要的有两种方式下载,ASP与ISP 下载方式,由于笔记本没有并口,所以采用USBISP 在线下载方式,它的优点是不像51单片机那样需要给它的冷启动才能下载,在单片机运行的时候就可以对单片机进行烧录程序,使用起来很方便。下载时采用的SPI 总线下载方式。具体的方式参考SPI 总线协议。 2.5.3复位电路 单片机的复位有上电复位和外部复位,上电复位(POR) 脉冲由片内检测电路产生。无论何时VCC 低于检测电平POR 即发生。POR 电路可以用来触发启动复位,或者用来检测电源故障。POR 电路保证器件在上电时复位。VCC 达到上电门限电压后触发延迟计数器。在计数器溢出之前器件一直保持为复位状态。当VCC 下降时,只要低于检测门限,RESET 信号立即生效。 外部复位由外加于RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度时即触发复位过程,即使此时并没有时钟信号在运行。当外加信号达到复位门限电压VRST( 上升沿) 时, tTOUT 延时周期开始。延时结束后MCU 即启动。具体的复位电路如下图: 图9 复位电路 2.6超声波传感器 本设计采用壁障的原理是基于超声波测距的原理,通过超声波发射装置发出超 声波,根据接收器接到超声波时的时间差就可以知道距离了。这与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2)。 超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经 常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。 为了使小车能自动避障行走,就必须装备测距系统,以使其及时获取距障碍 物的距离信息(距离和方向)。当测量的距离小于所允许的距离时单片机控制小车的转向电机动作,实现小车的左转向。 本设计采用现成的超声波模块,因为现成的模块它的稳定性要好,不容易产 生干扰,而且测量的距离不容易产生误差,但他们的原理大体相同,超声波测距的原理如下图: 图10 超声波发射电路 图11 超声波接收电路 3 软件系统设计 3.1 ADC 模数转换的设计 小车的寻光功能中需要用到AD 转换器,因为单片机只识别数字量,由于单片机只 能处理数字信号,所以外部的模拟信号量需要转变成数字量才能进一步的由单片机进行处理。ATmega16内部集成有一个10位逐次比较(successive approximation)ADC电路。因此使用AVR 可以非常方便的处理输入的模拟信号量。 ATmega16的ADC 与一个8通道的模拟多路选择器连接,能够对以PORTA 作为ADC 输入引脚的8路单端模拟输入电压进行采样,单端电压输入以0V(GND)为参考。另外还支持16种差分电压输入组合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有可编程增益放大器,能在A/D转换前对差分输入电压进行0dB (1×),20dB (10×)或46dB (200×)的放大。还有七种差分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任意一个ADC 引脚都可作为相应的正极。若增益为1×或10×,则可获得8位的精度。如果增益为200×,那么转换精度为7位。AVR的ADC 功能单元由独立的专用模拟电源引脚AVcc 供电。AVcc和Vcc 的电压差别不能大于±0.3V。ADC转换的参考电源可采用芯片内部的2.56V 参考电源,或采用AVcc,也可使用外部参考电源。使用外部参考电源时,外部参考电源由引脚ARFE 接入。使用内部电压参考源时,可以通过在AREF 引脚外部并接一个电容来提高ADC 的抗噪性能。 ADC功能单元包括采样保持电路,以确保输入电压在ADC 转换过程中保持恒定。ADC 通过逐次比较(successive approximation)方式,将输入端的模拟电压转换成10位的数字量。最小值代表地,最大值为AREF 引脚上的电压值减1个LSB。可以通过ADMUX 寄存器中REFSn 位的设置,选择将芯片内部参考电源(2.56V)或AVcc 连接到AREF,作为A/D转换的参考电压。这时,内部电压参考源可以通过外接于AREF 引脚的电容来稳定,以改进抗噪特性。 本设计参考电压选择AVCC,转换数据为左对齐方式,ADC时钟为16分频,ADC转换完成中断使能。选择ADC0与ADC1通道。具体方式请参考程序。 3.2测距显示程序 数码管主要的作用就是显示速度,数码管显示的方式是采用定时器中断显示,这样的好处就是简化了主函数,同时使显示的亮度稳定,没有波动。显示所用的定时器为T0,显示间隔为50ms。 ATmega16中有两个8位定时计数器:T0和T2,它们都是通用的多功能定时计数器。除此之外还有一个16位定时计数器T1,T1 16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC 应用外分5种工作类型 普通模式 WGM1=0:跟51的普通模式差不多,有TOV1溢出中断,发生于TOP 时 采用内部计数时钟用于 ICP捕捉输入场合---测量脉宽/红外解码(捕捉输入功能可以 工作在多种模式下,而不单单只是普通模式)采用外部计数脉冲输入,用于计数,测频其他的应用,采用其他模式更为方便,不需要像51般费神。 CTC 模式 [比较匹配时清零定时器模式] WGM1=4,12:跟51的自动重载模式差不多用于输出50%占空比的方波信号用于产生准确的连续定时信号。WGM1=4时, 最大值由OCR1A 设定,TOP 时产生OCF1A 比较匹配中断。WGM1=12时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断。 计算公式: fOCn=fclk_IO/(2*N*(1+TOP))变量N 代表预分频因子(1、8、32,64、256,1024)。 快速PWM 模式 WGM1=5,6,7,14,15 :单斜波计数,用于输出高频率的PWM 信号(比双斜波的高一倍频率)都有TOV1溢出中断,发生于TOP 时。比较匹配后可以产生OCF1x 比较匹配中断。WGM1=5时, 最大值为0x00FF, 8位分辨率WGM1=6时, 最大值为0x01FF, 9位分辨率。WGM1=7时, 最大值为0x03FF,10位分辨率 。WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)WGM1=15时,最大值由OCR1A 设定,TOP 时产生OCF1A 比较匹配中断(双缓冲,但OC1A 将没有PWM 能力,最多只能输出方波)改变TOP 值时必须保证新的TOP 值不小于所有比较寄存器的数值。 注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平。 计算公式:fPWM=fclk_IO/(N*(1+TOP))。相位修正PWM 模式 WGM1=1,2,3,10,11 : 双斜波计数,用于输出高精度的,相位准确的,对称的PWM 信号都有TOV1溢出中断,但发生在BOOTOM 时比较匹配后可以产生OCF1x 比较匹配中断。WGM1=1时, 最大值为0x00FF, 8位分辨率。WGM1=2时, 最大值为0x01FF, 9位分辨率。WGM1=3时, 最大值为0x03FF,10位分辨率。WGM1=10时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)。WGM1=11时,最大值由OCR1A 设定,TOP时产生OCF1A 比较匹配中断(双缓冲,但OC1A 将没有PWM 能力,最多只能输出方波)。改变TOP 值时必须保证新的TOP 值不小于所有比较寄存器的数值可以输出0%~100%占空比的PWM 信号,若要在T/C 运行时改变TOP 值,最好用相位与频率修正模式代替相位修正模式。若TOP 保持不变,那么这两种工作模式实际没有区别。 相位与频率修正PWM 模式 WGM1=8,9 :双斜波计数,用于输出高精度的、相位与频率都准确的PWM 波形都有TOV1溢出中断,但发生在BOOTOM 时比较匹配后可以产生OCF1x 比较匹配中断。WGM1=8时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)。WGM1=9时,最大值由OCR1A 设定,TOP时产生OCF1A 比较匹配中断(双缓冲,但OC1A 将没有PWM 能力,最多只能输出方波)相频修正修正PWM 模式与相位修正PWM 模式的主要区别在于OCR1x 寄存器的更新时间。 改变TOP 值时必须保证新的TOP 值不小于所有比较寄存器的数值。可以输出0%~100%占空比的PWM 信号使用固定TOP 值时最好使用ICR1 寄存器定义TOP。这样OCR1A 就可以用于在OC1A 输出PWM 波。但是,如果PWM 基频不断变化(通过改变TOP 值), OCR1A的双缓冲特性使其更适合于这个应用。 T/C 的时钟源可以有多种选择,由CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合。一个16位定时器,在8MHz 系统时钟驱动下,可以实现uS 级的高速定时和长达8秒的超长定时,这可是标准51的弱点 CS12 CS11 CS10 说明 0 0 0 无时钟源 (T/C 停止) 0 0 1 clkIO/1 ( 无预分频) 0 1 0 clkIO/8 ( 来自预分频器) 0 1 1 clkIO/64 ( 来自预分频器) 1 0 0 clkIO/256 ( 来自预分频器) 1 0 1 clkIO/1024 ( 来自预分频器) 1 1 0 外部T1 引脚,下降沿驱动 1 1 1 外部T1 引脚,上升沿驱动 在高预分频应用时, 通过复位预分频器来同步T/C 与程序运行,可以减少误差。但是必须注意另一个T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的T/C。外部时钟源由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于fclk_IO/2.5。外部时钟源不送入预分频器选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。 T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。输入捕捉单元可以工作在多种工作模式下(使用ICR1定义TOP 的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。)在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP 值当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同 时输入捕捉标志位ICF1 置位。如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑"1” 清零。注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果。除去使用ICR1定义TOP 的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。(其实就是永远使能??)使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟.噪声抑制器使用的是系统时钟,因而不受预分频器的影响使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器如果处理器在下一次事件出现之前没有读取ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。测量外部信号的占空比时要求每次捕捉后都要改变触发沿。因此读取ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写"1”)。若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。 输出比较单元 16位比较器持续比较TCNT1与OCR1x 的内容,一旦发现它们相等,比较器立即产生一个匹配信号。然后OCF1x 在下一个定时器时钟置位。如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。(就是说输出比较可以工作在所有工作模式下,但PWM 模式下更好用,功能更强)输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。TOP 值还用来定义通过波形发生器产生的波形的周期。 由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行这个特性可以用来将OCR1x 初始化为与TCNT1 相同的数值而不触发中断。 比较匹配模式控制位COM1x1:0 具有双重功能。波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态;COM1x1:0 还控制OC1x 引脚输出的来源。 只要COM1x1:0 不全为零,波形发生器的输出比较功能就会重载OC1x 的通用I/O 口功能。但是OC1x 引脚的方向仍旧受控于数据方向寄存器 (DDR)。从OC1x 引脚输出有效信号之前必须通过数据方向寄存器的DDR_OC1x 将此引脚设置为输出。 本设计应用最多的就是定时计数器,ATmega16的庞大功能为该设计提供了方便,这也是我之所以选择ATmega16作为控制器的主要原因。 图12 主程序流程图 结论 通过这次毕业设计我充分的掌握电路设计的方法和技巧。深入的了解电子元器件的使用方法,学会独立设计电路,积累更多的设计经验,加强焊能力和技巧,完成基本的要求。通过毕业设计,培养自己综合分析和解决本专业的一般工程技术问题的独立工作能力,拓宽和深化知识。培养自己树立正确的设计思想,设计构思和创新思维,掌握工程设计的一般程序规范和方法,树立严肃认真的工作作风、培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力,如何将学习到的理论知识运用到实际当中去,怎样能够活学活用,深入的了解电子元器件的使用方法,了解各种元器件的基本用途和方法,能够灵活敏捷的判断电路中出现的故障,学会独立设计电路,积累更多的设计经验,加强焊能力和技巧,完成基本的要求。 附录 程序 /****************************************************** * author : cao yu * time : 2011-4-11 20:48 * name : 毕业设计参考程序 * CRYSTAL : 16MHZ * notice : PC7为输出控制转向电机,为1时左转,为0时右转 PC6输出为是否执行电机转向,当为1时才执行左转或右转,为0时不执行转向即前进 * *****************************************************/ #include #define uchar unsigned char #define uint unsigned int #pragma interrupt_handler T1_inter: 9 //超声波 #pragma interrupt_handler inti_inter: 2 //超声波 #pragma interrupt_handler T0_interr: 20 //超声波 #pragma interrupt_handler ADC_inter:15 //光敏电阻 #pragma interrupt_handler TCNT2_inter:5 //tcrt5000 #define SRCLK 1 //tcrt5000 #define RCLK 2 //tcrt5000 #define SER 3 //tcrt5000 #define SRCLK 1 //超声波 #define RCLK 2 //超声波 #define SER 3 //超声波 #define SET_CLK (PORTA|=1<5) 74hc164="" #define="" cli_clk="" (porta&="">5)><5))>5))> /*************************************************************/ /****************************函数声明*************************/ void disbuffer(uchar date); void send_byte_164(uchar byte); void delay(uchar z); void main_init(); void dis_buffer(uint count); void delay_20us(); void translate_ADC() ; void chaoshengbo_check(); void delay_ms(uchar z); /*************************************************************/ uint datavel=234,success_flag,d,h=0,s[3],T0_flag; // 超声波定义 uchar count; // 超声波定义 uchar new_count; // 超声波定义 uchar showw[4]; // 超声波定义 uchar checksu_flag=0,date,show[3],tcrt_date; // tcrt5000定义 int ADC_1,ADC_2;ADC_data; // 光敏电阻定义 uchar flag=0,ADC_flag=0; // 光敏电阻定义 uchar table[]={ 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; //0~9的断码 uchar temp[]={0xfe,0xfd,0xfb,0xf7}; void disbuffer(uchar date) // tcrt5000 { showw[0]=date/100; date%=100; showw[1]=date/10; showw[2]=date%10; } void TCNT2_inter() // tcrt5000 { TCNT2=0x3d; checksu_flag++; if(checksu_flag==100) { TCNT0=0; } } void send_byte_164(uchar byte) { uchar i,temp; temp=byte; for(i=0;i<8;i++)>8;i++)> checksu_flag=0; date=TCNT0; // data/=3;// 就是一秒钟转的周数 date*=33; //具体的距离 cm disbuffer(date); CLI_CLK; if((temp&0x01)==0) PORTA&=~(1<6);>6);> PORTA|=1<> } } temp>>=1; void T0_interr() // 中断显示函数 { uchar y,j; TCNT0=0; dis_buffer(datavel); for(j=0;j<4;j++)>4;j++)> void T1_inter() { TCNT1=0; T0_flag++; } void inti_inter() { uchar DATA_L,DATA_H; success_flag=1; DATA_L=TCNT1L; DATA_H=TCNT1H; datavel=(uint)(DATA_H*256+DATA_L); datavel+=T0_flag*65536; T0_flag=0; GICR&=~(1<6);>6);> void ADC_inter() { if(ADC_flag==1) ADC_2=ADCH; if(ADC_flag==0) ADC_1=ADCH; { } send_byte_164(table[showw[j]]); PORTB=temp[j]; for(y=0;y<200;y++); portb="">200;y++);> void delay(uchar z) { uchar x,y; for(x=0;x<30;x++) for(y="">30;x++)> void main_init() // 函数初始化 { /******************************/ // 74HC164显示初始化 DDRA|=1<6; porta&="">6;><> DDRB=0xff; // B口为断码 PORTB=0xff; /******************************/ // 超声波初始化 DDRD|=1<6; portd&="">6;><6); ddrd&="">6);><2); portd|="">2);><2; ddrd|="">2;><1; portd|="">1;><1; ddrc|="">1;><7; portc|="">7;><7; ddrc|="">7;><7; portc&="">7;><> TCCR0=0x09;// T0普通模式 8分频 TIMSK|=0x02; TCNT0=0x00; OCR0=0x88; TCCR1B=0x01; // 无预分频 GICR&=~(1<6); timsk="0x06;" tcnt1h="0;" tcnt1l="">6);> MCUCR|=1<1; int0下降沿产生中断="" mcucr&="">1;><> /*********************************/ // tcrt5000 初始化 DDRD&=~(1<3); ddrd|="">3);><0; portd|="">0;><3; portd|="">3;><0; tccr2="0x05;" timsk="">0;> TCNT2=0x3d; // 1024分频 记50ms TCNT0=0; TCCR0=0x06; // 时钟由T0下降沿驱动 /******************************/ // 光敏电阻初始化 DDRA&=~(1<0); ddra&="">0);><1); ddra&="">1);><2); porta|="">2);><0; porta|="">0;><1; porta|="">1;><2; adcsra|="">2;><7;>7;> ADMUX &= ~(1 ADMUX |= 1 ADCSRA&=~(1<0); adc时钟16分频="" adcsra&="">0);><1); adcsra|="">1);><> ADCSRA|=1<3; 中断使能="" sreg|="">3;><7; 开总中断="" *****************************/="" pwm初始化="" ddrc|="">7;><3; portc|="">3;><3; ddrc|="">3;><0; portc|="">0;><0; ddrc|="">0;><1; portc&="">1;><> TCCR0=0x6a; //快速PWM 模式 匹配清零 计数到TOP 时置位 时钟 TCNT0=0; OCR0=0xaa; /*****************************/ 8分频 } int main(void) { uchar y,j; main_init(); PORTD&=~(1<6); while(1)="">6);> chaoshengbo_check(); // 超声波检测 } } void dis_buffer(uint count) { show[2]=count/100; count=count%100; show[1]=count/10; show[0]=count%10; } void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++);>100;bt++);> void translate_ADC() { delay(22); delay(10); translate_ADC() ; // 光敏电阻检测 ADC_flag=1; ADMUX&=~(1<0); admux&="">0);><1); admux&="">1);><2); admux&="">2);><3); admux&="">3);><4); adcsra|="">4);><> while((ADCSRA|0xef)==0xff); delay(225); ADC_flag=0; ADMUX|=1<> ADMUX&=~(1<> ADMUX&=~(1<2); admux&="">2);><3); admux&="">3);><4); adcsra|="">4);><> while((ADCSRA|0xef)==0xff); if(ADC_1>=ADC_2) { ADC_data=ADC_1-ADC_2; flag=1; } else { ADC_data=ADC_2-ADC_1; flag=0; } if(ADC_data>10) { if(flag==1) { PORTC|=(1<6); 光敏电阻检测右转="" portc&="">6);><> } if(flag==0) { PORTC|=(1<6); 光敏电阻检测左转="" portc|="">6);><> } } else { PORTC&=~(1<6); 不执行转向="">6);> } void chaoshengbo_check() { SREG&=~(1<7); portd|="">7);><6; delay_20us();="" portd&="">6;><6);>6);> DDRD&=~(1<> PORTD|=1<> while((PIND&0xfb)==0); success_flag=0; GICR|=1<6; tcnt1h="0;" tcnt1l="0;" sreg|="">6;><7;>7;><5); gicr&="">5);><6); if(success_flag="=1)" {="" datavel/="119;" s[h++]="datavel;" if(h="=3)" {="" h="">6);> datavel=(s[1]+s[0]+s[2])/3; if(datavel>=300) PORTC&=~(1<6); 不执行转向="">6);> { PORTC|=1<6; 执行左转="" portc|="">6;><> } } } } void delay_ms(uchar z) { uchar x,y; for(x=0;x<6;x++) for(y="">6;x++)> 图14 系统原理图 参考文献 【1】周乐挺.传感器与检测技术.北京:高等教育出版社,2005-12 .102-110页 【2】曹克澄.单片机原理及应用.北京:机械工业出版社,2009-1 .109-138页 【3】汪吉鹏.微机原理与接口技术.北京:高等教育出版社,2001 .128-189页 【4】王延才.电子技术.北京:高等教育出版社,2001.129-145页 【5】宋丰华.现代光电器件技术及应用.北京:国防工业出版社,2004-7 .32-138页 【6】马潮、AVR单片机嵌入式系统原理与应用实践.北京:航空航天大学出版社. 31 青岛理工大学毕业设计(论文)用纸 摘 要 智能作为现代社会的新产物,是以后的发展方向它可以按照预先设定的模块在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或更高的目标。 本文设计是基于AT89s52微处理器的机器人车体系统和XL02-232AP1微功率无线透明传输模块的无线通信系统,以此实现小车的前进、后退、停止、及直角特别是圆弧形拐弯,本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法及特色与创新点等可以为自动运输机器人、采矿机器人、家用自动清洁机器人,特别是智能足球机器人的设计与普及有一定的参考意义。同时小车可以作为玩具的发展方向,为中国玩具市场技术含量的缺乏进行一定的弥补,实现经济收益,形成商业价值。 关键词:单片机,智能小车,AT89s52,XL02-232AP1 第I页 青岛理工大学毕业设计(论文)用纸 ABSTRACT As a new product of modern society,intelligence is the trend in future development.It can work in some specific environment according to the mode which sets in advance.Dispensing with behavior adjustment management,but it can achieve the expected,even higher goal. This design is based on the robot body AT89s52 microprocessor system and XL02-232AP1 transparent micro-power wireless transmission module of the wireless communication system,to achieve the car forward, backward, stop, especially the arc-shaped bend at right angles The design mainly reflected a smart-car model,The theoretical scheme,analysis method,uniqueness and innovation etc.that pointed in this paper,I think they are will be certain reference value in design an popularity of automatic or semi-automatic robot such as automatic transportation robot,prospecting robot,cleaning household robot, especially intelligent soccer robot.This car can be used as a model of development of toy,to make up the deficiency of technical content in the Chinese toy market,to realize economic profit and to form commercial value. KEY WORDS:MCU,smart-car robot, AT89s52,XL02-232AP1 第II页 青岛理工大学毕业设计(论文)用纸 前 言 ........................................................................................................................ 1 第1章 设计环境建设 ............................................................................................. 4 1(1 硬件环境 .................................................................................................. 4 1.1.1 硬件系统铺设 .................................................................................. 4 1.1.2 硬件设备 ......................................................................................... 4 1.2 软件环境 .................................................................................................... 5 第2章 智能小车车体 ............................................................................................. 6 2.1 智能小车的硬件结构 ................................................................................. 6 2.1.1 主控芯片的选择 .............................................................................. 6 2.1.2 主要芯片介绍 .................................................................................. 6 2.1.3 小车控制板电路图 ......................................................................... 11 2.1.4 小车电路板成品样图 ..................................................................... 11 2.2 智能小车关键代码 .................................................................................. 12 2.3 智能小车程序介绍 .................................................................................. 12 2.3.1 上位机程序介绍 ............................................................................ 12 2.3.2 下位机程序介绍 ............................................................................ 13 第3章 无线收发模块 ........................................................................................... 20 3.1 无线模块的选择 ...................................................................................... 20 3.1.1 XL02-232AP1的端口定义及连接示意图 ...................................... 20 3.1.2 无线模块的性能 ............................................................................ 22 3.2 配置接口通讯协议 .................................................................................. 24 3.2.1 接口 ............................................................................................... 25 3.2.2 命令 ............................................................................................... 25 3.3 参数范围 .................................................................................................. 26 3.4 发送串口控制命令 .................................................................................. 26 第4章 电机驱动模块 ........................................................................................... 27 4.1 电机方案的论证与比较 ........................................................................... 27 第III页 青岛理工大学毕业设计(论文)用纸 4.2 电机驱动芯片 .......................................................................................... 27 第5章 经验总结与展望 ....................................................................................... 29 5.1 设计中解决的问题 .................................................................................. 29 5.2 总结与展望 .............................................................................................. 30 致 谢 ...................................................................................................................... 31 参考文献 ................................................................................................................ 32 附录一:原理图 ..................................................................................................... 33 附录二:上位机主要程序代码: .......................................................................... 34 第IV页 青岛理工大学毕业设计(论文)用纸 前 言 1、课题背景及意义 [1] 机器人学是一门与机器人设计、制造和应用相关的科学。机器人学又称为机器人技术或机器人工程学,主要研究机器人的控制与被处理物体之间的相互关系。机器人学涉及的专业领域很多,主要内容有运动学和动力学、系统结构、传感技术、控制技术、行动规划和应用工程等。 智能车是机器人学中的一类,是具有自主性、适应性和交互性等于一体的综合系统,它融合了自动控制、人工智能、机械工程、信息融合、传感器技术、图像处理技术以及计算机等多门学科的最新研究成果,对智能车的研究不仅具有理 [2]论意义而且具有实际价值。 智能车在我们的现实生活中的应用意义极大。人类的研究活动已摆脱了地球生物圈的束缚而广泛地进入外层空间和海洋深处。对月球和太阳系其他行星的探测,对太阳系以外的宇宙进行考察,对数千米以下的海底的研究,都是目前单靠人力所不能及的。智能机器人正在代替人们完成这些任务。在战场上的军事活动中,在恶劣环境条件下的生产劳动中,凡不宜由人直接承担的任务,均可由智能机器人代替,如智能小车可以适应不同环境,不受温度、湿度等条件的影响,完成危险地段、人类无法介入等特殊情况下的任务。 本设计是智能小车的运动轨迹的研究,是智能小车研究领域的重要组成部分,初步实现了多学科领域的综合研究。 2、国内外研究及现状 从20世纪70年代,欧美等发达国家开始进行无人驾驶车的研究,大致可以 [3]分为三个阶段:军事用途、高速公路和城市环境。在军事用途方面,早在80 第1页 青岛理工大学毕业设计(论文)用纸 年代初期,美国国防部就资助自主陆地车辆ALV(AutonomousLandVehicle)的研究。进入21世纪,美国国防部连续举办大挑战(Grand Challenge)比赛 活动,对促进智能车辆技术交流与创新起到很大激励作用。随着现实需要,智能车辆的研究逐渐转向民用领域,最早实现在高速公路应用领域。高速公路无人驾驶研究的典型代表有美国CMU大学的NavLab-5系统,意大利帕尔玛大学的ARGO系统和德国联邦国防大学的VAMP系统。 [4]在城市交通方面,欧洲Yamaba公司推出了旅游接待智能车辆CyberCab 。在2005年日本爱知世博会上,丰田公司成功演示了ITMS无人驾驶公交系统。美国在城市环境智能车辆研发方面起步较晚,目前与欧洲和日本存在一些差距。 由于起步较晚,国内智能车研究水平总体上与发达国家相比存在不小的距离。但经过各高校和研究单位的不懈努力,仍取得了阶段行的成果。国内清华大学、国防科技大学、上海交通大学、西安交通大学、吉林大学、同济大学和南京理工大学等都有过智能车的研究项目。我国的智能车发展也主要运用在军事用途、高速公路和城市交通三个领域。 “八五”、“九五”期间由国内六所重点大学联合研制成功了我国第一辆智能车ALVLAB1和第二代智能车ALVLAB2。目前,我国正在组织研究第三代的陆地自主车ALVLAB3。THMR-V(TsingHua Mobile Robot V)清华V型智能车是一个比较成功的范例。它由清华大学计算机系智能技术与系统国家重点实验室在中国科学院院士张钹主持下研制的新一代智能移动机器人,兼有面向高速公路和一般道路的功能 。 除了清华大学,越来越多的研究机构、学者也加入到这一新兴学科中来。比如上海交通大学设计的自动驾驶汽车,能根据道路弯曲程度的变化,实时计算出车辆的转向盘角度输入,控制车辆按预设道路行驶。 3、课题研究内容 智能车的研究是纷繁复杂的,而无论是怎样的功能,车体的运动系统是可少的。 [5]本文设计方案以多功能的智能小车作为载体,以单片机AT89S52为核心, 第2页 青岛理工大学毕业设计(论文)用纸 以XL02-232AP1微功率无线透明传输模块为辅助系统,由驱动执行电路完成小车的行驶,通过计算机的控制对小车状态作出实时反应,并输出相应的控制指令;能够实现小车的前进,停止,后退,三个等级的左右转向,以及小车的弧形运动。是智能车的基础研究领域。 第3页 青岛理工大学毕业设计(论文)用纸 第1章 设计环境建设 1(1 硬件环境 要迅速反应、精确计算高效率的完成复杂功能,就需要一个运作稳定良好的硬件环境。而提升硬件环境质量。 高质量的硬件可以提供更加清晰丰富的数据,收集足够而标准的有用信息。当然,硬件系统牢固的架构与良好的信息传导性能,将会极大地提高整个系统的信息传递速率与系统稳定性,也是提高系统有效信息传递效率的可靠保证。硬件系统铺设过程中要预留有足够的调试空间,要有目的有计划的建设系统关键节点,足够而适当的调试空间可以提升系统的各方面适应性和可靠性。 1.1.1 硬件系统铺设 决策系统 串口操作指令 无线收发模块 智能小车 计算机 图1-1 1.1.2 硬件设备 本设计中用到的硬件设备包括:可执行串口控制指令的智能小车一辆,无线 第4页 青岛理工大学毕业设计(论文)用纸 收发模块一套,USB转串口设备一套,软件开发包一套,电池、导线若干。 1.2 软件环境 设计中用到的软件操作系统是windows xp,编程中用到了vc,在模拟仿真中用到了Keil C,protel,proteus等。 第5页 青岛理工大学毕业设计(论文)用纸 第2章 智能小车车体 智能小车车体是整个设计中的核心,它是这个系统运作的最终执行者。它表现了整个智能小车设计的系统执行效率。 2.1 智能小车的硬件结构 2.1.1 主控芯片的选择 方案一:采用单个单片机作为主控芯片。由于AT89S52具有32个I/O口,能满足小车各部分对I/O口的需求,另外只用一个单片机可以很好的控制小车。 方案二:采用双单片机作为主控芯片。利用两块AT89S52分别对小车的各部分进行检测和控制,虽然减轻了单个单片机的负担,提高了系统的工作效率,但是存在很多的I/O的资源浪费,并且两个单片机不容易控制,所以不采用该方案。使用方案一。 2.1.2 主要芯片介绍 [6]A AT89S52芯片 图2-1 第6页 青岛理工大学毕业设计(论文)用纸 AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。 P0 口:P0口是一个8位漏极开路的双向I/O口。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。 此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。 P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。 此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每 第7页 青岛理工大学毕业设计(论文)用纸 当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 B L293D芯片 图2-2 [7]L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D将2个H-桥电路集 第8页 青岛理工大学毕业设计(论文)用纸 成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。每1个电机需要3个控制信号EN1、EN2、IN1、IN2,其中EN1、EN2是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。选择一路I/O口,经反向器74HC14分别接IN1和IN2引脚,控制电机的正反转。 L293D额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,但经过实验,Vs电压应该比Vss电压高,否则有时会出现失控现象。L293D内部集成了续流二极管,因此可以直接驱动感性负载,如线圈和电机。 表2-1是其使能、输入引脚和输出引脚的逻辑关系: 表2-1 EN A(B) IN1(IN3) IN2(IN4) 电机运行情况 H H L 正转 H L H 反转 H 同IN2(IN4) 同IN1(IN3) 快速停止 L X X 停止 C MAX232芯片 MAX232芯片(如图2-3)是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。 第9页 青岛理工大学毕业设计(论文)用纸 图2-3 引脚介绍: 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。 主要特点: (1)符合所有的RS-232C技术标准 (2)只需要单一 +5V电源供电 (3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V 第10页 青岛理工大学毕业设计(论文)用纸 电压V+、V- (4)功耗低,典型供电电流5mA (5)内部集成2个RS-232C驱动器 (6)内部集成两个RS-232C接收器 2.1.3 小车控制板电路图 涉及到的主要配件有:300rad/min直流电机,ATmega8515L芯片,MAX232 芯片,滤波器,电容,电阻,二级管,串口接口,开关等,智能小车的原理图详见附录1。 2.1.4 小车电路板成品样图 图2-4 智能小车车体及无线接收模块 第11页 青岛理工大学毕业设计(论文)用纸 图2-5 无线发射模块 图2-6 USB转串口模块 2.2 智能小车关键代码(见附录2) 本程序在Icc AVR仿真调试IDE中由C语言编写后生成 .Hex文件,再由双龙MCU下载程序SLISP下载到小车单片机上。它的功能为接受串口传入的16位控制命令01、02、03、04、05,并根据接收到的16位控制命令实现小车的前进、后退、左转、右转及停止功能。此程序不具有应答反馈和路径判断功能,属于完全被动的执行上位机命令的客户端程序。 2.3 智能小车程序介绍 本设计程序分为上位机和下位机,上位机主要通过MFC控制窗口对小车发送运动指令,上位机通过MFC读取指令,由计算机的串口发送给XL02-232AP1无线发送模块。无线接收模块接收命令后进行分析解码,传送给单片机AT89S52,单片机读取指令,发送控制命令给电动机驱动芯片L293D,驱动电机运转,从而实现智能小车的运动。 2.3.1 上位机程序介绍 上位机是用MFC写成的应用程序,主要目的为通过COM口向串口发送数据到无线发送模块,经接收模块接收后控制小车的运行轨迹。 第12页 青岛理工大学毕业设计(论文)用纸 例如:小车的左直角拐弯的控制代码如下 void CRobot2Dlg::OnButton7() { // TODO: Add your control notification handler code here CSerial ser; char buf[1]; buf[0]=Rob_left_one; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } 通过运行程序,点击此按钮可以实现小车的左转弯的运动。 2.3.2 下位机程序介绍 A 主要功能及实现 本设计主要实现了只能小车在运动过程中的直行,后退,停止及转弯,下面详细介绍各功能的实现情况。 sbit input1=P1^3; sbit input2=P1^2; sbit input4=P1^0; sbit input3=P1^1; sbit en=P3^6; 分别定义input1,input2,input4,input3为P1口的第3,2,0,1位,以便进行位操作,定义en为p3口的第六位。 首先进行单片机的初始化。 TMOD=0x22; TH0=0x38; 第13页 青岛理工大学毕业设计(论文)用纸 TL0=0x38; TH1=0xfd; TL1=0xfd; TR0=1; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; ET0=1; 对定时器方式选择寄存器TMOD的操作,确定是按定时器的工作模式,TH0和TL0分别是定时器0的高低8位,赋初值为0x38,TH1和TL1分别是定时器1的高低八位,赋初值为0xfd。TR0=1,TR1=1表示分别启动T0和T1计数器REN为接收控制位,REN=1表示允许接收。SM0=0,SM1=1表示单片机的串行口的通信方式是10位异步收发方式,所用的波特频率则由定时器控制完成。在中断初始化方面,EA=1表示开单片机所有中断,ES=1开串行口中断,ET0=1开TO中断,初始化完毕,进入主程序循环。 主程序中,建立void carmov(uchar left,uchar right)函数,方便主程序循环语句while()的调用。 利用switch语句的判断,例如小车的右转: case 0x06: carmov(UF,US); break;//小车原地 case 0x07: carmov(UF,UL); break;//小车右转弧形拐弯1级 case 0x08: carmov(UF,UM); break;//小车右转弧形拐弯2级 单片机对接收到的指令通过上述语句进行判断,若收到的为0x08,则执行第三条语句,调用carmov函数,函数的两个初始值分别为UF和UM,在程序中已定义#define UF 1,#define UM 2,运行carmov函数,首先进行左轮运动情况的判断,在此例中,我们选择左轮的初值为UF。 if(left==UF) 第14页 青岛理工大学毕业设计(论文)用纸 { input1=1; input2=0; } input1和input2分别赋值为1和0,表示小车左轮全速前进。 继续运行程序进行小车的右轮运动情况的判断,此例中,我们选择右轮的 初值为UM。 else if(right==UM) { if(num<60)>60)> { input4=1; input3=0; } else { input4=1; input3=1; } } 首先判断num是否小于60,若小于,则将input4和input3分别赋值为1 及0,既右轮前进,否则将二者赋值为1和1,右轮停止。 通过左右轮的单独控制,完成小车的向右2级弧形拐弯。在本程序设计中, 巧用定时器中断模拟产生了PWM信号,以实现控制舵机。 void tim0() interrupt 1 { num++; if(num>=90) 第15页 青岛理工大学毕业设计(论文)用纸 num=0; } 简单介绍单片机模拟产生PWM信号。单片机系统实现对电机的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。 在此,我们设计num初值为0,num自加,如果num>=90时,则将num变为0继续中断程序运行,在此我们用定时器中断模拟出PWM波,将其分成90等份,在小车转动过程中,可以限制num值的大小而调整PWM波中高电平的占空比,从 [1]而实现小车电机在一个PWM周期波中的转数控制,达到小车拐弯角度的控制。 具体的设计过程:例如想让小车转向左极限的角度,它的正脉冲为2ms,则负脉冲为脉冲周期20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到电机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使小车运动。 为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。 B 程序流程图 第16页 青岛理工大学毕业设计(论文)用纸 开始 定时器初始化开 定时器中断 有中断 改变定时时间输 出管脚取反 是否为长中断 运行其他中断程 序 中断返回 图2-7 产生PWM信号流程图 第17页 青岛理工大学毕业设计(论文)用纸 开始 接收中断标志位 RI清零 读取数据 结束 图2-8 串口中断程序流程图 开始 num++ 是 num>=90? num=0 否 结束 图2-9 定时器中断流程图 第18页 青岛理工大学毕业设计(论文)用纸 开始 初始化 前进 后退 停止 原地左向左弧向右弧原地右 转 形转弯 形转弯 转 图2-10 主程序流程图 第19页 青岛理工大学毕业设计(论文)用纸 第3章 无线收发模块 在小车系统中,控制系统的基本任务是:接收系统通过无线通信发射装置传来的运动控制指令,然后根据接收到的运动指令控制小车左、右轮的停止或转动以实现规划的运动。机器人能否正确接收运动控制指令,决定于无线通信系统的性能。所以通信速率高、集成度好、可靠性高、抗干扰能力强的无线通信系统对 [8]于正确实现小车的运动规划具有重要的意义。 3.1 无线模块的选择 本设计中采用一款低功耗超高频的XL02-232AP1数据收发模块,它具有通信速率高、性能可靠、体积小的优点,只接少许外围电路即可工作,使用非常方便,既可发送又可接收。 [8]其特点主要有: ?300米传输距离 ?工作频率在428.8,435.1MHz,(默认433.92MHZ) ?可设置ID:范围0,65535,默认ID:12345 ?串口速率1.2K---38.4KBPS.(默认9.6KBPS) ?数据格式8N1 ?方便快捷的参数设置 3.1.1 XL02-232AP1的端口定义及连接示意图 第20页 青岛理工大学毕业设计(论文)用纸 A 端口定义: 表3-1 管脚 定义 说明 电平 备注 1 VCC 电源 +5v 模块的第一方形焊盘 2 GND 地 GND 3 TXD 模块数据输出 TTL 4 RXD 模块数据输入 TTL 5 SET 设置时拉低,平时悬空 进入设置模块时,请先将此端 口拉低,再给模块上电,此时 绿灯长亮 6 GND 地 GND 7 NC 不连接 B 连接示意图 图3-1 第21页 青岛理工大学毕业设计(论文)用纸 图3-2 3.1.2 无线模块的性能 A 通信方式 在智能小车运动过程中,机器人的无线通信协议采用广播式通信方式。上位机通过无线通信设备,发出数据,小车从数据串中确定出发给自己的命令 B 程序 小车无线接收程序是串行通信中断服务程序,其流程框图见图3-3“串行通信中断程序流程”。 第22页 青岛理工大学毕业设计(论文)用纸 开始 Y N 同步标志1, 帧头1-55H? 置同步标志-1 Y N Y N 同步标志2, 帧头2-FAH, 置同步标志-2 Y N 置同步标志-0 N 帧头3-55H, 同步标志3, 置同步标志-3 Y Y N 置同步标志-0 开始接收数据,送到暂存区,数 据和CRC校验 N 最后一个字节, Y N 最后字节-CRC? Y 置同步标志-0 置同步标志-0 置新接收成功标志-1 恢复现场返回 图3-3 串行口通信中断程序流程 Y 第23页 青岛理工大学毕业设计(论文)用纸 由流程图3-3可知,必须通过启始同步码3道关验证,才能开始接收数据。一帧数据接收完后,字节还要进行CRC(循环冗余校验)。CRC校验字节是每个数 [9]据字节相互异或后的结果。接收到的数据校验正确则接收,否则放弃这帧数据。 干扰与噪声 C 造成无线通信系统可靠性不高的原因很多,主要原因是存在着各种噪声和干扰。它们的来源不同,有电台干扰、通信信号干扰及驱动左右轮的直流电机产生的干扰,以及系统设备本身所产生的各种噪声等。 为了抑制系统干扰及噪声,应尽可能提高无线模块的工作电压和发射功率。发射器是通过通信线缆与上位机相连的,发射器输入端加上光电隔离电路,以排除上位机的干扰。使用的发射和接收天线的长度保持一致,且均垂直于水平面向上。通信中出现失误的情况是难以避免的,因此在通信协议中加入起始帧头和校验码,通过抗干扰方法设计接收软件程序,提高数据接收的准确性。 3.2 配置接口通讯协议 图3-4 第24页 青岛理工大学毕业设计(论文)用纸 操作步骤:按图3-4中标识,把无线模块插入转接板相对位置。将无线发射 模块接到计算机串口上面,并将无线接收模块接到小车串口上。首次使用无线收 发模块要进行调试:将电源开关置于ON,电源指示灯红灯亮,再将设置开关置 [7]于ON,设置状态灯绿灯亮。此时,可以用相关软件调试无线收发模块通信协议。 本设计中,采用RF-Magic调试无线模块。在正常通讯情况下,设置开关置于OFF。 3.2.1 接口 通讯接口: RS232 – TTL 通讯速率: 9600bps 通讯格式: 1 start bit , 8 data bits , no parity bit , 1 stop bit 注意:在配置模式下串口恒为以上格式。 配置使能:config pin 低电平进入配置模式 config pin 高电平进入正常模式 频率计算:x = 设置RF频率参数 TX = 6.4Mhz * (67 + x/65535) 例如:频率高字节 = 0xcc; 频率低字节 = 0xcc; 则 x = 0xcccc TX = 6.4Mhz * (67 + 0xcccc/0xffff) = 6.4Mhz * (67 +0.8) = 433.92Mhz 例如:频率高字节 = 0xaa; 频率低字节 = 0x00; 则 x = 0xaa00 TX = 6.4Mhz * (67 + 0xaa00/0xffff) = 6.4Mhz * (67 +0.664) = 433.05Mhz 3.2.2 命令 第25页 青岛理工大学毕业设计(论文)用纸 (1)写命令:0xF8 (2)数据格式: ? 主机发送: 0xF8+串口速率+RF发射功率+ RF频率高字节+RF频率低 字节+ ID高字节+ID低字节+和校验字节 注:和校验字节 = 所有参数累加和的低字节(不包括命 令字节) ? 模块应答:配置成功应答0xAA,否则无应答 3.3 参数范围 表3-2 功率 01-04 ;0dbm,5dbm,10dbm,15dbm RS232速率 01-06;1.2kbps,2.4kbps,4.8kbps,9.6kbps,19.2kbps,38.4kbps 频率 428.8MHZ – 435.1MHZ; 0x0000 – 0xfbff ID 0x0000 – 0xffff 3.4 发送串口控制命令 [9]无线模块接口为串口,采用9600波特率通信,串口控制程序实现串口的开启,发送命令,接收回馈信息,关闭串口等复杂过程,确保无线通信的稳定性和可靠性。 第26页 青岛理工大学毕业设计(论文)用纸 第4章 电机驱动模块 本次设计中采用了L293D驱动两**立直流电机分别控制小车的左后轮和右后轮,向小车发送左转或右转指令时,可以分别控制两轮的转速,使程序简洁,方便。前轮则用一个可自由旋转360度的小轮代替,无论是停止还是转向,前轮都可以随之改变,方便操作,简化了程序的复杂性。 电机驱动芯片方面,采用的是L293D驱动直流电机转动,既方便简洁,又实惠耐用。 4.1 电机方案的论证与比较 方案一:采用步进电机,精确度较高,一般步进电机的精度为步进的3%-5%,且不积累,缺点是体积较大,速度较慢,且价格较高。 方案二:采用直流电机,直流电机运转平稳,可以保证小车运行的精度,虽然其控制的精确度没有直流电机的高,但完全可以满足本设计中的要求,而且价格也比较合理。 4.2 电机驱动芯片 [10]L293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。 L293D芯片的详细介绍请参照论文中的2.1.1-b 第27页 青岛理工大学毕业设计(论文)用纸 图4-1 第28页 青岛理工大学毕业设计(论文)用纸 第5章 经验总结与展望 5.1 设计中解决的问题 首先遇到的问题是小车CPU芯片的选择,在权衡各种问题及考虑到自己掌握的知识等问题后,选择使用了AT89S52。首先,这个芯片与89C51类似,而89C51使我们已经学过的单片机,其次,AT89S52的功能及引脚完全可以满足此次设计的需要。 在进行上位机与下位机传输的问题上,经过上网搜索与老师的答疑,选择了一款低功耗超高频的XL02-232AP1数据收发模块,它可以解决在无线模块中干扰最大的噪声问题,既方便又实惠。在电机驱动模块上,选择了两个直流电机分别单独控制小车的左右轮,解决了在转弯时单片机程序控制同时控制小车左右轮不同转速的问题。 设计小车弧形拐弯时遇到的最大问题是怎样实现小车两轮的不同转速,在咨询老师和查阅相关书籍后得知,可以用单片机模拟实现PWM波,PWM波可控制电机的运转。我们可以巧妙的利用定时器的中断来实现单片机模拟PWM波的产生,利用变量num的大小调整可以调整一个波形周期内高电平所占的占空比,从而实现车轮在一个周期内的转数,从宏观上即可实现小车的弧形拐弯。 上位机的程序也是比较苦难的,由于平时很少接触MFC窗口的编程,开始编写上位机程序时遇到了不小的阻力,但是指导老师适时的给我们辅导了这方面的知识,使我在编程中解决了不小的困难。 电源选择方面,无线驱动用的电池必须满足6V以上方可实现其正常运行。由于用到的电机耗电量比较大,六节干电池只用了十几分钟就耗完了,刚开始不知道,以为是编程出现了问题,不能满足程序的长时间运行,在考虑并调试之后,终于发现了这一个问题,问题得到圆满的解决。 第29页 青岛理工大学毕业设计(论文)用纸 5.2 总结与展望 智能小车的设计一直是我所想做的,它不但满足了我的兴趣爱好,而且还能将大学四年中的知识很好的应用到设计中。 此次设计主要是嵌入式方面的内容,用到的软件知识有MFC,VC等,在模拟实现过程中也用到了protel和protus等,硬件方面用到了了单片机的相关知识。设计中很好的将这些知识联系统一起来,做到融会贯通。最重要的是在此次设计中,解决了很多平时理论学习汇总很少遇到的实际问题,例如小车电源的选择过程中,费了很大的周折,最让我记忆深刻的是小车电机电池的问题。还有就是USB转串口的问题,虽然最后未能圆满解决此问题,但是解决问题的过程中还是收获不少。 随着科技的迅猛发展,智能已经成为了现在的高科技的热词,智能机器人可以解决无数人类无法或者是很难解决的难题。智能是大势所趋,而智能车作为智能机器人中一类必不可少的组成部分,最近几年发展更是迅速,各个国家更是投入大量资金。它广泛涉及人工智能、计算机视觉、自动控制、精密仪器、传感和信息等一系列学科的创新研究,其研究成果可广泛应用于工业、农业、医药、军事、航空、信息技术等实际领域,集中反映出一个国家的高科技水平和综合国力,是国家综合国力强大的标志,也是人类文明进步的标志。 第30页 青岛理工大学毕业设计(论文)用纸 致 谢 此次设计过程中,非常感谢易宏杰老师对我的悉心教导,正是由于老师的细心指导,才让我在遇到很多问题是能够豁然开朗,能够找到解决的办法,让我不气馁,最终走向成功。 另外还要感谢我们宿舍的郭勤宝同学,在遇到问题是能够第一时间给予我解决问题的建议,能够为我找到另一条路。感谢本设计小组的全体同学,在我准备论文过程中做过的有益的探讨,感谢系领导和老师在我大学四年中无微的关怀,让我顺利完成自己的大学学习。 最后,我还要感谢养育我的父母和一直关心我、爱护我的亲人和朋友,是他们深切的鼓励和鞭策使我一直保持前进的动力和希望,在此献上我最衷心的谢意和最诚挚的祝福~ 第31页 青岛理工大学毕业设计(论文)用纸 参考文献 [1]船仓一郎,土屋尧,崛桂太郎(日).机器人控制电子学.北京:科技出版社.2004.11, 12 [2]陈继荣.智能电子制作创新制作-机器人制作入门.北京:科学出版社.2007.66,71 [3]Rowel O.Atienza,Marcelo H.Ang Jr. A Flexible Control Architecture for Mobile Robots:An Application for a Walking Robot.Journal of Intelligent and Robotic Systems,Springer Netherlands.2001.29,48 [4]V.E.Pavlovsky,S.A.Polivtseev,T.S.Khashan.Intelligent Technical Audition and Vision Sensors for Walking Robot Realizing Telepresence Functions.Climbing and Walking Robots,2006,Vol.10:387,397 [5]江晋剑,钱萌.一种基于AT89S52的简易智能小车设计:科技论文.成都:电子科技大学高 能所,2007.97,100 [6]胡汉才.单片机原理及接口技术(第二版).北京:清华大学出版社,2004.61,65.206, 207.337,338 [7]肖伟,武强,闫秀桃,刘根.L293D在护士移动机器人主控电路板设计中的应用.国外电 子元器件,2007,Vol.11:64,66 [8]赵负图.光电检测控制电路手册.北京:化学工业出版社.2001.34,39 [9]赵负图.无线电接收发射应用集成电路手册.北京:化学工业出版社.2003.45,54 [10]何立民. MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大 学出版社,2001.81,90 第32页 青岛理工大学毕业设计(论文)用纸 附录一:原理图 第33页 青岛理工大学毕业设计(论文)用纸 附录二:上位机主要程序代码: void CRobot2Dlg::OnUp() { //实现小车的向前移动 CSerial ser; char buf[1]; buf[0]=Roa_forward; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } void CRobot2Dlg::OnLeft() { //实现小车的向左直角拐弯 CSerial ser; char buf[1]; buf[0]=Roa_left_one; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } void CRobot2Dlg::OnDown() { // 实现小车的向后移动 CSerial ser; char buf[1]; 第34页 青岛理工大学毕业设计(论文)用纸 buf[0]=Roa_back; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } void CRobot2Dlg::OnStoper() { // 小车停止 CSerial ser; char buf[1]; buf[0]=Roa_stop; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } void CRobot2Dlg::OnRignt() { // 小车向右弧形拐弯2级 CSerial ser; char buf[1]; buf[0]=Roa_right_three; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } 第35页 青岛理工大学毕业设计(论文)用纸 void CRobot2Dlg::OnButton7() { //小车向左直角拐弯 char buf[1]; buf[0]=Rob_left_one; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } void CRobot2Dlg::OnButton6() { // 小车向左弧形拐弯2级 CSerial ser; char buf[1]; buf[0]=Rob_left_three; ser.Open(com,9600); ser.SendData(buf,com); ser.Close(); } 下位机主要程序代码: #include 第36页 青岛理工大学毕业设计(论文)用纸 #define uchar unsigned char #define UF 1 #define UM 2 #define UL 3 #define BL 4 #define ST 5 #define BF 6 #define US 7 #define BM 8 #define BS 9 sbit input1=P3^4; sbit input2=P2^0; sbit input4=P3^6; sbit input3=P2^1; sbit enlef=P3^5; sbit enrig=P3^7; uchar rec,nub; void init() { //初始化操作 nub=0; rec=0; enlef=0; enrig=0; TMOD=0x22; TH0=0x38; TL0=0x38; 第37页 青岛理工大学毕业设计(论文)用纸 TH1=0xfd; TL1=0xfd; TR0=1; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; ET0=1; } void carleft(uchar k_lef,uchar cnt_lef) { if(k_lef==1) { input1=1; input2=0; } else if(k_lef==2) { input1=0; input2=1; } if(nub { enlef=1; } else { 第38页 青岛理工大学毕业设计(论文)用纸 enlef=0; } } void carright(uchar k_rig,uchar cnt_rig) { if(k_rig==1) { input4=1; input3=0; } else if(k_rig==2) { input4=0; input3=1; } if(nub { enrig=1; } else { enrig=0; } } void carmov(uchar left,uchar right) { //左轮运动判断 switch(left) { 第39页 青岛理工大学毕业设计(论文)用纸 case UF: carleft(1,90); break; case UM: carleft(1,60); break; case UL: carleft(1,30); break; case US: carleft(1,18); break; case ST: carleft(0,0); break; default: break; } //右轮运动判断 switch(right) { case UF: carright(1,90); break; case UM: carright(1,60); break; case UL: carright(1,30); break; case US: carright(1,18); break; case ST: carright(0,0); break; default: break; } } void main() { init(); while(1) { switch(rec) { case 0x11: carmov(BF,BF); break;//小车后退 case 0x12: carmov(UF,UF); break;//小车前进 case 0x13: carmov(US,UF); break;//小车直角左转 第40页 青岛理工大学毕业设计(论文)用纸 case 0x14: carmov(UL,UF); break;//小车弧形左转1级 case 0x15: carmov(UM,UF); break;//小车弧形左转2级 case 0x16: carmov(UF,US); break;//小车直角右转 case 0x17: carmov(UF,UL); break;//小车弧形右转1级 case 0x18: carmov(UF,UM); break;//小车弧形右转2级 case 0x19: carmov(ST,ST); break;//小车停止 default: break; } } } void ser() interrupt 4 { RI=0; rec=SBUF; } void time0() interrupt 1 { nub++; if(nub>=90) nub=0; } 第41页 转载请注明出处范文大全网 » 毕业设计论文红外避障小车范文二:循迹避障小车毕业设计论文
范文三:毕业设计论文__红外避障小车
范文四:自动避障小车-毕业设计论文
范文五:毕业设计(论文)-单片机智能循迹避障小车