您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 2002年全国大学生电子设计竞赛嵌入式系统专题竞赛
2002年全国大学生电子设计竞赛——嵌入式系统专题竞赛一等奖数据通信和数据存储系统设计北京航空航天大学电子信息工程学院张展作品概述电子飞行仪表系统(EFIS/ElectronicFlightInstrumentSystem)是一种近几年才发展起来的先进的航空电子仪表系统,它是现代电子技术、计算机技术、显示技术飞行控制技术和理论结合的产物。它的基本原理是通过机载计算机,收集来自飞机上各种传感器的数据,经过加工处理后,以动态图形和数据的方式在液晶显示屏(LCD)上显示,给飞行员提供飞行所需的飞行、导航以及飞机系统的信息。电子飞行仪表系统是航空电子综合系统最重要的组成部分.相对于传统的机械或机电式仪表,电子飞行仪表系统有很多的优点。首先,它实现了综合显示,减少了仪表的数量,使飞机仪表板布局简洁,便于观察,提高了作为人机接口的仪表系统的可读性。其次,它的数据传输、处理和显示部分都是数字化的,不会带来附加的系统误差,显示精度很高。再次,由于采用固态器件,提高了其寿命,可靠性,随着电子元器件价格的不断下降,在市场上电子飞行仪表系统将比机电式仪表系统更有竞争力。电子飞行仪表系统虽然在国外开始应用于军用飞机和某些大中型民用飞机上,但是在国内,由于种种原因,我国尚无自行研制的电子飞行仪表系统。作为中国航空航天的最高学府—北京航空航天大学的学生,我们希望能通过我们的努力,改变这一状况,尽快缩小与发达国家的差距.所以我们小组的三个成员一致同意在航空电子领域选题。根据2002年全国大学生电子设计竞赛——嵌入式系统专题竞赛的要求,我们利用竞赛组委会所提供的JingWei板,设计开发了嵌入式电子飞行仪表系统。JingWei板是一块基于IntelSA-1110处理器的嵌入式系统开发板。它的核心——IntelSA-1110CPU是一款高性能的面向移动设备和嵌入式应用的微处理器,包含了指令集和数据缓存、MMU、存储控制模块和外围控制模块,具有高性能、低功耗的特点。同时,它还拥有丰富的外围设备资源,特别是它有一块5.7〞TFTLCD(分辨率为320×240),使得它无论是在运算能力、显示效果,还是在功耗、体积上都很适合用来研制开发电子飞行仪表系统。电子飞行仪表系统分别由电子综合显示和告警系统,飞行数据采集系统、数据通信及存储系统、信号调理系统组成。如下图所示。图1电子飞行仪表系统构成框图从上图可以看到飞机上的各种参数通过传感器和信号调理系统处理后,转换成采集系统能接收的模拟信号。采集系统将模拟和数字信号都转换成一定格式的数字信号后,由通信系统传送给显示系统,显示告警系统将得到的飞机各种数据通过图形的方式显示在LCD上,同时也对数据进行分析,如果有异常情况,就发出不同程度的警告。有关信号调理系统及飞行数据采集系统的相关细节请参看《飞行数据采集系统软硬件设计》,电子综合显示及告警系统请参看《软件结构的设计与实现》。数据通信及数据存储系统概述在对飞机进行飞行控制的过程中,飞行员要根据各个传感器和GPS等仪器不断实时提供的飞机位置、姿态等各种飞行参数,操纵飞机按任务飞行。因此,要求在系统的设计上,必须能够给飞行员提供直观与完备的可视化界面。在飞行数据可视化之前,首先应对它们进行采集、提取。数据通信和接口部分实现了由通信接口读入编码数据,将数据译码为我们所规定的有效的格式后,转换成可供计算机程序直接调用的变量值等功能。我们将读入的数据通过程序转换为有效格式后,存储在全局对象中。这就使其他模块可使用当前的数据帧。一旦成功的实现了软件和硬件通信部分,飞机的飞行参数就可以成功的采集到计算机,有了这些飞行参数,便有了实现图形显示的最根本的基础。作为数据存储功能的黑匣子是飞机专用的电子记录设备之一,飞机各机械部位和电子仪器仪表都装有传感器与之相连。它能把飞机停止工作或失事坠毁前数小时的有关技术参数和驾驶舱内的声音记录下来,需要时可根据记录的参数来进行飞行实验和事故的分析。很多空难的原因都是通过黑匣子找出来的,因此它就成了事故的见证,从而避免同样事故发生,更好地采取安全措施。电子飞行仪表系统在工作过程中,需要实时更新包括本机的空速、密度高度、离地高度、航向角、升降速度、俯仰角、倾斜角等各种数据,以及从母机传送来的其他子机的各种位置、速度信息,这些信息对飞行员都有极为重要的参考价值。所以,保证数据的实时、完整和准确,是数据通信和数据存储设计时的重点。数据通信的方案设计为了制定一套完整可靠的数据通信方案,我们分别从硬件平台、物理接口、编程方式等方面进行考虑,由外及内,由“硬”及“软”,层层深入地进行分析论证。一、硬件平台根据我们所提出的基于JingWei的电子飞行仪表系统的性能与指标,在经过了不断讨论和调研之后,我们最终对硬件平台提出了以下两套实现方案:方案一利用JingWei板子板,在此基础上为其设计专门的硬件电路,外加上LCD显示器来实现整个电子飞行仪表系统。图2方案一自行设计的电路板直接用于传感器数据的采集处理,整个系统都由JingWei板子板进行控制,LCD显示器显示图形画面。方案二直接利用JingWei板母板和子板,加上自己设计的外围电路硬件来实现整个电子飞行仪表系统。图3方案二方案一除了核心的子板系统外,其他电路部件都是自行设计,在系统的硬件结构上有较大的自由发挥的空间,但是由于工作量太大,很多工作都是重复JingWei板母板的开发,没有充分的利用JingWei板的有效资源,而且制作风险过大。方案二的优点在于可以充分利用JingWei板的一切资源,使我们能将主要精力集中在解决电子飞行仪表系统的各种技术难点上,而且风险较小。综合以上的分析,我们选择了方案二。方案二采用独立于JingWei板的外围应电路,所以很重要的一点就是要解决与JingWei板和母机之间的数据传输问题。由于飞机仪表数量多,电子飞行仪表系统又对实时性要求非常高,所以数据流量很大。无论是外围电路还是JingWei板都需要稳定、快速的进行沟通,这是整个系统设计的难点之一。二、物理接口硬件平台确定后,我们来决定使用何种接口。方案一使用USB接口进行通信。方案二使用RS-232串口通信方式。USB是一种很好的PC机互连协议,它使外设到计算机的连接更加高效、便利。这种接口适合于多种设备,具有快速、即插即用、支持热插拔的特点,能同时连接多达127个设备,解决了如资源冲突、中断请求(IRQs)和直接数据通道(DMAs)等问题。而RS232是单个设备接入计算机时,常采用的一种接入方式,其硬件实现简单,因此在传统的设备中有很多采用了这种通信方式。RS-232串口通信是一种成熟的通信方式,选择串行口进行通信,既节省了开发软硬件使用的时间,又降低了系统的复杂程度,并且通常情况下不会出现数据丢失的现象,考虑到本次竞赛规定的开发时间短,后期更要进行大量的测试从而整理出完整的设计报告,所以还是选用了我们相对熟悉、使用更方便安全的RS-232串口通信方式。三、串行通信读写方式串行通信的读写方式多种多样,我们应从电子飞行仪表系统对数据实时、准确和完整的要求进行考虑。串行通信读写分为查询方式、同步I/O方式,异步I/O方式(重叠I/O方式)和通信事件方式。查询方式与同步I/O方式在应用上几乎是相同的。同步I/O方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。如果所规定的待读取数据的数目较大且设定的超时时间也较长,而接收缓冲区中数据较少,则可能引起线程阻塞。解决这一问题的方法是检查COMSTAT结构的cbInQue成员,该成员的大小即为接收缓冲区中处于等待状态的数据的实际个数。如果令接受长度的值等于COMSTAT。cbInQue,就能较好地防止线程阻塞。异步方式虽然可以随时从读写函数中返回,更有效地防止了线程阻塞,但是传输效率与同步方式比要低很多。在WINCE串口编程中,并不支持异步方式,既重叠I/O方式,但可以使用多个线程来执行同样类型的重叠操作。当主线程忙的时候,可以运行单独的线程来处理同步I/O操作,效率仍然不高。通信事件是当重要事件,例如串口接收到数据、检测到振铃等事件发生时,才调用读写函数的方式。通过等待表示数据到达的通信事件,应用程序可以避免因调用ReadFile函数等待数据到达而阻塞串行口。在我们设计的系统中,数据流是源源不断地从数据采集板发送至JingWei板的,所以一般不会因为等待数据的情况而发生阻塞,又由于对传输效率的要求高,所以选择同步通信方式。四、线程使用在WIN32系统中,多任务是指系统可以同时运行多个进程,每个进程也可以同时执行多个线程。每个进程都具有自己私有的虚拟地址空间。每个进程都有一个主线程,还以建立另外的线程。进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分。可以把线程看成是操作系统分配CPU时间的基本实体。系统不停地在各个线程之间切换,系统为每一个线程分配一个CPU时间片,某个线程只有在分配的时间片内才有对CPU的控制权。所以,同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫秒左右),所以看上去好象是多个线程在同时运行。进程中的所有线程共享进程的虚拟地址空间,所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。虽然在进程中进行费时的工作不会导致系统的挂起,但这会导致本进程的挂起。在电子飞行仪表系统中,调用一次串口数据处理函数的整个时间非常短,且由于图形主界面刷新率并不高,不需要另开线程频繁地处理串口数据,只需在每祯图形刷新前调用来更新数据即可。这样做反而节省了CPU资源,不会被多余的线程切换和数据计算浪费掉,同时也不会出现资源冲突的情况。五、开发环境应用程序开发环境为EmbeddedVisualC++。使用API函数直接编写WIN32程序,这样不仅大大提高了编译效率,减小了目标程序的大小,同时C语言也具备强大的开发底层设备驱动的能力,程序执行速度更快,更加符合嵌入式系统实时性的高水平要求。当我们自行裁减WindowsCE模块后,很多的MFC类库所封装的函数将不会被包含在SDK(软件开发包)中,因此我们放弃了MFC(微软基础类库)而直接使用API(应用程序接口函数)编写。另外,使用API方式编码所编译出的代码会更加的精简。基于以上分析,我们最终的通信系统整体方案是:通过RS-232标准串行接口连接JingWei板和数据采集板;在EVC下使用WINCEAPI函数直接编写同步I/O方式的串口通信程序;使用19200BPS的速率以达到速度和稳定性的平衡。数据通信的实现一、建立联系和读取原始数据WinCE环境下提供了完备的API应用程序接口函数,通过这些函数控制通信硬件接口。通信函数是中断驱动的:发送数据时,先将其放入缓存区,串口准备好后,就将其发送出去;传来的数据迅速申请中断,使Windows接收它并将其存入缓冲区,以供读取。在开始通信前,首先要初始化串口(包含选串口、设置串口掩码、设置缓冲区大小、设置波特率等串行参数),在程序中,我们缺省的端口是Com1。WinCE系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都使用API函数CreateFile来创建和打开。因此可以使用CreateFile函数来打开串行端口设备:由于WindowsCE不支持设备的重叠I/O,因此不能传递FILE_FLAG_OVERLAPPED标志。当不成功时,返回句柄INVALILD_HANDLE_VALUE,反之返回打开的串行端口句柄。调用GetCommState函数和SetCommState函数,可以对串口的速率,校验,停止位,流控制等信息进行设置。用COMMTIMEOUTS结构定义一个通信超时值,使用GetCommmTimeouts和SetCommTimerouts函数设置超时值。由于系统要求实时性,所以ReadTotalTimeoutConstant既读超时设置为0。读串行端口:可以使用ReadFile函数进行读串口缓冲区的操作。每次
本文标题:2002年全国大学生电子设计竞赛嵌入式系统专题竞赛
链接地址:https://www.777doc.com/doc-3105749 .html