这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 通讯及无线技术 » 反射式红外阵列传感器的设计

共6条 1/1 1 跳转至

反射式红外阵列传感器的设计

菜鸟
2007-08-02 10:42:00     打赏

引言
      在一些自动伺服的机器人应用系统当中,通常需要感知机器人在平面(地面)上的相对姿态;比如一些自动竞技机器人(使用在各种机器人竞技比寒当中的),以及一些应用在有相对轨迹标记的固定场所当中的工业机器人等。一般,在这些机器人工作的环境当中,会有平面的相对轨迹标记,如场地上平面的网格线(轨迹线);机器人可以通过检测这些标记来获取自身的姿态数据,以便于自动伺服调整机器人的姿态保证任务的执行。而检测平面上相对轨迹标记的解决方案有多种选择,可以采用摄像头图像采集然后进行轨迹识别的方案,也可以采用线阵的CCD传感器,或者采用线阵排布的颜色传感器模块;本文则介绍了可以用于这样的检测平面相对位置的反射式红外阵列传感器模块,包括介绍工作原理以及设计细节。
      关键字 机器人    线阵    传感器    红外传感器   相对姿态   寻迹

1 技术概述
      本文所介绍的阵列传感器主要用于机器人的自身相对姿态的感知,并不包括机器人相对位置的定位(当然,也是可以通过一些上层的算法来判断解算根据阵列传感器的数据特征,并以此获取相对位置信息);所以在介绍反射式红外阵列传感器前,需要假设一些前提的条件:场地平面参照物(即平面的相对轨迹标记)。
      在很多竞技机器人的比赛项目当中,比赛的场地往往都会有类似于网格线(轨迹线)的平面参照物,自动伺服的机器人(自动机器人)可以检测相对这些参照物的姿态来调整自身的平面姿态,再加上其它的定位系统,自动机器人就可以在场地的任意位置感知自身的相对姿态和相对位置了,这就是自动机器人的基本工作条件。
      自动机器人检测轨迹线最常见的应用是寻线行走,这样的应用需要获取自动机器人与轨迹线的中心偏移数据、偏角数据(机器人底盘轴线与轨迹线的夹角);而一般会采用“二”字形的探测器,如下图所示:

      “二”字形的探测器实际上是可以由两个阵列传感器模块一前一后的组合而成;而每条传感器模块呈长条状,并沿长轴线上分别排列有多个传感单元,每个传感器单元可以分辩出呈白色窄条状的轨迹线与背景(与轨迹线颜色区分开的)。
      由前面的分析可知,本文所介绍的反射式红外阵列传感器长轴线上有多个红外对管,呈线阵分布,可以检测出轨迹线与其它背景区域的反光率差别,并以此确定阵列传感器长轴线与轨迹线轴线的偏移;再结合一定的传感器安装方法(如前面所介绍的“二”字形安装方法)自动机器人的控制器是可以依据阵列传感器的数据分析出当前机器人相对轨迹线的姿态(轴偏量、角偏量)。而阵列传感器的检测精度和范围将直接影响系统控制性能;起决定性作用的就是阵列上有多少个传感单元、传感单元之间的距离,以及传感单元的性能(调制频率、灵敏度等)。

2 设计方案
      权衡了传感器模块精度(分辩率)和检测速度的性能,本文所介绍的阵列传感器模块在传感单元数量上选择了16个,这样便于数据的处理,当然还有其它的原因。而传感单元采用反射式的红外对管,这样比较方便选型,以及方便采购。
      本文介绍所设计的反射式红外阵列传感器模块上的十六个反射式的红外对管,在传感器模块长轴线上呈线状分布;模块中使用运算能力较强,并且抗干扰能力强的单片机作为主控核心MCU,MCU对十六个传感器进行扫描,并对每个对管检测到反射回来的信号进行调理后,送至ADC模块(MCU内部自带)进行AD转换;这样可得到每个对管对应范围的256个级别的灰度值。只要轨迹线与背景存在颜色、反光度的差别,就可以从每个对管的AD转换值当中分析到当前该对管所检测点为轨迹线还是背景。
下图为模块的较果图:

      实际的模块设计当中,有几个非常重要的问题需要解决,这也是本文所介绍的内容的重点所在:
      1、反射式红外对管所固有的散射角、速度与灵敏度的矛盾;
      2、每个红外对管之间的性能参数的差异性问题;
      3、传感单元对环境的适应能力问题;
      接下来,从硬件设计和软件设计的角度出发,把以上问题的解决方法一一分析。

2.1 系统硬件连接
2.1.1 核心MCU
      模块的核心MCU采用Philips公司的P89LPC932单片机;LPC932为增强型的51内核的单片机,在同等CPU工作频率的情况下,速度为传统51的六倍,这点对于本设计的数据处理要求来说,是非常重要的。
      应用中采用了芯片内部的振荡器(7.374MHz)作为MCU的时钟源;主要是因为在单片机运行的在机器人的载体上,机械上的振动比较大,而当晶振受到震动时,就有可能进入莫名的异常状况(如死机、复位等),而采用单片机内部的振荡器就不会存在上述的情况了。
2.1.2 传感器核心设计
      模块中的红外对管,选用了进口的RP220型红外对管。该对管的有效作用距离为4cm,接收管灵敏度高;在测试中,2.5cm的距离上,对黑色与白色普通反射面,接收反射回来的红外线强度能有5倍以上的差值;但其调制频率较低,仅有800Hz。
      为了降低MCU扫描传感器的速度对传感器调制频率的要求,在电路设计中,用一个NPN的三极管同时驱动四个红外对管,四个三极管即可驱动全部的十六个对管(如下图,为部分传感器驱动电路);而MCU控制两片4051,按一定的顺序对红外对管的接收管进行选通。这样可以把调制频率的要来降低了四倍。

      在PCB板设计时,十六个传感器呈线阵分布,在每个传感器间的距离为13.75mm;鉴于红外对管的散射,为保证一定的测量精度,在传感器模块装上机器人时,要求对管的底面与地面的距离不能大于2.5cm。而由于红外对管距离反射面越近,其黑、白反射面的接收强度差别越小;所以还得要求对管底面与地面距离不能小于1cm。

      通过4051选通回来的信号,要通过一个射随、放大电路后才能送入ADC,将每个接收管接收到的反射回来的红外线强度模拟信号进行模数转换后,再由MCU读取。
      而机器人上仅有单一的正电源;所以为了系统电源的统一,在设计中选用了单电源供电的双运放LF358及单电源供电的ADC芯片:TLC1549。如下图所示:

      图中A_in1和A_in2分别是来自两片4051的八选一输出。TCL1549是10位的ADC,其数据输出接口为三线的SPI通讯接口,最高的通讯速率为2Mbit/s。而在设计中,对单个数值的精度要求不是太高,所以为了数据处理及软件设计的方便,在设计中用三个IO口模拟SPI通讯来读取TLC1549中的数据,且仅取其十位精度中的高八位。
2.2 软件设计思路
      在传感器模块中,MCU的主要工作是扫描十六个红外对管,并根据每个读回来的AD值进行分析(主要是进行软件补偿),得到每个管子对应反射面的256个灰度等级的数值,然后与比较域值进行比较,可分析出每个对管对应的反射面为不反光区域(背景)还是白色窄条线(轨迹线)。
      由于比赛场地与平时机器人训练的场地的反射率会有差别,以及机器人所工作的场地条件的环境因素也会时常有变化;所以传感器模块必需有一个初始化的功能,以适应不同的场地,也就是所说的拥有学习能力的智能传感器概念。
      此外每个红外对管的参数不一致,在程序中加入了对每个接收管返回AD值的数据补偿。
      以上两点也就是传感器模块程序设计的重点。传感器扫描程序和初始化程序都在一个的定时中断服务程序里,下图为该中断子程序的流程图。而进行正常的传感器扫描时,定时中断为5ms定时中断,进行初始化扫描时,为20ms的定时中断。

      要进行数据的软件补偿,就必需要有补偿的参数,在补偿程序设计中定义了三个补偿参数,一个乘系数na,一个加系数nb,一个减系数nc。这样一个红外对管将对应三个补偿参数;另外还有一个比较域值,也在计算三个补偿参数的过程中计算出来。下面的程序段为三个补偿参数的计算及一个比较域值的计算过程。
//*******************************************************//
//求解单个对管的三个补偿系数
RF_mid = DIV16(RF_DataBase[Data_type],rfdata[i]);
na = (unsigned char)RF_mid; //得到na系数,在RF_mid的低八位
RF_nY = (unsigned char)(RF_mid>>8);//取RF_mid的高八位
while(RF_nY)
{       //循环解算nb和nc
if(RF_nY>=125)
{
 RF_nY = RF_nY-120;
 nc =  nc+120;
}
while(RF_nY>8)
{
 RF_nY = RF_nY-5;
 nb = nb+3;
 nc = nc+8;
}
while(RF_nY>2)
{
 RF_nY = RF_nY-1;
 nb = nb+2;
 nc = nc+3;
}
RF_nY = RF_nY-1;
nc = nc+1;
}
//*****************************************************//
//*****************************************************//
//求解对管的比较域值
for(i=0;i<16;i++)
{
if((Init_data_h[i]/Init_base_h)>=2) Init_data_h[i]=Init_base_h+3;
Init_data_buf[i]=(Init_data_h[i]-Init_data_l[i])*3/5+Init_data_l[i];
EEPROMwrite((unsigned int)(116+i),Init_data_buf[i]);
}
//*****************************************************//
      这样,每个对管读回来的AD值就可进行软件的补偿了,解决了对管性能参数不一致的问题,提高了传感器模块的适应能力。补偿的公式为:
nF=na*nAD+nb-nc
nAD为每个对管采样回来的AD值,nF为补偿后的数值。

3 结语
      本文所介绍的反射式红外阵列传感器的设计仅仅是提供给读者一种设计的思路,主要在于解决这类传感器模块设计、应用时会遇到的几个问题的方法;即:传感器的固定散射角、速度和灵敏度的矛盾(如何权衡它们的取舍);每个红外对管之间的性能参数的差异性问题;传感单元对环境的适应能力问题。
      根据本文的思路设计出来的阵列传感器模块具备学习能力(自动适应场地环境),并且容差性能良好,可以保证机器人在场地上各个位置上均能够准确的检测到轨迹线;这样的模块已经应用在了机器人竞赛项目的机器人载体当中,应用效果不错。

----------------------------------------
                 更多资料请关注“北京亿学通电子商城”


    2007年是全国竞赛年,大学生电子设计竞赛、机器人大赛等诸多赛事层出不穷。为了更好的支持高校师生参加竞赛并取的好的成绩,“北京亿学通电子商城”为广大师生推出DIY竞赛小车平台、自带二级汉字库的128X64液晶模组、各类竞赛用传感器、步进电机、直流减速电机、51/ARM开发板。欢迎登陆察看。网址:http://www.61mcu.com

    新颖的产品、准确的定位、丰富的资料、周到的服务,相信一定会为您竞赛作品增辉添彩。

    QQ:276761837
    E-mail:fae_61mcu@163.com
    网  站:http://www.61mcu.com
   ------------------------------------
   ◎助力高校人才培养  助力企业产品研发◎ 




关键词: 反射     红外     阵列     传感器     设计     自动     机器人     相对    

菜鸟
2008-07-17 10:47:06     打赏
2楼
顶礼

菜鸟
2010-07-21 15:53:13     打赏
3楼

菜鸟
2013-05-15 20:07:44     打赏
4楼

受教了,


工程师
2013-12-04 09:57:44     打赏
5楼

有谁做过红外学习的吗,用的什么IC?




专家
2013-12-05 14:37:04     打赏
6楼
图片是不是没有显示?

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]