IN1=0;IN2=0;IN3=0;IN4=0;
//停止函数,让左右电机同时关闭
delay(60000);
}
void TRT(void)
//右转函数 {
IN1=0;IN2=1;IN3=0;IN4=1;
//先让小车后退
delay(40);
IN1=1;IN2=0;IN3=0;IN4=1;
//然后左边电机前进,右边电机后退,实现小车右转
delay(200);IN1=0;IN2=0;IN3=0;IN4=0;
delay(1);} void TLT(void)
//左转函数
{
IN1=0;IN2=1;IN3=0;IN4=1;
//后退
delay(40);IN1=0;IN2=1;IN3=1;IN4=0;
//左边电机后退,右边电机前进,实现左转
delay(200);IN1=0;IN2=0;IN3=0;IN4=0;
delay(1);}
void SMALLTRT(void)
//右小转函数 {
IN1=1;IN2=0;IN3=0;IN4=1;
//实现小幅度的右转
delay(20);IN1=0;IN2=0;IN3=0;IN4=0;
delay(1);} void SMALLTLT(void)
//左小转函数 {
IN1=0;IN2=1;IN3=1;IN4=0;
//实现小幅度的左转
delay(20);IN1=0;IN2=0;IN3=0;IN4=0;
delay(1);} void main()
//循迹主函数
{
IN1=0;IN2=0;IN3=0;IN4=0;while(1){
if(OUT1==0&&OUT2==0&&OUT3==0&&OUT4==0)//4个探头均未检测到黑线时前进
{
GO();
} if(OUT2==1)
//最左探头检测到黑线时实现右小转
{ SMALLTRT();
} if(OUT3==1)
//最右探头检测到黑线时实现左小转 { SMALLTLT();
} if(OUT1==1)
//左侧中间探头检测到黑线时实现右转 { TRT();
} if(OUT4==1)
//右侧中间探头检测到黑线时实现左转
{
TLT();
}
if(OUT1==1&&OUT2==1&&OUT3==1&&OUT4==1)//全部检测到黑线时停止
}
{
} } stop();
三.参数调试
在程序中,要对小车的前进速度及转弯速度进行多次反复的调试,对delay函数的参数修改了上百次,达到前进不会冲出跑道,转弯幅度合适,后轮不会掉出跑道等,使各方面达到一个平衡,以实现在跑道上完整的顺利的运行。
四.总结
经过两个礼拜的忙碌,在三个人的共同努力下,终于给简易循迹小车比赛划上了句号。虽说不上是完美,但总算是成功了。
本次比赛不仅给我们提供了一个很好的展现自己所学知识的平台,又是对自己所学知识的一次考核、检验。我们运用各自在各方面的优势,化腐朽为神奇,形成了一个团队。通过团队合作的力量,使设计得以顺利完成。可以说,我们三个人是一个不可或缺的整体,少了任何一个人都是无法把任务完美的完成。
在设计的过程中我们也不可避免的遇到了很多的问题。尤其是在调试过程中,经常出现一些我们意想不到的的问题,但通过我们三个人的共同努力都克服了。
通过这次比赛,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。
最后还要特别感谢主办方举办这次比赛,给了我们这个很好的平台来展示自己;同样感谢各位评委在百忙之中抽出宝贵时间来指导我们,你们的点评让我们有了进一步提高的方向和信心!
第四篇:智能循迹小车 专业创新实践实训报告
课题名称 成员 院系 专 业 指导教师
智能循迹小车
*** 航空工程学院 电子信息科学与技术专业
***
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 #include #define uchar unsigned char #define uint unsigned int sbit in1=P1^0;sbit in2=P1^3;sbit pwm1=P1^2;sbit pwm2=P1^4;sbitzuo=P0^7;//红外传感器1 sbitzhong=P0^6;//红外传感器2 sbit you=P0^2;uchar count=0;uchar dj1=0;uchar dj2=0;void advance(){in1=1;in2=1;dj1=15;dj2=15;//红外传感器3 //小车前进子函数 } void left(){in1=1;in2=1;dj1=18;dj2=7;} void right(){in1=1;in2=1;dj1=7;dj2=18;} void left1(){in1=1;in2=0;dj1=15;dj2=18;} void right1(){in1=0;in2=1;//小车左转微调子函数1 //小车右转微调子函数1 //小车左转微调子函数2 //小车右转微调子函数2 dj1=18;dj2=15;} void timer0_init()//0.5ms 定时器设置 {TMOD=0X01;TH0=0XFE;TL0=0X33;EA=1;ET0=1;TR0=1;} void timer0()interrupt 1 //定时器中断函数 {TH0=0XFE;TL0=0X33;count++;if(count<=dj1)pwm1=1;else pwm1=0;if(count<=dj2)pwm2=1;else pwm2=0;if(count>=320){count=0;} //PWM脉宽调速 } void main()//主函数 //初始化 {timer0_init();P0=0XFF;P1=0X02;P2=0X00;P3=0X00;while(1){if((zuo==0)&&(zhong==1)&&(you==0))//小车在正确的轨道上,小车前进 {advance();} if((zuo==0)&&(zhong==1)&&(you==1))//小车偏左,执行右转微调子函数1 {right();} if((zuo==1)&&(zhong==1)&&(you==0))//小车偏右,执行左转微调子函数1 {left();} if((zuo==1)&&(zhong==0)&&(you==0))//小车右偏比较大,执行左转微调子函数2 {left1();} if((zuo==0)&&(zhong==0)&&(you==1))//小车左偏比较大,执行右转微调子函数2 {right1();} if((zuo==1)&&(zhong==1)&&(you==1))//小车行驶在十字交叉出口,直走前进 {advance();} if((zuo==0)&&(zhong==0)&&(you==0))//上轨道 {advance();} } }
小车跑出轨道,直走前进,重新
第五篇:蔽障循迹智能小车毕业论文 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 #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;
} /*******************************************************************/ /* */ /*
定时器初值化 */ /*******************************************************************/ 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年出版