关键词:测控系统;ARM;陀螺仪; Clinux
Abstract: A kind of measure and control system in gyro based on 32-bit ARM chip S3C44B0X and Clinux operating system has been designed in this paper. The measure, transfers, display, amending of parameters of gyro, monitoring and alarm function have been accomplished in the design. Through this design, the inspection and control of gyro have been realized.
Key words: monitoring system; ARM; gyro; Clinux
1 引言
嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。随着信息技术的不断发展,嵌入式系统已经广泛地运用到科学研究、工程设计、军事技术等各类产业和人们的日常生活中。
本设计选用嵌入式系统作为陀螺仪的测控系统,大大提高了系统的精度、灵活性,方便操作以及程序的更改,同时也为以后进一步完善系统功能提供了良好的解决方案。
2 基于ARM的陀螺仪测控系统设计方案简介
图1 系统设计方案图
整个测控系统分为两大硬件模块(如图1所示),即基于ARM的参数测量与控制模块以及基于ARM的人机交互模块。参数测量与控制模块实现各种参量值的获取与校正、根据测得的陀螺转子频率数据来调整输出控制电压,响应用户输入控制参数,调整命令,故障自动诊断。转子频率在测控系统中需要较高的测量精度,所以采用FPGA进行频率测量。人机交互模块实现参数的显示、控制参数的输入,以及故障报警。人机交互计算机需要接受控制主机送来的系统状态信息并以图形或文本的方式显示。同时,控制主机根据人机交互计算机传送的控制参数,对系统进行调整。两计算机之间的通信由串行通信接口完成。嵌入式操作系统 Clinux为高级应用程序提供了一个高性能的软件运行平台。
3 系统硬件设计
本设计的硬件平台采用S3C44B0X为核心的嵌入式系统。S3C44B0X是以ARM7为内核的32位嵌入式处理器,其内部有8路10-bit A/D、71pin通用输入输出端口、2个异步串口、片内日历、片内16位PWM定时器、看门狗定时器、LCD控制器、JTAG调试接口。再配以外围的存储器、电源等芯片,就构成了一个完整的嵌入式系统。
本系统需测量的陀螺参数主要包括陀螺转子的频率、电压电流信号、陀螺内部的温度。
由于陀螺转子频率的稳定性影响陀螺精度,因此,使用芯片XC3S200作为频率测量电路的核心器件来专门完成对转子频率的精确测量。XC3S200是由XILINX公司生产的FPGA 芯片,具有高精度、稳定等优点,符合系统设计的要求。
电压电流参数的测量利用S3C44B0X的8路10位精度片上A/D采集到CPU。电压信号是双极性信号,经过运算放大器OP07限幅、电位平移得到符合A/D采集要求的0~2.5V电压的单极性信号。电流信号首先经过霍尔敏感元件转换为与电流成正比的电压,再经运算放大电路送到模数转换器。陀螺内部温度的测量由电桥放大电路实现。电桥的双端输出接入放大电路进行放大,得到输出电压,然后同样输入到S3C44B0X自带的A/D转换器。
人机交互模块包括S3C44B0X微处理器、存储器、串行通信接口、分辨率为320×240的液晶显示器、带有状态指示灯的6×6小键盘、蜂鸣器几个部分。通过该模块可监测陀螺运行状态,可随时进行控制参数的调整等。
根据系统设计的要求,控制主机与人机交互计算机之间相距有一定的距离,为保证两计算机之间保持数据可靠和电路简单,因此采用串口来实现两计算机之间的数据交换。串口电路由串口控制器、RS232串行通信转接芯片MAX232、串口接插件三个部分组成。
4 系统软件设计
系统软件包括操作系统自带的设备驱动程序、操作系统运行环境、根据用户需要自定义的设备驱动程序、封装了底层驱动的中间层接口程序、高级应用程序几个部分。在软件设计时,对整个应用划分为不同的层次,分别在驱动层、中间层、高级应用层程序中实现。
4.1 操作系统
本系统的操作系统采用嵌入式操作系统 Clinux。 Clinux是从Linux内核派生而来,在标准的Linux基础上进行了适当的裁剪和优化。 Clinux具有易配置、体积小、稳定、良好的移植性、完备的对各种文件系统的支持以及支持常用嵌入式芯片的驱动、标准丰富的API等优点。在此基础之上开发自己的应用程序,能进一步提高效率,并具有很好的可移植性。基于以上多种优点,根据本系统的实际情况,选用 Clinux作为操作系统是比较合适的。
4.2 设备驱动
在本系统的设计开发过程中,除了操作系统自带的设备驱动程序以外,为了满足系统的设计要求,需要对系统新添加外部设备,编写自定义的设备驱动程序,以使设备得到操作系统的支持。在本系统中,对A/D、D/A、串行口这些字符设备编写了自定义的驱动程序。
设备驱动程序是操作系统和硬件设备之间的接口,内核用这个接口请求驱动程序控制设备的I/O操作。在 Clinux中的设备管理应用了设备文件这个概念来统一设备的访问接口,因此用户对任何一个设备的访问就如同普通文件一样,用户可以打开和关闭设备文件,也可以进行数据的读、写等操作。
设备驱动程序的接口看起来和文件系统的接口是一样的,即结构file_operations{}。对于字符设备来说,file_operations{}就是唯一的函数接口。在编写自定义的设备驱动程序的时候,只需定义对自己有意义的接口函数来操作设备。以本系统中自定义的A/D设备驱动程序为例,file_operations{}的基本结构如下:
struct file_operations ADC_fops = {
llseek: NULL, //lseek
read: NULL, //read
write: NULL, //write
readdir: NULL, //readdir
poll: NULL, //poll
ioctl: ADC_ioctl, //ioctl
mmap: NULL, //mmap
open: ADC_open, //open
release: NULL, //release
fsync: NULL, //fsync
fasync: NULL, //fasync
};
当系统调用这些操作时,将自动地使用file_operations{}结构中对应的函数,来实现对A/D设备的open、ioctl等具体操作。
除此之外,编写设备驱动程序的另一个重要方面就是驱动程序的初始化。
int init_ADC(void)
{
int result;
result = register_chrdev(252,"ADC",& ADC _fops);
if(result<0) printk("(ERROR):Register ADC device failed!\n\n\n");
printk("(Devices):Register ADC device succeed!\n");
…
}
函数register_chrdev()是对字符设备进行注册,之后就可以进行正常的设备访问了。
4.3 封装了底层驱动的中间层接口程序
封装了通讯协议的串行通信模块主要实现两计算机之间的数据交换。该模块建立在操作系统驱动程序的基础上,进一步采用多进程技术,将从串口驱动接收到的数据缓冲,切割成自定义的协议封装形式,最后组装成高级应用程序方便使用的格式,为高级应用程序提供应用程序接口函数(API)。串口模块程序流程如图2所示。
图2 串口模块程序流程
串口通信模块的数据传输以数据帧的形式组合包装发送和接收,帧的定义就是发送端和接收端的数据格式,保证接收端准确无误地检索有效数据。
Struct UartDataFrame
{
Char StartFlag;
Char Index; //数据帧序号
Char Dealed; //该组数据是否已经处理(已发送或已解释)
Char Type; //帧数据类型
char Data[DATA_CONTENT_SIZE]; //原始数据
char Reserved;
char EndFlag;
}
该串行口底层收发封装程序模块使用了三级环形缓冲区:第一级用于保存每次接收到的单个字符;第二级缓冲区是以字节为组成单元的环形缓冲区,第二级将第一级缓冲区接收到的数据按照接收的先后次序放置;第三级将第二级缓冲区中的数据切割成帧并存放,而且还提供对帧数据进行访问的配套函数。
串口通信在系统中以独立的模块出现,串口API为高级应用程序提供了一个清晰的功能接口,提供给用户的函数有串口初始化、提取数据和发送数据三个函数。
高级应用程序在初始化的时候调用初始化函数初始化串口模块,使串口处于工作状态,串口模块将接收到的数据组合整理,最后存放在一个缓冲区里,高级应用程序调用数据提取函数,则存储在缓冲区里的数据被依次提取出来,供高级应用程序处理。相应地,高级应用程序填充struct UartDataFrame结构变量的各域值,把该结构体变量的指针传递给串口通信模块,串口通信模块会把需要发送的数据缓存起来,排队先后发送出去。
4.4 高级应用程序
4.4.1控制主机的高级应用程序
控制主机主要完成参数的测量与陀螺的控制。由于需要对各种设备进行管理,实现较为复杂的逻辑控制功能,高级应用程序的设计借鉴了面向对象的程序设计方法。以高级应用层的模块功能为基础抽象为程序的对象,每个对象拥有自己的资源,并可以完成某一模块的功能,利用对象间的通信实现模块间的协同工作。程序中定义了以下几个类:
CLASS_Freq_Measurement //频率测量模块
CLASS_DAC_Module //D/A转换模块
CLASS_Control_Module //控制模块
CLASS_System_State_Module //系统状态模块
CLASS_Alert_Module //报警模块
高级应用程序以控制算法为核心,多个任务为控制服务,其中串口数据通信模块采用多进程技术设计,以保证通信及时畅通。系统内核定时对各个通道分时测量,将测得的数据通过回调函数传递给高级应用程序。高级应用程序只需进行简单操作就可提取数据并进行相应的后续操作。
4.4.2基于Microwindows的图形界面高级应用程序的实现
人机交互模块的高级应用程序是基于Microwindows的图形界面高级应用程序。Microwindows是一个开放源码的嵌入式GUI软件,目的是把图形视窗环境引入到运行Linux的小型平台上。在利用更少的RAM和文件存储空间的情况下,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等;应用程序代码可用C语言实现,可移植性非常好;支持基于ARM内核的处理器芯片。
基于Microwindows的高级应用程序,其程序的基本结构是初始化、创建窗口与资源、进入消息循环。
在本系统的图形界面高级应用程序中,在消息循环里面有从消息队列里面提取消息的函数PeekMessage(),串口接收缓冲区查询函数以及键盘缓冲区查询函数。应用程序初始化之后,就反复执行这三个函数,获得消息就执行消息处理函数。
5 结论
本文的创新点在于研究和设计了一种基于ARM的陀螺仪测控系统,该系统在以S3C44B0X微处理器和 Clinux操作系统组成的平台上完成了对陀螺仪各项参数的测量、传输、显示、修改和故障报警等功能,实现了对陀螺仪的监测和控制,同时本系统具有良好的人机交互界面,便于进行监视和操作,也为下一步系统功能的完善和扩展提供了良好的解决方案。本系统经过了长期连续运行实验,工作正常,达到了设计的要求。
参考文献:
[1]李善平、陈文智等,《LINUX内核指导》,杭州:浙江大学出版社,2002
[2] Samsung公司,《S3C44B0 Microprocessor——Product overview》
[3]周立功、陈明计、陈渝等,《ARM嵌入式Linux系统构建与驱动开发范例》,北京:北京航空航天大学出版社,2006
[4] (美)Charlie Calvert,《21天学通Windows编程》,北京:电子工业出版社,1995
[5]张进、王永梁,基于ARM7的嵌入式系统中频率数据获取与共享,[J]微计算机信息,No.11: 82-83,2006