实验二 红外测距传感器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院实验报告
学号:
精心整理
一、实验目的
1. 学习CC2530 单片机ADC 模块的使用。
2. 学习红外测距传感器的使用。
二、实验原理
节点与红外测距传感器的硬件接口
红外线测距传感器模块GP2Y0A21YK0F
精心整理
1) 外接
精心整理
ADC的主要特性如下:
精心整理
精心整理
精心整理
据)为 x,
80cm 5ms , 1mm 。
由于GP2Y0A21YK0F 传感器采用的是PSD 光信号调制法,因此其输出的信号电压并不是标准的直流电压,而是叠加了波幅约为0.2V,频率1KHz 的方波,由于波幅达到0.2V,这就影响了分辨率。如果不进行信号处理,分辨率的精度仅能达到1mm。而如果经过有效处理,在正常情况下可以达到0.1mm以上的精度,完全可以满足一般工程定距等方面的需求。
Sharp 的红外传感器都是基于一个原理,三角测量原理。红外发射器按照一定的角度发射红外光束,当遇到物体以后,光束会反射回来,反射回来的红外光线被CCD 检测器检测到以后,会获得一个偏移值L,利用三角关系,在知道了发射角度a,偏移距L,中心矩X,以及滤镜的焦距 f 以后,传感器到物体的距离 D 就可以通过几何关系计算出来了。
传感器特点:
MATLAB 可以拟合出计算公式,直接根据电压值计算出距离,假设测量出
,待测距离为distance(cm),则distance = 26.757 * voltage^-1.236
三、实验内容与步骤
1. 将仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530节点的电源,再将仿真器的另一端用USB 接口与PC 计算机相连。
2. 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开串口调试器软件,设置波特率57600,校验位None,数据位8,停止位1,然后点击打开串口按钮,如下图所示:
精心整理
精心整理
中的“
功能菜单上的绿色下载按钮
开发环境中的运行程序按钮运行程序,如下图所示:
)。
6. 扩展实验
为了能够更加直观地观察到传感器工作的状况,在实验过程中可以利用光盘中配套的上位机软件CurveDisplay 来观察传感器的数据曲线。
操作步骤
(1). 将仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530 节点的电源,再将仿真器的另一端用USB 接口与PC 计算机相连。
(2). 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开配套传感器实验中的“CurveDisplay\CurveDisplay.exe”上位机软件,选择正确的串口号后,再设置波特率57600,
精心整理
校验位None,数据位8,停止位1,最后点击打开连接按钮,如下所示:
“模块中。
精心整理
相应
程序正常运行后,在CurveDisplay 软件中可以观察到传感器的数据曲线,如下图所示:在实验过程中,将传感器水平正对着墙壁或障碍物远离移动,可以在CurveDisplay 软件
上的传感器数据曲线也发生相应的变化,如下图所示:
精心整理
#define GPIO_GLED P1_0
#define GPIO_RLED P1_1
//GPIO_KEY定义(0:被按下,1:未按下)
#define GPIO_SW1 P1_2
#define GPIO_SW2 P1_3
void InitClock(void) //初始化时钟
{
精心整理
unsigned int i;
//turn on 16MHz RC and 32MHz XOSC
SLEEPCMD &= ~0x04;
//wait for 32MHz XOSC stable
while(!(SLEEPSTA & 0x40));
//chip bug workaround
asm("nop");
//延时63us
P1SEL &= ~0x08;
P1DIR &= ~0x08;
}
void InitUART(void) //初始化串口USART0
{
//P0[5..2]配置为外设IO
P0SEL |= 0x3C;
精心整理
//USART 0 I/O location: Alternative 2 location
PERCFG &= ~0x01;
//UART mode
U0CSR |= 0x80;
//无流控制,无校验,1位停止位,8位数据位,起始位为低电平,停止位为高电平
U0UCR = 0x02;
//波特率57600
U0GCR |= 0x0A;
unsigned char sign = (unsigned char)(Num < 0);
unsigned long trunc; //整数部分
unsigned long fract; //小数部分(4位)
if (sign)
{
Num *= -1;
}
精心整理
trunc = (unsigned long)Num;
fract = (unsigned long)((Num-(unsigned long)Num)*1000000);
//处理小数部分
if (fract == 0)
{
ptr[i++] = '0';
}
else
if (sign)
{
ptr[i++] = '-';
}
//字符串逆序输出
for(j=0; j<(i/2); j++)
{
tmp = ptr[j];
精心整理