4 功能实现
4.1 上电启动
系统上电后,首先进行一系列初始化功能,包括对液晶显示屏、按键、CC2480模块、定时器及UART接口进行初始化。初始化完成后,系统会启动组建网络的功能。对于协调器,首先会发送StartZBNwk(COORDINATOR,NWKpanID)函数向CC2480中写入指令以启动ZigBee协议栈。其中,COORDINATOR是器件类型,表示此器件作为协调器使用;NWKpanID是此网络的网络ID。路由器进行同样的操作,不同的是函数中设备类型参数为ROUTER[5]。
协议栈启动后,系统会利用GetDeviceInfo(DEVICE_
SHORT_ADDR)函数来获取CC2480通过UART向ARM核发送的设备信息。其中,DEVICE_SHOR_ADDR参数是CC2480模块的16位短地址。获取地址成功后,系统会将信息显示在液晶屏上,完成上电启动过程。
4.2 组网绑定
上电启动完成后,系统进入组网绑定状态。首先系统会调用ZB_APP_REGISTER_REQUEST()函数对ZigBee寄存器写入配置,命令代码为Cmd 0:0x26、Cmd1:0x0a;然后会调用ZgBeeAllowBind()函数发出允许绑定的命令,命令代码为Cmd 0:0x26、Cmd1:0x02。
允许绑定后,路由器会调用menudis()函数进行绑定。此函数进行的操作如下:首先扫描按键以获取用户输入的所要绑定的协调器的地址,然后调用ZgBeeZDOFindIEEE(bindAddr,0,2)函数来寻找网络中的物理地址。其中,bindAddr就是所要绑定得到的协调器的地址,参数0代表获取1个地址,参数2代表索引个数。
获得地址后,系统调用ZgBeeBind(1,add)函数进行绑定并将绑定结果显示在液晶显示屏上,从而完成组网绑定的功能[6-10]。其中命令代码为Cmd 0:0x66、Cmd1:0x01。
4.3 数据传输及调光
系统完成组网后即可进行数据传输和调光。系统采用ZgBeeSendData()函数来进行数据传输,此函数包含的主要参数有目的地址、命令类型和数据,命令代码为Cmd 0:0x66、Cmd1:0x03。而目的地址与数据均通过键盘扫描用户输入来写入寄存器。
对于调光功能的实现,本文采用PWM调制方式,即通过输出不同占空比的方波进行不同情景模式的调光。具体实现方式:采用while循环中内嵌1个case语句实现。while循环负责检查是否有外部命令到来,每一个case分支对应1个情景模式,当设备接收到调光命令后,根据命令中的有关情景模式的数据进入到相关的case分支中产生相应的PWM信号,当检查到外部命令来临时,则跳出该分支进入相应的分支产生新的情景模式。对于PWM信号的产生有多种方式,本文利用循环计时的实现方法,即通过利用不同长短的延时来输出0和1实现不同占空比的方波。基本计算方法如下:单位延时为晶振的1/12,则系统在进行[(方波周期/单位延时)×占空比]个延时后输出1,在进行[(方波周期/单位延时)×(1-占空比)]个延时后输出0,如此进行反复循环即可实现PWM功能。
5 实验结果
ZigBee模块对LED的调光控制采用PWM调制方式,即通过输出3路不同占空比的方波实现对LED的RGB分量的调节,形成不同颜色的光。在本实验中采用事先设定好情景模式,根据用户按下不同的情景按键输出不同的PWM波形来实现LED的情景照明。实验结果输出占空比分别为25%、57%、70%的方波,如图3所示。
本文针对目前智能家居照明发展趋势,提出了一种基于ZigBee和ARM处理器的智能家居照明系统设计方案,实现了系统控制和智能调光功能,为以后的研究打下了一定的基础。