使CC2530所具备不同运行模式,使得它非常适合有超低功耗要求的系统。同时因为运行模式之间的转换时间短暂,所以能进一步保证了CC2530低能源消耗。因此本设计最后选择CC2530来作为核心模块,构建所需要的网络节点。
3.3.2 光照传感器的选择
本设计中使用GY-30光照传感器。GY-30光照传感器采用ROHM原装BH1750FVI芯片,其光照度范围是0-65535 lx,它自带内置16bitAD转换器,可以直接输出数字,省略负责的计算,省略了标定。作为主流光照传感器,GY-30具有不区分环境光源,接近视觉灵敏度的分光特性,对广泛的亮度达到1勒克斯的高精度,体积小和成本低的优点。并且它的供电电源为3~5V,能够与CC2530很好的配合。
最终设计确定使用GY-30光照传感器做设计用光照传感器,用于测定所需光照度。
4 硬件设计
4.1 整体框架
系统整体框架如图4-1所示,使用CC2530片上系统作为zigbee在体。通过zigbee网络在两块CC2530之间传递数据,实现数据的流通;利用zigbee网络的特性实现模块的添加和减少。
图4-1 整体框架图
电源 GY-30 CC2530 上位机 电源 Zigbee无线通讯 CC2530 GY-30 CC2530
5
4.2 CC2530片上系统设计
通过CC2530F32/64/128/256四个不同闪存版本的切换使CC2530具有不同的运行模式,使其能够适应超低功耗要求的系统。它可应用于楼宇自动化,照明系统,工业控制和监测,消费型电子,医疗保健等领域。
使用的CC2530需要连接GY-30,模拟IIC串口驱动,要重新配置引脚。对此要理解CC2530的各引脚连接到了什么地方,CC2530核心版电路如图4-2所示。
3.3VL1 2nHVCCC1C21uF0.1uFC3C4C5C6C7C80.1uFU11039DVDD AVDD5/AVDD_SOCAVDD_DREG AVDD3DGND_USB AVDD2USB_MUSB_P AVDD1DVDD_USB AVDD4 AVDD_GUARDP2_0P2_1P2_2 RF_PP1_0P1_1P1_2 RF_NP1_3P1_4P1_5 P2_4P1_6P1_7 P2_3P2_0P2_1 XOSC32M_Q1P2_2P2_3 XOSC32M_Q2P2_4P2_5 DCOUPLP2_6P2_7 RBIASRESET_N GND3041CC2530R156K0.1uF0.1uF220pF0.1uF2.2uF212427282931L2 2nHSMA1234P2_0P2_1/DDP2_2/DCP1_0P1_1P1_2P1_3P1_4/CSNP1_5/SCLKP1_6/MOSIP1_7/MISOP0_0P0_1/B TN1P0_2/RXP0_3/TXP0_4/B TN2P0_5/B UT3P0_6P0_7RESET3635341198765383719181716151413122025C10C921C1118pF2632C121pFL3 2nHC132.2pF18pF1pF332223Y1 32MY2 32K354401C14C17C18C16C151uF27pF27pF15pF15pF 图4-2 CC2530核心电路图
对于该系统使用的电源,需要满足CC2530片上系统的规定电压,同时要满足驱动光照传感器的光照电压。接收模块可通过USB接线由上位机提供。发送模块需要使用独立电源,本设计中使用手机12V移动电源对发送模块进行供电。对12V电源需要进行转换,转换电路如图4-3。
4.75-15vVin Vout GNDC10.1uF3.3vC222pF
图4-3 电压转化电路
6
4.3 GY-30光照传感器电路设计
GY-30光照传感器采用BH1750FVI芯片,光照度范围大概是0-65535 lx。同时自带内置16bitAD转换器,能够直接输出数字,省略负责计算的部分,省略也了标定。而且GY-30具有不区分环境光源,接近视觉灵敏度的分光特性,对广泛的亮度达到1勒克斯的高精度的特点。使用3~5V供电电源,有两个IIC总线引脚,分别为SCL时钟引脚和SDA数据引脚;一个BH1750 IIC设备地址引脚ADDR。同时还带有低功耗3.3V稳压器(3~5V供电兼容)和电平转换(3~5V系统通讯兼容)。GY-30与CC2530之间的数据传输主要靠SCL和SDA两个引脚连接,通过拉高和拉低两个连接线电位,由SDA引脚产生的上升沿和下降沿来控制起始信号和停止信号。SDA引脚同时也作为应答信号的接收与发送口。核心电路如图4-4所示。
VCCDVLSCLAMPADCLogic+IIC InterfaceSDAPDOSCADDRGND
图4-4 GY-30核心电路图
要驱动GY-30光照传感器需要一定的输出功率。因为使用CC2530底板,存在引脚占用的现象,可能使输出功率不能够满足驱动GY-30光照传感器,所以需要编写一个简单的小灯闪烁程序,通过小灯时候闪烁来测试功率是否能够满足驱动GY-30光照传感器的要求。经过测试,最终选定用P1_3和P1_4两个引脚接口来连接驱动GY-30光照传感器。如图4-5所示。
VCC 5VVCCSCLSDAADDRGNDP1_4P1_3
图4-5 GY-30连接示意图
7
5 软件设计
5.1 编写环境搭建
5.1.1 环境搭建
1) 第一步需要在PC机上安装IAR用于Zigbee程序的编写和下载;
2) 打开IAR,新建工程开始程序的编写;
3) 设置程序参数,确保程序参数和使用的CC2530片上系统一致; 4) 编译程序,成功后将程序分别下载到发送模块和接收模块中。
安装SFR软件,完成后连接仿真器并安装驱动程序。完成后在SRT软件窗口可看到当前连接的CC2530模块,该软件能够保证PC机同时连接多个CC2530模块,方便程序的下载。软件运行完成后可正常使用CC2530。
5.2 GY-30光照传感器驱动设计
设计中需要使用CC2530来驱动作为光照传感器的GY-30。因为曾在STY89C51上使用过GY-30,所以要做的是将89C51上驱动GY-30的程序进行修改和移植,来实现利用CC2530驱动GY-30测量光照度。使用在89C51上的驱动程序作为基础程序,在此程序的基础上进行修改移植。驱动GY-30需要对接收到的数据进行处理,保证输出的数据满足需要,数据在经过发送后在接收模块上需要经过数据合成,将接收数据合成为符合显示要求的光照数据,方便在Qt界面上显示,部分合成代码如下:
dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据 temp=(float)dis_data/1.2;
驱动GY-30时需要设置相应的端口,选取P1_3和P1_2做为光照传感器与CC2530的连接口,设定将光照传感器的SCL时钟引脚,SDA数据引脚分别和P1_3,P1_2对应。在选取串口后需要测试,测试串口是否能够正常使用时,使用控制小灯亮灭的循环方式,程序如下:
while(1) {
SCL=1; SDA =1; halMcuWaitMs(5); SCL=0; SDA =0;
8
halMcuWaitMs(5); }
在光照传感器GY-30采集到数据后,还需要使用CC2530读取其中数据,才能将光照传感器的数据进行发送,需要编写对应的读取程序,对应的部分读取代码如下:
uchar Single_Read_BH1750(uchar REG_Address) {
uchar REG_data;
BH1750_Start(); //起始信号
BH1750_SendByte(SlaveAddress); //发送设备地址+写信号 BH1750_SendByte(REG_Address); //发送存储单元地址,从0开始 BH1750_Start(); //起始信号
BH1750_SendByte(SlaveAddress+1);//发送设备地址+读信号 REG_data=BH1750_RecvByte(); //读出寄存器数据 BH1750_SendACK(1);
BH1750_Stop(); //停止信号 return REG_data;
成功读取数据后,数据将由CC2530发送模块通过zigbee通讯发送到CC2530接收模块,由CC2530接收模块处理后传输到上位机,最终在Qt界面上显示出来。驱动流程图如图5-1所示。
开始
初始化接收应答信号N是否收到应答信号Y读取光照传感器数值数据处理和发送
图5-1 GY-30驱动流程图
5.3 数据传输
设计中一共使用了两种传输方式,一种是各节点之间的Zigbee无线传输,另一种是
9