-
-
jiang_0514 | 当前状态:在线
总积分:2005 2024年可用积分:0
注册时间: 2008-10-15
最后登录时间: 2023-04-25
-
基于E-Web的智能传感器设计与实现
jiang_0514 发表于 2008/12/16 16:02:16 622 查看 0 回复 [上一主题] [下一主题]
手机阅读
1.引言
嵌入式Web(Embedded Web Server,简称E-Web)传感器是具有服务器功能的一种网络传感器[1]。它是在传统智能传感器的基础上实现信息化、网络化、智能化和微型化的一种新型传感器,其关键技术是在传感器内部实现TCP/IP网络通信协议,把传感器作为网络节点直接与Internet/Intranet通信。E-Web智能传感器的研制方法主要有三条实现途径[5]:①非集成化实现。将传统的传感器、信号调理电路、微处理器和网络接口组合为一整体而构成的一个网络化智能传感器;②集成化实现。采用微机械加工技术和大规模集成电路工艺技术,把所有器件集成在一个芯片上;③混合实现。将系统各个集成化环节,以不同的工作方式集成在两块或三块芯片上,并装在一个机壳里。第1种方法是一种快途径的实现方式,本文研究的E-Web智能水质传感器就是采用第1种方法来设计的。E-Web智能水质传感器的体系结构如图1所示。
图1 智能水质传感器的体系结构
2.智能水质传感器的硬件设计
智能水质传感器可分为传统传感器和嵌入式网络服务器两部分。微控制器、数据采集元件和硬件接口的合理组织是实现嵌入式Web智能水质传感器的物理基础。在满足功能要求的前提下,要最大限度地缩小系统硬件的几何尺寸,以满足实际应用的要求。在分析、对比和实验的基础上,本文选择的硬件原理如图2所示。
2.1微控制器
微控制器MCU是传感器的核心部分,它主要完成操作系统指令、各种应用程序、专有通信协议的解释与处理、消息和指令的处理转换,以及传感器的其它控制。在本系统中选用ATMEL AT91FR40162[4]。AT91FR40162微控制器是基于32位ARM7TDMI内核的高性能低功耗RISC微控制器,支持实时仿真,片上含有丰富的资源模块,执行指令可以达到60Mips,通过10M/s以太网接口芯片可以实现网络通信。处理器有开放的数据、地址线,可方便地外扩RAM、Flash存储器及外接ADC,并可实现较复杂的算法。
图2 智能水质传感器的硬件原理图
2.2传统水质传感器
本系统采用的传统水质传感器是美国金泉(YSI)公司的YSI600R集成探头,该探头可以直接输出模拟电压信号,也可以输出数字信号,并且一次可有8个实时参数传输。该集成探头供选择的水质传感器有:水温(-5~+70℃±0.15℃)、溶氧(0~50㎎/L±2%)、酸碱度(0~14±0.2)等。
2.3数据采集与调理模块
数据采集就是通过传统水质传感器将水质参数的物理量或化学量转换成电压信号或电流信号,但由于电压或电流信号一般很微小,故需要信号调理电路对其进行放大处理,以适合A/D转换。
2.4电机传送装置
长时间浸泡在水中的传感器的表面极易附着污垢,导致灵敏度迅速降低。因此,利用电机传送装置,可在采集数据时把传感器浸入水中,平时则把传感器提出水面。
2.5以太网接口
用来实现本地数据的远程传送及接收远程控制命令。它可支持各种数据业务和通信协议,用于连接底层的设备或者与企业内局域网连接。在本系统中选用工业级的CS8900以太网网络接口芯片,它与MCU直接以16位的I/O模式连接。
3.智能水质传感器的软件设计
根据实际需要,系统在以AT91FR40162为核心的嵌入式系统中引入可移植、可裁减、源码公开的抢占式实时多任务操作系统µC/OS-II,软件设计主要可分为:网卡CS8900等外设的驱动、嵌入式操作系统µC/OS-II对应用系统的管理、TCP/IP协议栈[2]的实现、数据采集处理及控制等,软件结构如图1所示。限于篇幅,这里重点介绍网络接口的软件实现方法。
表1 智能水质传感器的任务分配
任务名称 功能 优先级
TASK_µIPProcess() 处理TCP/IP数据包 2
TASK_µIPTimeOut() 延时等待协议栈处理 3
TASK_µIPRec() 接收TCP/IP数据包 4
3.1 µC/OS-II的任务定义
首先把应用程序划分为各个任务,并定义不同的优先级,由操作系统进行调度和同步。用户的应用程序建立在系统的主任务(Main-Task)基础上,执行特定的功能。任务执行一次后,设置延时参数OSTCBDly,表明在经过OSTCBDly个时钟周期后再次运行。然后进行任务切换,使其他程序运行。在系统中为每个任务赋于不同的优先级,优先级号越低的任务,其优先级越高。µC/OS-II总是运行就绪态优先级最高的任务。
3.2传感器的任务分配
µC/OS-II使用任务创建函数OSTaskCreateExt()定义任务,根据任务的执行顺序来设定任务的优先级,各任务间使用µC/OS-II提供的信号量、消息邮箱进行同步和通信。TCP/IP协议栈的任务名称、功能和优先级如表1。对于其他任务,只需在此基础上增加不同优先级的任务即可。
在TCP/IP协议栈处理过程中,必须先接收数据包,然后才能对数据包进行处理。也就是说,在完成TASK_UipRec()任务后,才能执行TASK_UipProcess()。同样只有在数据包处理完成后,才能执行发送函数,使用信号量进行协议栈任务间的通信。
传感器的数据采集与处理等实时任务在上述程序框架基础上进行增加,任务的优先级比协议栈的低。在系统初始化(调用OSInit()和OSCtxSw())后,通过OSTaskCreateExt()调用创建一个起始任务StartTask,实时任务创建完成后,调用OpenTimer0()设置时钟中断,最后调用OSStart(),系统开始运行并进行任务调度。
void main (void){
OSInit();
OSTaskCreate((void*)StartTask,(void*)0x0,(OS_STK)&StartTaskStk
[START_TASK_STK_SIZE-1], 0);
OpenTimer0();
OSStart();
return 0;}
3.3传感器的嵌入式TCP/IP协议栈
µC/OS-II只是一个实时的任务调度及通信内核,缺少对外围设备和接口的支持。以开放源代码的TCP/IP协议栈Lwip[3]为原型,对嵌入式TCP/IP协议进行改造和重新设计,可使µC/OS-II成为支持网络的RTOS。在TCP/IP协议栈设计中,系统采用基于中断驱动的模式;协议栈整体作为任务的形式出现;改造API层适应多个网络程序同时运行等。TCP/IP协议实现框架中设计了2个任务和1个中断响应函数,此外TCP/IP协议栈还有一个接口良好的API层,以方便用户编写自己的网络应用程序。因系统资源有限,在保持协议分层体系结构的前提下,应尽量精简协议内容,在本系统中主要实现了HTTP,TCP,UDP,IP,ICMP,ARP等协议。
图3 TCP/IP协议栈实现结构
如图3所示,TCP/IP协议栈最底层是基于中断的CS8900驱动程序,以中断方式异步地把数据发送给协议栈主任务,中间经过协议协理数据的缓冲区;用户程序通过API层接收数据和发送数据;定时协议任务专门协理TCP相关的数据;非TCP的数据则直接交给以太网络驱动程序发送。整个协议栈的数据传输都通过全局缓冲区管理模块管理。
协议栈主要有2个任务:协议主任务和TCP相关的时钟任务。主任务的功能通过µC/OS-II提供的信号量,获取驱动程序提交的数据,简单分析数据,决定分发给哪个模块处理。协议主任务的主要代码如下:
task_t znet_task_id; //协议实现任务的标识
u8_t znet_state; //全局状态变量
sys_sem_t zent_sem; //全局信号量,用于和API层交互
sys_sem_t zent_sem_tmr; //定时任务所使用的信号量
static void znetif_rx(zentif_t *pnetif, zbuffer_t *pbuffer); //协议中接收数据的入口函数
void znet_task(void *pdata) //uC/OS-II中的协议任务
{u8_t err; zbuffer_t *pbuffer;
znet_sem = sys_new_sem(0) ; //创建全局的信号量
znet_sem_tmr=sys_new_sem(1);
tcp_ticks = 0; //TCP模块中用于计时的全局变量
sys_enter_critical( ); //修改全局变量,关闭中断
tent_state|=ZENT_START; //标记协议栈开始工作
sys_exit_critical); for(;;)
{for(;;){在设备驱动中查询是否有数据到达}
sys_enter_critical();
znet_state|=ZNET_RUNNING; //开始处理数据
sys_exit_critical();
sys_wait_sem(zent_sem_tmr , 0, &err) ; //和时钟任务同步
znetif_rx(&default_netif , pbuffer) ; //调用数据接收入口函数
sys_signal_sem (znet_sem_tmr) ; //发送给时钟任务可以运行了
}}
TCP相关的时钟任务代码(定时器任务)如下:
void tcpes_tmr(void *pdata)
{u8_t count=0; u8_t err;
for(; ;)
{sys_delay(10); //定时延时
sys_wait_sem(znet_sem_tmr, 0, &err ); //等待事件
…………//处理定时任务
sys_signal_sem (znet_sem_tmr); }} //发送信号给协议任务,表示退出这次处理
图4 16位模式下CS8900A-IQ3的硬件连接
3.4 CS8900驱动
CS8900的驱动程序主要包括芯片初始化、收包、发包三部分[4]。物理信道上的收发操作采用Ethernet IEEE 802.3协议帧格式,CS8900负责接收数据帧/发送数据帧。当需要发送或接收数据时,触发CS8900中断,CPU将中断向量进入中断服务子程序,进行事件处理。中断服务子程序根据CS8900内部中断状态寄存器的值确定系统所处状态,通过两个信号量切换系统任务,使等待相应信号量的一个任务进入就绪态。CS8900与MCU的硬件连接如图4所示,CS8900的基地址为0x300003000。
4.结束语
网络化智能传感器是将智能传感技术和计算机通信技术相结合而提出的一个全新概念。本文提出了一种基于E-Web的智能水质传感器的开发方案,其创新性在于采用TCP/IP+Http+ WebServer实例的方法实现了智能水质传感器Web服务器,在传感器现场级实现了TCP/IP协议,且组网方便可靠,在“工厂化养殖水质环境自动监控系统”项目中的应用表明,效果良好。
参考文献
[1] Potter D. Smart plug and play sensors[J]. IEEE Instrumentation & Measurement Magazine,2002,5(1):28-30.
[2]丁飞,张西良,胡永光等.无线传感器网络在环境监测系统中的应用[J].微计算机信息,2006,9-1:175-177.
[3] Vitturi S. On the use of Ethernet at low level of factory communication systems[J]. Computer Standards and Interfaces, 2001,23(4):267-277.
[4]杨恒.ARM嵌入式系统的设计与实践[M]. 西安电子科技大学出版社,2005.
[5]何鹏举,陈明,白耀辉.基于Internet的嵌入式Web声表面波压力传感器研究[J].传感技术学报,2004,4:245-248.