小车论文.docx
《小车论文.docx》由会员分享,可在线阅读,更多相关《小车论文.docx(17页珍藏版)》请在冰豆网上搜索。
小车论文
小车论文
————————————————————————————————作者:
————————————————————————————————日期:
智能小车设计报告
摘要:
本设计采用AT89S52单片机作为系统控制核心,利用反应式红外传感器检测信号进行寻迹,利用光电开关检测障碍物,利用光敏电阻寻找光源,通过控制两个直流电机从而来实现一系列寻迹-蔽障-寻光-停车的运动。
关键词:
电动小车双直流电机红外传感器光电开关光敏电阻
1方案设计与论证
以下是我小组的系统设计设计方案。
见图1
图1
1.1循迹方法比较与选择
方案一:
由可见光发光二极管与光敏二极管组成的发射-接收电路。
该方案成本较低,易于制作,但其缺点在于周围环境光源会对光敏二极管的工作产生很大干扰,一旦外界光亮条件改变,很可能造成误判和漏判;如果采用超高亮发光管和高灵敏度光敏管可以降低一定的干扰,但又将增加额外的功率损耗。
方案二:
寻迹采用红外传感器,寻光通过AD采样实现,其他方案相同,此时主要通过比较器来调整,对检测黑线的信号输入,当检测为白色板时为低电平,检测到黑线时为高电频,此种方法优点是灵敏度高,成本较低。
综上考虑寻迹我们选用方法二
1.2蔽障方法比较与选择
方案一:
采用光敏电阻和比较器进行蔽障。
工作原理当小车接近障碍物时光线被遮挡,产生电位变化,从而通过比较尽行判断蔽障,优点成本较低,电路较容易制作,缺点灵敏度低,并且教室内会被灯光影响。
方案二:
采用光电开关,优点灵敏度高,缺点是光电开关成本较高。
综上考虑为了,准确的完成小车的蔽障我们采用方案二。
1.3寻光方法比较与选择
方案一;通过光敏电阻加比计较器进行寻光,优点程序简便,节约工作时间。
缺点要认为调整光源检测范围,并且探测寻光时容易出现偏差。
方案二;通过搭建AD模块,进行AD采样分析,通过程序控制寻光,优点准确可靠,缺点需要花大量时间搭建模块,并且要进行AD模块的程序控制消耗时间较长。
综上考虑方案一简单方便成本低,偏差在允许范围之内,故采用方案一。
1.4驱动的方法比较与选择
方案一:
采用直流电机。
直流电机转动力矩大,体积小,重量轻,装配简单,使用方便。
缺点控制方面行走路径比较粗糙不精确。
方案二:
采用步进电机。
步进电机是数字控制电机,控制也简单,具有瞬间启动和急速停止的优越性,比较适合本系统要求控制精度高的特点。
综上分析因为小车的运动对精准度要求不高,并且直流电机更加容易装配控制故选用方案一。
2.理论分析与计算
自动小车完成一些列运动需要程序员给小车电机一个稳定的速度,需要通过控制驱动模块调整好占空比,占空比的概念是在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。
因为小车行进时要求稳定连续,还要保证在规定的时间内完成任务,所以要有适当工作周期和占空比。
经过长期调试周期为10ms,占空比控制在20%左右时,小车运动稳定,并且能在规定的时间内完成任务。
3单元电路设计与计算
3.1小车驱动模块设计
我们所使用的电机一般为直流电机,主要用到永磁直流电机、伺服电机及步进电机三种。
直流电机的控制很简单,性能出众,直流电源也容易实现。
这种直流电机的驱动及控制需要电机驱动芯片进行驱动。
常用的电机驱动芯片有L297/298,MC33886,ML4428等。
这里我们选择L298N芯片。
电源模块如下由8组二极管防止逆向电流对芯片损坏。
见图2
图2
3.2小车寻迹模块设计
如图3所示寻迹模块通过LM339通过比较器,和红外传感器ST188装置组成,它的工作原理为利用光的反射原理,当光照射在白纸上,反射量比较大,反之,照在黑色的物体上,由于黑涩对光的吸收。
反射回的的光较少。
这样利用红外探测装置,当红外探测装置检测到黑线时产生低电频输出信号,输出信号进入LM339进行电压比较,产生标准的TTL电平,稳定性能得到提升。
结合程序控制小车转弯。
图3
3.3小车寻光模块
利用光敏电阻的感光特性:
在黑暗环境里,它的电阻值很高,当受到光照时,只要光子能量大于半导体材料的禁带宽度,则价带中的电子吸收一个光子的能量后可跃迁到导带,并在价带中产生一个带正电荷的空穴,这种由光照产生的电子—空穴对增加了半导体材料中载流子的数目,使其电阻率变小,从而造成光敏电阻阻值下降。
光照愈强,阻值愈低。
再经由三个光敏电阻各自分压而构成两对输出电信号,之后通过LM339产生两个标准TTL电平信号输入单片机,经其处理控制小车往哪个方向利用光敏电阻的感光特性:
在黑暗环境里,它的电阻值很高,当受到光照时,只要光子能量大于半导体材料的禁带宽度,则价带中的电子吸收一个光子的能量后可跃迁到导带,并在价带中产生一个带正电荷的空穴,这种由光照产生的电子—空穴对增加了半导体材料中载流子的数目,使其电阻率变小,从而造成光敏电阻阻值下降。
光照愈强,阻值愈低。
再经由三个光敏电阻各自分压而构成两对输出电信号,之后通过LM339产生两个标准TTL电平信号输入单片机,经其处理控制小车往哪个方向。
见图4
图4
4程序设计
此次我们用的是STC公司生产的AT89CS52单片机,价格成本较低,程序通过C语言控制。
以下是我小组的程序设计思路。
见图5
图5
5系统测试
调试时应小心谨慎,电路安装完毕后,首先应检查电路各部分的接线是否正确,检查电源、地线、信号线、元器件的引脚之间有无短路,器件有无接错。
再接入电路所要求的电源电压,观察电路中各部分器件有无异常现象。
如果出现异常现象,应立即关断电源,待排除故障后方可重新通电。
6结论
经过多次实际参数测量与实际运行,我组小车可以完成题目基本要求,是实际可靠的。
通过这次的制作,可以考察自己在自学单片机中,收获了那些知识。
从通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型。
整个过程都需要我充分利用所学的知识进行思考、借鉴。
可以说,本次制作是针对前面所学的知识进行的一次比较综合的检验。
总的来说,这次制作虽然累,但非常充实。
在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础。
当然能完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导本人,使本人能更好地完成设计。
总之,感谢老师的指导!
!
!
7参考文献
[1]宋健,姜军生,赵文亮.基于单片机的直流电动机PWM调速系统[J].农机化研究,2006,
(1):
102-103.
[2]边春元李文涛江杰杜平等;C51单片机典型模块设计与应用;机械工业出版社;2008.4
[3]李华.MCS-51系列单片机实用接口技术[M].北京:
航空航天大学出版社,2003
[4]楼然苗.51单片机设计实例[M].北京:
航空航天大学出版社,2005.8
[5]王晶,翁显耀,梁业宗自动寻迹小车的传感器模块设计.武汉理工大学自动化学院 湖北武汉
[6]刘迎春.传感器原理设计与应用[M].长沙:
国防科技大学出版社,1992.
[7]万福君,潘松峰.单片微机原理系统设计及应用[M]合肥:
中国科学技术大学
出版社,2001
附程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLSEN2=P1^0;//传感器
sbitLSEN1=P1^1;
sbitRSEN1=P1^2;
sbitRSEN2=P1^3;
sbitIN1=P1^4;//电机
sbitIN2=P1^5;
sbitIN3=P1^6;
sbitIN4=P1^7;
sbitlight1=P3^0;//循光比较器
sbitlight2=P3^1;
sbitlight3=P2^3;//光强比较
sbitRS=P2^0;//1602显示
sbitRW=P2^1;
sbitEP=P2^2;
sbitzuo=P3^5;//避障光电开关
sbitzhong=P3^6;
sbityou=P3^7;
voidT0_init();
voidStop();
voidStart();
voidkongzhi();
voidxunguang();
voidbizhang();
voiddelay(uint);
voidwrite_com(ucharcmd);
voidwrite_data(uchardat);
voidLCD_init();
voidwrite_time(uchar,uchar);
voidwrite_dis(uchar,uchar);
voidLCD_display(uchar,uint);
voidTFL();
voidTFR();
voidGOGOGO();
voidGo();
ucharcodeTab1[]="Time:
s";
ucharcodeTab2[]="Distance:
cm";
ucharflog4=0,flog3=0,flog2=1,flog=0,m;
uchartime,tt,zkb1,zkb2,temp,flag=1,flag1=0;
ucharflag2=0,flag3=0,flag4=1;
uchark1=0,k2=0,k3=0,k4=0,k5=0;
uintdis,quan=0,t0,t1,t2,x,flag5=0,flag6=0,flag7=0;
//***************延时子程序**************//
voiddelay(uintcount)
{uinti,j;
for(i=0;ifor(j=0;j<110;j++);
}
//**********初始化定时器,中断***********//
voidT0_init()
{
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
}
//***********中断函数+脉宽调制***********//
voidtimer0()interrupt1
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
tt++;
t0++;
if(flag2==0)
{
if(tt{
IN1=1;
IN2=0;
}
else
{
IN1=0;
IN2=0;
}
if(tt{
IN3=1;
IN4=0;
}
else
{
IN3=0;
IN4=0;
}
}
if(tt>50)
tt=0;
if(t0==5000)//1秒到清零
{
t0=0;
time++;
if(time==90){Stop();}
}
if(flag2&&flag4)
{
t1++;
if(t1<10000)
{
IN1=1;
IN2=1;
IN3=1;
IN4=1;
}
else
{Go();
flag2=0;
fla