资源描述
2013年 7 月12日
一、绪论.......................................................................4
1.1智能小车的作用和意义..................................................................4
二、方案设计与论证 ................................................ 4
2.1 总体方案设计 ...............................................................................4
2.2主控系统 ........................................................................................5
2.3传感器选择方案 ............................................................................6
2.4电机驱动芯片选择方案..................................................................6
2.5电机方案选择..................................................................................6
2.6电源方案选择..................................................................................7
三、主要器件介绍 .....................................................7
3.1 STC89C52的介绍 .........................................................................7
3.2 L298N的介绍 ...............................................................................8
3.2.1 L298N的引脚功能 ................................................................................... 9
3.2.2 L298N的运行参数 ...................................................................................10
3.2.3 L298N的逻辑控制 ................................................................................... 10
3.3 TCRT5000的介绍 ........................................................................ 11
3.4LM339的介绍 ................................................................................12
3.5 L7805CV和L7806CV的介绍.........................................................12
四、硬件设计 ............................................................... 14
4.1 主控芯片STC89C52单片机最小系统板电路 ........................... 14
4.2 电机驱动模块电路..........................................................................15
4.3红外对黑线检测模块电路...............................................................16
4.4稳压电源电路...................................................................................18
五、程序设计 ............................................................. 19
5.1主程序 .............................................................................................19
六、调试....................................................................... 28
6.1硬件调试 .........................................................................................28
6.1.1元件的固定 ........................................................................... 28
6.1.2TCRT5000探头 ..................................................................... 29
6.1.3 L298N马达驱动模块 ........................................................... 29
6.2软件调试 ........................................................................................ 29
6.2.1调试平台介绍 ......................................................................... 29
6.2.2程序调试.....................................................................................29
6.3 测试结果与分析 ........................................................................... 30
七、心得体会.................................................................................. 30
附件 元件清单
参考文献
一、绪论
1.1智能小车的作用和意义
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
随着科学技术的发展,机器人的感系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航一种实用有效的方法。
机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVG—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。
该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、CPU、执行部分。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。
二、方案设计与论证
2.1 总体方案设计
本系统基于AT89C52单片机的小车寻迹系统,该系统采用两组高灵敏度的红外反射式光电传感器,对路面的黑色轨迹进行检测,将检测的数据送入单片机进行处理,并利用单片机产生PWM波,并以最短时间完成寻迹。同时采用红外传感器对障碍物进行躲避功能,遇到对于交通灯的检测采用固定频率的红外线信号表示不同的交通指示灯,使控制系统更加智能。在软件程序上采用一定的控制算法,使得小车在通道上第一次遇到十字黑线时候减速行驶,在第二次遇到十字黑线可以实现减速转弯,因此,本系统由红外光电传感器,单片机和驱动单元共同作用,保证小车能在预先设定的轨迹上行驶。
本设计的主要特色本设计的主要特色本设计的主要特色本设计的主要特色:
1.自制的四个轮结构小车,采用PWM调速。
2.采用6V电池供电,直流稳压电路工作稳定。
3.采用红外发射传感器接收对黑线标志进行识别,具有高精度和高灵敏度。
2.2主控系统
根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:
方案一: 选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。但CPLD在控制上较单片机有较大的劣势。同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。若采用该方案,必将在控制上遇到许许多多不必要增加的难题。为此,我们不采用该种方案,进而提出了第二种设想。
方案二: 采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。 针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。根据这些分析,我选定了STC89C52RA单片机作为本设计的主控装置,52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是52单片机价格非常低廉。 在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。
2.3传感器选择方案
方案一:采用发光二极管发光,用光敏二极管接收; 发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号。呈高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到,其阻抗迅速降低,此时输出端为高电平。但是由于光敏二极管受环境中可见光影响较大,电路的稳定性很差,但可以通过运放对检测信号进行处理。
方案二: 采用反射式红外光电传感器。 用TCRT5000型反射式红外对管组成的路径识别传感器模块,检测距离和灵敏度均能达到系统要求,该器件具有如下特点:当发光二极管发出的光反射回来时,三极管导通输出低电平,该光电对管调理电路简单,工作性能稳定。 综上所述,本设计采用发光二极管进行检测,原因是性价比较合理。
2.4电机驱动芯片选择方案
方案一:采用分立元件的H桥驱动电路。
方案二:采用集成的H桥驱动电路芯片。 由于集成的H桥驱动电路芯片体积小,稳定性高,因此选用集成的驱动电路芯片作为电机的驱动芯片,型号为L298N。
2.5电机方案选择
方案一: 采用步进电机,步进电机的一个显著特点就是具有快速启停能力可实现电机正反转及调速,启动性能好,启动转矩大。工作电压可达到36V,4A。可同时驱动两台直流电机。适合应用于机器人设计及智能小车的设计中,如果符合不超过步进电机所能提供的动态转矩值,就能够立即使步进电机的启功或者反转。调速方式:直流电动机采用PWM信号平滑调速。
方案二: 采用普通直流减速电机,直流电动机具有优良的调速特性,调速平滑,方便,调整范围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动,制动,和反转,能满足各种不同的特殊运行要求。 综上所诉,我们选择直流减速电机。
2.6电源方案选择
方案一: 直接使用AA干电池进行供电它的结构十分简单,但是供电能力差,不易长时间供电。
方案二: 使用3500mA干电池配合直流稳压整流电路输入端口接9mA的干电池,经电容滤波和L7805和L7806稳压后输出约5V,6V电压。可保证长时间稳定的输出电压。这样可以提供持久稳定的电流,稳压后给单片机系统和其他芯片供电。考虑到系统稳定工作的要求,所以选择方案一。
三 主要器件介绍
3.1 STC89C52的介绍
STC89C52引脚功能说明
VCC(40引脚):电源电压 VSS(20引脚):接地
P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;
而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:
在对Flash ROM编程和程序校验时,P1接收低8位地址。表XX P1.0和P1.1引脚复用功能
在对Flash ROM编程或程序校验时,P3还接收一些控制信号。 P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示: 表XX P3口引脚复用功能
来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2(18引脚):振荡器反相放大器的输入端。 特殊功能寄存器
3.2 L298N的介绍
L298N是一种高电压、大电流电机驱动芯片。该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
3.2.1 L298N的引脚功能
3.2.2 L298N的运行参数
3.2.3 L298N的逻辑控制
主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,输入引脚与输出引脚的逻辑关系图为
表3.3 L298N对直流电机控制的逻辑真值表
3.3 TCRT5000的介绍
TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光电开关。传感器采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。
+:接直流DC5V正极
-:接直流DC5V负极
S:信号输出端,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。
应用场合:
电度表脉冲数据采样、 传真机碎纸机纸张检测、 障碍检测 黑白线检测
基本参数:
外形尺寸: 长 32mm~37 mm;宽 7.5mm;厚 5mm
工作电压: DC 3V~5.5V,推荐工作电压为5V
检测距离: 1mm~8mm适用,焦点距离为2.5mm
传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。
灵敏度可调的循迹电路。当比较器的正向输入端电压低于反向输入端的电压时输出低电平,LED 亮,表示接收到反射光。
3.4 LM339的介绍
智能小车中运用于电路分析模块
LM339引脚图与功能简介
LM339集成块内部装有四个独立的电压比较器。LM339类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择LM339输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”端电压高于“+”端时,输出管饱和,相当于输出端接低电位。两个输入端电压差别大于10mV就能确保输出能从一种状态可靠地转换到另一种状态,因此,把LM339用在弱信号检测等场合是比较理想的。LM339的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻(称为上拉电阻,选3-15K)。选不同阻值的上拉电阻会影响输出端高电位的值。因为当输出晶体三极管截止时,它的集电极电压基本上取决于上拉电阻与负载的值。另外,各比较器的输出端允许连接在一起使用。
3.5 L7805CV和L7806CV的介绍
L7805
L7805是我们最常用到的稳压芯片了,他的使用方便,用很简单的电路即可以输入一个直流稳压电源他的输出电压恰好为5v,刚好是51系列单片机运行所需的电压,他有很多的系列如ka7805,ads7805,cw7805等,性能有微小的差别,用的最多的还是LM7805,下面我简单的介绍一下他的3个引脚以及用它来构成的稳压电路的资料。
<L7805引脚图>
其中1接整流器输出的+电压,2为公共地(也就是负极),3就是我们需要的正5V输出电压了.
L7806
L7806为固定正电压稳压电路,属三端正电源稳压电路系列(3Terminals positive Voltage Regulator Series)。产品应用非常广泛,涉及到各种稳压电源、充电器、数码产品以及家电领域等。
L7806芯片参数:
封装
四、硬件设计
.
4.1 主控芯片AT89C52单片机最小系统板电路
本智能小车采用的单片机最小系统板是自己制做的AT89C52单片机最小系统板,它具有体积小,质量轻,使用方便等优点,能够很好的放置在智能小车中。原理图如下。
小系统PCB板
4.2 电机驱动模块电路
电机驱动模块采用专用驱动芯片L298N作为电机的驱动芯片。L298N是一种具有高电压大电流的全桥驱动芯片,它的响应频率高,一片L298N可以分别控制两个直流减速电机,而且还带有控制使能端,用它作为驱动芯片,操作方便,稳定,性能优良。L298N的5、7引脚为一个电机的控制信号输入端,10、12引脚为另一个电机的控制信号输入端,2、3引脚为一个电机的控制信号输出端,13、14引脚为另一个电机的控制信号输出端,通过单片机对L298N的输入端进行指令控制,就能实现直流减速电机的正转和反转,从而控制小车前进和后退。
电机驱动电路原理图如下。
驱动模块PCB板
4.3红外对黑线检测模块电路
由于有6个红外传感器排成一排均匀的安装在小车底部,当光线照射到路面并反射,由于黑线和白纸的反射系数不同,根据接收到的反射光强度判断是否眼黑线前进。在一般情况下,当黑线位于中间的两个红外传感器之间,不管小车偏向哪一边,都能检测出小车的偏移方向。或者当小车偏向左边时,右边的传感器检测到黑线,输出低电平给电机,否则,输出高电平。
红外作循迹电路原理图
红外作循迹PCB板
采用红外对管制作循迹电路,当检测到黑线时,红外接受管导通,否则红外对管截止,通过比较器LM339电压比较,把电平状态送给单片机进而单片机处理。原理图如下。
电路分析原理图
红外电路分析PCB板
4.4稳压电源电路
电机驱动电路模块:
本题目要求小车的机械系统稳定、灵活、简单,可选用两轮式,考虑到现在的汽车多采用两轮式我选用两轮式的设计,使设计更贴近生活需求。驱动部分:直流驱动电机,由L298N双通道马达驱动模块驱动前后两个马达,其力矩完全可以达到模拟效果。 电池的安装:将电池放置在车体的下面,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。 电源模块:采用2支3500mA电池给电机供电,再用稳压芯片对电池电压进行降压给单片机。采用一套电源可减少小车的负重。
电机动力电路应用说明:
基本思路为使能端输入使能信号,即接高电平,控制输入端A端输入PWM 信号,控制输出端B输入方向信号,在一个PWM周期内,电动机只承受单极性的电压,电机的选择方向由控制信号决定,电机的速度由PWM决定,PWM占空比为0%-100%对应于电机转速0-MAX。因此,当接收到由检测模块的信号时,单片机处理该信号,根据该信号产生对应的PWM 波,从而可以根据调节电机的转速与方向。
稳压电源电路图
稳压电源PCB板
五、程序设计
5.1主程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar pwm_left =0;//变量定义,与速度比较的变量
uchar push_left =0;// 左电机占空比N/10 调速
uchar pwm_right =0;//与速度比较的变量
uchar push_right=0;// 右电机占空比N/10 调速
bit Right_moto_stop=1;
bit Left_moto_stop =1;
uint time=0;
uint a=0,flag=0,flag1=0;
sbit Left_1_led=P1^0; //四路寻迹模块接口第一路
sbit Left_2_led=P1^1; //四路寻迹模块接口第二路
sbit Right_1_led=P1^2; //四路寻迹模块接口第二路
sbit Right_2_led=P1^3; //四路寻迹模块接口第三路
uint a,d,y,z,q,w,c;
sbit out1 = P2^0;
sbit out2 = P2^1;
sbit out3 = P2^2;
sbit out4 = P2^3;
sbit ena = P1^6;
sbit enb = P1^7;
sbit inright = P2^4;
sbit inleft = P2^5;
delay(uint a);
int turnleft(uint z)
{
ena=1;
enb=1;
out1=1;
out2=0;
out3=1;
out4=0;
delay(z);
return 0;
}
int turnright(uint y)
{
ena=1;
enb=1;
out1=0;
out2=1;
out3=0;
out4=1;
delay(y);
return 0;
}
int dengdai (uint d)
{
ena=0;
enb=0;
out1=0;
out2=0;
out3=0;
out4=0;
delay(d);
return 0;
}
void go(uint q)
{
ena=1;
enb=1;
out1=0;
out2=1;
out3=1;
out4=0;
delay(q);
}
int back(uint w)
{
ena=1;
enb=1;
out1=1;
out2=0;
out3=0;
out4=1;
delay(w);
return 0;
}
int backright(int c)
{
ena=0;
enb=1;
out1=0;
out2=0;
out3=0;
out4=1;
delay(c);
return 0;
}
void bizhang()
{
if(inright==1&&inleft==1)
{
go(50);
}
if(inright==0)
{
turnright(50);
}
if(inleft==0)
{
turnleft(50);
}
if(inright==0&&inleft==0)
{
backright(2000);
}
}
void xunji()
{
{ if(Left_1_led==0&&Left_2_led==0&&Right_1_led==0&&Right_2_led==0) //0
{
go(50);
}
else if(Left_1_led==0&&Left_2_led==0&&Right_1_led==0&&Right_2_led==1) //0001
{
turnright(20);
delay(5);
}
else if(Left_1_led==0&&Left_2_led==0&&Right_1_led==1&&Right_2_led==0) //0010
{
turnright(20); //(9,6)
delay(1);
}
else if(Left_1_led==0&&Left_2_led==0&&Right_1_led==1&&Right_2_led==1) //0011
{
turnright(20);
delay(3);
}
else if(Left_1_led==0&&Left_2_led==1&&Right_1_led==0&&Right_2_led==0) //0100
{
turnleft(30);
delay(3);
}
else if(Left_1_led==0&&Left_2_led==1&&Right_1_led==0&&Right_2_led==1) //0101
{ turnright(30);
delay(2);
}
else if(Left_1_led==0&&Left_2_led==1&&Right_1_led==1&&Right_2_led==1) //0111
{
turnleft(30);
delay(1);
}
else if(Left_1_led==1&&Left_2_led==0&&Right_1_led==0&&Right_2_led==0) //1000
{
turnleft(30);
delay(3);
}
else if(Left_1_led==1&&Left_2_led==0&&Right_1_led==0&&Right_2_led==1) //1001
{
go(30);
delay(3); //本来延时6
}
else if(Left_1_led==1&&Left_2_led==0&&Right_1_led==1&&Right_2_led==0) //1010
{
turnleft(30);
delay(3);
}
else if(Left_1_led==1&&Left_2_led==0&&Right_1_led==1&&Right_2_led==1) //1011
{
turnright(20);
delay(3);
}
else if(Left_1_led==1&&Left_2_led==1&&Right_1_led==0&&Right_2_led==0) //1100
{
turnleft(20);
delay(5);
}
else if(Left_1_led==0&&Left_2_led==0&&Right_1_led==0&&Right_2_led==1) // 1101
{ turnleft(20);
delay(5);
}
else if(Left_1_led==1&&Left_2_led==1&&Right_1_led==1&&Right_2_led==0) // 1110
{ turnleft(20);
delay(5);
}
// else if(Left_1_led==1&&Left_2_led==1&&Right_1_led==1&&Right_2_led==1) // 1111
// { //tiaosu();
// go(20);
// delay(5);
// }
}
}
int delay(uint a)
{
uint x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
return 0;
}
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_left<=push_left)
ena=1;
else
ena=0;
if(pwm_left>=100)
pwm_left=0;
}
else ena=0;
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_right<=push_right)
enb=1;
else
enb=0;
if(pwm_right>=100)
pwm_right=0;
}
else enb=0;
}
/*******************************************************************/
/* */
/* 定时器初值化 */
/***************************************************************
展开阅读全文