第一篇:蔽障循迹智能小车毕业论文
2013年 7 月12日
一、绪论.......................................................................4
1.1智能小车的作用和意义..................................................................4
二、方案设计与论证................................................4
2.1 总体方案设计...............................................................................42.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单片机的小车寻迹系统,该系统采用两组高灵敏度的红外反射式光 3
电传感器,对路面的黑色轨迹进行检测,将检测的数据送入单片机进行处理,并利用单片机产生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个引脚以及用它来构成的稳压电路的资料。
其中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
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;
} /*******************************************************************/ /* */ /*
定时器初值化 */ /*******************************************************************/ void init0(void){ TMOD=0X01;TH0= 0XF8;//1ms定时
TH0= 0XF8;TL0= 0X30;TL0= 0X30;TR0= 1;ET0= 1;EA = 1;}
void init1(void){ TMOD=0x10;//设置定时器0工作模式1 TH1=(65536-50000)/256;//定时器装初值
TL1=(65536-50000)%256;IT0=1;IT1=1;EX0=1;//开外部中断0 EX1=1;//开外部中断1 ET1=1;//开定时器0中断
TR1=1;//启动定时器0 EA=1;
//开总中断 } /******************************************************************/ ///*TIMER0中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2 { TH0=0XF8;//1Ms定时
TL0=0X30;time++;pwm_left++;pwm_right++;pwm_out_left_moto();pwm_out_right_moto();}
void run(int m,int n){
push_left =m;//PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度
push_right =n;//PWM 调节参数1-10 1为最慢,10是最快
改这个值可以改变其速度
out1=0;//左电机前进 out2=1;out3=1;out4=0;//右电机前进 }
void tiaosu()
{ while(flag==1){run(30,30);delay(30);xunji();if(Left_1_led==1&&Left_2_led==1&&Right_1_led==1&&Right_2_led==1){ a=1;flag=0;} }
while(a==1){run(99,99);delay(30);xunji();if(Left_1_led==1&&Left_2_led==1&&Right_1_led==1&&Right_2_led==1){ a=2;} } }
void main()
{ init0();
init1();
P1=0xff;
P2=0xff;
while(1){ if(Left_1_led==1&&Left_2_led==1&&Right_1_led==1&&Right_2_led==1){flag=1;} //1111
else flag=0;
delay(3);if(flag==0)xunji();else tiaosu();} }
六、调试:
6.1硬件调试
6.1.1 元件的固定
小车主要有5大模块的电路板组成的,板和板之间是靠导线连接。小车在循迹运动的时候时常颠簸,导致电路板移位致使电路板上面的元件受到干扰,使小车不稳定运动,特别是L298N.所以我们除了在板上打孔锁上螺丝,还在板和板之间用热熔胶再固定,减少震动。
6.1.2 TCRT5000探头
由TCRT5000组成的轨迹识别电路是本次设计成败的关键,在初次调试时小车的摇头动作(即转向)时常出现不灵的情况。后来用电压表测量了电压比较器量输入端的电压发现基准电压到了3.5V,而红外探头在检测到黑线时才3.6V。两者电压相差无几,所以遇到黑线颜色较浅或反光的区域单片机会发生误判的现象。于是我们测量了红外探头在黑白两种极限情况下的电压输出情况。在测量了红外探头在黑色和白色两种极限情况下的电压后,调节电阻我把基准电压调到5V,这个电压值距黑色或白色情况下输出的电压值都很大,单片机会减少误判的现象。改良过后测试正常,小车能灵活的摇头,更功能实现。
6.1.3 L298N马达驱动模块
第一次给L298N马达驱动模块通电实现简单的马达单向驱动,发现马达时跑时不跑。经过检测发现是一根信号线接触不良,重新接好后运行正常。此模块是用的市面上可以买到的模块所以性能比较稳定,调试很成功。
6.2软件调试
6.2.1调试平台介绍
此次编程采用了keil V4。KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision4还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision4提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。其界面如下图 所示。
6.2.2程序调试
在调试好硬件之后我第一次把软件下载到系统里面进行实际测试,发现小车在弯道比较急的地方没办法绕过去,会发生脱轨现象。后来仔细分析了自己的算法,原本我是设定小车在遇到弯道后全力转向绕过弯道,但是有些急得弯道小车无法绕过。此时我就想如何去解决在转向角度有限的情况下解决转急弯的问题。联想到日常汽车在狭窄的小路上转弯的情景我想到了倒退调整车体位置的方法。即在发现小车以现有的转向角度无法完成转弯时使小车反相倒退,这样即可很很快的调整小车的位置。改进算法后我在进行了一次测试,这次小车成功的绕过了90度的弯道。
根据测试结果,可以看出小车循迹避障功能基本实现。但是测试还是存在失败的现象。分析其原因有两点。一,小车熟读过快在转弯时未及时刹车。二,画在纸上的跑道会存在褶
皱的地方,而这些地方容易产生误判的现象。得知这些原因以后我降低现车速度,再次进行了测试。结果表明,小车能很好的完成循迹,即使循迹轨道发生改变也不影响。但是小车不能根据赛道的情况自主的改变速度。这也是本次设计的一个缺陷。在实际调试过程中小车发生过程序跑飞的情况,经调整改进程序后,小车运行状态稳定。能很好的完成沿黑色轨道前进,改变轨道的形状及转弯角度,小车仍可完成循迹。
七、心得体会
在智能小车系统的设计、调试及论文的写作过程中,感谢很多同学给予了无数的指导和大力的支持。在这个过程中我们不仅学会了知识,还学会了治学的态度,那就是严谨,把知识变为己有,弃其糟粕留其精华,用自己的方式去解决问题,而不是人云亦云。
智能小车是传感技术和自动化控制技术飞速发展的产物,使得机械和电子信息不再明显分家,自动控制在工业领域中得地位越来越重要,智能这个词是我们科技发展的重要产物。这次实践中涉及的主要部分有传感器检测车部分、驱动部分、单片机为核心的控制芯片部分稳压及电路分析部分。各个部分的涉及,相互之间的连接协调等得成功,都是要建立在系统的阅读大量资料,并且认真的分析课题的需求,还系统的学习的单片机的工作原理及其使用方法。并且学习了相关软件,如仿真、程序烧写等得应用。通过本次课题设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。我们对一个项目的整体设计有了初步认识并能独立设计出其接口电路,再有对电路板的制作有了一定的了解,并学会了使用Protel99设计电路。课程设计使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的课题设计使我对程序完全有了一个新的认识,并能使用C熟练的进行编程了。通过本次课题设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。
小车的设计制作工作量饱满,体现了团队合作精神。在这次设计中也有很多的不足之处,我们缺少实际经验,更多的是依靠网络资源来解决问题,特别是各模块的程序编写,在软件设计方面花费了很多的时间。特别是在最后调试阶段,程序的控制问题给我们带来了很大的困难,小车设计的硬件部分完成相对顺利些,在软件领域显得不足,今后会更多的学习软件。设计过程中单片机知识颇有设计,我们还应加强理论知识的学习。本次设计涉及到了一系列光机电一体化的技术。其中机械结构是小车能否稳定运行的基础,硬件电路决定了小车实现的功能,软件部分是控制的灵魂,而同伴们锲而不舍的精神则是整个设计的支柱!
总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。
附件
元件清单:
1.电机驱动芯片L298N
2.稳压芯片L7805一个,L7806一个
3.单片机STC89C52 4.晶振12M 5.轻触开关和点触开关各一个
6.电解电容220uF/25v、100uf/16v若干, 电容104若干,103电容若干 7.10K滑动变阻器、470欧电阻若干 8.电阻330欧若干,1K的若干个,9.上拉电阻472欧一个
10.红外线传感器TCRT5000
4个 11.散热片一个
12.杜邦线若干(杜邦头,焊片,包括线)13.万用表 14.插针和插排若干 15.发光二极管若干
16.二极管IN4007八个 17.车底盘模具
18.LM339芯片
19.TR18650 3000mAh 3.7v电源 20.各种芯片底座若干 21.驱动直流电机4个
参考文献
[1]郭惠,吴迅.单片机C语言程序设计完全自学手册[M].电子工业出版社,2008.10:1-200.[2]王东锋,王会良,董冠强.单片机C语言应用100例[M].电子工业出版社,2009.3:145-300.[3]韩毅,杨天.基于HCS12单片机的智能寻迹模型车的设计与实现[J].学术期刊,2008,29(18):1535-1955.[4] 王晓明.电动机的单片机控制[J].学术期刊,2002,13(15):1322-1755.[5]宏晶科技,《STC89C51RC/RD+系列单片机器件手册》,2011年9月8号更新版本 [6求是科技,《单片机典型模块设计实例导航(第2版)》,人民邮电出版社,2008年7月出版
[7]李全利,《单片机原理及应用技术》,高等教育出版社,2009年1月出版
[8]丁明亮,《51单片机应用设计与仿真-基于keil C与Proteus》,北京航空航天大学出版社,2009年2月出版
[9]张鑫,《单片机原理及应用(第2版)》,电子工业出版社,2010年出版 6.张毅刚,《单片机原理与应用设计》,电子工业出版社,2008年出版
第二篇:智能循迹小车实验报告
摘要
本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。本次设计采用STC公司的89C52单片机作为控制芯片,传感器模块采用红外光电对管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模块由L298N芯片和两个直流电机构成,组成了智能车的动力系统,电源采用7.2V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能。
关键词 智能小车
单片机红外光对管 STC89C52 L298N 1 绪论
随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其的一个分支,也在不断发展。在近几年的电子设计大赛中,关于小车的智能化功能的实现也多种多样,因此本次我们也打算设计一智能小车,使其能自动识别预制道路,按照设计的道路自行寻迹。设计任务与要求
采用MCS-51单片机为控制芯片(也可采用其他的芯片),红外对管为识别器件、步进电机为行进部件,设计出一个能够识别以白底为道路色,宽度10mm左右的黑色胶带制作的不规则的封闭曲线为引导轨迹并能沿该轨迹行进的智能寻迹机器小车。方案设计与方案选择
3.1 硬件部分
可分为四个模块:单片机模块、传感器模块、电机驱动模块以及电源模块。
3.1.1 单片机模块
为小车运行的核心部件,起控制小车的所有运行状态的作用。由于以前自己开发板使用的是ATMEL公司的STC89C52,所以让然选择这个芯片作为控制核心部件。STC89C52是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。其程序和数据存储是分开的。
3.1.2 传感器模块
方案一:使用光敏电阻组成光敏探测器采集路面信息。阻值经过比较器输出高低电平进行分析,但是光照影响很大,不能稳定工作。
方案二:使用光电传感器来采集路面信息。使用红外光电对管,其结构简明,实现方便,成本低廉,没有复杂的图像处理工作,因此反应灵敏,响应时间少。但也存在不足,它能获取的信息是不完全的,容易受很多扰动(如背景光源,高度等)的影响,抗干扰能力较差。
方案三:使用CCD传感器来采集路面信息。使用CCD可以获取大量的图像信息,掌握全面的路径信息,抗干扰能力强,为以后功能的扩展提供方便。但使用CCD需要大量的图像处理工作,进行大量数据的存储和计算,因此电路复杂,实现起来工作量大。
方案四:使用光电对管采集路面信息。RPR220结构紧凑,体积小,调整电路简单工作性能稳定。
可见方案四最适宜,但仅从此项目考虑,方案二成本低,也能完成设计,故选用方案二。3.1.3 电机控制模块
3.1.3.1电机的选择
方案一:采用步进电机,其转过的角度可以精确定位,可实现小车行进过程的精确定位。但步进电机的输出力矩低,随转速的升高而降低,且转速越快下降得越快。
方案二:采用直流电机,其转动力矩大,体积小,重量轻,装配简单,操作方便。速度的调节可以改变电压也可以调节PWM。
基于以上,我们选择了方案二,使用直流电机作为驱动电机。
3.1.3.2电机的驱动
采用专用芯片L298N作为电机驱动芯片,其操作方便,稳定性好,性能优良。一片L298N就可以分别控制两个直流电机。
3.1.4 电源模块
给整个系统稳定供电以保持其正常工作,包括7.2V的电源以及转5V部分,其中7.2V的是给电机和其驱动供电,5V的用来驱动单片机及其他芯片。
以上单元连接如下图所示: 3.2 软件部分
3.2.1程序流程图
此系统采用89C52单片机,再根据硬件连接,通过相应的软件来完成对信号的采集和数据的分析,再控制小车的运行状态,以下为主程序流程图:
3.2.2程序设计思路
3.2.2.1寻迹模块程序
通过传感器获得路面信息然后反馈给单片机,再通过单片机来实现相应的功能。
3.2.2.2电机驱动模块程序
控制两个直流电机,实现前进、后退、前左转、前右转、停车等功能。各部分电路的作用及电路工作原理分析
4.1 信号采集模块
4.1.1 TCRT500结构与工作原理
TCRT5000(L)具有紧凑的结构发光灯和检测器安排在同一方向上,利用红外光谱反射对象存在另一个对象上,操作的波长大约是950毫米。探测器由光电晶体三极管组成的,它由高发射功率红外光电二极管和高度灵敏光电晶体管组成。通过测试,其检测距离在2mm-10mm。TCRT5000的发射管和接收管是一起封装在矩形塑料壳中,为了使检测更加准确,我们用了5只TCRT5000检测黑线,实物见图4-1。
4.1.2 信号采集电路图及原理
小车在白色地面行驶时,红外发射管发出的红外信号被反射,接收管收到信号后,输出端为低电平,经过比较器比较后输出为低电平。而当红外信号遇到黑色导轨时,红外信号被吸收,接收管不能接收信号,输出端为高电平,经过比较器比较后输出高电平。单片机通过采集每个比较器的输出端电压,便可以检测出黑线的相对位置的位置,从而控制小车的行驶方向。
4.2 信息处理模块
4.2.1 原理
检测到白色路面的红外接收头处理后送出的是低电平,而检测到黑色路线的检测头送出的是高电平,由此可根据这5个红外接收头的高低电平判断路线情况而调整小车前进方向。具体情况有如下几种: a 检测到
1 1 1 1 或
0 0 0 0 0小车应该停止。
b 检测到
0 0 0 0 或
0 1 0 0 0 或 1 0 0 0 说明路线向左偏,小车向左转。
c 检测到
0 0 0 0 1 或
0 0 0 1 0 或
0 0 0 1 1说明路线向右偏,小车向左转。
d 检测到
x x 1 x x(x不全为1)说明线路是直的,小车直走。4.3 电机驱动模块
4.3.1直流电机
给两个电刷A和B加上直流电源,如上图(a)所示,则有直流电流从电刷 A 流入,经过线圈abcd,从电刷 B 流出,根据电磁力定律,载流导体ab和cd收到电磁力的作用,其方向可由左手定则判定,两段导体受到的力形成了一个转矩,使得转子逆时针转动。如果转子转到如上图(b)所示的位置,电刷 A 和换向片2接触,电刷 B 和换向片1接触,直流电流从电刷 A 流入,在线圈中的流动方向是dcba,从电刷 B 流出。
此时载流导体ab和cd受到电磁力的作用方向同样可由左手定则判定,它们产生的转矩仍然使得转子逆时针转动。这就是直流电动机的工作原理。外加的电源是直流的,但由于电刷和换向片的作用,在线圈中流过的电流是交流的,其产生的转矩的方向却是不变的。实用中的直流电动机转子上的绕组也不是由一个线圈构成,同样是由多个线圈连接而成,以减少电动机电磁转矩的波动,绕组形式同发电机。
4.3.2电路图
我们采用成品L298N电机驱动模块,采用光电耦合器件隔离单片机与L298N的控制电路,工艺精度高,性能可靠。L298N模块内部通过H桥电路实现直流电机的正转,反转,其原理如下:
如图4-3所示,全桥式驱动电路的4只开关管都工作在斩波状态,S1、S2为一组,S3、S4 为另一组,两组的状态互补,一组导通则 另一组必须关断。当S1、S2导通时,S3、S4关断,电机两端加正向电压,可以实 现电机的正转或反转制动;当S3、S4导 通时,S1、S2关断,电机两端为反向电 压,电机反转或正转制动。
桥驱动电路
4.3.3原理
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动两台直流电机。系统调试
5.1硬件部分
焊接完成后,首先进行的调试是用数字万用表测量各个电路是否焊接正常,是否有虚焊漏焊等现象的出现,以及各个电容是否是正常的未被击穿状态、电阻的阻值是否与设计的原理图上的一致。接通电源,用数字万用表测量当有+5V的各引脚是否有+5V的电压,测量电路中是否出现了不该有的短路现象。接入光电传感器模块,使各个光电检测器的光电对管靠近白纸,观察对应的发光二极管是否发光,不发光表示正常。然后再使各个光电对管靠近黑线,观察对应的发光二级管是否发光,发光表示正常。
5.2软件部分
我们先测试了小车的前进,停止,左转和右转。组装信号采集模块后,实现小车的自动循迹功能。
具体实现程序见附录一
总结
实验结果如符合实验要求,小车按照黑胶布轨迹前进,并能够及时正确显示小车的行进状态以及行进距离。具体现象如下:
左边传感器检测到黑线,小车左转; 右边传感器检测到黑线,小车右转; 中间传感器检测到黑线,小车直行。从而就可以完成对黑胶布的循迹功能。参考文献
[1]电子信息专业实验教程 赵刚 李佐儒 四川大学出版社 [2]单片机C语言教程 郭天祥 电子工业出版社 [3]模拟电子技术 童诗白 清华大学出版社 附录一 程序:
#include
sbit DJ_left_s = P1^0;//直流电机控制 sbit DJ_left_n = P1^1;
sbit DJ_right_s = P1^2;sbit DJ_right_n = P1^3;
//左转函数
void Turn_right(){ DJ_left_s = 0;DJ_left_n = 1;DJ_right_s = 1;DJ_right_n = 0;}
//右转函数
void Turn_left(){ DJ_left_s = 1;DJ_left_n = 0;DJ_right_s = 0;DJ_right_n = 1;}
//前进函数
void Go_ahead(){ DJ_left_s = 1;DJ_left_n = 0;DJ_right_s = 1;DJ_right_n = 0;}
//停止函数 void Stop(){ DJ_left_s = 0;DJ_left_n = 0;DJ_right_s = 0;DJ_right_n = 0;}
//循迹函数
void xunji(unsigned int m){
if(m==0x7c)
{
Turn_right();
return;
}
if(m&0x10)
{
Go_ahead();
return;
}
if(m&0x0c)
{
Turn_right();
return;
}
if(m&0x60)
{
Turn_left();
return;
} } //主函数 void main(){ while(1){
xunji(P2&0x7c);
}
} 附录二 实物图:
第三篇:智能循迹小车
专业创新实践实训报告
课题名称 成员 院系 专 业 指导教师
智能循迹小车
*** 航空工程学院 电子信息科学与技术专业
***
2016年5月28日
目录 实训任务与内容..............................................................1 1.1实训任务...................................................................1 1.2 实训内容..................................................................1 2 模块设计....................................................................2 2.1 电路模块设计..............................................................2 2.1.1 硬件电路设计............................................................2 2.1.2 软件程序设计............................................................3 2.2 电机驱动模块设计..........................................................5 2.2 电源模块的设计............................................................6 2.3 传感器模块的设计..........................................................6 3 测试结果....................................................................7 4 心得体会....................................................................8 附录1电路原理图的总图........................................................9 附录2 源程序.................................................................10
实训任务与内容 1.1实训任务
1)熟悉51单片机集成开发环境,运用C语言编写工程文件;
2)熟练应用所选用单片机的内部结构、资源、以及软硬件调试的设备的基本方法; 3)自行构建基于单片机的最小系统,完成相关硬件电路的设计实现; 1.2 实训内容
基于AT89C52单片机的智能小车的设计与实现,小车完成的主要功能是能够自主识别黑色引导线并根据黑线的走向实现快速稳定的循线行驶。小车系统以AT89C52单片机位系统控制处理器;采用红外传感获取赛道的信息,来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。2 模块设计 2.1 电路模块设计 2.1.1 硬件电路设计
图2.1 驱动系统的原理图
图2.2传感器系统的原理图
图2.3电源系统的原理图
我们选用的是三个光电开关进行寻迹。光电开关电源线接入5V的电源,三个光电开关分别接入单片机的P1.0口-P1.2口。采用两个L298N芯片作为电机驱动芯片,步进电机模块的引脚ENA和ENB分别连接P0.6口和P0.7口;直流电机模块的引脚ENA和ENB分别连接P0.4口和P0.5口。模块的INT1-INT4连接单片机的P0.0-P0.3口,另一驱动模块IN为P2.0-P2.3口,OUT1-OUT4连接两个直流电机。
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。2.1.2 软件程序设计
图2.4 驱动系统的流程图 系统总体软件设计综上所述,本系统主要实现的各个模块算法为:电机驱动算法,寻迹算法,测速算法,LCD显示算法。系统总体程序框图如图11所示。其中在小车寻迹的过程中,会不断调用测速算法,并通过LCD将实时速度显示出来。各个数的调用关系为了控制电机1和电机2PWM信号的占空比,设置了两个变量DutyCycle1和DutyCycle2,这两个变量的值可以作为控制电机移动函数的参数控制电机的速度。规定当DutyCycle的值小于time_count时电机的使能端输出1,反之输出0,这样就可以改变PWM信号占空比,控制电机的转速了。小车转向控制小车转向控制::小车移动中前进比较容易控制,只要让两个电机同时正转就可以了。控制小车转向时有两种策略,第一种是一个电机正转而另一个不转,第二种是一个电机正转而另一个反转。在测试中我们发现采用第一种方法当小车运动时,运动一侧的轮子会带动不运动一侧的轮子迫使小车继续运动。所以我们采用了第二种控制小车转向的方法。控制电机转向的有两个方向位,DIR_L和DIR_R,它们不同状态和电机转向之间的关系表1表所示:小车速度和方向控制的函数都已经封装在一起,通过入口参数可以进行调节。
图2.5 智能循迹小车运行图
图2.6 智能循迹小车图
2.2 电机驱动模块设计
驱动模块采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,其响应频率高,一片L298N可以分别控制两个直流电机,驱动电路的设计如图L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可实现两个直流电机的PWM调速以及正反转控制。
L298驱动电机介绍:
L298N 为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个桥式的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的I/O端口来提供模拟时序信号,但在本驱动电路中用L298来提供时序信号,节省了单片机I/O 端口的使用。L298N 接脚Pin1 和Pin15 可与电流侦测用电阻连接来控制负载的电路;OUTl、OUT2 和OUT3、OUT4 之间分别接2个步进电机;in1~in4 输入控制电位来控制电机的正反转;Enable则控制电机停转。
采用L298N作为电机驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片 L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便,稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。2.2 电源模块的设计
在本系统中,需要用到的电源有单片机的5V,L298N芯片的电源5V和电机的电源7-15V。所以需要对电源的提供必须正确和稳定可靠。
方案一:用9V的锌电源给前、后轮电机供电,然后使用7805稳压管来把高电压稳成5V分别给单片机和电机驱动芯片供电。这种接法比较简单,但小车的电路功耗过大会导致后轮电机动力不足。
方案二:采用双电源。为了确保单片机控制部分和后轮电机驱动的部分的电压不会互相影响,要把单片机的供电和驱动电路分开来,即:用直流电12v供给单片机,后轮电机的电源用5V供电,这样有助于消除电机干扰,提高系统的稳定性。
基于以上分析,我们选择了方案二,采用双电源供电。2.3 传感器模块的设计
TC端是传感器工作控制端,为高电平时,发光二极管不工作,传感器休眠,为低电平时,传感器启动。Signal端为检测信号输出,当遇到黑线,黑线吸收大量的红外线,反射的红外线很弱,光敏三极管不导通,Signal输出高电平;当遇到白线,与黑线相反,反射的红外线很强,使光敏三极管导通,Signal输出低电平。
这种探测方法,即利用红外线在不同颜色的表面特征,具有不同的反射性能,汽车行驶过程中接收地面的红外光。当红外光遇到白色路线,地板发生漫反射,安装在小型车的反射光接收器接收;如果是遇到黑色路线,红外光将被黑线吸收,安装在小车上的接收管没有收到红外光。控制器会根据是否收到反射的红外光为判断依据来确定的黑线的位置和小车的路线。红外探测器距离通常是不应超过15厘米的。红外发射和接收红外线感应器,可以使自己或直接使用集成红外探头。调整左右传感器之间的距离,两探头距离约等于黑线宽度最合适,选择宽度为3-5厘米的黑线。该传感器的灵敏度是可调的,传感器有时遇到黑线却不能送出相应的信号,通过调节传感器上的可调电阻,适当的增大或减小可改变灵敏度。另外,循迹传感器的放置也是有讲究的,有两种方法,一种是两个都是放置在黑线内侧紧贴黑线边缘,第二种是都放置在黑线的外侧,同样紧贴黑线边缘。本设计采用第二种方法。
单片机烧录程序后,就可以执行循迹指令了。如果小车向前行驶时向左偏离了黑线,那么右边传感器会产生一个高电平,单片机判断这个信号,然后向右拐回到黑线。两传感器输出信号为低电平时,小车前进。如果小车向右偏离黑线,左边传感器产生一个高电平,单片机判断这个信号,然后向左拐。这样,小车一定不会偏离黑线。若两个光电传感器同时输出的信号为高电平,即单片机判断的都为高电平时,小车向前直走。3 测试结果
从直线段O点出发,让小车智能循迹至N点,记录直点线段O点至A点的所用时间,记录A点至B点的时间,依次记录B点至C点、C点至D点、D点至E点、E点至F点、F点至N点的时间,重复测试5次,并记录时间。
图3.1 智能循迹小车跑道图
起点位于弯道的运行时间要长于起点位于直道的运行时间。导致这个现象出现的原因是由于弯道的曲率变化给小车的循迹调整带来了较大的影响,对应小号的调整时间业比起于直道的测试过程要长些。有时,小车会稍微偏离跑道。对传感器的灵敏度需要更加仔细的调整。4 心得体会
根据本次设计要求,我们小组系统地阅读了大量的资料,并认真分析了设计课题的需求,还系统学习了51系列单片机的工作原理及其使用方法,并独自设计智能小车的整个项目。虽然条件艰苦,但经过不懈钻研和努力,购买到了所有所需的元器件,并系统的进行了多项试验,最终做出了整个小车的硬件系统,然后结合课题任务和小车硬件进行了程序的编制,本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。
通过本次课题设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。本次课程设计使我们对一个项目的整体设计有了初步认识,还认识了几种传感器,并能独立设计出其接口电路,再有对电路板的制作有了一定的了解,并学会了使用Protel设计电路。本次智能循迹小车课程设计使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的智能循迹小车的课程设计使我对程序完全有了一个新的认识,并能使用C熟练的进行编程了。通过本次智能循迹小车的课程设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。
总之,在这次的课程设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。附录1 电路原理图的总图
图3.1 电路原理图总图 附录2 源程序
#include
小车跑出轨道,直走前进,重新
第四篇:智能循迹小车___设计报告
智能循迹小车设计
专 业: 自动化 班 级: 自动化132 姓 名:罗植升 莫柏源 梁桂宾 指导老师:
2014年4月——2010年6月
摘要: 本课题是基于STC89C52单片机的智能小车的设计与实现,小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以 STC89C52单片机为系统控制处理器; 采用红外传感获取赛道的信息,来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。
引 言 当今世界,传感器技术和自动控制技术正在飞速发展,机械、电气和电子信息已经不再明显分家,自动控制在工业领域中的地位已经越来越重要,“智能”这个词也已经成为了热门词汇。现在国外的自动控制和传感器技术已经达到了很高的水平,特别是日本,比如日本本田制作的机器人,其仿人双足行走已经做得十分逼真,而且具有一定的学习能力,还据说其智商已达到6岁儿童的水平。
作为机械行业的代表产品—汽车,其与电子信息产业的融合速度也显著提高,呈现出两个明显的特点:一是电子装置占汽车整车(特别是轿车)的价值量比例逐步提高,汽车将由以机械产品为主向高级的机电一体化方向发展,汽车电子产业也很有可能成为依托整车制造业和用车提升配置而快速成为新的增长点;二是汽车开始向电子化、多媒体化和智能化方向发展,使其不仅作为一种代步工具、同时能具有交通、娱乐、办公和通讯等多种功能。
无容置疑,机电一体化人才的培养不论是在国外还是国内,都开始重视起来,主要表现在大学生的各种大型的创新比赛,比如:亚洲广播电视联盟亚太地区机器人大赛(ABU ROBCON)、全国大学生“飞思卡尔”杯智能汽车竞赛等众多重要竞赛都能很好的培养大学生对于机电一体化的兴趣与强化机电一体化的相关知识。但很现实的状况是,国内不论是在机械还是电气领域,与国外的差距还是很明显的,所以作为机电一体化学生,必须加倍努力,为逐步赶上国外先进水平并超过之而努力。
为了适应机电一体化的发展在汽车智能化方向的发展要求,提出简易智能小车的构想,目的在于:通过独立设计并制作一辆具有简单智能化的简易小车,获得项目整体设计的能力,并掌握多通道多样化传感器综合控制的方法。所以立“智能循迹小车”一题作为尝试。
此项设计是在以杨老师提供的小车为基础上,采用AT89C52单片机作为控制核心,实现能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。
一、实验目的:
通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。
二、设计方案:
该智能车采用红外传感器对赛道进行道路检测,单片机根据采集到的信号的不同状态判断小车当前状态,通过电机驱动芯片L9110发出控制命令,控制电机的工作状态以实现对小车姿态的控制。
三、报告内容安排:
本技术报告主要分为三个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术原理的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。
技术方案概要说明
本模型车的电路系统包括电源管理模块、单片机模块、传感
器模块、电机驱动模块。
工作原理:
利用红外采集模块中的红外发射接收对管检测路面上的轨迹 将轨迹信息送到单片机
单片机采用模糊推理求出转向的角度和行走速度,然后去控制 行走部分
最终完成智能小车可以按照路面上的轨迹运行。
硬件电路的设计
1、最小系统:
小车采用STC89C52单片机作为控制芯片,图1是其最小系统电路。主要包括:时钟电路、电源电路、复位电路。其中各个部分的功能如下:
1、时钟电路:给单片机提供一个外接的12MHz的石英晶振。
2、电源电路:给单片机提供5V电源。
3、复位电路:在电压达到正常值时给单片机一个复位信号。
图1
单片机最小系统原理图
2、电源电路设计:
模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。在本设计中,51单片机使用5V电源,电机及舵机使用6V电源。考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用7805稳压后的5V电源供电,舵机及电机直接由电池供电。
3、传感器电路:
光电寻线方案一般由多对TCRT5000红外收发管组成,通过检测接收到的反射光强,判断黑白线。原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。
图2
赛道检测原理图:
4、电机驱动电路:
电机驱动芯片L9110,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如图1中U4所示,1脚和15脚可单独引出连接电流采样电阻器,形成电流传感信号。L9110可驱动2个电机,OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。也利用单片机产生PWM信号接到ENA,ENB端子,对电机的转速进行调节。L9110的逻辑功能:
表1 SHARP GP2D12实物图
外形及封装:
图3 L9110实物图
L9110电路原理图:
由于一片L298N可以直接驱动两个电机,但是为了加大驱动力,我们采用两路并联的方式来驱动电机。
图3.3 L9110电路图
小车循迹规则:
若小车偏左的时候,车轮将向右偏转;若小车偏右,车轮将向左偏转;若没有偏移,小车将继续向前;若小车完全偏离黑色轨迹,小车后退以寻找黑色轨迹。小车程序:
#include
sbit chongshua=P3^6;//定义单片机控制冲刷的引脚 sbit tuodi=P3^7;//定义单片机控制拖地的引脚
//--------//1602液晶相关I/O设置
sbit E=P2^3;//1602液晶的E脚接在P2.3口上 sbit RW=P2^4;//1602液晶的RW脚接在P2.4口上 sbit RS=P2^5;//1602液晶的RS脚接在P2.5口上
//HC-SR04相关I/O设置 sbit TIRG=P3^4;sbit ECHO=P3^2;
bit flag =0;
//定义IO口,具体可以去查看原理图 //定义IO口,具体可以去查看原理图 uchar k;uchar a=0;//定义一个变量a,用来读取串口的数据
void delay(uint z)//一个带参数的延时程序 {
}
void init()//初始化子程序 {
} TMOD=0x20;//设置定时器T1为工作方式2 TH1=0xfd;TL1=0xfd;//T1定时器装初值 TR1=1;//启动定时器T1 REN=1;//允许串口接收 SM0=0;SM1=1;//设置串口工作方式1 EA=1;//开总中断 ES=1;//开串口中断 int i,j;//定义两个变量 for(i=10;i>0;i--)for(j=z;j>0;j--);//将参数z赋值给j void qian()//左右轮协同前进子函数 {
} void zuo()//左右轮协同左转子函数 {
you1=0;you2=1;zuo1=1;zuo2=0;delay(9);//pwm调速 此为pwm有效值 you1=1;you2=1;you1=0;you2=1;zuo1=0;zuo2=1;delay(6);//pwm调速 此为pwm有效值 you1=1;you2=1;zuo1=1;zuo2=1;delay(4);
} zuo1=1;zuo2=1;delay(1);
void mzuo()//左右轮协同左转子函数 {
} void you()//左右轮协同右转子函数 {
you1=1;you2=0;zuo1=0;you1=0;you2=1;zuo1=1;zuo2=0;delay(10);//pwm调速 此为pwm有效值 you1=1;you2=1;zuo1=1;zuo2=1;delay(5);
} zuo2=1;delay(9);//pwm调速 此为pwm有效值 you1=1;you2=1;zuo1=1;zuo2=1;delay(1);
void myou()//左右轮协同右转子函数 {
} you1=1;you2=0;zuo1=0;zuo2=1;delay(10);//pwm调速 此为pwm有效值 you1=1;you2=1;zuo1=1;zuo2=1;delay(5);void hou()//左右轮协同前进子函数 {
}
void ting()//左右轮都停止转动 {
} you1=1;you2=1;zuo1=1;zuo2=1;you1=1;you2=0;zuo1=1;zuo2=0;delay(9);//pwm调速 此为pwm有效值 you1=1;you2=1;zuo1=1;zuo2=1;delay(1);
void Delay1602(unsigned int t){ unsigned int k;//定义一个16位寄存器用来做延时用 for(k=0;k void LCD1602_busy(void){ P0_7=1;// RS=0;//RS=0读入 RW=1;//RS=0读入 E=1;//RS=0读入 while(P0_7==1);// E=0;//} 延时 将P0.7置1,为读状态做准备、RW= 1、E=1时,忙信号输出到DB7,由P0.7、RW= 1、E=1时,忙信号输出到DB7,由P0.7、RW= 1、E=1时,忙信号输出到DB7,由P0.7由P0.7读入1,表示1602液晶忙,需要等待 读完以后,恢复E的电平void LCD1602_Write_com(unsigned char combuf){ RS=0;//选择指令寄存器 RW=0;//选择写状态 P0=combuf;//将命令字通过P0口送至DB E=1;//E高电平将命令字写入1602液晶 E=0;//写完以后,恢复E的电平} void LCD1602_Write_com_busy(unsigned char combuf){ LCD1602_busy();//调用忙检测函数 LCD1602_Write_com(combuf);//调用忙检测函数 } void LCD1602_Write_data_busy(unsigned char databuf){ LCD1602_busy();//调用忙检测函数 RS=1;//选择数据寄存器 RW=0;//选择写状态 P0=databuf;//将命令字通过P0口送至DB E=1;//E高电平将命令字写入1602液晶 E=0;//写完以后,恢复E的电平} void LCD1602_Write_address(unsigned char x,unsigned char y){ x&=0x0f;//列地址限制在0-15间 y&=0x01;//行地址限制在0-1间 if(y==0)//如果是第一行 LCD1602_Write_com_busy(x|0x80);//将列地址写入 else //如果是第二行 LCD1602_Write_com_busy((x+0x40)|0x80);//将列地址写入 } void LCD1602_init(void){ Delay1602(1500);//调用延时函数 LCD1602_Write_com(0x38);//8位数据总线,两行显示模式,5*7点阵显示 Delay1602(500);//调用延时函数 LCD1602_Write_com(0x38);//8位数据总线,两行显示模式,5*7点阵显示 Delay1602(500);//调用延时函数 LCD1602_Write_com(0x38);//8位数据总线,两行显示模式,5*7点阵显示 LCD1602_Write_com_busy(0x38);//8位数据总线,两行显示模式,5*7点阵显示 LCD1602_Write_com_busy(0x08);//显示功能关,无光标 LCD1602_Write_com_busy(0x01);//清屏 LCD1602_Write_com_busy(0x06);//写入新的数据后,光标右移,显示屏不移动 LCD1602_Write_com_busy(0x0C);//显示功能开,无光标 } void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf){ LCD1602_Write_address(x,y);//先将地址信息写入 LCD1602_Write_data_busy(buf);//再写入要显示的数据 } void Timer0(void)interrupt 1 { } flag=0;void xunji(){ qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态 while((z==0)&&(y==1)&&(q==1))//判断当左边光电管遇到黑线,{ } while((z==1)&&(y==0)&&(q==1))//判断当右边光电管遇到黑线,{ } while((z==0)&&(y==0)&&(q==1))//判断当左边光电管遇到黑线,右边 //左边和前边的光电管遇到白线时右转 //右边和前边的光电管遇到白线时左转 zuo();//调用左转函数 zd=1;you();//调用右转函数 yd=1;光电管也遇到黑线 { //前边的光电管遇到白线时停止 ting();//调用停止函数 } hd=1;while((z==0)&&(y==0)&&(q==0))//判断当左边、右边、前边光电管同时遇到黑线 } void csb(){ long S;unsigned int i;unsigned int Timeout; { } //即遇到十字路口,小车前进 qian();//调用前进函数 LCD1602_init();//调用1602液晶初始化函数 //***定时器Timer0初始化*** TMOD&=0xF0;//将TMOD的低4位定时器0控制部分清零 TMOD|=0x01;//设置定时器0为方式1 TMOD=0x01;TL0=0;//设置定时器0初值低8位 TH0=0; //设置定时器0初值高8位 TR0=0;//停止定时器0 ET0=1;//Timer0中断允许 //***开全局中断设置**** //定时器Timer0设置了中断允许,此处要开全局中断 EA=1;//开全局中断 TIRG=1; //发一个脉冲触发信号 //维持约17US,符合不低于10US的要求 //维持约17US,符合不低于10US的要求 i=4; while(i>0)i--; TIRG=0;TR0=0; //维持约17US,符合不低于10US的要求 //撤销触发信号 //关闭定时器 //设置定时器0初值低8位为0 TL0=0; TH0=0; //设置定时器0初值高8位为0 //清除溢出标志 k=0;flag=0;Timeout=0;while((ECHO==0)&&((Timeout++)<50000)); //等待回响高电平 TR0=1;//回响高电平来后启动定时器 Timeout=0;while((ECHO==1)&&((Timeout++)<50000)); //等待回响高电平结束后 TR0=0; //关闭定时器 S=((TH0*256+TL0)*1)/58; if(flag==1||S>400)//超出测量范围显示“-” { LCD1602_Disp(0, 0, '-'); LCD1602_Disp(1, 0, '-'); LCD1602_Disp(2, 0, '-'); LCD1602_Disp(3, 0, 'C'); LCD1602_Disp(4, 0, 'M'); } else { LCD1602_Disp(0, 0, S%1000/100+'0'); LCD1602_Disp(1, 0, S%1000%100/10+'0');// LCD1602_Disp(2, 0, S%1000%100%10+'0'); LCD1602_Disp(3, 0, 'C'); LCD1602_Disp(4, 0, 'M'); } i=18000; while(i>0) //显示百位- //显示十位- //显示个位- //显示C //显示M //显示百位 显示十位 //显示个位 //显示C //显示M //维持约77400US,符合不低于60MS的要求 //维持约77400US,符合不低于60MS的要求 i--; } void main()//主程序 { //维持约77400US,符合不低于60MS的要求 init();//调用初始化子程序 while(1)//死循环 { switch(a)//判断a从串口读取到的数据 { case 0x00://如果是0x1f就前进 xunji();break;case 0x01://如果是0x2f就后退 qian();break;case 0x02://如果是0x3f就左转 csb();break; case 0x03://如果是0x4f就右转 mzuo();zd=1;break; case 0x04://如果是0x00就停止 hou();break; case 0x05://如果是0xa0车灯打开 myou();yd=1;break; case 0x06://如果是0xb0车灯关闭 chongshua=1;break; case 0x07://如果是0xc0蜂鸣器鸣响 } ting();hd=1;break; case 0x08://如果是0xc0蜂鸣器鸣响 tuodi=1;break;} } void chuan()interrupt 4//串口中断服务程序 { } RI=0;//软件清除串口响应 a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据 结论 根据本次设计要求,我们小组系统地阅读了大量的资料,并认真分析了设计课题的需求,还系统学习了51系列单片机的工作原理及其使用方法,并独自设计智能小车的整个项目。 虽然条件艰苦,但经过不懈钻研和努力,购买到了所有所需的元器件,并系统的进行了多项试验,最终做出了整个小车的硬件系统,然后结合课题任务和小车硬件进行了程序的编制,本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。 通过本次课题设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。本次毕业设计使我们对一个项目的整体设计有了初步认识,还认识了几种传感器,并能独立设计出其接口电路,再有对电路板的制作有了一定的了解,并学会了使用Protel设计电路。本次毕业设计使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的课题设计使我对程序完全有了一个新的认识,并能使用C熟练的进行编程了。通过本次课题设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。 总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。 摘要 本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹得功能。本次设计采用 STC 公司得 89C52 单片机作为控制芯片,传感器模块采用红外光电对管与比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模块由 L298N 芯片与两个直流电机构成,组成了智能车得动力系统,电源采用 7、2V 得直流电池,经过系统组装,从而实现了小车得自动循迹得功能.关键词 智能小车 STC89C52 单片机 L298N 红外光对管 1 1 绪论 随着科学技术得发展,机器人得设计越来越精细,功能越来越复杂,智能小车作为其得一个分支,也在不断发展.在近几年得电子设计大赛中,关于小车得智能化功能得实现也多种多样,因此本次我们也打算设计一智能小车,使其能自动识别预制道路,按照设计得道路自行寻迹。2 设计任务与要求 采用 MCS-51单片机为控制芯片(也可采用其她得芯片),红外对管为识别器件、步进电机为行进部件,设计出一个能够识别以白底为道路色,宽度 10mm左右得黑色胶带制作得不规则得封闭曲线为引导轨迹并能沿该轨迹行进得智能寻迹机器小车。3 方案设计与方案选择 3.1 硬件部分 可分为四个模块:单片机模块、传感器模块、电机驱动模块以及电源模块。 3.1.1 单片机模块 为小车运行得核心部件,起控制小车得所有运行状态得作用。由于以前自己开发板使用得就是ATMEL 公司得 STC89C52,所以让然选择这个芯片作为控制核心部件。STC89C52 就是一种低损耗、高性能、CMOS 八位微处理器,片内有 4k字节得在线可重复编程、快速擦除快速写入程序得存储器,能重复写入/擦除 1000次,数据保存时间为十年.其程序与数据存储就是分开得.3.1.2 传感器模块 方案一:使用光敏电阻组成光敏探测器采集路面信息。阻值经过比较器输出高低电平进行分析,但就是光照影响很大,不能稳定工作。 方案二:使用光电传感器来采集路面信息。使用红外光电对管,其结构简明,实现方便,成本低廉,没有复杂得图像处理工作,因此反应灵敏,响应时间少。但也存在不足,它能获取得信息就是不完全得,容易受很多扰动(如背景光源,高度等)得影响,抗干扰能力较差。 方案三:使用 CCD 传感器来采集路面信息。使用 CCD 可以获取大量得图像信息,掌握全面得路径信息,抗干扰能力强,为以后功能得扩展提供方便。但使用CCD 需要大量得图像处理工作,进行大量数据得存储与计算,因此电路复杂,实现起来工作量大。 方案四:使用光电对管采集路面信息。RPR220结构紧凑,体积小,调整电路简单工作性能稳定。 可见方案四最适宜,但仅从此项目考虑,方案二成本低,也能完成设计,故选用方案二.3.1.3 电机控制模块3、1 1、3 3、1 1 电机得选择 方案一:采用步进电机,其转过得角度可以精确定位,可实现小车行进过程得精确定位.但步进电机得输出力矩低,随转速得升高而降低,且转速越快下降得越快。 方案二:采用直流电机,其转动力矩大,体积小,重量轻,装配简单,操作方便。速度得调节可以改变电压也可以调节 PWM。 基于以上,我们选择了方案二,使用直流电机作为驱动电机。 3、1、3 3、2电机得驱动 采用专用芯片 L298N 作为电机驱动芯片,其操作方便,稳定性好,性能优良.一片L298N 就可以分别控制两个直流电机。 3.1.4 电源模块 给整个系统稳定供电以保持其正常工作,包括7、2V得电源以及转5V 部分,其中 7、2V 得就是给电机与其驱动供电,5V 得用来驱动单片机及其她芯片。 以上单元连接如下图所示: 3.2 软件部分 3、2、1 1 程序流程图 此系统采用 89C52 单片机,再根据硬件连接,通过相应得软件来完成对信号得采集与数据得分析,再控制小车得运行状态,以下为主程序流程图: 3、2 2、2 2 程序设计思 路3、2 2、2 2、1 1 寻迹模块程序 通过传感器获得路面信息然后反馈给单片机,再通过单片机来实现相应得功能。3、2、2 2、2 电机驱动模块程序 控制两个直流电机,实现前进、后退、前左转、前右转、停车等功能.4 各部分电路得作用及电路工作原理分析 4.1 信号采集模块 4.1.1 TC RT T 50 00 结构与工作原理 TCRT5000(L)具有紧凑得结构发光灯与检测器安排在同一方向上,利用红外光谱反射对象存在另一个对象上,操作得波长大约就是 950 毫米。探测器由光电晶体三极管组成得,它由高发射功率红外光电二极管与高度灵敏光电晶体管组成。通过测试,其检测距离在 2mm—10mm。TCRT5000 得发射管与接收管就是一起封装在矩形塑料壳中,为了使检测更加准确,我们用了 5 只 TCRT5000检测黑线,实物见图4—1。 4.1.2 信号采集电路图及原理 小车在白色地面行驶时,红外发射管发出得红外信号被反射,接收管收到信号后,输出端为低电平,经过比较器比较后输出为低电平。而当红外信号遇到黑色导轨时,红外信号被吸收,接收管不能接收信号,输出端为高电平,经过比较器比较后输出高电平。单片机通过采集每个比较器得输出端电压,便可以检测出黑线得相对位置得位置,从而控制小车得行驶方向。 4.2 信息处理模块 4.2.1 原理 检测到白色路面得红外接收头处理后送出得就是低电平,而检测到黑色路线得检测头送出得就是高电平,由此可根据这 5 个红外接收头得高低电平判断路线情况而调整小车前进方向。具体情况有如下几种: a 检测到 1 或 0 0 0 0 0 小车应该停止.b 检测到 0 0 0 0 或 0 0 0 0 或 1 0 0 0 说明路线向左偏,小车向左转.c 检测到 0 0 0 0 1 或 0 0 0 0 或 0 0 0 1说明路线向右偏,小车向左转。 d 检测到 x x 1 x x(x 不全为 1) 说明线路就是直得,小车直走。 4.3 电机驱动模块 4、3 3、1 1 直流电机 给两个电刷 A 与 B 加上直流电源,如上图(a)所示,则有直流电流从电刷 A 流入,经过线圈 abcd,从电刷 B 流出,根据电磁力定律,载流导体 ab与 cd收到电磁力得作用,其方向可由左手定则判定,两段导体受到得力形成了一个转矩,使得转子逆时针转动.如果转子转到如上图(b)所示得位置,电刷 A 与换向片2接触,电刷 B 与换向片 1 接触,直流电流从电刷 A 流入,在线圈中得流动方向就是 dcba,从电刷 B 流出.此时载流导体 ab 与 cd受到电磁力得作用方向同样可由左手定则判定,它们产生得转矩仍然使得转子逆时针转动。这就就是直流电动机得工作原理。外加得电源就是直流得,但由于电刷与换向片得作用,在线圈中流过得电流就是交流得,其产生得转矩得方向却就是不变得。实用中得直流电动机转子上得绕组也不就是由一个线圈构成,同样就是由多个线圈连接而成,以减少电动机电磁转矩得波动,绕组形式同发电机。 4、3 3、2 2 电路图 我们采用成品L298N 电机驱动模块,采用光电耦合器件隔离单片机与L298N得控制电路,工艺精度高,性能可靠。L298N 模块内部通过 H 桥电路实现直流电机得正转,反转,其原理如下: 如图 4-3 所示,全桥式驱动电路得 4 只开关管都工作在斩波状态,S1、S2为一组,S3、S4 为另一组,两组得状态互补,一组导通则 另一组必须关断.当S1、S2 导通时,S3、S4 关断,电机两端加正向电压,可以实 现电机得正转或反转制动;当 S3、S4 导 通时,S1、S2 关断,电机两端为反向电 压,电机反转或正转制动。 桥驱动电路 4、3 3、3原理 L298N就是 ST 公司生产得一种高电压、大电流电机驱动芯片。该芯片采用 15 脚封装。主要特点就是:工作电压高,最高工作电压可达 46V;输出电流大,瞬间峰值电流可达 3A,持续工作电流为2A;额定功率25W。内含两个 H 桥得高电压大电流全桥式驱动器,可以用来驱动直流电动机与步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响得情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用 L298N 芯片驱动电机,该芯片可以驱动两台直流电机。5 系统调试5、1 1 硬件部分 焊接完成后,首先进行得调试就是用数字万用表测量各个电路就是否焊接正常,就是否有虚焊漏焊等现象得出现,以及各个电容就是否就是正常得未被击穿状态、电阻得阻值就是否与设计得原理图上得一致.接通电源,用数字万用表测量当有+5V 得各引脚就是否有+5V 得电压,测量电路中就是否出现了不该有得短路现象。接入光电传感器模块,使各个光电检测器得光电对管靠近白纸,观察对应得发光二极管就是否发光,不发光表示正常。 然后再使各个光电对管靠近黑线,观察对应得发光二级管就是否发光,发光表示正常.5、2 2 软件部分 我们先测试了小车得前进,停止,左转与右转。组装信号采集模块后,实现小车得自动循迹功能.具体实现程序见附录一6 总结 实验结果如符合实验要求,小车按照黑胶布轨迹前进,并能够及时正确显示小车得行进状态以及行进距离。具体现象如下: 左边传感器检测到黑线,小车左转; 右边传感器检测到黑线,小车右转; 中间传感器检测到黑线,小车直行。 从而就可以完成对黑胶布得循迹功能。7 参考文献 [1]电子信息专业实验教程 赵刚 李佐儒 四川大学出版社 [2]单片机C语言教程 郭天祥 电子工业出版社 [3]模拟电子技术 童诗白 清华大学出版社 附录一 程序: #include〈reg52、h> sbit DJ_left_s = P1^0; //直流电机控制 sbit DJ_left_n = P1^1; sbit DJ_right_s = P1^2; sbit DJ_right_n = P1^3;//左转函数 void Turn_right() { DJ_left_s = 0; ;1 = n_tfel_JDﻩ DJ_right_s = 1; ;0 = n_thgir_JDﻩ} //右转函数 void Turn_left() { DJ_left_s = 1; DJ_left_n = 0; ;0 = s_thgir_JDﻩ;1 = n_thgir_JDﻩ} //前进函数 void Go_ahead(){ ;1 = s_tfel_JDﻩ DJ_left_n = 0; DJ_right_s = 1; DJ_right_n = 0; } //停止函数 void Stop() { DJ_left_s = 0; DJ_left_n = 0; DJ_right_s = 0; ;0 = n_thgir_JDﻩ} //循迹函数 void xunji(unsigned int m){ ﻩ if(m==0x7c) { ;)(thgir_nruTﻩ ;nruterﻩﻩ }ﻩ)01x0&m(fiﻩﻩ { ﻩ Go_ahead(); ﻩ ;nruterﻩ ﻩ }ﻩﻩ if(m&0x0c) ﻩ { ;)(thgir_nruTﻩﻩ ﻩ return; } ﻩ if(m&0x60) ﻩ { ﻩ;)(tfel_nruTﻩ ﻩ return; ﻩ } } //主函数 void main() { while(1) { ﻩ xunji(P2&0x7c); } ﻩ} 附录二 实物图:第五篇:智能循迹小车实验报告