无线温度检测课件

上传人:F****n 文档编号:88157429 上传时间:2019-04-20 格式:PPTX 页数:37 大小:133.61KB
返回 下载 相关 举报
无线温度检测课件_第1页
第1页 / 共37页
无线温度检测课件_第2页
第2页 / 共37页
无线温度检测课件_第3页
第3页 / 共37页
无线温度检测课件_第4页
第4页 / 共37页
无线温度检测课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《无线温度检测课件》由会员分享,可在线阅读,更多相关《无线温度检测课件(37页珍藏版)》请在金锄头文库上搜索。

1、ZigBee网络原理与应用,李曙英 2015. 2.28,无线温度检测,实例:协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示 与上个实例的区别?,- 3 -,ADC,CC2530的ADC支持多达14位的模拟数字转换,具有多达12位的有效数字位。 它包括一个模拟多路转换器,具有多达8个各自可配置的通道,一个参考电压发生器。转换结果通过DMA写入存储器。,ADC特征 ADC输入 ADC转换,- 4 -,ADC特征,可选的抽取率,设置了712位的分辨率。 8个独立的输入通道,可接收单端或差分信号。 参考电压可选为内部单端、外部单端

2、、外部差分或AVDD5。 产生中断请求。 转换结束时的DMA触发。 温度传感器输入。 电池测量功能。,- 5 -,ADC输入,ADC的输入是通过端口0来实现的。输入引脚AIN0-AIN7是连接到ADC的。ADC输入有两种配置:单端输入和差分输入,单端电压输入AIN0到AIN7以通道号码0到7表示。 通道号码8到11表示差分输入,由AIN0-1、AIN2-3、AIN4-5和AIN6-7组成。 通道号码12到15分别表示GND、温度传感器和AVDD5/3。 以上输入方式在寄存器ADCCON2和寄存器ADCCON3中详细配置。,- 6 -,ADC输入,ADCCON2寄存器-定义ADC的序列转换,-

3、7 -,ADC输入,ADCCON3寄存器-定义ADC单个值转换,/单次转换,参考电压为电源电压,对P0.7进行采样 12位分辨率 ADCCON3=0xb7;,- 8 -,ADC输入,除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度 TR0寄存器,- 9 -,ADC输入,除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度 ATEST寄存器,- 10 -,ADC转换,ATEST寄存器ADC的

4、转换分为ADC序列转换和ADC单个转换。ADC执行一系列的转换,并把转换结果通过DMA移动到存储器,不需要任何CPU的干预 ADC序列转换与APCFG寄存器的设置有关,APCFG为8位模拟输入的I/O引脚设置,如果模拟I/O使能,每一个通道正常情况下应是ADC序列的一部分。如果相应的模拟I/O被禁用,将启用差分输入,处于差分的两个引脚必须在APCFG寄存器中设置为模拟输入引脚。 ADCCON2.SCH寄存器位用于定义一个ADC序列转换,它来自ADC输入。如果ADCCON2.SCH设置为一个小于8的值,转换序列来自AIN0-AIN7的每个通道上;当ADCCON2.SCH设置为一个在8和12之间的

5、值,序列包括差分输入;当ADCCON2.SCH大于或等于12,为单个ADC转换。,- 11 -,ADC转换,除了序列转换,每个通道都可以进行ADC单个转换,ADC单个转换通过配置寄存器ADCCON3.SCH完成。当通过写ADCCON3触发的一个单个转换完成时,ADC将产生一个中断。 ADC的数字转换结果可以通过设置寄存器ADCCON1获得。,/开启AD ADCCON1=0x40;,- 12 -,ADC转换,ADC的数字转换结果存放在寄存器ADCH和ADCL中,ADCL ADC数据低位,ADCH ADC数据低高位,/将转换的结果从ADC:ADCH中取出放入到temp中 temp1 = ADCL;

6、 temp0 = ADCH;,- 13 -,ADC转换,下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果 AD的初始化,void InitialAD(void) /清EOC标志 ADCH ,- 14 -,ADC转换,下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果 头文件、宏定义以及函数声明,#include “ioCC2530.h“ #define uint unsigned int /定义控制灯的端口 #define LED1 P1_0 #define LED2 P1_1 char temp2; uint adc; flo

7、at num; char adcdata=“ 0.0V “; /函数声明 void Delay(uint); void initUARTtest(void); void InitialAD(void); void UartTX_Send_String(char *Data,int len);,- 15 -,ADC转换,下述内容用于实现任务描述4.D.7,将AVDD(3.3v)AD转换,通过串口在PC机显示结果 主函数部分,void main(void) /P1控制LED P1DIR = 0x03; /关LED LED1 = 1; LED2 = 1; /初始化串口 initUARTtest();

8、 /初始化ADC InitialAD(); while(1) /等待ADC转换完成 if(ADCCON1,/开始下一转换 ADCCON1 |= 0x40; /adc赋值 adc |= (uint)temp1; adc |= ( (uint) temp0 )=2; if(adc ,Zstack中ADC应用,协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示 协调器功能 :建网,接收数据,向串口发数据 终端节点功能:,无线测温-协调器编程,1 建网 2 用户任务:事件1: 接收数据-什么事件? SYS_EVENT_MSG下的 AF_

9、INCOMING_MSG_CMD 事件2:向串口发数据-什么时候? 接收到数据后-事件2包含 在事件1内,无线测温-协调器编程,涉及:串口设置、初始化;-同上例 温度数据存储区,无线测温-协调器编程,特殊之处:数据传递一般会用数据包。 特点:命令头 + 数据 + 命令尾 用结构体构建数据包 本例中的温度数据: struct RFRXBUF unsigned char Head; unsigned char value2; unsigned char Tail; BUF;,typedef union h uint8 TEMP4; struct RFRXBUF unsigned char Head

10、; unsigned char value2; unsigned char Tail; BUF; TEMPERATURE ;,TEMPERATURE temperature; /定义温度数据包存储区 温度数据包在终端、协调器之间传递,TEMPERATURE 类要告知协调器、终端-怎么做? 加入Coordinator.h、Enddevice.h中,无线测温-协调器编程,事件1触发:CoordApp_ProcessEvent任务中 case AF_INCOMING_MSG_CMD: GenericApp_MessageMSGCB( MSGpkt ); break;,无线测温-协调器编程,void

11、GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) TEMPERATURE temperature; switch ( pkt-clusterId ) case GENERICAPP_CLUSTERID: osal_memcpy( ,无线测温-终端编程,1、加入网络-同以前例 2、周期性的将温度传感器上的电压转换成数字量温度值,再用无线发送给协调器,无线测温-终端编程,1 片内温度传感器 /使能片内温度传感器 ATEST = 0x01; /连上温度传感器 TR0 |= 0x01;,无线测温-终端编程,2、ADC ADCIF = 0; /清

12、除ADC中断 ADCCON3 = (HAL_ADC_REF_115v | HAL_ADC_DEC_256 | HAL_ADC_CHN_TEMP); while ( !ADCIF );/等待AD转换完成 ADCIF = 0; value = ADCL; / 读取AD 值 value |= (uint16) ADCH) =4 ;,数据发送,void GenericApp_SendTheMessage( void ) uint8 tvalue; TEMPERATURE temperature; temperature.BUF.Head = ,afAddrType_t my_DstAddr; my_D

13、stAddr.addrMode = (afAddrMode_t)Addr16Bit; my_DstAddr.endPoint = GENERICAPP_ENDPOINT; my_DstAddr.addr.shortAddr = 0x0000; AF_DataRequest( ,周期性触发发送事件,#define SEND_DATA_EVENT 0X01 /定义事件 /启动事件 case ZDO_STATE_CHANGE: GenericApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( GenericApp_NwkState = DEV_

14、END_DEVICE ) osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);,/周期性工作 if(events ,无线测温-终端编程,程序结构 传感器的操作为一个文件-Sensor.c, 涉及到的名称常量定义-Sensor.h,无线测温-终端编程,Sensor.h #ifndef SENSOR_H #define SENSOR_H #include extern int8 readTemp(void); #endif,无线测温-终端编程-Sensor.c,#include “Sensor.h“ #include #define HAL_ADC_

15、REF_115v 0X00 /设置参考电压为内部参考电压 :00 (7-6 位) #define HAL_ADC_DEC_256 0X20 /设置抽取率256 :10 (5-4 位) #define HAL_ADC_CHN_TEMP 0X0e/序列通道选择,1110:温度传感器(3-0 位),无线测温-终端编程-Sensor.c,int8 readTemp(void) static uint16 reference_voltage; static uint8 bCalibrate = TRUE; uint16 value; int8 temp; ATEST = 0x01; TR0 |= 0x0

16、1; ADCIF = 0; /清除ADC中断 ADCCON3 = (HAL_ADC_REF_115v | HAL_ADC_DEC_256 | HAL_ADC_CHN_TEMP);,while ( !ADCIF );/等待AD转换完成 ADCIF = 0; value = ADCL; / 读取AD 值 value |= (uint16) ADCH) =4 ;,if( bCalibrate ) /记录第一次读取的温度值,为后面校正用 reference_voltage = value; bCalibrate = FALSE ; temp = 22 + ( (value - reference_voltage)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号