基于ARM的分布式干扰机控制单元设计
2015-12-18张玲瑜
徐 彤,张玲瑜
(1.西安电子科技大学电子工程学院,陕西西安 710071;2.北京交通大学机械与电子控制工程学院,北京 100044)
目前常见的干扰机一般都采用上位机作为控制单元,优点是接口和整个单元开发均较为方便,但缺点是无法脱离计算机独立工作。本文采用ARM及大尺寸触摸屏作为平台开发的分布式干扰机控制单元,ARM与干扰机可集成为一体,具有携带方便、稳定性高、成本低、功耗小、可移植性好等优点[1-2]。
设计的分布式干扰机由两套干扰机构成,实现对雷达的分布式协同相干和非相干干扰。两套干扰机在软硬件上均采用相同的设计,其组成结构如图1所示。
1 系统硬件设计
1.1 硬件平台的选择
如图1中,ARM控制单元所用平台为友善之臂公司推出的Micro2440开发板,特点如下:
(1)采用 Samsung S3C2440为微处理器,主频400 MHz,并采用专业稳定的 CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。
图1 干扰机组成结构
(2)支持Thumb/ARM双指令集,能很好地兼容8位/16位器件,大量使用寄存器,寻址方式灵活简单、指令执行速度更快、效率更高。
(3)是第一款统一采用支持EABI标准交叉编译器的开发板(EABI是ARM结构下的一个编译规范和标准,而只有符合EABI标准的编译工具编译出来的目标文件才是互相融合的,这对于后期开发程序进行交叉编译以及移植尤为重要),而其他同类开发板仍在使用拼凑的各个版本的编译器,会导致开发效率不高,可移植性不好。
(4)拥有4个通过USB HUB芯片扩展的USB Host以及1个USB Slave。其中4个USB Host接口和普通PC的USB接口相同,可以接常见的USB外设,这对于开发过程中需要暂时外接键盘鼠标进行系统测试提供了便利;而USB Slave的主要作用是下载Linux内核至开发板中,以及系统一但崩溃可通过其进行快速恢复。
综上所述,Micro2440是一款实用的ARM9开发板,系统稳定性好、主频高、运行速度快,可减少软件开发时间,外围设备资源丰富,从而降低系统的复杂度、减少系统成本。所以最终选择Micro2440作为系统的硬件平台。
1.2 SPI驱动的开发
设备驱动是操作系统的一部分,一般情况下操作系统并未给各种类型的硬件提供设备驱动程序,而操作系统在无设备驱动的支持下无法正常控制硬件。所以要结合系统具体的硬件情况开发设备驱动。
Micro2440的SPI接口可以进行串行数据传输,它包含SPI0和SPI1两个SPI接口,每个接口分别有两个8位数据移位器用于数据的接收和发送,数据同时进行发送和接收。
SPI驱动的添加通过编译内核实现,它与内核一同启动。SPI驱动在被加载时,先调用init_module(),该入口点函数用来初始化设备驱动程序,其一个重要功能是往内核中注册此设备,完成注册则需要调用register_chrdev()。
该设备成功注册后,会得到自定义的次设备号以及系统为之分配好的主设备号,其中,主设备号用来反映设备类型,次设备号则用于区分同类型的设备,同时和文件系统建立联系。嵌入式设备驱动程序在卸载时,要回收系统相应资源,这里调用unregister_chrdev()来复位设备的相应寄存器,同时从内核中注销此设备。而系统调用就是对相应设备进行操作,如调用open、read、write以及ioctl等,以供用户应用程序使用。图2描述了嵌入式设备SPI驱动程序在内核中的注册、卸载与系统调用的全过程。
图2 SPI驱动在Linux内核中的注册、卸载与系统调用过程
一般SPI驱动可分为:设备的注册与注销、打开与释放、读写、控制以及中断和轮询处理等一系列操作。基本的SPI驱动主要操作是一个内核数据结构file_operations,通过该结构为文件系统提供入口点函数,即访问设备驱动程序的函数,该结构在<linux/fs.h>文件中被定义,里面包含了一组函数指针成员,该结构每个成员的名字都与一个系统调用相对应。字符设备可用文件系统节点进行访问,如/dev/fps200。file_operations用于在设备号与设备驱动之间建立连接,它的结构中的每一个成员即函数指针都须指向设备驱动中具有特定功能的函数,若不支持该操作,可将其设置为NULL。
1.3 RS232接口设计
S3C2440集成了3个串口 UART0、1、2,文中用到的是UART0。UART0作为标准串口通信,与主机相连用于系统调试、超级终端控制和文件收发。图3为S3C2440与RS232信号连接图,其中MAX3232SOP作为串口UART0使用。
图3 RS232接口电路
1.4 SD卡接口电路设计
SD卡有两种总线模式,即SD模式和SPI模式。SD模式采用4根数据线传输数据,数据传输快,但协议相对复杂。SPI模式采用1根数据线传输数据,传输速度相对较慢,但传输协议与操作简单。系统采用SD模式进行数据传输。SD模式下,SD卡的9个引脚分别是命令、时钟、3个电源以及4个数据输入输出引脚。SD卡通过卡座与主控制器相连,由于S3C2440提供了专用的多媒体卡接口,简化了SD卡与S3C2440的硬件连接。具体的信号连接图如图4所示。
图4 SD卡信号连接图
2 Qt界面设计
在 Qt3.3.8 版本下[3-4],根据分布式干扰机的功能需求,以及ARM开发板触摸屏的尺寸综合进行设计。考虑到显示屏大小的限制,以及各功能模块的区分,设计了转发控制、显示控制和调相控制3个选项卡,每个选项卡中的编辑项与显示项相互独立。其中转发控制选项卡中主要是ARM控制系统对分布式干扰机的配置参数,如图5所示。显示控制则主要用于显示干扰机测量或计算出的内容,调相控制是对多个假目标角度的配置,这里只截取了转发控制选项卡的界面截图。而对于加密方案配置项,一直需要显示的主机号项,以及随时可能操作的设置及退出按钮,独立于3个选项卡之外,会始终显示在界面上。
图5 转发控制选项卡界面
在图形界面编程中,多数时候需要对某些“事件”进行处理。例如,当用户点击某个按钮时,应用程序便开始执行某种操作。在Qt开发中,通过一种被称为“信号和槽”的机制来实现对象间的通讯。信号和槽机制,即当一个特定事件发生时,一个或几个被指定的信号就被发射;槽即一个返回值为void的函数,如果存在一个或几个槽和该信号相连接,那么在该信号被发射后,这个(些)槽(函数)就会立刻被执行。
由于设计的控制单元采用大尺寸触摸屏,而触摸屏性能的调试是个重要问题,因为电磁噪声的缘故,触摸屏容易存在点击不准确、抖动等问题。因此一般都要移植一个tslib来配合,在用户层对触摸屏的数据进行滤波和矫正,同时也可给应用程序一个统一接口。tslib能为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一接口。在PC端的界面设计完成后,后期修改流程如图6所示。
图6 界面后期修改流程图
经过上述步骤,将编译好的可执行文件拷贝至开发板的opt/Qtopia/bin目录下,将.desktop桌面文件拷贝至opt/Qtopia/apps/Application目录下。重启开发板,就可以在ARM触屏的桌面应用上看到编写的应用程序图标,点击运行就可以初步看到效果。
3 软件功能设计
通过以上工作,可以在ARM开发板上看到整体的界面效果,但要实现该ARM控制单元的功能,还需要在界面程序中添加和修改代码。
3.1 参数设置及数据的发送
首先对所要发送的数据进行采集并打包。在发送数据之前,还需对已开发成功的SPI做配置。在SPI发送数据时,有4种模式可供选择:(1)CPOL=0,CPHA=0。(2)CPOL=0,CPHA=1。(3)CPOL=1,CPHA=0。(4)CPOL=1,CPHA=1。4种情况分别为MODE0、MODE1、MODE2、MODE3,其中 CPOL 指时钟信号的极性,表示当时钟信号空闲时,其电平值为低电平0或高电平1。CPOL=0,时钟空闲时为低电平,所以当时钟信号有效时,即为高电平;CPOL=1,时钟空闲时为高电平,所以当时钟信号有效时,即为低电平。CPHA指时钟信号的相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应第一个边沿,1对应第二个边沿。
图7 SPI数据发送模式
在本干扰机控制单元通信协议中,是采用模式MODE3。除了要对SPI发送数据的模式设置之外,还要设置SPI模式可写可读、SPI的bit/word可写可读、SPI的波特率可写可读等。将参数设置完成后,按照通信协议的约定,将界面信息对应成相应的数据,每8 bit为一组,每个word共16 bit进行发送即可。
3.2 SD卡存储功能的设计
分布式干扰机在实际使用中,有时需要对设置的某些重要信息进行保存,所以利用Qt中的两个易于合并使用的类:QFile和QDataStream。QFile对象表示磁盘上可读取和写入的文件。QFile是代表多种不同设备且应用更广的QIODevice类的子类。QDataStream对象用于按顺序排列二进制数据,以便储存在QIODevice中并供以后检索。读取或写入QIODevice就如同打开数据流,然后读取或写入一样简单,只是参数为不同的设备[5-6]。
3.3 定时功能的设计
对于实际使用中的干扰机控制单元,需要发送干扰数据时,在界面上进行相应设置,即可直接发送。但是更多时候需要做的是读取并显示干扰机从环境中测到的数据,可以通过点击界面上的更新按钮,但是无法实时更新,所以这里设计一个能够定时自动更新界面信息功能是必要的。定时功能主要利用 Qt中的QTimer类,其核心程序如下:
internalTimer=new QTimer(this);
connect(internalTimer,SIGNAL(timeout()),SLOT(ReadStatus()));
internalTimer→start(autostartTime);
除此之外,在整个程序中的某些功能函数中,还要加上internalTimer→stop();这行令定时器关闭的代码,原因是在有些界面参数进行设置后或读取并显示后,暂时无需定时读取功能,所以就需关闭定时功能,待需要时再通过internalTimer→start(autostartTime)打开定时器即可。
当整个程序的功能全部设计完成后,进行整体测试,流程如图8所示,开机后,ARM会自动启动干扰机控制单元界面,并开始计时。当定时时间到,ARM单元会读取FPGA中的主从装置标志位并进行显示,若读到从机,则将FPGA中的信息显示到界面中;若为主机,直接读取FPGA延迟量更新标志位。若为更新,则表示FPGA有新信息,需要点击设置将当前界面更新为最新参数,然后开始重新计时。
图8 干扰机控制系统工作流程图
3.4 运行测试
对设计好的分布式干扰机控制单元进行测试,按照与FPGA的通信协议,ARM界面信息转化为数据后,每8位一组,两组为一个信息单元进行传送。反之,当FPGA对ARM发送数据时同理对数据进行解析。利用FPGA的逻辑分析仪对发送与接收的数据进行采样,结果如下图9所示。
图9 测试结果
图9中,SCLK_BUF为时钟信号,每8个时钟脉冲为一个时钟周期;SDI为 ARM发送的数据,SDO为ARM接收的数据;ADDR_SPI与DATA_SPI为ARM发送数据的低8位与高8位。从图中可以看出,ARM端发送的数据依次为 00h,00h,01h,00h,02h,00h,03h,00h……。在FPGA一端,收到的数据同样是00h,00h,01h,00h,02h,00h,03h,00h……,其中 ADDR_SPI的数据就是收到数据的奇数项,其中DATA_SPI的数据就是收到数据的偶数项。同时,在第3个有效脉冲周期到达时,ARM控制单元接收到来自FPGA的数据,这个数据解析后反映到ARM界面即为装置属性选项,界面会自动响应将装置属性选项设置为主装置。
综上所述,表明ARM控制单元能够按需求向FPGA发送相应的数据,同时能够正确接收来自FPGA的数据并进行自动解析,实现了该分布式干扰机ARM控制单元的功能。
4 结束语
以友善之臂公司的Micro2440开发板及7寸触摸屏为平台,S3C2440为主控单元,开发了ARM的SPI驱动,设计了分布式干扰机的控制单元,并进一步优化了该控制单元的实用性。该控制单元具有成本低、功耗小、功能可扩展、适用性强、便于移植等特点,具有较好的通用性。
[1]郑杰.ARM嵌入式系统开发与应用完全手册[M].北京:中国铁道出版社,2013.
[2]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.
[3]Jasmin B,Mark S.C++GUI Qt 3编程[M].2版.闫锋欣,曾泉人,张志强,译.北京:北京航空航天大学出版社,2006.
[4]吴迪.零基础学Qt 4编程[M].北京:北京航空航天大学出版社,2010.
[5]李彬.Linux Qt GUI开发详解[M].北京:北京航空航天大学出版社,2013.
[6]SOBELL,MARK G.Linux实用指南[M].6 版.李洋,王明,译.北京:电子工业出版社,2013.