APP下载

基于Qt环境下物理参数综合分析系统的设计与实现

2014-03-28江帆孙立尹华山

电子设计工程 2014年8期
关键词:串口部件单片机

江帆,孙立,尹华山

(南京航空航天大学理学院,江苏南京211100)

应用现代电子信息技术改进传统实验,适应大学专业物理实验课程创新发展的需求,研制具有全数字化、接口兼容性强、可实时测试监控、实时数据处理与存储、符合网络化技术规范,经过全面技术升级的新型实验工作平台。不仅是通用性的实验平台,适应不同物理参数测试的需求;而且具备个性化特点,适合特殊性物理参数测试需求。全篇以数字化压力测量的实例作为个案来展开,具体描述硬件与软件的设计与研制。

Qt作为系统开发的环境,具有不可替代的优势。Qt提供的C++应用程序开发框架,可以轻松实现“一次编写,随处编译”的跨平台解决方案,编写的应用程序能完美运行于从windows 98到windows 7,从Mac OSX到Linux,从Solaris,HP-UX到其他基于X11的众多Unix平台上。这让编写的应用程序可以运行在不同的系统,方便移植[1]。Qt设计师是强大的跨平台GUI布局和格式构建器[2]。

1 系统总体架构

传感器将各种物理参数转化为电信号,经由分析仪的放大处理与采样转换成为数字信息,再经过仪器的串口与上位机的通信传输,从而实现上位机对分析仪的实时有效控制以及对各种数据的计算处理。在这个过程中,分析仪拥有监控、报警、显示、阀值设定和人机交互等功能。上位机软件拥有数据采集、纠错、制表、画图、串口调试、打印和存储等功能。在数据的传输过程中避免了人为造成的误差,使测量更精确,操作更简便和人性化。系统构架图如图1所示。

图1 系统架构图Fig.1 System construction chart

2 硬件电路设计

2.1 智能型前置电路

在大多数情况下,测试参数为非电量的物理参量,传感器将其转化成对应的电压或电流的参量,测量系统必须具有兼容性强、适应性广的前置电路。传感器输出的电信号与采样电路输入的电信号之间,电路参数匹配、电气性能对接,在前置电路设计时需要做到3点:

1)电流输出型传感器与电压输出型传感器不同,用电子程控型多路选择器完成对传感器类型的智能识别与输入切换;

2)电压值是后续处理基础性变量,必须把电流输出型传感器输出的电流变量转变为电压变量;

3)各种类型传感器输出变量存在很大差异,为了符合后续采样电路正常工作时电压值的需要,设计一个程序控制型的放大器来完成微小信号的放大或者是大信号的衰减处理。

设计一个智能型前置电路来完成,具备自动识别、多路切换与程控放大的特点,其工作原理如图2所示。

图2 智能型前置电路Fig.2 Intelligent front circuit

2.2 数模转换电路

为保持系统的高精度性能,设计采用16位的高精度低频模数转换器AD7705。它利用Σ-Δ转换技术[3]实现了16位无丢失代码性能。选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。片内数字滤波器处理调理。SPI接口串行输出,节省了I/O口的使用。具有差分输入端口,对模拟输入具有缓冲功能,0.003%非线性可以满足系统的要求。

2.3 单片机

选择STC公司生产的STC89C52型单片机,具有低功耗、高性能CMOS8位微控制器,40脚双排直列式。最高运作频率35 MHz,6T/12T可选。8 K在系统可编程Flash存储器。使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外,具有可降至0 Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。在掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.4 单片机程序设计

单片机的控制与计算处理程序内容很多,举例说明其中的设计之一:

直接显示A/D转换的数字信号[4]的话,可以观察到显示数字的不停跳变。为了保持稳定,不仅在A/D芯片中加了模拟滤波调理,防止外界的干扰信号影响。同时在软件的算法上采用多次采样求平均值的处理算法,可保持0.001 MPa位稳定,比实验室现有的仪器提高了将近10倍。

static uchar n=0;

adc[n++]=ad;

if(n==16)//数字滤波法运算取平均值

{

uchar i;

unsigned long int sum=0;

n=0;

for(i=0;i<16;i++)

{

sum+=adc[i];

}

ad=sum>>4;

transadc(ad);

}

2.5 其他硬件电路

除了以上硬件电路外,系统需要相应的辅助配套电路,用以完成特定的控制功能,如I/O扩展接口电路、液晶显示驱动电路、串口通讯电路、各类时钟电路及各种电源电路等。

3 上位机软件设计

3.1 功能要求

1)通用功能:启动程序、登陆界面、使用提示、错误提示、菜单栏、工具栏等。

2)实验功能:学生信息数据库,网络上传,实验原理预习,选择负载模式(以数字化压力测量0.6Mp或6Mp为例),数据分析、显示和存储等。

3)分析仪的控制功能:串口通信,数据采集,数据纠错等。

3.2 界面设计

在Qt Creator中新建工程,在Qt C++项目中的Gui应用为用户提供了各种界面基类。Qt Creator提供的默认基类只有QMainWindow、QWidget和QDialog这3种。QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,全都继承自QWidget[2]。其实所有的窗口部件都继承自QWidget。本软件选择QMainWindow。

Qt Creator的设计模式即Qt Designer,使用了与应用程序中将要使用的相同部件,因此可以使用屏幕上的格式快速设计、创建部件以及对话框。具有使用拖放功能快速设计用户界面,定制部件或从标准部件库中选择部件,以本地外观快速预览格式,通过界面原型生成C++或Java代码等优势[2]。对于界面设计,也可以使用纯代码编写程序。拖放一个QPushButton部件的操作和QPushButton pushbutton(this);语句效果相同。两种方法综合应用可以使界面设计更灵活更有创意。

3.3 界面外观美化

界面外观可以通过QStyle(Qt风格)、QPalette(调色板)和Qt Style Sheets(Qt样式表)[2]进行风格、色彩、透明度和背景等的美化。整体外观的布局则通过布局管理器来美化。布局管理可以使部件整齐排列并适应界面大小而变化。Qt中主要提供QLayout类及其子类作为布局管理器,通常使用的有基本布局管理器QBoxLayout和栅格布局管理器QGridLayout。

3.4 国际化

Qt支持现在使用的大多数语言,所有的输入部件和文本绘制方式对Qt支持的所有语言都提供了内置的支持。同时,Qt对把应用程序翻译为本地语言也提供了很好的支持[2]。在本软件中通过对所有用户可见的文本使用QString,对动态文本使用QString::arg()函数,对所有文字文本使用tr()函数来实现国际化。主程序整体界面效果如图3所示。

图3 主程序界面Fig.3 Main programinterface

图4 数据处理结果Fig.4 Data processing result

3.5 数据处理方案

数据的处理分为同步显示、拟合图像、制表、存储数据和打印数据。制表是在QMainWindow的构造函数中初始化;同步显示是在采集和计算数据的同时在数据区和表格中显示;拟合和绘图有专门的函数在后台进行,这个函数还包含最小二乘法、计算线性度、计算拟合方程和显示坐标图的代码。利用Qt中绘图控件QPainter[2,5-6],同时利用坐标变换translate方法重新定义原点,把数据通过数学计算的方法转化为相对应的点绘制出来,这样就能拟合出曲线,最后将实验结果存储为pdf格式图片,如图4所示。

3.6 Qt环境下的功能实现

上位机软件功能的实现依靠3种机制:C++面向对象编程机制,Qt的信号与槽机制,Qt的事件机制。

Qt编程是由C++体系实现[1-2,5-6],面向对象[7]的编程方法和Qt丰富的类库,使用户能够更简单灵活的实现各种功能。在Qt Creator的帮助模式下,可以查询所有类的信息。应用这种机制,可以使程序结构灵活,层次感强。软件架构如图5所示。

Spscreen.cpp为启动界面,包含软件的基本信息。Login.cpp是登陆界面,包含学生信息的填写,其下属Experiment.cpp提供实验原理;另一个下属Lprompt.cpp是提示学生填写错误信息的对话框。Mainwindow.cpp是主程序界面,包含各种部件,其下属Accessport.cpp、Filesave.cpp、Fileprintout.cpp分别提供串口调试、文件保存、文件打印的功能;另一个下属Qextserialbase.cpp为第三方编写的串口通信的底层驱动文件。

信号和槽用于两个对象之间的通信,信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出特征[2]。比如,点击按钮“关闭窗口”就会发出一个信号,对应的槽函数close()会被调用以响应这个信号。这种机制使部件与部件,部件与后台,部件与其他窗口,窗口与窗口之间可以进行交流。

在Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等[2,5-6]。比如,对数据进行指定删除,在数据区设定点击鼠标左键事件,使点击左键时显示标签变红,后台的相应变量发生变化。

4 系统通信

上位机和分析仪采用RS232/DB-9串口通信。软件中控制串口通信的类QextserialPort继承自Qextserialbase类,适用于各种操作系统。

读取数据时采用查询模式,上位机软件向分析仪发出信号,如果数据准备好则直接读取,须注意的是这种读取方式需要设定定时器进行延时读取。

5 系统升级

系统的软硬件都可以进行升级。比如传感器、单片机的算法、串口通信改为USB接口,实验原理升级为动画演示、增加数据库和网络功能等。

数据库与网络功能,对于网络规范化和实验平台管理具有重要意义。Qt的QIODevice、QTcpServer、QIOStream等类可以实现网络上传功能;Qt中的QtSql模块提供了对数据库的支持[2],不需要SQL[8]知识就可以浏览和编辑数据库。

6 结束语

系统具有通用特性,采用的智能接口电路,有很强的兼容性,可适应不同种类的传感器[9]。在一个实验平台上,如:温度、湿度、速度与亮度等物理参量都可以进行数字化的处理与分析。以压力测试为实例介绍的系统设计和实现的方法,对于其他实验也适用。Qt强大的GUI设计功能,可以使界面根据不同实验灵活调整。在Qt环境下开发的软件具有跨平台性,且人机界面友好,操作简便,避免了传统试验方法繁琐的记录和处理的过程,提高了实验的精度和学习的效率。

[1] Blanchette J,Summerfield M.C++GUI Qt4编程[M].2版.北京:电子工业出版社,2008.

[2] 霍亚飞.Qt Creator快速入门[M].北京:北京航空航天大学出版社,2012.

[3] 高光天,徐振英.数模转换器应用技术[M].北京:科学出版社,2000.

[4] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.

[5] 蔡志明.精通Qt4编程[M].2版.北京:电子工业出版社,2011.

[6] 成浩,卢紫毅.Linux窗口程序设计——Qt4精彩实例分析[M].北京:清华大学出版社,2008.

[7] 皮德常.C++程序设计教程[M].北京:机械工业出版社,2009.

[8] 史嘉权.数据库系统概论[M].北京:清华大学出版社,2006.

[9] 王文龙,耿直,乔江辉,等.压力传感器静态校准方法改进[J].火箭推进,2011(3):80-84.WANG Wen-long,GENG Zhi,QIAO Jiang-hui,et al.Improvement of static calibration method for pressure sensors[J].Journal of Rocket Propulsion,2011(3):80-84.

猜你喜欢

串口部件单片机
浅谈AB PLC串口跟RFID传感器的通讯应用
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
基于Siemens NX和Sinumerik的铣头部件再制造
部件拆分与对外汉字部件教学
USB接口的多串口数据并行接收方法探索
水轮机过流部件改造与节能增效
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
Microchip推出两个全新PIC单片机系列