基于LPCl l O0的温度检测网络节点设计 刘翠玲,付国江,李宁 (武汉理工大学英蓓特嵌入式系统研发中心,武汉430070) 摘要:基于NXP公司LPC1100系列处理器设计了一种温度检测网络节点。介绍了网络系统的整个设计方案和温度检 测网络节点的硬件设计,并给出功耗管理、温度传感器和ZigBee三个软件模块的具体软件设计方法。 关键词:LPC1100;功耗;温度传感器;LCD;CC2500;ZigBee 中图分类号:TP368.1 文献标识码:A Temperature Detection Node Based on LPC 1 1 00 Liu Cuiling,Fu Cuojiang,Li Ning (WuHan R&D Center,Embest Info&Tech Co.,Ltd.,Wuhan University of Technology,Wuhan 430070,China) Abstract:A temperature detection network node is designed based on NXP LPC1 100 processor.The network system design scheme and node hardware design are introduced.Software design methods for power consumption management module,temperature sensor module and ZigBee module are presented. Key words:LPC1i00;power consumption;temperature sensor;LCD;CC2500;ZigBee 引 言 Cortex—M0是32位ARM处理器中一款低功耗、小 的SPI接口的CC2500芯片,LCD显示屏使用LCD1602 字符显示屏幕。整个节点使用电池设备供电,考虑到功耗 的因素,LCD屏采用插槽设计,不需要显示的部分.廿点可 体积的处理器。它完美地融合了超低功耗、较高效率和低 以不连接LCD。除以上各主要部分外,还有一些可选的 单元,例如UART串口、通用I/0接口的LED、按键、蜂鸣 器BEEP等。 门数等优势,这些特性决定了它适合作为无线传感器网络 节点的处理器。本文介绍一种基于LPC1114设计一个温 度检测网络节点的方案。 1温度检测系统简介 一3温度检测节点的软件设计 温度检测节点的功能如下: ◆通过设置定时器来定期地检测温度,并在LCD上 个温度检测无线网络由若干个温度检测节点组成, 各个温度检测节点之间使用无线传感器通信。所有的温 度检测节点使用ZigBee技术组成一个无线网络。各个节 点的功能包括采集温度,并通过ZigBee网络发送出去。 显示当前的温度值; ◆将检测到的温度值通过ZigBee模块发送出去; ◆当温度过高时,蜂鸣器长鸣一定时间报警; ◆温度检测和发送之外时间,节点处于睡眠模式; ◆定时器每隔1 s将处理器唤醒一次,进行温度检测 本系统采用TI公司提供的精简版本的ZigBee协议中的 SimpliciTI协议来组建一个星型网络。网络由一个访问接 入节点(AP)和若干个终端节点(ED)组成。其中,AP相 当于全功能设备,负责建立整个网络,并接收ED端采集 的温度信息。所有温度检测节点都使用电池设备供电。 和传送。 2温度检测节点的硬件设计 温度检测节点主要由LPCll00系列处理器(这里使 用的是LPC1114)、温度传感器、ZigBee模块、LCD显示屏 等组成,如图1所示。温度传感器使用National Semicon— ductor公司的I。C接口的LM75,ZigBee模块使用TI公司 图1 温度检测节点的硬件设计 paper@mesnet.com.cn(投稿专用) Micmc。ntr。11ers 8L Embedded Systems 7 9 根据这些功能,将整个温度节点的软件划分为如下几 个模块:功耗管理模块、LCD模块、温度传感器模块、Zig— Bee模块。 眠模式。为了便于观察,设置一个LED灯闪烁以指示采集 温度的频率。同时,如果检测到温度过高,则使用蜂鸣器报 警。如果连接了液晶屏幕,也可在液晶屏幕上显示温度值。 main函数中的主要代码如下: inittimer16(( ).TIMEINTERVAL);本节将重点介绍功耗管理模块、温度传感器模块和 ZigBee模块。 3.1功耗管理模块 LPC1100系列芯片的功耗管理有3种模式,即睡眠模 式、深度睡眠模式、深度掉电模式。 /*初始化第0个16位的定时器*/ while(1){ disable—timerl6(O); /*禁止定时器*/ I2CReadTemSensor(LM75ADDR,TEMPERATUREREG3.1.1 3种模式的进入和退出 3种模式的进入和退出方式如表1所列。 表1 3种模式的进入与退出方式 模式 进入方式 退出方式 ADDR,2); /*通过I。C接口读取温度值*/ lcdprint(TempCelsiusDisplay);/*在LCD上面显示温度*/ —if(fCurrentTemp>MAXTEMPER){/*检测温度是否过高*/ GPIOSetValue(2,7,1);/*使蜂呜器呜叫*/ } GPIOSetValue(2,1,0); delay(1); 睡眠 ①向SCR寄存器的SLEEPDEEP位写0 中断到达时自动 ②调用WFI指令 退出 ①配置PDSI EEPcFG寄存器选择进入 通过设置13个 时的掉电模块 唤醒中断源,即 深度 ②配置PDAwAKEcFG寄存器选择退出 端口0(PIO0 0 睡眠 时的上电模块  ̄PIO0_11)和端 ③向SCR寄存器的sLEEPDEEP位写1 口l(PIO1 0)来 ④调用wFI指令 唤醒 ①拉高芯片的wAKEUP引脚 甍LED { GPIOSetValue(2,1,0); RFSendPacket(tXBuffer,4); /*熄灭LED*7 ②设置PCON寄存器的DPDEN位 深度 ③向SCR寄存器的SLEEPDEEP位写1 WAKEUP引脚 掉电 ④将PDRUNCFG寄存器的IRCOUT— 上的低电平唤醒 PD和IRC—PD位置0 ⑤调用WFI指令 3.1.2三种模式的区别 在睡眠模式下,如果软件中提供外设时钟,则外设功 能在睡眠模式下仍然可以执行,而且可以产生中断来引起 处理器恢复运行。在深度睡眠模式下,用户可以配置深度 睡眠时的掉电模块以及唤醒后的上电模块。在这两种睡 眠模式下,处理器状态、寄存器、外设寄存器、内部SRAM 值被保持,引脚的逻辑电平也不变。深度睡眠使用13个 唤醒中断来唤醒,其优势在于用户可以关闭时钟发生模 块,从而比睡眠模式降低更多的动态功耗 。 在深度掉电模式下,除了WAKEUP引脚外,整个芯 片上的电源和时钟都关闭,SRAM中的内容也不能保持, 但是可以使用4个通用的寄存器保存数据。若想在深度 掉电模式下把芯片唤醒,必须通过外部连接部件给 wAKEUP引脚接上一个低电平。 3.1.3选择睡眠模式 本系统中,温度检测节点的主要功能是每间隔一定时 间检测一次温度,故在采集温度的间隔期内使芯片进入睡 眠模式。当需要采集温度时,通过一个定时器中断将其唤 醒。例如,每间隔1 S采集一次温度,采集温度并发送后 设置一个定时器中断,然后调用wFI指令使芯片处于睡 霎存本度寄 一1器节存寄来点器存选主进器择要行中其是操的余读作 温取4 个温度。 l … 士兰 手=[二上 十0k 10Q. nF 4 Ll;M… 7 圈l 2事。 adv@mesnet.conr.cn(广告专用) 80《丰‘;札 蠢入式条诧应冈》_曩田圈I_霾珊 位值为有效的温度值。该寄存器读出的值是以二进制补 码的格式给出的,其LSB(最低有效位)每一个单位表示 0.5℃,例如+0.5℃对应OO1H。其可表示的范围为一55 ~EventInitStruct.INTCmd=ENABLE; GPIO EventInit(&Event InitStruct): GPIOPortIntCmd(CGDOPort,ENABLE); +125℃。 /*在NVIC中使能该中断*/ 在使用该温度传感器时,需要调用以下两个API函数: uint32t I2CInit(uint32此时,如果发送或者接收到数据,就可以产生中断。 如果是接收数据,则在中断处理函数PIOINT2一IRQHan— dler中就必须调用一个接收函数。 一t I2eMode);/*初始化I。C接口*/ /*通过I。C接口读取温度寄存器的值*/ Re— uint32t I2CReadTemSensor(uint8t DeviceAddr,uint8t一还有一些涉及到底层通信的地方需要修改,例如: static uint8t spiRegAccess(uint8t addrByte,uint8t writeVal— gAddr,uint32t ReadSize); 3.3 ZigBee模块 本节点的ZigBee模块使用TI公司的CC2500芯片,使 用SimpliciTI协议来组建网络。其硬件连接如图3所示。 在使用CC2500时,首 先需要配置LPC1114的 P10 3 5 SCK0 MOSIO CSn SCLK SI ue); /*寄存器访问函数*/ uint8t mrfiSpiCmdStrobe(uint8t addr); CC2500写一令惫令 { void spiBurstFifoAccess(uint8t addrByte,uint8t一pData, uint8t len); /*以连续模式访问寄存器*/ 将底层与硬件相关的函数都修改好后,就可以使用上 层的组网函数了。CC25OO组网API函数主要包括如下 几个函数: smplStatust SMPLInit(uint8t(*f)(1inkIDl_t)); SPI各个引脚。另外,还需 要将引脚GDO0与GDO1 MISO0 P102 5 PIO2 4 SO(GDO1) GDO0(ATEST) GD02 配置为MCU中断,用来控 制收发网络数据包。再按 照CC2500的初始化时序 一图3 C02500与LPC1114 硬件接口 /*网络初始化*/ smplStatust SMPLLink(1inkIDt*lid); 来初始化CC25OO芯片,然后交给上层的组网函数去调 用。CC2500的初始化步骤如下 ]: ——/*发送链接帧*/ smplStatust SMPLLinkListen(1inkIDt*linklD); ①与MCU相连的SPI接口初始化; ②SCLK一1,SI一0; ③CSn=0; /*监听链接帧*/ smplStatust SMPLReceive(1inkIDt lid,uint8t*msg,uint8—t*len); /*接收消息*/ t ④CSn=1,延时4O s; ⑤CSn=0; ⑥等待S0引脚变低; smplStatust SMPLSend(1iid,uint8t*msg,uint8nklDt llen); /*发送消息*/ 进行组网时需要先调用SMPL—Init进行初始化,然 后根据节点的功能来调用SMPL—Link或者SMPL— LinkListen函数组成一个无线网络。最后调用SMPL— Receive以及SMPLSend函数就可以收发数据了。 ⑦在SI引脚上发命令SRES; ③等待SO引脚再次变低。 此时如果能正常地读写相应寄存器,则表示CC2500 初始化成功。 结 语 本文介绍了一种基于LPC1114的温度检测网络节点 设计方法。LPC1114芯片具有低功耗和高性能的特色, 加上标准的I C、SSP等接口,为很多标准接口部件的移植 CC2500初始化成功后,需要配置CC2500的寄存器, 以及设置数据包的收发中断。由于CC2500寄存器较多, 请参考CC25OO官方网站的参考代码。数据包的收发中 断是根据配置寄存器的值来控制的。通过设置这些寄存 器的值,可将GDO0、GDO1配置为收发数据。这里,配置 IOCFG0寄存器的值为0x6,即在开始接收或者发送一个 数据包时,在GDO0引脚产生一个高电平跳变;接收或者 发送完后,再变回低电平。因此,将GDO0引脚即PIO2—5 配置为输入引脚,上升沿中断。代码如下所示: LP SYSCON一>SYSAHBCLKCTRL I一(1<<6); 一提供了方便。I C接口的温度传感器,也可以替换成I C 接口的湿度传感器、气敏传感器等,以建立一个基于 ZigBee的无线传感器网络。该设计方案对无线环境监控 网络、无线抄表网络等无线传感器网络中的节点设计具有 定参考价值。耀 参考文献 [13 NXP.LPC11lx Preliminary user manual,2010—02. [2]National Semiconductor.LM75 Digital Temperature Sensor and Thermal Watchdog With Two—Tire Interface. r3]TI.CC2500 Low—Cost Low—Power 2.4 GHz RF Transceiver. (收稿日期:2010—05—09) /*使能时钟*/ GPIOSetDir(CGDOPort,CGDO0,O);/*配置为输入*/ Mode=EVENTRISINGEDGE; EventInitStruct.EVEN /*配置为上升沿中断*/ EventInitStruct.pins=CGDO0; —Event InitStruct.port=CGDOPort; …pr …n t… n r拇谊丢田、