基于S12的无线传感器网络样机系统设计

2011-05-04 14:03:18来源: 互联网

     摘要阐述基于蓝牙技术的无线传感器技术模块的设计及实现方法。详细描述了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个传感器的无线传感器网络模块的开发。实验证明,本系统具有功耗低、稳定性高、实时性好、数据传输稳定等特点,其实现是建立无线传感器网络微传感器节点的有益尝试。

关键字:无线  传感器网络  网络

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2011/0504/article_5849.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
无线
传感器网络
网络

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved