您的当前位置:首页基于单片机的智能循迹小车毕业论文

基于单片机的智能循迹小车毕业论文

2024-03-12 来源:爱问旅游网


基于单片机的智能循迹小车毕业论文

目 录

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

I

5.1 硬件的测试 ............................................................................................................. 22 5.2 系统的软件调试 ..................................................................................................... 22 结 论 ...................................................................................................................................... 24 致 谢 ...................................................................................................................................... 25 参考文献 .................................................................................................................................. 26 附录A 原理图及PCB图 ..................................................................................................... 27 附录B 附录C

程序代码 .................................................................................................................. 32 硬件实物图 .............................................................................................................. 37

II

沈阳理工大学

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驱动模块、直流电机、小车底板、电源模块等组成。

路 径 小车 电源模块 单片机 电路 红外光电循迹传感器模块 H桥 驱动模块 直流电机 图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存储空间

是否可以直接使用串口下载

8

STC89C52单片机 AT89S52单片机 8K字节 512字节 内带4K字节 可以

8K字节 256字节 无 不可以

沈阳理工大学

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 小车运动逻辑

使能端A 1 1 1 1 1 1

使能端B 1 1 1 1 1 1

左电机 IN1 1 1 1 0 0 1

IN2 0 0 0 1 1 1

右电机 IN3 1 0 1 1 0 1

IN4 0 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(cnt1if(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<6) {

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

因篇幅问题不能全部显示,请点此查看更多更全内容