利用s12的无线传感器网络样机系统设计
阐述基于蓝牙技术的无线传感器技术模块的设计及实现方法。详细描述了mc9s12dt128单片机在codewarrior开发环境下模/数转换的中断控制方式,以及主从蓝牙模块的驱动过程。系统包含主从2个蓝牙模块:主蓝牙模块由pc机控制;从蓝牙模块采用freescale公司的mc9s12dt128单片机作为核心处理器。
关键词 无线传感器网络 蓝牙技术 mc9s12dt128
引言
微传感器技术的发展和广泛应用,使得无线传感器网络成为传感器网络发展的必然趋势。无线传感器网络是由大量无处不在的、具有通信与计算能力的微小传感器节点,密集布设在无人值守的监控区域,构成的能够根据环境自主完成制定任务的“智能”自治测控网络系统。由于无线传感器网络长期在无人值守的状态下工作,无法经常为传感器节点更换电源,因此能耗成为无线传感器网络设计的关键问题之一,在系统设计时必须尽可能降低系统能耗。本文以无线传感器网络技术为理论依据,以教学样机系统为开发目标,提出了以mc9s12dt128为核心处理器,由蓝牙无线通信协议实现的无线传感器网络节点的设计方法。
1 硬件设计
1.1 系统原理
作为无线传感器网络内的一个节点,本系统由传感器单元、信号调理电路、a/d转换电路、信号处理单元(由单片机实现)、从蓝牙模块、主蓝牙模块以及pc工作站7部分组成,如图1所示。
具体工作过程是:传感器采集的环境中的信号量经过调理电路,送至mc9s12dt128单片机的模拟量输入端口;由单片机内置的atd模块实现a/d转换,并对转换结果进行处理,将处理完毕的信号通过uart传送至从蓝牙模块。主蓝牙模块由pc机控制,主从蓝牙模块通过蓝牙协议实现数据交换。
图1 系统原理框图
1.2 mc9s12dt128简介
mc9s12dt128是freescale公司的高性能16位单片机,采用5 v供电,内核为比68hc12的内核cpu12更快的s12,总线频率可达25 mhz。其特点是拥有丰富的i/o模块和工业控制专用的通信模块,如图2所示,工业应用非常广泛。
图2 mc9s12dt128片内资源
mc9s12dt128单片机内部带有5 v转换为2.5 v的电压调整器,其内核电压仅为2.5 v,功耗很低;片外i/o采用5 v供电,但输出功率软件可调,最低可将输出功率降低为全功率的50%。此外,单片机提供了停止模式、休眠模式和等待模式3种低功耗的工作模式供用户选择;也可将部分通信模块设置为休眠模式,以降低系统的功耗。mc9s12dt128不仅运算速度快,而且功耗可以降至很低,适用于无线传感器网络。
1.3 主从蓝牙模块
本系统包含相互配对的主从两个蓝牙模块。从蓝牙模块为日立公司的docengmbm0202蓝牙模块,遵从蓝牙1.1规范,射频输出为class2级。其支持多种接口:usb接口、uart接口、pcm语音接口、pio通用i/o口和isp接口。另外,本系统中采用uart实现mc9s12dt128和蓝牙模块之间的通信,以及蓝牙模块的驱动和信号的传输。
主蓝牙模块采用基于csr的bluecore02芯片开发的金瓯蓝牙开发平台3.0版。它提供了uart、rs232、usb、spi接口供用户进行开发、调试,音频接口可进行蓝牙语音的传输。本系统中pc机通过rs232接口控制主蓝牙模块。
1.4 传感器选择
为降低系统能耗,本系统所选用的传感器均为低功耗的小型传感器。其中,温度传感器选用maxim公司的max6611。正常工作状态下,供电电流仅为150 μa,功耗为0.75 mw;在shdn脚接地时处于省电状态,供电电流仅为1 μa,功耗仅为5 μw。湿度传感器选用honeywell公司的hih4000,其正常工作状态下的供电电流仅为200 μa,功耗为1 mw。压力传感器选用motorola公司的mpx4100a,其正常工作状态下的供电电流为7 ma,功耗为35 mw。3个传感器在正常工作状态下的总功耗为36.75 mw;在节电工作状态下,总功耗为36.005 mw。
2 软件设计
2.1 mc9s12dt128的中断控制方式
本系统中,mc9s12dt128采用集编辑、编译、调试、程序下载于一体的开发环境codewarrior4.5进行开发。codewarrior4.5是一种交叉编译器,支持高级语言(如c、c++和java),以及大部分微控制器的汇编语言。
中断控制方式是微处理器发展的一个重要里程碑,是提高cpu的工作效率、降低系统功耗的有效方式。
在codewarrior4.5下,中断函数的定义只有2种方法:采用pragma trap_proc或者interrupt关键字进行定义。具体使用方法分别为(假定中断函数名为incount):
① #pragma trap_proc
void incount(void){
tcount++;
}
② interrupt void incount(void){
tcount++;
}
对应于中断函数不同的定义方式,codewarrior4.5下初始化中断向量表也有2种方法:
① 采用vector address或者vector关键字。具体实现方法为,在工程的.prm文件中加入中断函数的入口地址:
vector address0x8aincount
其中,0x8a为中断入口地址。或者,加入中断向量标号:
vector 69 incount
其中,69为中断向量标号。
② 采用关键字interrupt。具体实现方法为在中断函数定义时加入中断向量标号:
interrupt 69 void incount(void){
tcount++;
}
其中,69为中断向量标号。
2.2 a/d转换中断方式的实现
本系统中,传感器采集到模拟信号的a/d转换是通过单片机的atd模块实现的。对atd模块采用中断的控制方式,可以节约系统资源,提高系统执行速度。
首先,必须在atd模块的初始化程序中将atd模块设置为中断模式,启用atd转换完成中断。转换完成中断函数名为atd0,其功能为读取a/d转换结果,采用interrupt关键字进行定义:
#pragma code_seg atd0interrupt_seg
interrupt void atd0(void){
atd0stat0_scf = 0;//关中断
measureresult[0]=atd0dr0h;
measureresult[1]=atd0dr0l;
measureresult[2]=atd0dr1h;
measureresult[3]=atd0dr1l;
measureresult[4]=atd0dr2h;
measureresult[5]=atd0dr2l;
}
#pragma code_seg default
中断函数入口通过在预编译文件中添加atd中断入口地址0xffd2实现,即在p&e_multilink_cyclonepro_linker.prm中加入语句:
vector address 0xffd2 atd0
mc9s12dt128的flash空间为128 kb,采用分页管理方式,其地址分配为:
ram = read_write 0x0400 to 0x1fff;
/*unbanked flash*/
rom_4000 = read_only0x4000to0x7fff;
rom_c000 = read_only0xc000 to0xfeff;
/*banked flash*/
page_38=read_only0x388000to0x38bfff;
page_39=read_only0x398000to0x39bfff;
page_3a=read_only0x3a8000to0x3abfff;
page_3b=read_only0x3b8000to0x3bbfff;
page_3c=read_only0x3c8000to0x3cbfff;
page_3d=read_only0x3d8000to0x3dbfff;
可以看到flash空间被划分为两部分:unbanked flash以及banked flash。对于banked flash,定义在其空间内的函数只能被本页的程序所调用;而定义在unbanked flash内的函数则可以为工程内任意程序所调用。中断函数想要正确地响应中断请求,必须放在unbanked flash内,因此需要将中断函数置于特定的位置。可以从a/d中断函数atd0的定义中看出,atd0被定义在code_seg atd0interrupt_seg部分。code_seg atd0interrupt_seg是自己定义的atd0中断代码段,其存放位置在p&e_multilink_cyclonepro_linker.prm文件的placement关键字下定义:
placement?
atd0interrupt_seg,
copy
intorom_c000
这样,就将atd0interrupt_seg的位置定义在了unbanked flash空间的rom_c000。
最后,在工程中建立atd0interrupt.c文件,在其中声明中断函数atd0()为外部函数:
#pragma code_seg atd0interrupt_seg
extern void atd0();
#pragma code_seg default
这样,就能保证置于任意存储空间的主程序在请求中断时,都可以得到及时、正确的中断响应。
2.3 主从蓝牙模块驱动
蓝牙技术是一种使用2.4 ghz频段的短距离无线通信技术。与其他几种无线通信方式比较,蓝牙的传输速率并不是最快的,但由于其具有主从式的自组织微微网、低功耗、频段的开放性等优势,因此在无线传感器网络的应用中具有良好的前景。
本设计中的无线传感器网络模块正是采用蓝牙通信实现的。传感器采集的信号经过a/d转换,转换结果需要通过蓝牙无线通信传至pc机。蓝牙系统能够支持2种连接,即点对点连接和点对多点连接。这就形成了2种网络结构:微微网和散射网。本系统属于只有一个从设备的微微网。这个微微网中,主蓝牙为与pc机相连的蓝牙模块,从蓝牙由与单片机相连的蓝牙模块担任。主从蓝牙的区别在于: 主蓝牙可以主动发出指令搜索蓝牙设备,建立和断开链接;而从蓝牙则必须等待主蓝牙的指令才能开始工作。
pc机与主蓝牙模块、单片机与从蓝牙模块之间都是串行通信,波特率为57 600 b/s。主从蓝牙模块的初始化过程大致相同,通过串行通信顺序发送如下10条指令:
reset[01 03 0c 00]
read_buffer_size[01 05 10 00]
clear:set_event_filter[01 05 0c 01 00]
write_scan_enable[01 1a 0c 01 03]
write_authentication_enable[01 20 0c 01 00]
write_voice_setting[01 26 0c 02 60 00]
set_event_filter[01 05 0c 03 02 00 02]
write_connection_accept_timeout[01 16 0c 02 00 20]
write_page_timeout[01 18 0c 02 00 30]
read_bd_addr[01 09 10 00]
蓝牙模块接收指令后返回相应的指令执行状态,处理器判断返回的指令状态,确定无误之后,才能发送下一条指令;否则,当前指令必须重新发送。主从蓝牙模块的工作流程如图3所示。
图3 主从蓝牙模块工作流程
采用vc6.0开发监控程序,将蓝牙指令封装在函数中,实现pc机对主蓝牙模块的控制。具体包括: 初始化并驱动其开始工作,主动搜索从蓝牙模块,完成链接,并将指令执行状态及搜索到的蓝牙设备地址显示出来;控制与从蓝牙模块的通信,对主蓝牙模块接收到的数据进行处理,实时刷新数据,显示温度、湿度、压力传感器的测量结果。系统运行结果如图4所示。
图4 样机系统运行结果
结语
本系统以mc9s12dt128为核心处理器,采用蓝牙技术实现上位机与传感器节点的无线通信,完成了一个具有3个传感器的无线传感器网络模块的开发。实验证明,本系统具有功耗低、稳定性高、实时性好、数据传输稳定等特点,其实现是建立无线传感器网络微传感器节点的有益尝试。
ST Accordo5芯片让中低端汽车具有高端的图形和音视频功能
Note 10触控笔会内置摄像头可能吗?看看这几点就知道了
智能门锁售后的服务有什么苦和忧
德国启动ZellkoBatt项目 将加快创新电池向工业大规模制造的转移
长期的UC部署选项会是什么
利用S12的无线传感器网络样机系统设计
NOT电路应用电路设计图
SEMI发布报告称,2018年全球半导体设备销售金额将达627亿美元,已超越去年历史最高点
芯片设计阶段如何对电路进行测试
虹软上半年:营收超3.4亿元,投入1.6亿元加码智驾、AIGC业务
什么是双极型集成电路
达林顿管的典型应用电路图
OTT终端将成为智能电视最大的流量出口
电动牙刷“国产”黑科技,NANK/南卡-Shiny电动牙刷全新上市!
浅析振荡器的工作原理
工程师必看的专业技术知识——排线如何正确插拔
华为mate10什么时候上市?8G+4摄像头,这样的华为mate10你喜欢吗?
win10的WLS编译环境搭建
3V DAC在±10V中的应用
稳压电路各个部分的作用