专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于51单片机的红外避障自动车的实现

作者:佚名   来源:本站原创   点击数:  更新时间:2010年08月01日   【字体:

 最近学校放假三天,于是有了大段的时间,参考了自己学过的单片机,模电等知识,决定开始第一个正式电子制作——《基于51单片机的红外避障自动车的实现》。最终获得了成功,整车调试达到了理想效果,实现了红外避障功能。视频以上传到优酷网,视频地址http://v.youku.com/v_show/id_XMTYzNDc4MjA4.html欢迎大家观看,探讨,提出意见和建议。

    下面是一些基本资料:

—————————————————————小车参数——————————————————————————

    障碍检测方式:红外探测(探测模块功耗7mA)

    车模几何尺寸:149 x 102 x 59  (mm)

    车 模  轮   距:120 (mm)

    测 障   精 度:75 cm

    电  源   系 统:4 x 1.5 v 干电池/4 x 1.2 v 充电电池及其稳压输出

    电               机:直流减速电机,1~12V工作电压,传动比:71.2:1

    主 控   芯  片:STC89C52MCU

    其 他   芯  片:LM7806  LM7805  STC11F01等

 

—————————————————————小组资料——————————————————————————

小组成员:

王太杰:0804211班,擅长于硬件,焊接技术强,硬件知识充足,在本次制作中负责电机驱动部分建与调试。

孙学军:0904211班,擅长于编程,C语言功底扎实,思路开阔,在本次制作中负责程序驱动部分程序调试。

李相华:0804211班,在本次制作中负责电源部分。

 

小组优势:

    硬件与程序搭配协调,每人负责各自模块,只提供最终模块接口,使队友不必关注对方模块内部结构,只需将接口连接完成即可,大大减少了每人负责的内容,提高了效率。

 

—————————————————————制作流程与时间———————————————————————

2010年4月3日(周六):

    小组成员对各模块电路进行了选择、优化,并进行了电路搭建、焊接,各模块调试,确定模块交互接口;主控程序思路成型,并编写了测试程序,对软硬件进行了测试。最后各模块交互,整体调试,主程序确定及细节敲定。

 

 2010年4月4日(周日):

    模块交互,整体调试,主控程序细节修改;经布局后各硬件模块转移至车体,最终焊接,整车成型。主控程序下载,调试,最终成功。

 

—————————————技术资料———————————————————

设计思路:
     为便节省电机数量和电路复杂程度,红外避障小车(以下简称小车)采用前轮主动,后轮从动原理。前轮采用双电机驱动,利用差速法实现车身转向。
     检测部分利用红外发射管发射红外光,遇障碍物后经反射被红外接受管接收,产生电平转换,利用单片机I/O口检测红外检测模块电平输出,以此判断前方障碍物有无,检测到障碍物后,经单片机I/O口控制电机驱动电路,经由电机驱动电路输出不同电压,产生差速,实现转向,最终以达到避障的目标。
 
 电源模块:
     考虑到小车行驶的灵活性,我们抛弃了采用交流电的方案。在制作调试过程中,我们采取了4节1.5V5号南孚电池,经电池盒串联后可获得5.9~6.5V稳定电压输出,直接给电机驱动电路供电。但考虑到51单片机工作电压为4.5V~5.5V,且其对工作电压要求比较严格。对此,我们设想采取基于LM7805稳压芯片的稳压芯片输出5V恒定电压。电源电路图见附件,
     由于在制作中手头只有一片LM7806,于是我们在输出端串联了一个IN4007二极管,产生0.7V压降,最终获得5.2V~5.3V稳定电压输出,给单片机供电。以提高系统稳定性。
     在最终整车成型时我们采用了5V稳压二极管稳定电压,原因有二:一是降低了电源电路功耗,二是降低了制作成本。考虑到一次性干电池的不可利用性,我们在整车成型时采用了4节可充电电池经电池盒串联的方案,以降低后续制作成本。考虑到电压输出端的单一性,我们考虑采用10V稳压管另做一路电源输出,为电机提供工作电压,在一定程度上可提高电机功率,提高整车运行速度。

 

 电机驱动模块:
     考虑到电机驱动集成芯片的价格比较高(18~30元/片),我们舍弃了采用电机驱动芯片驱动的方案,转而寻求分立元件模拟电路驱动,经最终选择我们采取了利用双三极管控制开关电路,利用三极管的反应灵敏性,并将其一端接在MCU的I/O口上,可以通过控制I/O口输出0、1脉冲数量比来控制三极管开关,以达到控制输出电压的目的。驱动电路图见附件。

 

 主控程序:
     为了降低程序复杂性,我们使用了3个I/O口,一个I/O口用来接收红外部分电平转换,检测障碍物,另外两个I/O口端接电机驱动电路,用程序使其产生0、1脉冲数量比来控制驱动电路开关。最终实现速度差以实现转向避障。
 

    主控程序如下:
 /* *****************************
   程序开发环境Keil uVision3
   语言:C
   编写者:孙学军
   时间:2010/04/04
 ***************************** */

 

 /* *****************************
   主程序及注释如下:

 ***************************** */
  #include<reg52.h>   //添加函数库
  #define uint unsigned int   //宏定义
  #define uchar unsigned char   //宏定义
  sbit s=P3^5;        //定义红外避障检测端口
  sbit m1=P3^4;       //定义电机M1电平输出端口
  sbit m2=P3^6;       //定义电机M2电平输出端口
  void delay_ms(uint z);    //声明延时函数


  main()            //主函数
  {
   uint i=0;          //初始值设定
   m1=1;
 m2=1;
 while(1)           //无限循环
 {             
  if(s==0)        //S=0表示前方有障碍物  进行转向
  { 
   for(i=0;i<5;i++)
    {
   m1=0;
   m2=1;
   delay_ms(15);    //状态保持15ms
   m1=1;
   m2=1;
   delay_ms(5);    //状态保持5ms
   }
  }
  if(s==1)        //S=1表示前方无障碍物  直线行驶
  {
   m1=1;
   m2=1;
   delay_ms(10);    //状态保持10ms
  }
 }
  }

 

  void delay_ms(uint z)    //延时函数 循环嵌套原理
  {
   uint x,y;
   for(x=z;x>0;x--)
  for(y=110;y>0;y--);
  }

 

/* *****************************

 程序结束,经测试程序符合硬件,功能达到预期目标。

 ***************************** */


————————————————————功能扩展——————————————————————————

1:本车人机交互性不强,车体速度无显示、障碍物有无显示不明显,无转向灯提示
       预期可以增加速度测量以及液晶或数码管显示模块,显示模块可以附在车体本身,也可以单独成模块,利用无线传输将数据从车体发送到终端显示。
 

2:增加自动循迹功能

 

3:增加自动刹车功能

 

4:遥控功能

————————————————————完毕————————————————————————————

 

欢迎探讨,大家共同学习进步,欢迎高手指点!

关闭窗口

相关文章