自动往返小车
一、项目参加人员、负责内容以及技术特长:
二、项目背景
近现代,随着电子科技的迅猛发展,人们对技术也提出了更高的要求。汽车的智能化在提高汽车行驶的安全性,操作性等方面都有巨大的优势,在一些特定的场合下也能满足一些特殊的需要。智能小车系统涉及自动控制,车辆
、计算机等多个领域,未来汽车的智能化是一个不可避免的大趋势。本
是以STC89C52单片机作为自动往返小汽车的检测和控制核心,以反射式红外光电传感器作为对路面黑线的检测,使用断续式光电开关实现车速与距离的检测,以及实现小车的循迹,控速,停止,启动,显示等功能。
三、主要研究内容
单片机STC89C52的应用方法,数字器件使用,A/D转换,晶体管的使用,各种仿真软件,单片机程序编写软件KEIL2,单片机程序烧写软件STC-ISP.
四、总体思路与研究方案
1. 总体思路
根据
目的要求,系统可划分为几个模块,如下图所示:
路面检测
转速调整 单片机 晶体管显
示
电机驱动
设计模块有:
电机驱动电路(包括实现电机正反转,电机控速,启动停止),标志识别电路,显示部分,电源电压转换部分,其中电机电源与其他电源分开由两个电源供电。
2. 实施方案
1、电机驱动设计
方案一:采用达林顿管组成的H形PWM电路。用单片机控制达林顿管使之工作,精确调整电机转速和方向。
方案二:采用数字稳压管通过控制电动机两端电压控制其转速,以三级管作为电子开关,通过开关的闭合实现电机转动方向的切换,电路设计简单。
综合实际和以上理论
,我们拟采用方案二。
2、路面黑线检测模块:(原理:通过接受反射光强的不同判断标志)
方案一:采用可见光二极管与光敏管组成发射—接受电路。但外界光源的变化极易对光敏二极管的工作产生影响一旦外界光亮条件改变,很可能造成判断错误。
方案二:采用非脉冲调制反射式红外发射—接收器,能一定程度下降低环境光源干扰,系统的准确率较高。
方案三:采用脉冲调制式红外发射接收器,考虑到干扰主要是直流分量,所以带有交流分量的调制信号,可大幅减少外界干扰,但所用器件较多。
由于往返小车是室内实验,干扰较少,同时考虑到经济方面,我们决定采用方案二。 3、电源选择:
方案一:所有器件采用单一电源供能,这样比较简单。
方案二:采用双电源供电(9V电压单独作用电机,5V电压共给单片机和循迹模块)。
考虑到电机瞬时启动电流较大,而且在本设计中,从调整到定型耗能较大。而且电源有限,单一电源可能导致电压源电压不稳,可能使单片机程序跑飞,或者掉电,故采取方案二。 4、路程计算模块
方案一:采用霍尔集成片,该器件内部有三片霍尔金属板组成,磁片正对金属板时因霍尔效应,金属板横向导通,因此可在车轮上安装磁片,将霍尔集成片安装在车轴上,通过对脉计数进行历程测量(量出车轮直径)。
方案二:采用断续式光电开关。开关是沟槽状的,可固定轮轴上,车轮上加避光条,原理同上。
鉴于车轮尺寸考虑,磁片密集安装较困难,故采用方案二。
5、小结
经过各种方案的比较以及理论的分析,我们决定了系统各个主要模块的最终方案如下:
电机驱动模块,采用数字稳压管通过控制电动机两端电压控制其转速。
路面黑线检测模块,采用非脉冲调制反射式红外发射—接收器。
电源:采用双电源供电(9V电压单独作用电机,5V电压共给单片机和循迹模块)。
路程计算模块,采用断续式光电开关。
五、系统的具体设计与实现
用系统的组成主要分为硬件和软件两大部分。
1、系统的硬件设计
(1)电动机驱动模块的电路设计与实现具体见下图。
2
该电路采用集成电路驱动芯片L298的原理设计成该电路,相当于L298芯片中H桥式驱动器,可驱动46V,2A以下电机,并且可单独引出接电流采样电阻器,形成电流传感信号,精确控制电机转速,这种电路驱动能力强,可以简单地实现转速和方向的控制,稳定性高。
另外,通过控制Q9晶体管的电频高低来控制电机的运转与停止,Q11晶体管在电路中处于放大状态,可实现功率的放大,同时驱动电机转动,并可控制电机转速的快慢。
(2)小车循迹模块的电路设计与实现具体见下图
3
循迹原理就是红外反射照到黑线上方时光都被黑线吸收了(注意要调节好反射管到地面的距离),接着反入射模块就输出一个低电平给控制器(单片机),然后单片机就根据这个低电平执行动作(左转或者右转)
2、系统的软件设计
单片机控制电路主要由一片STC89C52组成,STC89C52主要实现对路面黑线的软件检测和纠错,以及对车速的检测与控制、电动机驱动、数据显示等功能。
(1)单片机具体电路见下图。
4
(2)STC89C52的主控程序。
?黑线计数。由于车底装有传感器,采用中断和查询结合的检测方法,服务程序仅仅累加计数变量而达到黑线后的操作由主程序完成。具体的程序实现见下。
?限速程序。在限速区内为了实现低速行驶的要求,我们采用闭环系统,通过车速检测的反馈,不断调节电动机的驱动力。
?自动返回功能。题目要求在到达终点线后停留10s,然后自动返回起跑线(允许倒车返回),实现该功能的算法程序如下。
实现???的部分程序编码如下:
void ISR0(void) interrupt 0
{
i++;switch(i)
{
case 5:
case 3: {ZZ=~ZZ,FZ=~FZ;delay(150);ZZ=~ZZ,FZ=~FZ,GS=~GS,DS=~DS;break;}
case 4: {GS=~GS,DS=~DS;break;}
case 6: {TD=1;delay(50000);ZZ=~ZZ,FZ=~FZ;TD=0;i=0;break;}
}
}
5
?液晶显示时间。题目要求在小车在行进过程中记下并显示出时间,具体实现该功能的部分程序编
码见下:
void t0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
}
}
write_ru(10,miao);
write_ru(7,fen);
write_ru(4,shi);
}
}
void write_com(uchar com)
{
rs=0;
rw=0;
lcden=0;
P2=com;
delay(50);
lcden=1;
delay(50);
lcden=0;
}
void write_shu(uchar shu)
{
rs=1;
rw=0;
lcden=0;
P2=shu;
6
delay(50);
lcden=1;
delay(50);
lcden=0;
}
void init()
{uchar n;
lcden=0;
write_com(0x01);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(n=0;n<11;n++){write_shu(table[n]);}
write_com(0x80+0x40);
for(n=0;n<12;n++){write_shu(table1[n]);}
}
(3)系统的主程序流程图
开始
正向行驶
N
是否限速
Y Y
N 是否返回起点 是否终点 Y
显示时间 Y N
停车10s
结束 全速行驶 限速行驶 倒车
7
六、测试结果
小车可以根据题目要求行驶完全程,在行驶过程中没有出现大的转弯,可以准确检测出行驶过程中的黑线,对道路两旁的挡板也可以很好地感应出来。小车准确记录了行驶的时间和行驶的路程,而且没有出现大的误差。小车在行驶过程中路程出现的误差是由于小车的前轮转弯调整得不好所致,但对小车正常行驶完全程没有太大的影响。
七、存在的问题及今后努力方向
在设计中没有考虑到小车电机功率消耗的问题,功率消耗过大,使得电池使用的时间很短,考虑到这个问题,应该在前期设计制作不同输出电压的充电器,可以在设计过程中作为稳压直流电源来使用。
在初始设计的循迹电路模块中,压降太小,使得小车在行进过程中无法检测到路面的轨迹,无法达到题目的要求。
在该设计的小车基础上,还可以添加自动避障的模块,使得小车在规定的跑道范围内运行时,可能会偏离跑道,当小汽车偏离行驶轨道遇到障碍物时,小车会理科发出警报并及时转向,返回跑道。
8
评审组意见:
评审组组长:
年 月 日
9