基于嵌入式遥控遥测警报系统控制中心的设计
2007-07-05颜颐欣吕实诚陈钢强
颜颐欣 吕实诚 陈钢强
摘要:设计是对原有的一种基于PC机平台的遥控遥测警报系统控制中心的改进。提出一种基于ARM硬件平台和嵌入式Windows CE.net操作系统的警报控制中心的原理设计。
关键词:嵌入式无线WindowsCE警报
中图分类号TP332.3文献标识码A文章编号:1002-2422(2007)03-0006-02
1系统框架结构
在本系统中,控制中心和终端控制器需要实现的主要任务都是数据传输和音频的处理,所以在硬件资源选择上,中心和终端可以使用同一套硬件设备。在系统组网时,只需在中心控制器和终端控制器上安装不同的应用软件即可完成系统要求。所以在设计开发中,一旦实现了控制中心的功能,也就是基本上完成了终端的设计任务。
2系统硬件软件资源的选择
2.1系统选择
为了能方便的实现音频的处理功能,加快系统的开发时间,选择Windows CE作为控制器的操作系统。虽然Windows CE是一个软实时的操作系统,但是完全可以满足本系统对实时性的要求。能使系统显示出很大的优越性。
2.2硬件结构
系统控制中心的CPU选择Intel@XSale PXA255微控制处理器它遵从ARM 5V.TE体系构架,运行速度高达400MHz,Intel超流水线技术和独特的动态功率管理技术,使她成为高性能与低功耗的完美结合。为了达到嵌入WinCE操作系统的要求,系统配置64M的SDRAM和32MHash。系统还配置LCD显示系统和触摸屏。音频控制器采用,公司的TSC2301 Audio Codee芯片,该芯片支持AC97标准20位立体声编解码、支持可编程采样率、输入输出增益和数字音响处理功能,同时集成触摸屏控制功能。
3Windows CE操作系统和应用程序
3.1系统的制定
每一个Windows CE操作系统都是基于固定的硬件平台来运行的。一个完整的Windows CE操作系统的基本内容包括以下几个方面:
1、Bootloader,用于加载Windows CE操作系统的程序;
2、CPU初始代码,基于特定的CPU系列;
3、驱动程序,包括键盘、鼠标、声卡、COM等等,不同的硬件设备可能有不同的设置,驱动程序分别由Windows CE和硬件厂商提供;
4、用户界面接口;
5、完成特定功能的应用程序。
WinCE的制定是在Platform Builder下完成的,在此过程中需要选择特定的开发板支持包BSP和相应的应用程序和服务组件,在选择过程中为了节约硬件资源,使内核在能到达要求的前提下尽可能的小,需要尽量精简应用程序和组件.
3.2应用程序
应用程序主要是绘制人机交互界面,实现串口通信功能,并具有声音的采集、编码和播放功能。
应用程序是在embedded Visual C++的环境下编辑的。Win CE同桌面Windows系统一样也是一个图形界面的操作系统,可帮助我们设计出丰富的图形界面,Win CE提供了功能强大的图形设备接口(GDI),利用GDI函数可以方便地绘制出点、线、矩形、多边形、椭圆、位图、以及文本等,同时和Visual C++一样,embedded Visual C++也提供了许多常用的控件。所以绘制人机交互界面的工作相对简单。
3.3 Windows CE的串行口通信程序
在Visual C++中实现串口通信可以简单地使用MSCOMM控件,但是在Embedded Visual C++中没有此控件,所以串口的实现相对复杂。但是Win CE提供了丰富的API函数库,在EVC的编辑环境中可以使用API函数来实现嵌入式系统控制器和无线数传模块的通信。具体过程是:先对串口进行初始化,其中包括使用CreateFile函数打开存在且没有被占用的串口资源,设置设备的属性例如波特率,数据位数,校验方式等。然后设置串口的读写时间,指定端口监测的事件集。在串口的读写过程中,因为写是可以控制的,而读的时候无法确定数据什么时候能收到,所以可以在程序的主线程中写数据,同时创建一个辅助线程专门用来读数据,当有数据需要发送时,使用WriteFile函数向已打开的串口写需要发送数据。而在辅助线程中,用WaitCom-mEvent来检测线路状态,当检测到收到一个字符的事件发生时调用ReadFile函数对串口进行读操作。读取数据后,为了触发事件响应以完成数据处理,可以在辅助线程中使用PostMessageBox函数向应用程序主窗体类邮递一个自定义消息,这样就可以在主线程中完成消息响应过程.
值得注意的是Win CE操作系统是一种UNICODE环境,它只支持UNICODE的应用程序和控件,这也是为什么同样是32位机,具有基本类似的API函数,很多在Win-dows下能运行的控件在WINCE环境中无法正常工作的原因,所以在进行串口数据发送的时候需要把数据由UNI-CODE字符串转换为ANSI字符串,可以使用API函数,WideCharToMulitByte进行转换。
另外,WINCE操作系统中不支持重叠I/O模式,所以在打开串口的时候需要选择以非重叠I/O方式打开,但是在同步方式下如果有一个通讯API在操作,另一个会被阻塞,直到上一个操作完成,所以当读数据的线程停留在Wait-CommEvent的时候。WfitFile就无法继续执行。为了解决此问题需要在调用WfitFile函数之前使用TerminateThread函数先终止写线程,在发送完数据后再次创建同样的写线程用来等待数据接收事件。因为无线数传模块就是被设计成使用半双工方式进行数据传输的,所以使用非重叠方式是合理的.系统进行警报发放时,由控制中心向终端发送数据包,数据包被定义为如下格式:
终端接收到数据头后,判断设备地址是否为本机地址,如果是则读取命令,根据命令字,发送不同的警报,如果地址不是本机地址则丢弃数据包。
3.4 Windows CE中声音播放程序的实现
在检测时需要系统在终端进行声音播放和录入,再通过无线网络把录入的声音文件传送到控制中心。在应用程序中,声音的录入和播放使用波形音频编程接口来实现,通过这个接口可以对音频以脉冲编码调制(pulse code medu-lation,PCM)的方式进行压缩编码,并能使应用程序精确地控制波形音频的输入输出设备。
声音的录制过程如下:
l、使用waveInOpen函数打开一个音频输入设备;
2、用WAVEHDR结构体分配录制声音时所需的内存,然后调用waveInPrepareHeader函数准备一个音频输入的数据头;
3、调用waveInAddBuff函数为音频输入设备准备一个缓存数据块;
4、使用waveInStart函数开始录制音频;
5、录音结束时使用wavelnUnprepareHeader函数释放音频输入缓存区,并调用waveInClose函数关闭音频设备。
音频的播放过程如下:
l、使用waveOutOpen函数打开一个音频输出设备;
2、用WAVEHDR结构体分配录制声音时所需的内存,然后调用waveOutPrepareHeader函数准备一个音频输出的数据头;
3、用waveOutWrite函数发送数据块到音频输出设备;
4、录音结束时使用waveInUnprepareHeader函数释放音频输入缓存区。并调用waveInClose函数关闭音频设备。
相对来说音频录入比输出更为复杂一些。将模拟的(连续的)声音波形数字元化(离散化)的过程,主要包括采样和量化两个方面。数字音频的质量也主要取决于:采样频率和量化位数这两个重要参数。
4结束语
完成了对遥控遥测警报系统中心控制器的硬件结构的设计,并在嵌入式硬件平台的基础上。开发了控制中心和终端的应用程序。新的系统控制器体积变小了,可靠性增加了。不过.由于系统中无线通信模块无法达到太高的波特率,导致系统检测时间比较长,待进一步改进。