实验3 AD型传感器采集实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uint16 get_adc(void)
{
uint32 value;
hal_adc_Init(); // ADC 初始化
ADCIF = 0; //清 ADC 中断标志
//采用基准电压 avdd5:3.3V,通道 0,启动 AD 转化
ADCCON3 = (0x80 | 0x10 | 0x00);
while ( !ADCIF )
主控器 - 负责接收传感器传来的无线数据,并发送到串口。
【实验步骤】
1. 打开工作空间“...\基于 BasciRF 的实训\传感器采集实验\Project\
sensor.eww”
2. 配置无线通讯参数
主控器 Collect.c 文件中:
/*****点对点通讯地址设置******/
#define RF_CHANNEL
图 2-4 主控器工程选择 编译生成代码,下载到一个节点板,作为主控器。 4. 编译生成传感器代码,并下载到另一个节点板,作为传感器 在 workspace 的下拉菜单中选择“gd_sensor”, gd_sensor 表示传感器
为光照传感器,如图 2-5:
图 2-5 传感器工程选择
编译生成代码,下载到另一个节点板,作为光照传感器
传感器 sensor.c 文件中:
/*****点对点通讯地址设置******/
#define RF_CHANNEL
20
// 频道 11~26
#define PAN_ID
0x1379
//网络 id
#define MY_ADDR
0xacef
// 本机模块地址
#define SEND_ADDR
0x1234 //发送地址
{
; //等待 AD 转化结束
}
value = ADCH;
value = value<< 8;
value |= ADCL;
// AD 值转化成电压值
// 0 表示 0V ,32768 表示 3.3V // 电压值 = (value*3.3)/32768 (V) value = (value * 330); value = value >> 15; // 除以 32768 // 返回分辨率为 0.01V 的电压值 return (uint16)value; }
//数据也发到本地串口,便于调试
halUartWrite(pTxData,strlen(pTxData)); Timer4_On(); //打开定时 } /*【传感器采集、处理】 结束*/ } } /************************main end ****************************/
sensor_tem/10,sensor_tem%10,sensor_val/10,sensor_val%10);
#endif
halLedToggle(3);
// 绿灯取反,无线发送指
示
//把数据通过 zigbee 发送出去
basicRfSendPacket(SEND_ADDR,
pTxData,strlen(pTxData ));
sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData," 火 焰 传 感 器 电 压:%d.%02dV\r\n",sensor_val/100,sensor_val%100); #endif #if defined (RT_SENDOR) //人体传感器 sensor_val=get_swsensor(); //取开关量 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData," 人 体 传 感 器 电 平:%d\r\n",sensor_val); #endif #if defined (TEM_SENDOR) //温湿度传感器 call_sht11(&sensor_tem,&sensor_val); //取温 湿度数据 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData,"温湿度传感器,温度:%d.%d, 湿度:%d.%d\r\n",
20
// 频道 11~26
#define PAN_ID
0x1379
//网络 id
#define MY_ADDR
0x1234
// 本机模块地址
#define SEND_ADDR
0x55aa //发送地址
/**************************************************/
/**************************************************/
配置参数的原则:
参看实验 1 各参数的含义;
主控制和传感器的 RF_CHANNEL 与 PAN_ID 要一致;
主控制的 MY_ADDR 与传感器的 SEND_ADDR 要一致;
由于本例传感器不接收数据,故传感器的 MY_ADDR 可任意设置;
4. 运行 主控器与 PC 机串口连接,上电。 传感器上电 在串口上就可看到传感器的数据,如图 2-6:
图 2-6 传感器数据
6. 其他 A/D 型传感器 主控器不变,在 workspace 的下拉菜单中选择其他传感器,如图 2-7 选择 “co_sensor”
图 2-7 其他传感器工程选择
【思考题】
1. 认识理解这几个传感器,要使传感数据发生变化,该如何操作? 2. 多个不同的传感器运行,观察串口看到的数据。
sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData," 光 照 传 感 器 电 压:%d.%02dV\r\n",sensor_val/100,sensor_val%100); #endif #if defined (CO_SENDOR) //一氧化碳传感器 sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData," 一 氧 化 碳 传 感 器 电 压:%d.%02dV\r\n",sensor_val/100,sensor_val%100); #endif #if defined (KRQ_SENDOR) //可燃气传感器 sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观 察 printf_str(pTxData," 可 燃 气 传 感 器 电 压:%d.%02dV\r\n",sensor_val/100,sensor_val%100); #endif #if defined (FIR_SENDOR) //火焰传感器
【实验相关代码】
主控器代码 主文档 collect.c 的相关代码 /********************MAIN START************************/ void main(void) { uint16 len = 0;
halBoardInit(); //模块相关资源的初始化 ConfigRf_Init(); //无线收发参数的配置初始化 halLedSet(1); halLedSet(2); while(1) {
实验 3 A/D 型传感器采集实验 【实验目的】
通过本实验的学习,掌握 A/D 型传感器的采集和传输的方法。
【实验内容】
实现 A/D 型传感器的采集和无线传输,并在 PC 机串口上显示。
【实验原理】
通过 CC2530 的 A/D 口,采集传感器的模拟量,然后通过 ZigBee 无线发送给 主控器,主控器通过串口把数据发送给上位机,这样上位机就能进行集中采集和 处理。
Timer4_Init(); //定时器初始化 Timer4_On(); //打开定时器 while(1) {
APP_SEND_DATA_FLAG = GetSendDataFlag(); if(APP_SEND_DATA_FLAG == 1) //定时时间到 { /*【传感器采集、处理】 开始*/ #if defined (GD_SENDOR) //光照传感器
get_adc.c 中的电压采集代码:
/****************************************
* 名称
get_adc
* 功能
读取 A/D 值
* 入口参数 无
* 出口参数 16 位电压值,分辨率为 10mV, 如 0x0102 表示 2.58V
*****************************************************/
由于本例主控器不发送数据,故主控器的 SEND_ADDR 可任意设置;
如果有多组同时进行试验,每组之间的 RF_CHANNEL 和 PAN_ID 至少要有
一个参数不同;如果多组间的 RF_CHANNEL 和 PAN_ID 一样,会造成信号串扰, 影响实验结果。 3. 编译生成主控器代码,并下载到一个节点板,作为主控器。 在 workspace 的下拉菜单中选择“collect”,如图 2-4:
本实验提供的 A/D 型传感器有光照、一氧化碳、可燃气、火焰传感器四种, 传感器的 A/D 采集端口为 CC2530 的 P0.0 口。
本实验有两种设备类型:主控器和传感器。连接拓扑图如图 2-3 所示:
Baidu Nhomakorabea图 2-3 连接拓扑图
主控器和传感器的功能:
传感器 - 负责定时采集传感数据,并把传感数据打包后通过 ZigBee 无线发 出。
选择配置与传感器类型对应关系: gd_sensor: 光照传感器 co_sensor: 一氧化碳传感器 krq_sensor:可燃气传感器
FIR_sensor:火焰传感器 上电运行,在串口上就可看到相应传感器的数据,如图 2-8:
图 2-8 CO 传感器数据
7. 注意事项 一氧化碳、可燃气传感器等空气类传感器,有个预热过程,刚上电时的传感 数据不稳定,要等到 30 秒后才趋于稳定。
if(basicRfPacketIsReady()) //查询有没收到无线信号 {
halLedToggle(4); // 红灯取反,无线接收指示 //接收无线数据 len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); //把接收到的无线发送到串口数 halUartWrite(pRxData,len); } } } /************************MAIN END ****************************/ 传感器相关代码 主文档 sensor.c 中的相关代码: /********************MAIN************************/ void main(void) { uint16 sensor_val,sensor_tem; uint16 len = 0; halBoardInit(); //模块相关资源的初始化 ConfigRf_Init(); //无线收发参数的配置初始化 halLedSet(1); halLedSet(2);