1、摘 要进入二十一世纪,随着计算机技术和科学技术的不断进步,机器人技术较以往已经有了突飞猛进的提高,智能循迹小车即带有视觉和触觉的小车就是其中的典型代表。本文论述了基于单片机的智能循迹小车的控制过程。智能循迹是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹小车是一个运用传感器、单片机、电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能够自动实现循迹导航的高新科技。该技术已经应用于无人驾驶机动车,无人工厂,仓库,服务机器人等多种领域。本设计采用 AT89C51 单片机作为小车的控制核心;用红外探测传感器作为小车的循迹模块来识别白色路面中央的黑色引导
2、线,采集信号并将信号转换为能被单片机识别的数字信号;采用驱动芯片 L298 构成双控制直流电机,其中软件系统采用 C 程序,本设计的电路结构简单,容易实现,可靠性高。关键词:单片机;智能;自动循迹。目 录1 绪 论 .12 设计要求 .23 系统设计分析 .24 系统基本组成 .25 设计步骤及流程图 .26 系统所需元器件 .37 主要模块介绍 .37.1 L298 驱动模块简介 .37.2 LM016L 显示模块 .48 小车运动逻辑 .69 系统原理图 .610 系统程序设计 .711 系统仿真 .1712 结果分析 .1713 感想与收获 .191 绪 论智能循迹小车又被称为 Auto
3、mated Guided Vehicle,简称 AGV,是二十世纪五十年代研发出来的新型智能搬运机器人。智能循迹小车是指装备如电磁,光学或其他自动导引装置,可以沿设定的引导路径行驶,安全的运输车。工业应用中采用充电蓄电池为主要的动力来源,可通过电脑程序来控制其选择运动轨迹以及其它动作,也可把电磁轨道黏贴在地板上来确定其行进路线,无人搬运车通过电磁轨道所带来的讯息进行移动与动作,无需驾驶员操作,将货物或物料自动从起始点运送到目的地。AGV 的另一个特点是高度自动化和高智能化,可以根据仓储货位要求、生产工艺流程等改变而灵活改变行驶路径,而且改变运行路径的费用与传统的输送带和传送线相比非常低廉。AG
4、V 小车一般配有装卸机构,可与其它物流设备自动接口,实现货物装卸与搬运的全自动化过程。此外,AGV 小车依靠蓄电池提供动力,还有清洁生产、运行过程中无噪音、无污染的特点,可用在工作环境清洁的地方。随着社会的不断发展,科学技术水平的不断提高,人们希望创造出一种来代替人来做一些非常危险,或者要求精度很高等其他事情的工具,于是就诞生了机器人这门学科。世界上诞生第一台机器人诞生于 1959 年,至今已有 50 多年的历史,机器人技术也取得了飞速的发展和进步,现已发展成一门包含:机械、电子、计算机、自动控制、信号处理,传感器等多学科为一体的性尖端技术。循迹小车共历了三代技术创新变革: 第一代循迹小车是可
5、编程的示教再现型,不装载任何传感器,只是采用简单的开关控制,通过编程来设置循迹小车的路径与运动参数,在工作过程中,不能根据环境的变化而改变自身的运动轨迹。支持离线编程的第二代循迹小车具有一定感知和适应环境的能力,这类循迹小车装有简单的传感器,可以感觉到自身的的运动位置,速度等其他物理量,电路是一个闭环反馈的控制系统,能适应一定的外部环境变化。第三代循迹小车是智能的,目前在研究和发展阶段,以多种外部传感器构成感官系统,通过采集外部的环境信息,精确地描述外部环境的变化。智能循迹小车,能独立完成任务,有其自身的知识基础,多信息处理系统,在结构化或半结构化的工作环境中,根据环境变化作出决策,有一定的适
6、应能力,自我学习能力和自我组织的能力。为了让循迹小车能独立工作,一方面应具有较高的智慧和更广泛的应用,研究各种新机传感器,另一方面,也掌握多个多类传感器信息融合的技术,这样循迹小车可以更准确,更全面的获得所处环境的信息2 设计要求设计一个智能循迹小车,要求小车通过红外探测器自动探测路面轨迹标示,将数据传送给单片机进而控制电动机的转速,做到自动转向,自动行驶。同时通过显示屏实时显示循迹小车的运动状态,直行、左转、右转、停止。3 系统设计分析根据设计要求,将系统分为控制模块、检测模块、电机驱动模块。其中信号检测部分通过红外探测器检测并将信号传回单片机进行处理。控制部分的作用是接收并处理传感器检测到
7、的信号,通过判断信号的类别控制小车的动作同时控制显示屏的显示状态。本系统采用 AT89C51 单片机,其特点是小型、快速、低功耗、I/O 口资源丰富等,能够满足本小车的设计要求。采用两个直流电机驱动,电路简单,成本不高。电机的驱动芯片采用 L298,该芯片有四路输出,可以驱动一个四相步进电机或两个直流电机,四路总电流可达 4A,输出电压最高可达 46V,可以直接用单片机 I/O 口的输出信号来控制。 检测模块采用红外探测器。红外探测模块主要由红外感光管、电压比较器、敏感调节器组成。最左边是红外感光管,中间的黑色芯片是电压比较器,绿色的是敏感调节器。4 系统基本组成L298直流电机红外探测器模块
8、显示模块 单片机电路路 径 小车 5 设计步骤及流程图1) 根据设计要求,确定控制方案。2) 画出程序流程图,使用 C 语言进行编程,运用 Keil C 进行模拟调试。3) 利用 Proteus 设计合理的硬件原理图。4) 进行仿真调试以实现控制功能。6 系统所需元器件单片机 AT89C51、瓷片电容 CAP30pf、晶振 CRYSTAL12MHZ、电解电容 CAP-ELEC、按钮 BUTTON、电阻 RES、L298、COMPIM、MOTOR-ENCODER、RESPACK-8、SWITCH。7 主要模块介绍7.1 L298 驱动模块简介L298 驱动模块:采用 L298 作为电机驱动芯片。
9、L298 具有高电压、大电流、响应频率高的全桥驱动芯片,一片 L298 可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便,稳定性好,性能优良。L298 的使能端可单片机开始定时器设置显示屏显示POWER=1?轨迹是否变化?Y显示屏显示NY直行+显示N结束转向+显示以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298 的驱动功率较 大,能够根据输入电压的大小输出不同的 电压和功率,解决了负载能力不够的问题表 7.1 L298 引脚标号与功能引脚编号 名称 功能1 电流传感器A在该引脚和地之间接小阻值电阻可用来检测电流2 输出引脚 1
10、 内置驱动器 A 的输出端 1,接至电机 A3 输出引脚 2 内置驱动器 A 的输出端 2,接至电机 A4 电机电源端 电机供电输入端,电压可达 46V5 输入引脚 1 内置驱动器 A 的逻辑控制输入端 16 使能端 A 内置驱动器 A 的使能端7 输入引脚 2 内置驱动器 A 的逻辑控制输入端 28 逻辑地 逻辑地9 逻辑电源端 逻辑控制电路的电源输入端为 5V10 输入引脚 3 内置驱动器 B 的逻辑控制输入端 111 使能端 B 内置驱动器 B 的使能端12 输入引脚 4 内置驱动器 B 的逻辑控制输入端 213 输出引脚 3 内置驱动器 B 的输出端 1,接至电机 B14 输出引脚 4
11、 内置驱动器 B 的输出端 2,接至电机 B15 电流传感器B在该引脚和地之间接小阻值电阻可用来检测电流7.2 LM016L 显示模块1602 字符型 LCD 通常有 14 条引脚线或 16 条引脚线的 LCD,多出来的 2 条线是背光电源线 VCC(15 脚)和地线 GND(16 脚),其控制原理与 14 脚的 LCD 完全一样。引脚 符号 功能说明1 VSS 一般接地2 VDD 接电源(+5V)3 V0 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影“ ,使用时可以通过一个 10K 的电位器调整对比度)。4 RS RS 为寄存器选择,高电平 1
12、 时选择数据寄存器、低电平 0 时选择指令寄存器。5 RW RW 为读写信号线,高电平(1)时进行读操作,低电平 (0)时进行写操作。6 E E(或 EN)端为使能(enable)端,写操作时,下降沿使能。读操作时,E 高电平有效7 DB0 低 4 位三态、 双向数据总线 0 位(最低位)8 DB1 低 4 位三态、 双向数据总线 1 位9 DB2 低 4 位三态、 双向数据总线 2 位10 DB3 低 4 位三态、 双向数据总线 3 位11 DB4 高 4 位三态、 双向数据总线 4 位12 DB5 高 4 位三态、 双向数据总线 5 位13 DB6 高 4 位三态、 双向数据总线 6 位1
13、4 DB7 高 4 位三态、 双向数据总线 7 位(最高位)(也是 busy flag)15 BLA 背光电源正极16 BLK 背光 电源负极8 小车运动逻辑表 8.1 小车运动逻辑HZ HY 左电机 右电机 小车1 1 低速 低速 直行0 1 高速 低速 右转1 0 低速 高速 左转0 0 0 0 停止9 系统原理图10 系统程序设计#include#include#define uchar unsigned char#define uint unsigned int#define LCD_IO P0 /定义 P0 口与 LCD1602 的数据口相接/*LCD1602 接线引脚定义*/#de
14、fine LCD_IO P0 /定义 P2 口与 LCD1602 的数据口相接sbit LCD_RS = P26; /数据、命令选择端 1 为数据sbit LCD_RW = P25; /读、写选择端 1 为读sbit LCD_EN = P27; /使能控制sbit LCD_BUSY=LCD_IO7; /忙碌标志位/*另外相关的定*/#define HIGH 1#define LOW 0 #define TURE 1#define FALSE 0#define uchar unsigned char#define uint unsigned int/*输入方式设置* */#define LCD_
15、AC_AUTO_INCREMENT 0x06 /数据读、写操作后,AC 自动增一#define LCD_AC_AUTO_DECREASE 0x04 /数据读、写操作后,AC 自动减一#define LCD_MOVE_ENABLE 0x05 /数据读、写操作,画面平移#define LCD_MOVE_DISENABLE 0x04 /数据读、写操作,画面不动#define LCD_GO_HOME 0x02 /AC=0,光标、画面回 HOME 位#define LCD_DISPLAY_ON 0x0C /显示开#define LCD_DISPLAY_OFF 0x08 /显示关#define LCD_CURSOR_ON 0x0A /光标显示#define LCD_CURSOR_OFF 0x08 /光标不显示#define LCD_CURSOR_BLINK_ON 0x09 /光标闪烁