第四章水质监测系统软件设计利用数学方法去掉原始数据中夹杂的噪声数据,获得最接近真实数据的数据集合,需要使用一种有效的滤波算法。常用的滤波算法中,限幅滤波只能排除大的极值干扰,滤波效果比较粗糙;中值滤波能避开偶然的干扰,对周期较长的干扰信号滤波效果较差,算术平均滤波对极值干扰有一定的过滤作用,但消除不完全,移动滤波对幅值较小的干扰有很好的滤波效果,但对幅值较大的干扰会产生滞后偏差,加权滤波对平滑性和灵敏性的效果不理想,而且运算量大,影响运行速度。针对精度和可靠性问题,采用限幅滤波、算数平均滤波、加权滤波相结合的综合数字滤波处理方法,其步骤如下:1.限幅滤波,连续采样14次,得采样数据置(净1,2,…,10),对置进行排序,去掉2个最大值,2个最小值,得到中间10个数据;2.算术平均滤波,对这lO个数据进行算术平均运算,得到以;1N以=寺∑置(4.1)』’t=l3.加权滤波,把以放入一窗口,窗口中数用咒表示,对所得的数据根据控制对象,选择适当的加权因子a,实行加权均值滤波,其数学表达式为:E:1_1∑L乃q(4.2)∑ai信1其中,N为连续采样的次数,L为窗口的数据长度,ai为加权因子。4。2.4数据运算处理通过光电传感器采集过来的信号是电压信号,而不是水质溶液浓度。这需要把测得的电压值转换成相应的样品浓度值,则在实验的基础上建立数学模型,由朗伯比尔定律及第二章分析可以得出,样品浓度与电压是线性关系,它们之间的关系如公式(4.3)和公式(4.4)所示。C:—lgUo-—IgUt(4.3)射C=aU+b(4.4)41广东Z-业大学硕士学位论文这里a、b是待定常数,需要通过实验获得,U是测得的光电传感器输出电压,C是样品浓度,根据第二章模型求解过程可以计算出相应的样品浓度值。采用回归方程对其非线性进行拟合处理步骤如下:1.运用曲线拟合技术对待测电压值进行修正,消除测量水质溶液浓度的影响。2.系统根据试验数据,采用数理统计分析的最小二乘法建立起电压与溶液浓度的线性回归方程。3.有了相关方程,根据采集电压值就可以得到水质溶液浓度。当一定光强照射样品溶液时,通过数据采集程序可以得到所需电压值U,利用程序中预设的上述标准曲线方程,可以求出待测水质溶液的浓度值C。具体测量水质溶液浓度的过程如下:先输入清水作为标准溶液将其复位,同时测量电压砜,然后加入水质样品溶液测其U,计算其浓度值:C=a以+b,其中a、b为常数,其流程图如图4—5所示。(开始:≮通道选择士测量清水电压%◆测量样品溶液电压U上计算样品浓度C=kU,+6,上Y数据存储、显示◆(结束)图4.5数据运算处理流程Fig.4—5FlowDiagramofDataProcess4.2.5EEPROM数据存取软件设计在测控系统中,参数的设置以及一些重要的数据需要存储在EEPROM中。其读写42第四章水质监测系统软件设计程序如下。voideeprom_write(uintuiaddress,ucharucdata){while(EECR&(1<<EEWE));//等待前面的写完成EEAR=uiaddress;EEDR=ucdata;//设置地址和数据寄存器EECRI=(1<<(EEMWE));EECRI=(1<<EEWE);)unsignedchar//置位EEMWE-主机写使能//启动写操作eeprom_read(uintuiaddress){while(EECR&(1<<EEWE));//等待前面的写完成EEAR=uiaddress;//设置地址//置位EERE:启动读操作//从数据寄存器返回数据EECR{=(1<<EERE);returnEEDR;>4.2.6LCD显示和按键软件设计LCD液晶显示模块主要用来显示当前的测量结果或人机交互界面,采用LCD显示屏一TGl2864E点阵的液晶屏,可显示16×16点阵的汉字4行8列;按键程序图4—6LCD显示程序流程Fig.4-6F10wDiagramofLCDDisplay43广东工业大学硕士学位论文软件采用中断和查询相结合的方法,如果有键按下,就产生中断信号,进入中断程序,然后查询哪些键按下,进入相应的功能函数,采用延时去抖动以防误操作。其LCD显示程序流程如图4.6所示。4.2.7CAN通信模块CAN总线基本通信程序主要完成对CAN控制器的管理与操作,实现数据格式的转换、数据的收发和CAN通信的错误处理等工作。包括CAN控制器初始化程序、发送子程序、接收子程序等。1.CAN控制器初始化程序在软件编写之前需要先确定MCP2510的基地址及复位引脚,然后正确的初始化MCP2510。初始化主要包括工作模式的设置,接收滤波方式的设置,接收屏蔽寄存器(AMR)和接收代码寄存器(ACR)的设置,波特率参数设置和中断允许寄存器的设置。等在完成MCP2510的初始化设置后,就可以回到正常工作模式,进行正常的通信任务。MCP2510的初始化过程如图4.7所示。2.发送子程序开始设置MCP2510][作模式设置总线位定时设置寄存器设置lICP2510工作在正常模式图4-7ICP2510初始化流程图4-8ICP2510发送数据流程Fig.4-7F1嗍DiagramoflICP2510Fig.4-8SendingDataF1o孵Diagramof11CP2510Initialization发送子程序负责节点报文的发送,发送时用户只需要将待发送数据按特定格式组合成一帧报文,送入MCP2510发送缓冲区中,然后启动MCP2510发送即可。发送子程序流程图如图4.8所示。第四章水质监测系统软件设计3.接收子程序接收子程序负责节点报文的接收以及其他情况的处理。MCP2510就收主要有两种方式:中断接收方式和查询就收方式。本系统对于实时性要求较强,所以采用中断接收方式。当用户发送请求时,嵌入式web服务器便调用相应的CGI程序通过CAN总线向底层监测节点以报文的形式发送相关命令,CAN接收到一个报文后,其中断使能标志置l,产生接收中断,监测节点便立即响应,进入接收中断服务程序,然后系统再根据web服务器的具体命令,向服务器传送该节点工作状态或采集数据。4.3嵌入式Linux系统软件平台构建与设计4.3.1交叉编译环境的建立绝大多数Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,由于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板【50】。运行Linux的PC(宿主机)开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行一而只能在目标板上执行),然后把可执行文件下载到目标机上运行它们。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器提供的支持做出选择。宿主机和目标板的处理器一般不相同,GNU编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC机作宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为RedhatLinux。嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount所用)。然后要在宿主机上建立交叉编译调试的开发环境。在本次开发的系统上运行嵌入式Linux操作系统的步骤如下。1.建立嵌入式Linux交叉开发环境首先新建一个目录:mkdir/usr/local/arm/;45
相关推荐: