循迹小车实践报告

江 西 理 工 大 学

创新实验报告

题    目:循迹小车的制作     

学    院:电气工程与自动化学院

专    业:自动化      

班    级: 113        

学    生:       

学    号:23          

       

                                                时间:20##年8月2号

目 录

目 录...

摘    要:...

1.任务及要求...

1.1任务...

2.系统设计方案...

2.1小车循迹原理...

2.2控制系统总体设计...

3.系统方案...

3.1 寻迹传感器模块...

3.1.1红外传感器简介...

3.1.2传感器安装...

3.2控制器模块...

3.3电源模块...

3.4电机及驱动模块...

3.4.1电机...

3.4.2驱动...

3.5自动循迹小车总体设计...

3.5.1系统总体说明...

4.软件设计

4.1 PWM控制...

4.2 总体软件流程图...

4.3小车循迹流程图...

4.4中断程序流程图...

4.5单片机测序...

5. 实验总结-----------------------------------------------------------------  

自动循迹小车

摘    要:

本设计是一种基于单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。利用红外光电传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。

关键词:单片机   光电传感器  直流电机  自动循迹小车

1.任务及要求

1.1任务

设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。系统方案方框图如图1-1所示。

图1-1 系统方案方框图

2.系统设计方案

2.1小车循迹原理

这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到的反射光的强弱来判断“道路”。通常采取的方法是红外探测法。

 红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测距离有限。

2.2控制系统总体设计

自动循迹小车控制系统由主控制电路模块、稳压电源模块、红外检测模块、电机及驱动模块等部分组成,  

1、 主控制电路模块:单片机、复位电路,时钟电路

2、 红外检测模块:光电传感器。

3、 电机及驱动模块:电机驱动芯片、两个直流电机

4、 电源模块:开关电源

3.系统方案

3.1 寻迹传感器模块

ST系列反射式光电传感器是经常使用的传感器。这个系列的传感器种类齐全、价格便宜、体积小、使用方便、质量可靠、用途广泛。。 

在黑线检测的测试中,若检测到白色区域,发射管发射的红外线没有反射到接收管,测量接收管的电压为4.8V ,若检测到黑色区域,接收管接受到发射管发射的红外线,电阻发生变化,所分得的电压也就随之发生变化,测的接收管的电压为0.5V,测试基本满足要求。

3.1.1红外传感器

含一个反射模块(发光二极管)和一个接收模块(光敏三极管)。通过发射红外信号,看接收信号变化判断检测物体状态的变化。A、K之间接发光二极管,C、E之间接光敏三极管(二者在电路中均正接,但要串联一定阻值的电阻)

   

图 3-1  实物图          图 3-2 管脚图及内部电路

       

3.1.2传感器安装

     在小车具体的循迹行走过程中,为了能精确测定黑线位置并确定小车行走的方向,需要同时在底盘装设2个红外探测头,进行两级方向纠正控制,提高其循迹的可靠性。这2个红外探头的具体位置如图3-6所示。

  传感器安装图

图中循迹传感器全部在一条直线上。其中X1与Y1为方向控制传感器.小车前进时,始终保持(如图3-6中所示的行走轨迹黑线)在X1和Y1这两个传感器之间,当小车偏离黑线时,传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。若小车回到了轨道上,即2个探测器都只检测到白纸,则小车会继续行走,从而提高了小车循迹的可靠性。

3.2控制器模块

采用Atmel 公司的80C51单片机作为主控制器。它是一个低功耗,高性能的8 位单片机,片内含16k 空间的Flash 只读存储器,具有1K 的随机存取数据存储器(RAM),4 个I/O口,1个可编程看门狗定时计数器,且可在线编程、调试,方便地实现程序的下载与整机的调试。

时钟电路和复位电路 如图3-7(与单片机构成最小系统)

1)采用外部时钟,晶振频率为12MHZ

2)采用按键复位

P89V51(QFP-44)最小系统

3.3电源模块

  

   

3.4电机及驱动模块

3.4.1电机

     电机采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。

3.4.2驱动

驱动模块采用专用芯片L298N 作为电机驱动芯片,L298N 是一个具有高电压大电流的全桥驱动芯片,其响应频率高,一片L298N可以分别控制两个直流电机。以下为L298N的引脚图和输入输出关系表。

 

图3-9 L298N外部引脚            表2 L298N输入输出关系

实物图部分背面

3.5自动循迹小车总体设计

图3-11 总体电路图

3.5.1系统总体说明

如图3-11所示,当光电传感器开始接受信号,通过比较器将信号传如单片机中。小车进入寻迹模式,即开始不停地扫描与探测器连接的单片I/O 口,一旦检测到某个I/O 口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。单片机采用T0定时计数器,通过来产生PWM波,控制电机转速。

4.软件设计

4.1 PWM控制

本系统采用PWM来调节直流电机的速度。PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,PWM又被称为“开关驱动装置”。

在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。

本系统中通过控制51单片机的定时器T0的初值,从而可以实现P0.4和P0.5输出口输出不同占空比的脉冲波形。定时计数器若干时间(比如0.1ms)中断一次, 就使P0.4或P0.5产生一个高电平或低电平。 将直流电机的速度分为100个等级, 因此一个周期就有个100脉冲, 周期为100个脉冲的时间。速度等级对应一个周期的高电平脉冲的个数。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大, 加在电机两端的电压越大, 电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时, 就可以得到不同的电机平均速度, 从而达到调速的目的。精确地讲, 平均速度与占空比并不是严格的线性关系, 在一般的应用中, 可以将其近似地看成线性关系。

4.2 总体软件流程图

小车进入寻迹模式后,即开始不停地扫描与探测器连接的单片I/O 口,一旦检测到某个I/O 口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。软件的主程序流程图如图4-1所示:

4.3小车循迹流程图

小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定2个探测器中的哪一个探测到了黑线,如果左面传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。循迹流程图如图4-2所示

由于第二级方向控制为第一级的后备,则两个等级间的转向力度必须相互配合。第二级通常是在超出第一级的控制范围的情况下发生作用,它也是最后一层保护,所以它必须要保证小车回到正确轨迹上来,则通常使第二级转向力度大于第一级,即Turn_left2 > Turn_left1,Turn_right2 > Turn_right1 (其中Turn_left2,Turn_left1, Turn_right2 , Turn_right1为小车转向力度,其大小通过改变单片机输出的占空比的大小来改变),具体数值在实地实验中得到。

4.4中断程序流程图

这里利用的是51单片机的T0定时计数器,从而让单片机P0口的P0.4和P0.5引脚输出占空比不同的方波, 然后经驱动芯片放大后控制直流电机。定时计数器若干时间(比如0.1ms)比如中断一次, 就使P0.4或P0.5产生一个高电平或低电平。中断程序流程图如图4-3所示

4.5单片机测序

 #include"config.h"

#include"Port.h"

#include"config.h"

#include"Port.h"

#define uchar unsigned char

#define uint unsigned int

#define  CG1  P3_1

#define  CG2  P3_3

#define  DIR1  P1_0

#define  DIR2  P1_2

#define  PWM1  P0_1

#define  PWM2  P0_3

uchar temp;

uchar signal ;

void delay_1ms(uint d)

{

   uint i;

   while(d--)

        for(i=0;i<75;i++);

}

void motor_run()     //电机起动

{

  PWM1=1;

  PWM2=1;

  DIR2=0;

  DIR1=0;

}

void motor_left()       //小车左转

{

   PWM1=0;

    PWM2=1;

   DIR2=1;

   DIR1=0;

}

void motor_right()   //小车右转

{  

   PWM1=1;

    PWM2=0;

   DIR1=1;

   DIR2=0;

}

void motor_round()   //小车自转

         

{   PWM1=1;

    PWM2=1;

   DIR1=1;

   DIR2=0;          

}

 void motor_stop()      //电机停止

{

    PWM1=0;

    PWM2=0;

    DIR1=0;`

    DIR2=0;

}

void motor_quickrun()

{

    PWM1=1;

    PWM2=1;

    DIR1=1;`

    DIR2=1;

}

void main()

{

   while(1)

   {

        motor_run();

        if(CG1==1&&CG2==0)motor_left();  

        if(CG1==0&&CG2==1)motor_right();

     if(CG1==1&&CG2==1)motor_stop();

        if(CG2==0&&CG1==0) motor_run();

        } 

   }        

//如果在其它文件中实现中断处理程序,需要在包含main函数的文件中声明该中断处理程序

//该声明可以直接放在包含main函数的文件或者被包含main函数的文件包含的头文件中

//声明的形式为:void xxx_isr(void) __interrupt x

void INIT0_ISR(void) __interrupt 0

{

    //外部中断0中断处理程序

}

void TIMER0_ISR(void) __interrupt 1

{

   //定时器0中断处理程序

}

void INIT1_ISR(void) __interrupt 2

{

   //外部中断1中断处理程序

}

void TIMER1_ISR(void) __interrupt 3

{

   //定时器1中断处理程序

}

void SERIAL_ISR(void) __interrupt 4

{

   //串口中断处理程序

   if (TI)  //发送数据完毕

   {

      TI = 0;

      //其他的工作

   }

   else

   {

      RI = 0;   //接收到数据

      //对数据进行处理

   }

}

5.实验总结:

    以前总感觉学的东西是比较虚的,经过这一次的动手实践,让我感觉到这是一门真实的,很有应用的一门学科。一开始在制作电源板时,我请教别人,别人只给了我个电路图,我感觉自己总会犯错,不敢自己动手,就叫别的同学拿出已做好的实验图给我模仿,看着电源板实物图来一步一步的做,很害怕做错,一边拿着别人的实物图,一边请教别人这根线是怎么连得,后来慢慢的就有点自信了,做完了电源板接着做驱动板,我跟着电路图,感觉按着这个电路图制作出来的实物板不太美观,就慢慢地改良,再用电烙铁焊的时候,开始焊时管脚那里的焊锡焊的好多,像一个好大的珠子,我慢慢的琢磨,后来终于焊的比较美观。这块我做出来的实物驱动板布置的很对称,自己心里好高兴。接着就是寻迹板,我继续改良寻迹板,小心翼翼的焊着每根线,终于做完了,就立刻拿着自己做的板和别人比比,看着别人的做的那么不美观,我心里又一阵高兴,然而,就在我检测这块板时,发现没用,检查了好久都没有检查查出错误,弄得我心里很急,就请教别人给我检查,别人看了我这板,问我怎么连得,我就跟他说我改良了,后来他发现问题对我说“你这个改良后这个循迹的二极管得跟着反过来接,于是,我反过来接了,还是出了问题,弄了好久还没弄好就重新做了一块,也折腾了好久,这块板也被我折腾的不太美观了,终于弄好了。接着慢慢地把小车其他部件弄好,花了我好多心思。从中发现,有些东西看起来简单,但往往自己动手做时漏洞百出,发现做什么事情都得注重细节,得细心,而且在自己动手做时不能太怕这怕那,得有点信心,遇到挫折不能乱,不能轻易放弃,要坚持下去。但同时也看到了我们可以通过所学的,加上自己的动手能力,可以造出自己的成果,收获成果的喜悦。

   

相关推荐