基于arm7环境监测数据采集系统的开发
时间:04-07
来源:互联网
点击:
引言
在工业污水处理过程中,常常需要对现场的排污水流量、水质量等参数进行监测,通过采集污水流量、水质参数如TOC、COD等数据进行随时了解,从而分析排污水流量是否超标,诊断水质受污染的程度。现在常用的数据采集方式是通过数据采集板卡来进行数据的接入。但采用板卡不仅安装麻烦、易受机箱内环境的干扰,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。一般的基于单任务顺序机制的单片机数据采集系统又很难胜任于稳定性、实时性要求很高的场合。基于此,本文设计了一种基于PHILLIS公司 ARM7处理器LPC2138的嵌入式、多任务数据采集系统。很容易就能实现低成本、高可靠性、多点的数据采集。
1 系统总体结构设计
图 1为系统结构总体框图,此嵌入式数据采集系统核心部分为图中的核心板部分,其中嵌入了数据采样/控制模块,远程通信模块,计算模块及报警逻辑等功能模块。其主控制芯片为ARM7处理器LPC2138,芯片内部内置了宽范围的串行通信接口和512kB的Flash存储系统,该存储器可用作代码和数据的存储。对Flash存储器的编程可通过以下几种方法来实现:通过内置的串行JTAG 接口,通过在系统编程(ISP)和UART0,或通过在应用编程(IAP)。使用在应用编程的应用程序也可以在应用程序运行时对Flash进行擦除或编程。在本系统中使用了在应用程序运行时对Flash进行擦除和编程,使用这种方法为数据存储和现场固件的升级都带来了极大的灵活性。故此LPC 2138非常适合于嵌入式系统的开发和应用,并提供了大规模的缓冲区和强大的处理功能。
图1 系统结构总体框图
2 系统硬件设计介绍
系统中除了基本的电源电路、复位电路、系统时钟电路,系统存储器电路外,主要电路有按键电路、显示电路。按键电路、显示电路实现系统的基本人机交互界面。
2.1 数据采集系统总体描述
如图1所示,数据采集系统置于监测仪器设备(如有机污染监测仪,流量计,PH计等)处。设备所检测到的数据(如COD,TOC,流量等)通过相应监测仪器的输出端子输入到本系统的串口模块(或状态量模块或其他采集模块),经过内嵌入核心板的计算模块,经过数据处理后,通过GPRS模块或ADSL就可以进行远程数据传输,将处理后的结果传送给远端的上位机。只要在线监测仪器生产厂家提供相关数据通讯协议就可增加相关仪器数据采集功能,直接存储、显示COD、 pH等数据,同时本系统还支持数据查询,指标超标报警等功能。
2.2 数据存储部分
在本系统中,采用Flash存储,存储内容包括了以下内容:流量计槽型,槽号,槽高,瞬间值,累计流量;系统当前时间;各种污染物的上下限参数;定时上报时间;实时上报时间间隔;TOC/PH采集频率;测量数据。
数据根据时间顺序存储,30秒为1个记录。如果某个仪器没有数据则其数据位为以符号“-”表示。数据存储在EEPROM物理位置如下:
2.3人机界面设计
此本分主要完成人机对答,数据查询,定时发送和定时采集时间设定等功能。实现人机智能化操作的目的。
图2系统启动界面(左)和启动成功后系统运行界面(右)
其中“TFFFF”5位表示如下(从左至右):
是否登陆到中心 T(是)/F(否)
流量通信是否正常 T(是)/F(否)
PH通信是否正常 T(是)/F(否)
TOC通信是否正常 T(是)/F(否)
备用 T(是)/F(否)
图3定时采样界面(左)和实时上报时间问隔设置界面(右)
3 系统软件实现
整个数据采集系统的软件大致要完成3个部分的工作:系统的初始化代码、uc/OS-II移植、应用任务的编写。以下分别对各部分要点进行说明。
3.1 系统的初始化代码编写流程
在嵌入式系统中,启动时用于完成初始化操作的这段代码被称为Boot.loader程序。通过这段程序,可以初始化硬件设备、建立内存空间的映射图。从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核、运行用户应用程序准备好正确环境。本系统的 Boot.loader流程图如图4所示。
图4 Boot.loader流程图
3.2 操作系统uc/OS-II在LPC2138上的移植
系统采用的操作系统为uc/OS-II。uc/OS-II是一种源码公开的实时嵌入式操作系统。它是一种占先式的实时内核,是基于优先级的,即总是让就绪态中优先级最高的任务先运行,因此实时性比非占先式的内核要好。它包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能:它的绝大部分代码是用C语言编写的,可移植性强。要使uc/OS-II正常运行,处理器需要满足以下要求:
● 处理器的 C编译器能产生可重入代码;
● 用C语言就可以打开和关闭中断;
● 处理器支持中断,并且能产生定时中断(通常在 10至 100Hz之间);
● 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;
● 处理器有将堆栈指针和其它 CPU寄存器读出和存储到堆栈或内存中的指令;
uC/OS-II在LPC2138上的移植所采用的编译器为ARM ADS自带的C语言编译器。具体做法主要包括:声明10个与编译器相关的数据类型(包括堆栈的数据类型),用#define设置一个常量 (OS_CPU.H),表明堆栈的增长方向;用C语言编写6个与操作系统相关的函数(OS_CPU_C.C);任务堆栈初始化函数;用汇编语言编写4个与处理器相关的函数和5个钩子函数:
● OSStartHighRdy0,用于在调度中使最高优先级的任务处于就绪态并开始执行,uC/OS-II启动时使用OSStartHighRdy运行第一个任务;
● OSCtxSw0。完成任务级的上下定义切换;
● OSIntCtxSw0。完成中断级任务切换,其过程与OSCaSw0类似。只是在执行中断服务子程序后可能使更高优先级的任务处于就绪态,即中断退出时的入口;
● SoftwareInterrupt是软件中断,用于提供一些系统服务。
3.3 应用程序的编写
此部分主要是完成通信协议的编写及注册任务等工作,但不是系统所必须的。
在工业污水处理过程中,常常需要对现场的排污水流量、水质量等参数进行监测,通过采集污水流量、水质参数如TOC、COD等数据进行随时了解,从而分析排污水流量是否超标,诊断水质受污染的程度。现在常用的数据采集方式是通过数据采集板卡来进行数据的接入。但采用板卡不仅安装麻烦、易受机箱内环境的干扰,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。一般的基于单任务顺序机制的单片机数据采集系统又很难胜任于稳定性、实时性要求很高的场合。基于此,本文设计了一种基于PHILLIS公司 ARM7处理器LPC2138的嵌入式、多任务数据采集系统。很容易就能实现低成本、高可靠性、多点的数据采集。
1 系统总体结构设计
图 1为系统结构总体框图,此嵌入式数据采集系统核心部分为图中的核心板部分,其中嵌入了数据采样/控制模块,远程通信模块,计算模块及报警逻辑等功能模块。其主控制芯片为ARM7处理器LPC2138,芯片内部内置了宽范围的串行通信接口和512kB的Flash存储系统,该存储器可用作代码和数据的存储。对Flash存储器的编程可通过以下几种方法来实现:通过内置的串行JTAG 接口,通过在系统编程(ISP)和UART0,或通过在应用编程(IAP)。使用在应用编程的应用程序也可以在应用程序运行时对Flash进行擦除或编程。在本系统中使用了在应用程序运行时对Flash进行擦除和编程,使用这种方法为数据存储和现场固件的升级都带来了极大的灵活性。故此LPC 2138非常适合于嵌入式系统的开发和应用,并提供了大规模的缓冲区和强大的处理功能。
图1 系统结构总体框图
2 系统硬件设计介绍
系统中除了基本的电源电路、复位电路、系统时钟电路,系统存储器电路外,主要电路有按键电路、显示电路。按键电路、显示电路实现系统的基本人机交互界面。
2.1 数据采集系统总体描述
如图1所示,数据采集系统置于监测仪器设备(如有机污染监测仪,流量计,PH计等)处。设备所检测到的数据(如COD,TOC,流量等)通过相应监测仪器的输出端子输入到本系统的串口模块(或状态量模块或其他采集模块),经过内嵌入核心板的计算模块,经过数据处理后,通过GPRS模块或ADSL就可以进行远程数据传输,将处理后的结果传送给远端的上位机。只要在线监测仪器生产厂家提供相关数据通讯协议就可增加相关仪器数据采集功能,直接存储、显示COD、 pH等数据,同时本系统还支持数据查询,指标超标报警等功能。
2.2 数据存储部分
在本系统中,采用Flash存储,存储内容包括了以下内容:流量计槽型,槽号,槽高,瞬间值,累计流量;系统当前时间;各种污染物的上下限参数;定时上报时间;实时上报时间间隔;TOC/PH采集频率;测量数据。
数据根据时间顺序存储,30秒为1个记录。如果某个仪器没有数据则其数据位为以符号“-”表示。数据存储在EEPROM物理位置如下:
2.3人机界面设计
此本分主要完成人机对答,数据查询,定时发送和定时采集时间设定等功能。实现人机智能化操作的目的。
图2系统启动界面(左)和启动成功后系统运行界面(右)
其中“TFFFF”5位表示如下(从左至右):
是否登陆到中心 T(是)/F(否)
流量通信是否正常 T(是)/F(否)
PH通信是否正常 T(是)/F(否)
TOC通信是否正常 T(是)/F(否)
备用 T(是)/F(否)
图3定时采样界面(左)和实时上报时间问隔设置界面(右)
3 系统软件实现
整个数据采集系统的软件大致要完成3个部分的工作:系统的初始化代码、uc/OS-II移植、应用任务的编写。以下分别对各部分要点进行说明。
3.1 系统的初始化代码编写流程
在嵌入式系统中,启动时用于完成初始化操作的这段代码被称为Boot.loader程序。通过这段程序,可以初始化硬件设备、建立内存空间的映射图。从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核、运行用户应用程序准备好正确环境。本系统的 Boot.loader流程图如图4所示。
图4 Boot.loader流程图
3.2 操作系统uc/OS-II在LPC2138上的移植
系统采用的操作系统为uc/OS-II。uc/OS-II是一种源码公开的实时嵌入式操作系统。它是一种占先式的实时内核,是基于优先级的,即总是让就绪态中优先级最高的任务先运行,因此实时性比非占先式的内核要好。它包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能:它的绝大部分代码是用C语言编写的,可移植性强。要使uc/OS-II正常运行,处理器需要满足以下要求:
● 处理器的 C编译器能产生可重入代码;
● 用C语言就可以打开和关闭中断;
● 处理器支持中断,并且能产生定时中断(通常在 10至 100Hz之间);
● 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;
● 处理器有将堆栈指针和其它 CPU寄存器读出和存储到堆栈或内存中的指令;
uC/OS-II在LPC2138上的移植所采用的编译器为ARM ADS自带的C语言编译器。具体做法主要包括:声明10个与编译器相关的数据类型(包括堆栈的数据类型),用#define设置一个常量 (OS_CPU.H),表明堆栈的增长方向;用C语言编写6个与操作系统相关的函数(OS_CPU_C.C);任务堆栈初始化函数;用汇编语言编写4个与处理器相关的函数和5个钩子函数:
● OSStartHighRdy0,用于在调度中使最高优先级的任务处于就绪态并开始执行,uC/OS-II启动时使用OSStartHighRdy运行第一个任务;
● OSCtxSw0。完成任务级的上下定义切换;
● OSIntCtxSw0。完成中断级任务切换,其过程与OSCaSw0类似。只是在执行中断服务子程序后可能使更高优先级的任务处于就绪态,即中断退出时的入口;
● SoftwareInterrupt是软件中断,用于提供一些系统服务。
3.3 应用程序的编写
此部分主要是完成通信协议的编写及注册任务等工作,但不是系统所必须的。
- 基于nRF2401智能无线火灾监控系统设计(04-01)
- 家居安防无线监控报警系统(04-02)
- 高精度压力测控系统的试验研究(04-08)
- 提高实时系统数据采集质量的研究(04-09)
- 基于MSP430的低功耗便携式测温仪设计(06-18)
- 以超低功耗微处理器MSP430为核心的热计量表设计(06-18)