基于ARM和WiFi的测试系统手持终端的设计
2013-08-13张志杰轩志伟
张 霞,张志杰,轩志伟
(中北大学信息与通信工程学院,山西 太原 030051)
责任编辑:薛 京
目前大多数数据采集系统都是在PC平台下设计人机界面与采集设备进行通信,这种系统存在户外做实验不易于携带、成本高等缺点,针对这一情况,本文设计了在ARM硬件平台下的图形用户界面。
Linux操作系统具有开源、稳定且便于移植到嵌入式设备的优点,在Linux下设计人机交互界面的需求越来越多。嵌入式系统对图形用户界面的基本要求包括轻小、占用资源少、高性能、高可靠性以及可配置等特点[1]。本文提出了采用ARM为硬件平台和嵌入式Linux系统为软件平台,并在此基础上采用Qt设计了一款实用、灵敏的图形用户界面。
1 系统总体设计
数据采集系统的基本框图如图1所示。
本数据采集系统的设计总体由4个部分组成:
1)数据采集设备:被测信号经过传感器并通过模拟调理电路的放大、滤波等处理,得到的信号经过数据采集卡转换成数字信号并且存储在数据采集设备中。
2)人机交互:在Linux平台下使用Qt软件设计界面,主要显示的内容有设置参数、参数回读、数据读取和波形显示。这部分由ARM9开发板及触摸显示面板完成。ARM9开发板选用天堑公司的TQ2440,TQ2440开发板采用的是 S3C2440AL的 CPU,板载 64 Mbyte SDRAM、256 Mbyte Nand Flash和2 Mbyte Nor Flash,板上集成4线电阻式触摸屏接口,直接连接东芝3.5 in(1 in=2.54 cm)电阻触摸屏作为显示控制面板。
3)USB通信:采用FIDI公司推出的FT245RL芯片,完成FT245芯片在ARM9平台下Linux USB驱动的设计和移植。
4)WiFi模块:本系统采用WM001S WiFi模块,集成微控制器(MCU)和IEEE802.11 b/g 2.4 GHz无线射频收发芯片为一体。模块部分的射频电路已经通过出厂校准测试,客户能够根据自己的需求来设计接口电路和进行二次开发。WM001S模块提供一种简单、低成本、可靠的WiFi网络产品设计方案。本模块内置完整的TCP/IP协议栈,支持 TCP/UDP/ICMP/ARP/DHCP/DNS/HTTP协议,此外还支持基于超级命令的Socket编程接口。
本系统无线模块作为服务器集成在数据采集设备中。两者之间都是通过串口连接,操作简单方便。通过串口调试工具设置好无线模块的参数,包括网络名称、IP地址、协议类型、连接类型及目的地址和端口等。
2 系统的软件设计
本系统采用嵌入式Linux作为操作系统,在Linux平台下编写驱动程序和应用程序,采用Qt设计人机交互界面。应用程序的主要功能有,通过发送指令来控制数据采集设备的参数,并且通过参数回读功能来验证设备工作是否正常且参数设置是否成功。读取采集设备中的数据,存储到二进制文件中,再进行读取并且通过波形显示出来。本系统的软件结构图如图2所示,软件开发主要有3个内容:开发工具和关键技术、USB驱动程序的设计和应用程序的设计。
图2 数据采集系统软件结构图
2.1 开发工具和关键技术
系统以Qt软件为开发平台,采用TCP协议实现Socket通信。
TCP是一种可靠的、面向连接、面向数据流的传输协议,为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机。因此,对可靠性要求高的数据通信系统往往使用TCP协议传输数据,但在正式收发数据前通信双方必须建立连接[2]。
TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpS-erver类编写服务器端程序。在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,可以关联这个信号到槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,可以关联此信号,进行数据的接收。本系统的应用程序采用客户端的模式编写[3]。
2.2 USB 驱动设计
本次设计选用FTDI公司开发的USB芯片FT245RL来连接ARM开发板和数据采集设备,该芯片具有功能强大、体积微小、传输速度快、易于与微处理器接口等特点。由于FTDI公司没有推出支持ARM的Linux USB驱动,因此必须先设计支持ARM和Linux的USB驱动[4]。
USB驱动属于字符设备驱动,USB驱动属于字符设备驱动,通过module_init()函数进入驱动程序,完成初始化加载,注册USB设备,申请USB设备标示号等。不同厂商不同型号的USB芯片的VID和PID是不同的,通过VID和PID的值来识别设备。FT245RL芯片的VID=0x0403,PID=0x6001。
设计步骤如下:根据Linux的内核源码中的USB驱动的框架程序“/drivers/usb/”下的 nousb-skeleton.c文件,来修改编写ft245的驱动程序,修改好的驱动文件ft245.c文件放在/drivers/char/目录下;接下来通过修改同目录下的“Kconfig”和“Makefile”文件,完成内核源码对ft245驱动支持;在终端运行#make menuconfig完成内核配置,使用#make SUBDIR=drivers/char/modules,编译出驱动模块。这时候可以在drivers/char/下找到ft245.ko文件;将其传送给开发板,使用insmod ft245.ko命令进行动态加载。这时便可进行ARM和数据采集设备的通信。
2.3 应用程序开发
本数据采集系统的应用程序基于Linux平台,采用Qt的开发环境Qt Creator完成开发,最后在已搭建好的开发环境中编译得到可执行文件,并将其移植到制作好的根文件系统中,重新制作yaffs格式的文件系统镜像后烧写到开发板,即可运行添加的应用程序。
2.3.1 控制界面的设计
Qt/Embedded编程既可以图形化编程,也可以以传统代码编程[5],本设计采用二者相结合的方式编程:通过派生自QWidget的QMainWindow的子类化来实现主窗口的创建,再在工程中通过新建Qt Designer Form Class来实现“设置参数”和“参数回读”两个子窗口的创建;“波形显示”窗口选用传统的代码编程完成坐标和数据波形的绘制。通过Qt特有的信号与槽(signal/slots)机制实现在主窗口调用其他的子窗口。主窗口的设计如图3所示,子窗口的设计如图4所示。
图3 主窗口界面(截图)
图4 子窗口界面(截图)
2.3.2 后台处理程序
后台处理程序的内容主要包括USB和WiFi两部分,分别实现了设置参数、参数回读、数据存储和波形显示的功能。
1)设置参数:选择性地对数据采集设备发送参数设置控制指令,这些指令包括采样频率、触发电平、放大倍数、负延时点数和数据长度。
USB部分程序中的主要函数如下:
无线部分程序中的主要函数如下:
2)参数回读:通过对数据采集设备发送相应的控制指令来读取设备发送回来的数据,通过ui->label->setText(tr(“相关参数”))语句,显示到ui文件的标签Label中,从而可以判断设备是否正常工作,且设置参数是否成功。
3)数据读取:通过发送指令到数据采集设备,读取设备发送回来的数据并且以二进制形式存储数据到文件中。在Qt中往文件中写数据使用QFile类和QDataStream类,主要实现程序如下:
4)波形显示:使用QPainter类完成坐标和数据波形的绘制。QPainter既可以绘制几何图形,又可以绘制像素映射、图像和文字[6]。先在头文件中声明重绘事件函数、初始化界面函数和坐标设定的函数,再在draw.cpp文件中对这些函数进行重定义,分别为:void Draw::paintEvent(QPaintEvent*e),void Draw::initInterface()和 void Draw::resizeEvent(QResizeEvent*e)。实现读取二进制文件中的数据,并且绘制成波形的功能。
3 系统应用效果验证
在开发环境内交叉编译编写的应用程序,得到可执行的二进制文件,将此文件植入制作的带有Qt库的文件系统中并进行编译,将裁剪、编译过的内核与该文件系统烧写到开发板,即可实现应用程序的发布。图5为从300 m远处控制采集设备,读取冲击波压力数据并在波形显示这一子窗口显示的波形。
图5 运行结果显示(照片)
4 结束语
本设计能很好地实现人机交互功能,已经不是传统的PC机端上位机软件,相比于笔记本,该系统体积小、重量轻、可便携,当通信受到限制时,可调整通信距离,使无线传输性能达到最佳。实验证明,在室外空旷环境下,通信距离可达300 m,接收到的数据准确率达100%,该数据采集系统稳定可靠、切实可行、具有实际应用价值。
[1]陈曦,刘增强.基于Qt/Embedded嵌入式控制界面的设计[J].化工自动化及仪表,2011,38(9):1131-1132.
[2]姚娟,张志杰.基于LabVIEW和TCP的数据采集系统设计与实现[J].电子技术应用,2012,38(7):72-74.
[3]郑阿奇,陈超.Qt 4开发实践[M].北京:电子工业出版社,2011.
[4]曾强,赵娟.基于FT245的Linux USB驱动的设计[J].光电技术应用,2011,26(1):70-73。
[5]吴迪.零基础学 Qt4编程[M].北京:北京航空航天大学出版社,2010.
[6]BLANCHETTE J,SUMMERFIELD M.C++GUI Qt 4编程[M].闫锋欣,曾泉人,张志强,译.2版.北京:清华大学出版社,2010.