loading ...

2007-03-29 | 简易自动入库小车

分享

            简易自动入库小车

      肖忠良  肖红军   王楷

       (哈尔滨工程大学 自动化学院,哈尔滨 150001

 

摘要:以AT89S52单片机作为微控制器,设计出一种简易自动入库小车,通过红外传感器检测黑带信号,利用单片机输出PWM脉冲控制舵机和减速直流电机的转向和转速,使小车按预先设计好的路线安全的停入车库,并且能按设计要求自动退出车库。

关键词:AT89S52;舵机控制;红外传感器检测电路;PWM脉宽调节

 

0 引言

本课题重点在于控制小车行驶的速度、黑带检测、转弯的精度以及对铁片的检测。难点在于协调好小车行驶速度与转弯之间的关系,这样才能保证小车在行驶过程中不越界。本设计可以应用于工厂的自动化管理,实现过车间之间货物的传送;还可以对其进行功能扩充(例如增加超声波传感器,使其具有测距和避障功能),将其应用于无人驾驶等。

1 设计方案与论证

采用ATMEL公司生产的AT89S52型单片机作为我们的控制单元,因为该型单片机价格便宜,功能比较强大,性价比高,而且在市场上很容易买到。通过红外传感器、电感式接触开关等器件来采集各类信息,送入主控单元单片机,处理数据后完成相应动作,以达到自身控制。其中寻迹(黑带检测)采用市面上通用的发射管及接收头,经过单片机调制后发射。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测。此系统比较灵活,更重要的是采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求。

黑带寻迹采用红外线发射和接受原理。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后控制小车停转,完成进入车库的任务。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现。
2.系统硬件设计
2.1  系统总体设计

采用AT89S52单片机作为小车的控制单元。在小车的前端接八路红外传感器

作为小车进入车库过程中黑带的检测元件,在小车的后段在接上八路红外传感器作为小车倒车退出车库是黑带的检测元件。采用LJ18A3-8-Z/BX电感式接近开关作为车库内铁片的检测元件。单片机接收到锅炉专干其检测到的信号后通过相应的程序控制小车的前进、后退、转弯,从而使小车的性能指标满足课题要求。其系统结构图如图1所示。

 

 

               图1  智能车运行基本原理图框图

 

2.2 单元电路的设计

黑带检测方案选择
    方案一:采用发光二极管发光,用光敏二极管接收。其电路图如图2所示。
  当发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号,呈高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到,其阻抗迅速降低,此时输出端为高电平。但是由于光敏二极管受环境中可见光影响较大,电路的稳定性很差。

            图2   光敏二极管检测黑带电路

方案二:采用光敏电阻接受可见光检测。其电路图如图3
  该电路采用T性网络,可避免使用太大的反馈电阻,并且便于提高输入阻抗。六组光敏电阻用于检测可见光信号。但光敏电阻检测到黑带时,输出端为低电平,但用光是电路输出端显示为高电平,信号返回给单片机,通过单片机控制前轮的转向。但由于需要正负电源,同时光敏电阻易受环境影响,稳定性也很差


             图3   光敏电阻检测黑带


方案三:利用红外线发射管发射红外线,红外线二极管进行接收。采用六组红外光敏耦合三极管发射和接受红外信号,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。接收的红外信号转换为电压信号经LM339进行比较,产生高电平或低电平返回给AT89S52
 
 LM339集成块采用C-14型封装,图4为其外型及管脚排列图。LM339类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择LM339输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”端电压高于“+”端时,输出管饱和,相当于输出端接低电位。两个输入端电压差别大于10mV就能确保输出能从一种状态可靠地转换到另一种状态,把LM339用在弱信号检测等场合是比较理想的。LM339的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只上拉电阻。图1a给出了一个基本单限比较器。输入信号Uin,即待比较电压,它加到同相输入端,在反相输入端接一个参考电压(门限电平)Ur。当输入电压Uin>Ur时,输出为高电平UOH。图1b为其传输特性。
  本方案经济实惠,易于实现,可靠性好,因此采用方案三。黑带检测电路图如图6所示。
    
输出信号进入LM339。稳定性能得到提升。当小车低部的某边红外线收发对管遇到黑带时输入电平为低电平,反之为高电平。结合中断查询方式,通过程序控制小车往哪个方向行走。

     图4  LM339外型及管脚排列图      图5LM339接法

2.2.3 检测铁片方案选择
    
方案一:采用电涡流原理自制的传感器,取材方便,但难以调试,输出信号也不可靠,成功率比较低,难以准确输出传感信息。
    
方案二:采用市面易购的电感式接近开关,本系统采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务。检测铁片电路原理图如图4所示。
  LJ18A3-8-Z/BX接近开关靠近铁片时产生低电平,该信号经放大后传给单片机,单片机通过内部程序控制电机停转。虽然电感式接近开关占的体积大,但对本设计是可以接受,而且输出信号较可靠,稳定性好,受外界的干扰小

             图6  检测铁片电路原理图


方案三:采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务,其电路图如图5。接触开关直接接单片机,但接触开关LJ18A3-8-Z/BX靠近铁片时,产生一个低电平返回给单片机,单片机通过程序控制小车停转60秒。此方案经检测简单可靠,而且本设计要求的精度不高,故采用方案三。


              图7  铁片检测电路

 

2.2.3 小车驱动电路

小车前轮转向采用舵机驱动,后轮采用电机驱动芯片L298驱动,其电路图如图6。
     小车电机为直流减速电机,带有齿轮组,考虑不需调速功能,采用电机驱动芯片L298N。L298N为单块集成电路,高电压,高电流,四通道驱动,设计用来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达),和开关电源晶体管。内部包含4通道逻辑驱动电路。其额定工作电流为1A,最大可达1.5A,Voss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,经过实验,Vs电压应该比Voss电压高,否则有时会出现失控现象。表1是其使能、输入引脚和输出引脚的逻辑关系。

                   表1  引脚和输出引脚的逻辑关系

EN A(B)        IN1(IN3)          IN2(IN4)          电机运行情况

H                H                   L                   正转

H                L                   H                   反转

H                同IN2(IN4)       同IN1(IN3)        快速停止

L                X                   X                   停止


 

 

L298N可直接的对电机进行控制,无须隔离电路。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作,调试通过。
  其中舵机采用SERV0。它是一种位置伺服装置,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。

   具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。


                  L298实物图

                图8 小车驱动电路

               图9  舵机的控制要求

 

3 系统原理及理论分析
3.1 单片机最小系统组成
    单片机系统是整个智能系统的核心部分,它对各路传感信号的采集、处理、分析及对各部分整体调整。主要是组成是:单片机AT89S52、小车驱动系统芯片L298N及各路的传感器件。
3.2黑带检测原理
     利用光的反射原理,当光线照射在白纸上,反射量比较大,反之,照在黑色物体上,由于黑色对光的吸收,反射回去的量比较少,这样就可以判断黑带轨道的走向。由于各路传感器会对单片机产生一定的干扰,使信号发生错误。因此,采用一级射极输出方式对信号进行隔离,这样系统对信号的判断就比较准确。
4 系统程序设计

    为了提高小车反应灵敏度,对红外线接收信号及黑带检测信号都采用中断法来处理。用定时方法对铁片检测、计量路程、倒车、拐弯及数码管动态扫描进行处理。
     主程序流程图见图9,各子程序图见图10、11。

                  图10   程序流程图

                   图11  小车驱动程序

 

4.1 黑带检测程序

小车从起点出发后,一直保持前进状态病区再次状态下始终检测黑带,如果小车左侧某一路红外传感器监测到黑带,给单片机的P1口一个低电平,则小车向左侧拐弯,直到黑带到大小车的中部;如果小车右侧某一路红外传感器监测到黑带,给单片机的P1口一个低电平,则小车向右侧拐弯,直到黑带到达小车的中部。其流程图如图10所示。

5结论

    通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化,智能小车能够完成各项功能到达车库。

附程序,只供参考!

#include<REGX52.h>
#define uchar unsigned char
uchar i,j,k,l;
uchar m=0,n=0;
void delaya(void); 
void delayb(void);
void delayc(void);
void qian(void);
void hou(void);
void delayd(void);
void dj1(void);       //函数声明
void dj3(void);
void dj4(void);
void hongwai(void);
void delay1ms(void);
void stopcar(void); 
void delay2ms(void);
void dt(void);

void dj2(void);
void delay60s(void);
void her(void);
void stopcar(void); 
void delay30s(void);
void fanxing(void);
void dj5(void);
void dj6(void);
//void delay20ms(void);
//void delay2ms(void);

void main(void)
{
do
{
dj1();              //小车向前程序
}
while(P2_1==1);
her();

dt();
//stopcar();
do
{
dj1();              //小车向前程序
}
while(P1_2||P1_5);
delayc();
stopcar();
for(;;);
}

void dt(void)
{
delayb();
P2_6=1;
P2_7=0;

for(i=0;i<100;i++)
{
qian();
qian();
}

P2_6=1;
P2_7=0;
delayc();
P2_6=1;
P2_7=1;
delaya();


P2_6=0;
P2_7=1;
for(i=0;i<80;i++)
{
hou();
hou();
hou();
hou();
}

P2_6=0;
P2_7=1;
delayc();
P2_6=1;
P2_7=1;
delaya();
//for(;;);

P2_6=0;
P2_7=0;
for(i=0;i<100;i++)
{
qian();
qian();
qian();
}
P2_6=1;
P2_7=0;
delayc();
P2_6=1;
P2_7=1;
delaya();


P2_6=0;
P2_7=1;
for(i=0;i<80;i++)
{
hou();
hou();
hou();
hou();
}
P2_6=0;
P2_7=1;
delayc();
P2_6=1;
P2_7=1;
delaya();

P2_6=1;
P2_7=0;
for(i=0;i<65;i++)
{
qian();
qian();
}
P2_6=1;
P2_7=1;
delayc();
}

void delaya(void)
{
delayb();
delayb();
delayb();
delayb();
}
                 
void delayb(void)
{
for(l=15;l>0;l--)
for(j=50;j>0;j--)
for(k=50;k>0;k--);
}



void delayc(void)    //可调沿时程序
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}

void delayd(void)
{
for(l=10;l>0;l--) //10
for(j=70;j>0;j--)//90
for(k=90;k>0;k--);//70
}

void qian(void)
{
P2_4=0;
P2_5=1;
delayd();
P2_4=1;
P2_5=1;
delayc();

}
void hou(void)
{
P2_4=1;
P2_5=0;
delayd();
P2_4=1;
P2_5=1;
delayc();
}

void hongwai(void)               //俩排红外接收处理程序
{
if(P1_0==0||P1_1==0)
{
P2_6=1;
P2_7=0;
for(i=0;i<180;i++){};
P2_6=1;
P2_7=1;
}
else if(P1_0&&P1_1&&P1_2&&P1_3&&P1_4&&P1_5&&P1_6&&P1_7)
{
P2_6=1;
P2_7=1;
delay1ms();
}

else if ((P1_0&&P1_1&&P1_2&&P1_3)==0)
dj3();                                       //左转程序wo
else if ((P1_4&&P1_5&&P1_6&&P1_7)==0)
dj4();
else
delay1ms();
}



void dj1(void)         //小车向前程序;
{
P2_4=0;
P2_5=1;
//delay1ms();
hongwai();
P2_4=1;
P2_5=1;
hongwai();
//hongwai();
// delay1ms();
}

void dj3(void)         //左传程序
{

P2_6=1;
P2_7=0;
delay2ms();
P2_6=1;
P2_7=1;
//delay1ms();
}

void dj4(void)                   //右转程序
{

P2_6=0;
P2_7=1;
delay2ms();
P2_6=1;
P2_7=1;
//delay1ms();
}

void stopcar(void)           //停车程序
{
P2_4=0;
P2_5=0;
}


void her(void)                  //霍尔传感器检测程序
{

P2_4=0;
P2_5=0;
delay60s();
}
void delay60s()        //沿时60秒程序
{
delay30s();
delay30s();
delay30s();
}

void delay30s(void)
{
for(l=15;l>0;l--)
for(j=205;j>0;j--)
for(k=100;k>0;k--);
}

void delay1ms(void)    //可调沿时程序
{

for(i=0;i<70;i++);
//for(i=0;i<100;i++);
}

void delay2ms(void)    //可调沿时程序
{
for(i=0;i<120;i++);
}

 

分享 分享 |  评论 (3) |  阅读 (?)  |  固定链接 |  发表于 17:25  | 最后修改于 2007-03-29 17:28
搜狐博客温馨提示:搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
正在读取评论信息...
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  *中国人爱国心,搜狗输入法爱国主题皮肤下载>>
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复