第四次无线传感器网络实验.doc
- 格式:doc
- 大小:265.52 KB
- 文档页数:7
南昌航空大学实验报告
二O 一六年四月20 日
课程名称:无线传感器网络实验名称:CC2530 数据采集及AD 转换实验班级:姓名:
指导教师评定:签名:
一、实验目的
1. 通过实验掌握CC2530 芯片GPIO和AD转换寄存器的配置方法
2. 掌握AD 转换函数程序的编程方法
3. 掌握光敏传感器的操作使用
4. 掌握光照传感器采集程序的编程方法
二、实验内容
1. 在IAR 集成开发环境中编写光照传感器采集程序,设计实验检测光照的
强度,通过AD转换将光照强度通过串口调试助手显示出来。
三、基础知识
1. 光照传感器介绍
采用GL7516 光敏电阻进行光照强度的检测。光敏电阻式一种半导体材料制成的电阻,其电导率随着光照度的变化而变化。利用这一特性可以制成不同形状和受光面积的光敏电阻。GL7516 就是其中的一种,光越强阻值越大。
光敏电阻工作原理简介:
本实验采用光敏电阻来采集光照度信息。它的工作原理是基于光电效应。
在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻。为了增加灵敏度,两电极常做成梳状。构成光敏电阻的材料有金属的硫化物、硒化物、碲化物等半导体。半导体的导电能力取决于半导体导带内载流子数目的多少。当光敏电阻受到光照时,价带中的电子吸收光子能量后跃迁到导带,成为自由电子,同时产生空穴,电子—空穴对的出现使电阻率变小。光照愈强,光生电子—空穴对就越多,阻值就愈低。当光敏电
阻两端加上电压后,流过光敏电阻的电流随光照增大而增大。入射光消失,电子‐空穴对逐渐复合,电阻也逐渐恢复原值,电流也逐渐减小。
2. 光照传感器的接口电路
光照传感器的接口电路如下图所示。通过CC2530 的AD 口,采集光照传感器和固定电阻分压后的电压值,从而感知光照传感器随光强变化的情况。
3.AD 转换寄存器
CC2530的ADC支持14位模拟数字转换,转换后的有效数字位高达12位。ADC 包括一个8路独立可配置通道的模拟多路转换器和一个参考电压发生器。CC2530的ADC转换结果可以通过DMA方式写入存储器,也可直接读取ADC寄存器获取。CC2530的ADC具有多种不同的运行模式。
CC2530的P0口可作为ADC输入,其中AIN0~AIN7分别对应P0.0~P0.7。ADC 输入可配置成单端或差动输入,如选择差动输入,则对应的输入分别为AIN0~AIN1、AIN2~AIN3、AIN4~AIN5、AIN6~AIN7,需要注意引脚电压不能为负电压,也不能大于VDD。在差动输入中,每个差动输入的转换模式是不一样的。除了AIN0~AIN7作为ADC输入之外,片内温度传感器也可以作为测量温度的ADC输入,AVDD5/3电压同样可以作为一个ADC输入。AVDD5/3作为ADC输入主要用于电池测量,需要注意的是不能以待测的电池电压作为参考电压。
CC2530ADC有两种转换方式,第一种是连续转换,此时需要配置ADCCON1 和ADCCON2 寄存器,寄存器APCFG的设置将会影响连续序列转换的通道数,CC2530的8路ADC输入不一定要求全部设置为模拟输入。如果只用到了序列转换中的部分通道,可以屏蔽APCFG寄存器中其他通道的相应模拟输入位,此时该通道在转换时将被跳过;第二种是单次转换,此时只需要配置寄存器ADCCON3 即可。
(具体寄存器配置见数据手册)
4. 实验说明
P0DIR=0;//定义P0口为输入口,光照传感器接P0_0口
ADCIF=0;//中断转换标志位
ADCCON3=0xA0;//参考电压选为电源电压3.3伏,10位精度,单通道AIN0
四、实验过程
1. 连接仿真器到插接着光照传感器板的CC2530节点;同时连接好USB
转串口线,并对USB232排针用短接冒短接;
2. 参照实验一中 IAR 新建工程及设置的方法,新建一个工程LIGHT,
并修改LIGHT 的工程设置;
3. 创建light.c 和sensor.c并加入到工程LIGHT 中;具体代码见后面
截图;
4. 编译LIGHT工程,成功后,下载并运行。CC2530会循环采集光照传
感器和固定电阻分压后的电压值,转换为光照度(不精确),并通过串口发送出来;PC虚拟机中通过串口调试助手观察光照传感器的值,可对光敏传感器进行适当遮挡并观察串口调试助手中输出的光照度的变化。
5. 源代码
/************* light.c **************/
#include
#include
#define uint16 unsigned int
extern void Sensor_PIN_INT(void);
char uart_buffer;
void Delayms(uint16 xms)//i=xms延时毫秒
{
uint16 i,j;
for (i=xms; i>0; i--)
for (j=1175; j>0; j--);
}
void UartTX_Send_String(char *Data,int len)//串口发送函数
{
int j;
for(j=0;j { U0DBUF = *Data++; while(UTX0IF == 0); UTX0IF = 0; } } void UartTX_Send_Data(char Data,int len)//串口发送函数{ int j; for(j=0;j { U0DBUF = Data++; while(UTX0IF == 0); UTX0IF = 0; } } #pragma vector=URX0_VECTOR//uart0中断函数 __interrupt void uart0(void){ URX0IF = 0;//清中断标志 P1_0=~P1_0; uart_buffer = U0DBUF; UartTX_Send_Data(uart_buffer,1); } float Read_LightSensor()//读出AD口的数据 { float result;