实验11 无线采集温度传感器_第1页
实验11 无线采集温度传感器_第2页
实验11 无线采集温度传感器_第3页
实验11 无线采集温度传感器_第4页
实验11 无线采集温度传感器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 ZigBee实验十一无线采集温度11.1 实验简介对于温度传感器,主要原理就是将温度转化成为模拟量,再通过ADC将模拟信号转换成数字信号。对于CC2530芯片内部已经集成了ADC,该ADC 支持多达14 位的模拟数字转换,具有多达12 位的ENOB(有效数字位)。它包括一个模拟多路转换器,具有多达8 个各自可配置的通道;以及一个参考电压发生器。转换结果通过DMA 写入存储器。还具有若干运行模式。同时CC2530内部也集成了一温度传感器,可以通过配置寄存器,将温度传感器作为ADC的输入,这样CC2530就可以方便的使用温度传感器。在基础实验中,也用过了温度传感器,本实验主要是居于TI的协议栈进

2、行的无线采集实验目的11.2 训练目的 12.2.1 通过本实验了解Z-STACK协议栈中的ADC采集的使用及相关寄存器的配置。11.3实验设备11.3.1 硬件:(1) ZIGBEE 调试底板2个:可调电阻ZigBee_DEBUG指示灯红外发射ZigBee复位ZigBee按键拨码开关节点按键复位传感器接口1J-LINK接口传感器接口3传感器接口2电源开关电源图11-1 ZIGBEE调试底板(2) UART转接板与转接线各1个:UART转接线转接串口输入,连接到ZIGBEE调试底板转接串口输出,连接到电脑串口图11-2 UART转接板与转接线(3) ZIGBEE仿真器1个;10PIN下载接口电

3、源(上)和状态指示灯USB接口图11-3 ZIGBEE仿真器(4) ZIGBEE模块2个;图11-4 ZIGBEE模块(5) 电源2个图11-5 电源(6) 串口延长线1根图11-6 串口延长线(7) 硬件连接图连接电脑串口ZigBee调试底板与串口转接板连接电源连接电脑USBZIGBEE DeBug连接口图11-7 硬件连接11.3.2 软件(1) IAR Embedded Workbench for MCS-51 7.51A集成开发环境;(2) TI Z-STACK;(3) 仿真器驱动;(4) 串口调试助手。实验知识11.4 11.4.1 ADC输入除了输入引脚AIN0-AIN7,片上温度

4、传感器的输出也可以选择作为ADC 的输入,用于温度测量。可通过配置寄存器TR0.ADCTM 和ATEST.ATESTCTRL去实现。 11.4.2 片内温度传感器的温度计算方法在CC2530的用户手册中没找到相关的温度计算方法,而在CC2430用户手册用,可以得到以下一个表格:在TI提供的官方例程中“SimpleSensorEB-Pro”中,得到这样的一段话:value ranges from 0 to 0x8000 indicating 0V and 1.25VVOLTAGE_AT_TEMP_ZERO = 0.743 V = 19477TEMP_COEFFICIENT = 0.0024 V/

5、C = 62.9 /CThese parameters are typical values and need to be calibratedSee the datasheet for the appropriate chip for more detailsalso, the math below may not be very accurate可以知道以上的确实为CC2530的内部温度传感器的电压与温度的关系,从而可以得到计算温度的方法。实验步骤11.511.5.1 在开始本实验的仿真前,参看配套源资料中“关于节点板串口使用的统一说明”,先按照本说明去配置好串口,波特率38400,以便往

6、下实验能正常使用串口。图11-8 节点板串口使用的统一说明11.5.2 启动IAR Embedded Workbench,打开对应配套实验源码中“路由器”的SampleApp.eww工程:图11-9 工程文件图11-10 打开工程界面11.5.3 编译链接程序代码Make,这一步可以省略,因为进行DeBug前,IAR软件会先编译再下载代码到目标板上去仿真,但对于编译检查错误,这一步也很有必要。如果正确编译后文件右侧的红星会消失。在Make之前,最好Clean一下,如下图所示:图11-11 编译链接代码文件红色星星编译后变没有了编译后生成图11-12 编译前后对比如果正确建立工程并正确配置了工程

7、,则此时编译是无错误的,编译无错误如图 图11-13 编译链接无错误图11-14 编译连接有错误11.5.4 按照前面“实验设备”小节中的“硬件连接图”连接好硬件并打开电源,点击DEBUG按钮或者”Project->Debug”或者快捷键“Ctrl + D”进行程序下载并Debug。如有出错,请检查硬件连接或拔掉仿真器USB再重接图11-15 Debug 调试图11-16 程序正在下载到目标板11.5.5 正确进入DeBug界面,如下图:图11-17 仿真调试界面11.5.6 通过以上步骤已将路由器程序下载到节点,此时的节点叫“路由器”。卸下仿真器与“路由器”的连接线,使得“路由器”为一

8、个单独的个体。再将仿真器与另外一个节点按照“硬件连接图”去进行连接。按“实验步骤”从头开始,将“协调器”程序下载到到节点,以得到一个节点为“协调器”,一个节点为“路由器”。图11-18 协调器与路由器11.5.7 此时“协调器”节点与“路由器”节点已经准备好。“协调器”则通过串口连接电脑,打印出收到的数据包。先让“协调器”在DEBUG状态下全速运行,再给“路由器”上电运行(注意:协调器要先于路由器运行,不然两个节点可能建立不了连接。如果“路由器”连接不到“协调器”,那么LED一直闪烁,闪烁周期大概1S)。11.5.8 在配套资料“提高实验”文件夹下找到“超级单片机工具软件.exe”,如果是WI

9、N7系统,右键“以管理员身份运行”,选择电脑对应的端口,设置和程序对应的波特率“38400”,数据位“8”,停止位“1”,校验位“NONE”,然后点击“打开串口”图11-19 超级单片机工具软件图11-20 超级单片机工具软件界面11.5.9 按下“全速运行”按钮进行试验验证,与下文“实验验证”小节内容进行验证本实验结果步出函数步入函数单步运行复位全速运行按钮图11-21 调试功能按钮11.5.10 实验完毕。实验验证11.6 11.6.1 路由器是否每个1秒LED闪烁一下;11.6.2 查看协调器串口(串口调试助手)是否有温度数据上传显示。图11-22 实验结果验证实验部分参考程序解析(完整

10、程序见源程序文件)11.7代码解释:11.7.1 路由器设计uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )afIncomingMSGPacket_t *MSGpkt;if(events&SYS_EVENT_MSG)MSGpkt=(afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID);while(MSGpkt)switch(MSGpkt->hdr.event) case AF_INCOMING_MSG_CMD:break; case ZDO_S

11、TATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_NwkState=DEV_ROUTER)osal_set_event(SampleApp_TaskID,SEND_DATA_EVENT);break;default:break;osal_msg_deallocate(uint8 *) MSGpkt);MSGpkt=(afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID);return (events SYS_EVENT

12、_MSG); if(events&SEND_DATA_EVENT)GenericApp_SendTheMessage();osal_start_timerEx(SampleApp_TaskID,SEND_DATA_EVENT,1000);return (eventsSEND_DATA_EVENT);return 0;参考注解:当路由器检测到网络并加入网络后即会发生ZDO_STATE_CHANGE事件,当系统检测到该事件时,启动SEND_DATA_EVENT事件,在SEND_DATA_EVENT事件中每个1000MS进行一次GenericApp_SendTheMessage()函数的调用

13、。void GenericApp_SendTheMessage(void) int8 tvalue; uint8 datatemp5; tvalue=readTemp();datatemp0=tvalue/10+'0'datatemp1=tvalue%10+'0'datatemp2='C' AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, 3, datatemp, &SampleApp_TransI

14、D, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); HalLedBlink(HAL_LED_1,0,50,500);参考注解:本函数的目的主要是调用readTemp()温度读取函数,将数据进行字符串转换后通过无线电发送出去。int8 readTemp(void) static uint16 reference_voltage; static uint8 bCalibrate=TRUE; uint16 value; int8 temp; ATEST=0x01; TR0|=0x01; ADCIF=0; ADCCON3=(HAL_ADC_REF_115V|HAL_ADC_

15、DEC_256|HAL_ADC_CHN_TEMP); while(!ADCIF);ADCIF=0;value = ADCL >> 2; /ADCL寄存器低2位无效value |= (UINT16)ADCH) << 6);if(bCalibrate)reference_voltage=value;bCalibrate=FALSE;temp=22+(value-reference_voltage)/4);return temp; 参考注解:这个函数只要是开启AD采集,并将温度数值进行函数返回。11.7.2 协调器设计uint16 SampleApp_ProcessEvent

16、( uint8 task_id, uint16 events ) afIncomingMSGPacket_t *MSGpkt; (void)task_id; / Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) switch ( MSGpkt->hdr.event ) / Received when a key is pr

17、essed / Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break; / Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); / Next - if one is available MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); / return unprocessed events return (events SYS_EVENT_MSG); return 0;参考注解:协调器运行建网后,在等待事件的发生,当检测到AF_INCOMING_MSG_CMD(接收到无线数据)事件后,调用SampleApp_MessageMSGCB( M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论