越障机器人在行进过程中需要不断地获取关于前方障碍的信息,从而对机器人进行有效地控制。由于机器人体积小,对传感器要求精度高,因此采用单片机进行控制。PIC16F877内有8通道、具有10位精度的A/D转换模块,我们利用种单片机设计了一个红外测距系统。
1红外传感器的原理
传感器的红外发光管发出红外光,光敏接收管接收前方物体反射光;接收管接收的光强随反射物体的距离变化,据此判断前方否有障碍物并根据接收信号强弱判断物体的距离。
2PIC16F877简介
PIC16F877单片机是由美Microchip公司生产的8位单片微机,具有独特的RISC(精简指令集)结构,数据总线和指令总线分离的哈佛总线结构,使指令只有单字的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2∶1的代码压缩,速度提高4倍。
P1C16F877芯片上集成有8K的Flash可重复编程存储器,368byte的数据存储器,256byte的EEPROM数据存储器,3个定时/计数器,2个集捕捉、比较、脉宽调制3项功能于一身的CCP模块,同步串行通信端口,10位多通道A/D转换器,以及时钟、上电复位、看门狗等。芯片引脚共40条。
3基于PIC16F877的红外测距系统
3.1硬件电路设计
首先利用红外发光管TLN205发射红外光,红外光在遇到前面的障碍物反射,由红外接收管TPS708接收,此时TPS708会产生一个与光强相对应的电流。电流经由LM358两级放大后,在输出端可以得到一个0~3V的模拟电压,作为PIC16F877单片机RA0端口的模拟输入量。单片机在完成初始化和端口选择后,即开始进行A/D转换,重复等待与检查转换完成标志值是否已为零,最后将转换结果通过译码器74LS138在LED上显示出来。
红外光发射及接收电路如图1所示,Vin为控制输入信号(采用高低电平输入),以控制发光管的开关。单片机硬件连接图电路如图2所示。
3.2软件设计
主程序和A/D转换子程序流程图如图3和图4所示。
3.2.1设定输入/输出引脚
PIC16F877单片机D口的8个端口作为数据输出使用,同时将A口的RA0引脚设定为模拟电压输入。控制D口输入/输出功能的TRISD寄存器(地址为88h)全设为0;A口输入输出功能的TRISA寄存器(地址为85h)〈0〉位为1。PIC指令如下所示:
bankel TRISD;选择寄存器所在的数据存储体
clrf TRISD;设定D口为数据输出口
bsf TRISA,0;设定RA0位输入口
3.2.2A/D转换
PIC16F877单片机A/D转换的初始设定存放在A/DCON1寄存器(地址为9fH)与A/DCON0寄存器(地址为1fH)中。A/D转换初始设定与选择模拟输入端的程序如下:
A/D转换启动的控制信号是A/DCON0寄存器的〈2〉位,设为1表示启动转换,设为0表示不要转换。A/D转换的结果放在A/DRESH及A/DRESL寄存器,程序如下:
4试验结论
按上述设计,我们制作了实际的红外测距系统,并进行了测量实验。图5为实验曲线,其中虚线代表拟合后的二次曲线,曲线拟合采用matlab提供的拟合函数polyfit。从图中可以看出,所设计的红外传感器能够实现0~25cm之间的距离测量,且具有较高的精度,完全能够满足控制要求。
考文献
[1]何信龙,李雪银.PIC16F87X快速上手[M].清华大学出版社,2002.