《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > ARM+FPGA设备的人机界面数据交互设计与实现
ARM+FPGA设备的人机界面数据交互设计与实现
2015年微型机与应用第9期
吴向臣,吴茂林
(海军工程大学 兵器工程系,湖北 武汉 430033)
摘要: 目前对装备检测设备的实时性、可视化的要求越来越高。嵌入式技术的应用,使检测装置变得可靠、实用和便携。本文在OMAPL138嵌入式结构和Linux系统下,应用QTouch组态软件进行检测设备人机交互界面的开发。重点设计和分析Linux系统下与FPGA模块的数据交互机制,从而满足实时信息通信和检测的人机交互需求。
Abstract:
Key words :

  摘  要: 目前对装备检测设备的实时性、可视化的要求越来越高。嵌入式技术的应用,使检测装置变得可靠、实用和便携。本文在OMAPL138嵌入式结构和Linux系统下,应用QTouch组态软件进行检测设备人机交互界面的开发。重点设计和分析Linux系统下与FPGA模块的数据交互机制,从而满足实时信息通信和检测的人机交互需求。

  关键词: QTouch;人机交互;嵌入式LinuxARM+FPGA;数据交换

0 引言

  由于目前装备日趋信息化、智能化,装备运行或使用过程中涉及到的信号也越来越多,对于这些信号的采集和分析,有助于装备使用者了解装备的状态,及时维修维护,防患于未然。为了能更好更准确地检测出装备的一些关键信号,对检测设备提出了更高要求,既需要有超高的精度也需要有便捷友好的操作界面。以便于操作人员迅速上手,简化操作训练。本文根据实际设备人机交互的设计需求,结合硬件设备和QTouch组态软件设计了与FPGA硬件设备的数据交换机制,实现的人机交互界面直观、信息量大、便于操作。

1人机界面设计原理

  QTouch软件主要分为两个重要的组成部分,一是PC端的软件设计部分,二是嵌入式平台的运行部分。两者通过协议进行平台间通信,在PC端设计完成的应用程序通过ModbusTCP协议上传到嵌入式平台部分,上传完成后脱离PC端,在嵌入式平台上独立运行。其整体框架结构如图1所示。

006.jpg

  软件结构分为三层,分别是人机交互界面、数据库和底层设备驱动数据。在对底层硬件进行数据写入时,人机交互界面数据由操作人员通过手动输入的方式给定,并通过应用程序传入程序的实时数据库,实时数据库接收到数据后,驱动程序就可以调用实时数据库中的数据,对底层硬件进行数据写入。接收反馈数据时,由底层硬件检测到数据,再由驱动程序将其存入实时数据库,应用程序通过实时关联某个数据存储单元的数据,就可以实时地接收到硬件反馈的数据信息并显示在屏幕上。数据交互原理如图2所示。

007.jpg

2 界面与FPGA的数据交换机制

  2.1 数据类型

  研究数据交互的机制,首先需要确定数据的类型。当FPGA接收到设定时间参数后,并不能直接进行时间设定,因为数据接收端接收的数据类型并不是十进制的,所以不能将设定的时间信号直接传递到数据接收端,需要进行一定的数据编码。这里使用的是Hamming码[1]进行的数据编码信号。

  Hamming编码矩阵如下:

  6C9AFL%5}@K8Y](}I_~8KU7.png

  FPGA设备在接收到时间参数后,根据Hamming编码矩阵将原始的十进制数编码成二进制数码。重新编码后的时间参数通过FPGA端口以电信号的形式发送到数据接收端口。数据接收端口接收到时间参数后再进行解码。

  2.2 数据交互机制

  2.2.1 硬件设备、操作系统和人机界面的关系[2-4]

  嵌入式设备的设计都分为硬件设计部分和软件设计部分。硬件设计部分使用的是目前主流的FPGA+ARM结合的硬件结构,软件设计部分使用Linux操作系统,以及使用QTouch编写的人机交互界面,人机交互程序需要借助操作系统才能运行。Linux操作系统是连接硬件和人机界面的桥梁。三者关系如图3所示。

008.jpg

  2.2.2 设备驱动[2]

  设备驱动是关联操作系统和人机交互程序的桥梁。操作系统将输入的数据以文件的形式写入系统的特定文件中,人机交互程序通过调用驱动程序来读取这些设备文件即可得到想要的数据。人机交互程序使用统一的接口函数调用相应的硬件驱动程序,这些函数都是在设备驱动中定义好的。这组接口被称为系统调用。对于每一个系统调用,驱动程序中都有一个与之对应的函数,这些函数集合在一个file_operations类型的数据结构体中,file_operations结构体在Linux内核的include/linux/fs.h中定义。

  使用file_operations结构定义数据结构的程序代码如下:

  Staticstructfile_operationsarm_fpga_fops={

  .owner=THIS_MODULE,

  .open=arm_fpga_open,

  .write=arm_fpga_write,

  .read=arm_fpga_read,

  .ioctl=arm_fpga_ioctl,};

  将FPGA字符设备和arm_fpga_fops结构体进行关联。关联程序的代码设计如下:

  ret=register_chrdev(FPGA_MAJOR,DEVICE_NAME,&arm_ fpga_fops);

  if(ret<0)

  {

  prink(DEVICE_NAME”can′t register major number\n”);

  return ret;}

  程序头文件中定义FPGA_MAJOR为FPGA设备的主设备号,程序主函数中设置FPGA_MAJOR=0,由系统自动分配主设备号。DEVICE_NAME定义为设备名称。经过注册,主设备号就和具体的file_operations结构联系起来了,因此操作主设备号为FPGA_MAJOR的设备文件时,就会调用arm_fpga_fops中的相关函数。

  驱动程序通过操作设备文件来向硬件设备下发数据,为了解决设备文件的读取和写入问题,在软件设计中借助Linux操作系统中提供的两个重要函数:copy_to_user和copy_form_user。这是两个很重要也是经常被字符设备使用到的函数。它们定义在Linux系统内核的~/arch/arm/lib/usercopy.c文件中。定义形式如下:

  unsigned long  copy_to_user(void_user*to,const void*from,unsigned long n)

  {

  might_sleep();

  BUG_ON((long)n<0);

  If(access_ok(VERIFY_WRITE,to,n))

  n=_copy_to_user(to,from,n);

  return n;}

  unsigned long copy_from_user(void_user*to,const void*from,unsigned long n)

  {

  If(access_ok(VERIFY_WRITE,from,n))

  n=_copy_from_user(to,from,n);

  else

  memzero(to,n);

  return n;}

  copy_from_user()函数用于将用户给定的参数从用户空间到内核空间的复制。copy_to_user()函数完成数据从内核空间到用户空间的复制。在设备驱动中使用这两个函数,FPGA设备文件的数据和人机交互程序的数据之间就能进行相互复制,也就实现了两者的数据交换。

  这样,使用QTouch组态软件设计人机交互界面过程中,不需要编写复杂的实现代码,只需要将功能控件用类似于搭积木的方式构建在一起,由软件库文件调用相关函数。在程序设计过程中,不需要直接使用file_operations结构体中的操作函数编写代码。部分控件如图4所示。

009.jpg

  3实验及数据分析

  将人机交互程序写入硬件设备中,使用设计的实际设备对数据交互进行系统调试,验证程序的正确性。图5为系统调试图。

010.jpg

  由于时间参数的接收采用Hamming译码,数据进入FPGA以后会对时间装定参数进行信号编码。所以以下波形图测得数据是以Hamming码的形式显示的。

011.jpg

  假设设定数据为33.3 s,即十位、个位、十分位都为3(二进制0011)。时间设定界面如图6所示。

  实验设定的时间数据通过人机交互程序下发到FPGA外设中,再由FPGA进行编码转换。现在以十位数为例,对得到的波形图进行分析,如图7所示。由实验波形图得到十位上的Hamming码为0011101。通过查询Hamming码编码矩阵,得到Hamming码0011101对应数字3,可见实验测得的数据与编码矩阵数据完全吻合。用同样的方法对个位和十分位进行分析,Hamming码解码得到的时间参数与人机交互程序设定的时间参数完全一致(都是33.3 s),因此可以判断参数交互准确,程序设计达到预期目标。

012.jpg

013.jpg

  高电平载波信号实验误差分析如图8所示。显示的都是高电平调制的载波信号,该信号理论波形为正弦波,但是在本次实验中由于设备精度的限制,在测量显示时将载波信号的方波显示为正弦波形,但是这样的误差在实验的可允许范围之内,因此不会对实验的最终结论产生影响。

4 结束语

  本文基于QTouch的组态软件设计的应用程序,实现了与ARM+FPGA嵌入式系统底层硬件平台的数据交换,设计了友好的交互界面,并通过数据交换实验,检测验证了数据交换机制的有效性,满足设备的功能要求。本设计为设计功能更强更复杂的嵌入式设备打下了良好的理论和实验基础。

  参考文献

  [1] 雷斌,王宁,仇平.FPGA的汉明码数据传输系统的设计[J].西安工业大学学报,2009,29(6):559-564.

  [2] 宋宝华.Linux设备驱动开发详解(第2版)[M].北京:人民邮电出版社,2010.

  [3] 倪继利.Qt及Linux操作系统窗口设计[M].北京:电子工业出版社,2006.

  [4] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.


此内容为AET网站原创,未经授权禁止转载。