静力测量可用于许多不同的测量系统中。目前大多数工业控制系统、地质勘测系统以及建筑测量中所使用的计量设备(衡器)的测量模型大多建立于杠杆原理或弹性原理,其平衡方程均建立在静力平衡的基础之上。随着微电子技术的进一步发展、嵌入式芯片的大量引入、控制功能的完善、速度及组态软件以及图像处理技术的发展,目前已出现了很多新型静力测量系统。当今的静力测量系统正沿着微型化、智能化和网络化的主流方向发展。
在以前主从式单片机实现的静力测量系统中,主单片机负责管理整个系统,从单片机负责实现具体的功能,然后通过增加外设来实现显示和打印功能。整个系统只有一个主程序,其中包括系统控制模块、驱动和用户界面程序。这样,系统的硬件软件功能的可扩展性以及通信方式、数据存储能力就受到了很大的限制。针对这些问题并结合实际的项目需要,本文提出并研制了一种基于ARM920T内核的嵌入式静力测量系统。
1 静力测量原理及系统要求
静力测量一般是采用半导体应变电阻的特性来实现的。这可在宏观上用金属丝应变电阻方程来描述:
静力测量一般通过单桥或双桥桥式电路来实现,在图1所示的电桥中,在初始状态,桥是平衡的,也就是B、D两点的电压为0。而在力的作用之下,由于压力电阻的特殊属性,应力变化导致R1电阻阻值发生变化,从而使得桥臂不平衡,这个不平衡会反映在电阻R1的电压上。该电压再经过放大电路放大,最终作为AD转换器的输入电压信号。这里需要注意的重要一点是,电阻RL两端的电位均是以电源E的一半为参考的,因此,在电路设计时,这一点需要充分考虑。
静力测量系统往往工作于较为恶劣的环境,通常是在野外进行,很多的数据和信息都不能在现场得到及时的处理,因此,要求系统具有较强的抗干扰能力、强大的系统处理功能及较多的外围支持设备,同时要具有良好而美观的用户界面、较大的数据存储空间和很好的程序模块化,此外,它还应具有良好的数据和图像处理功能,以便任务完成后能在脱离现场的空间对所获数据和信息进行处理并得出想要的结果。
2 系统硬件设计
基于目标系统功能的要求,本设计中整个系统的核心处理器和操作系统分别选定三星公司基于ARM9内核的S3CFS2410处理器和目前比较流行的Linux操作系统。同时,其硬件系统还需具备处理能力和外设比较丰富的ARM处理器、适当大小的内存、存储容量匹配的闪存、显示设备和交互设备接口、串口和USB口、网络控制器和网口、模数转换模块、外部中断接口、红外线收发器、实时时钟和在线调试ICE接口等。其功能方框图如图2所示。
采用图2所示的结构进行设计可以最大程度地实现核心板的扩展功能。该设计在核心板上集成有ARM处理器S3CFS2410;内存63 M字节的SDRAM由两片K4S561632组成;10 MB的以太网控制器选用CS8900Q3;64 M字节的Nand Flash闪存选用K9F1208,而2MB的Nor Flash闪存则选用SST39VF1601。S3CFS2410是三星公司的一款基于ARM920T内核的16、32位RISC嵌入式微处理器,主要面向手持设备以及高性价比、低功耗的应用。它的运行频率可以达到203 MHz。此外,S3CFS2410集成的资源还包含有LCD控制器、SDRAM控制器、3个通道的UART、4个通道的DMA、4个具有PWM功能的计时器和一个内部时钟、8通道的10位ADC、触摸屏接口、IIS总线接口、2个USB主机接口、1个USB设备接口、2个SPI接口、看门狗计数器、117个通用I/O口和24个外部中断源、8通道的10位AD控制器、一个具有日历功能的RTC和具有PLL的芯片时钟发生器。由于该芯片用MPLL产生主时钟,因此能够使主处理器的工作频率高达203 MHz。
本设计在硬件实现方案上充分考虑到系统的可扩展性和核心板布局的灵活性,因而采用了拔插式的核心板布局。其他各外部功能处理模块(如键盘、模数转换电路、通用I/O口、液晶屏、触摸屏、网络接口、USB接口、无线收发模块、串口UART、VGA转化电路和电源模块)均采用扩展接口的形式来实现其模块功能,主要用来完成数据的收发、网络通讯、键盘操作以及图像处理和显示。通过这些特殊功能模块可对现场得到的数据进行特定的处理,以便很好地完成人机交互界面和通过外设对系统核心模块的控制,具体接口方式如图3所示。
3 系统软件设计
本系统的编译和调试可采用ADS1.2工具。该工具的功能非常强大,能支持多种ARM内核以及ARM汇编语言、C语言、C++等。而且在进行各种参数设置时,不必记忆大量的参数格式,而是可直接在窗口中设置。它能够支持映象仿真,并可配合调试硬件逻辑SUPERJTAG实现在线调试。
由于本系统是一个基于ARM的嵌入式Linux系统平台,系统最为关键的是实现引导程序,植入Linux操作系统,而不很关心具体的应用。所以,软件系统的主要任务是实现一个性能优良的引导程序,以使Linux操作系统能够良好地运行起来。事实上,在嵌入式系统中,通常并没有像PC机中BIOS那样的同件程序,因此,整个系统的加载启动任务就完全由Boot Loader来完成。完成硬件检测和资源分配后,只要将闪存中的BootLoader读到系统的RAM中,然后将控制权交给Boot Loader即可。Boot Loader的主要运行任务是将内核映象从闪存读到RAM,然后跳转到内核的入口点去运行,也就是开始启动操作系统。
由于Boot Loader的实现依赖于CPU的体系结构,因此大多数Boot Loader都分为阶段一和阶段二两大部分。依赖于CPU体系结构的代码(比如设备初始化代码等)通常都放在阶段一中,且通常都用汇编语言来实现,以达到短小精悍的目的。而阶段二则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
Boot Loader的阶段一通常包括以下步骤(以执行的先后顺序列出):
◇硬件设备初始化;
◇为加载Boot Loader的阶段二准备RAM空间;
◇拷贝Boot Loader的阶段二到RAM空间中;
◇设置好堆栈;
◇跳转到阶段二的C入口点。
Boot Loader的阶段二通常包括以下步骤(以执行的先后顺序列出):
◇初始化本阶段要使用到的硬件设备;
◇检测系统内存映射(memory map);
◇将kernel映像和根文件系统映像从Flash上读到RAM空间中;
◇为内核设置启动参数;
◇调用内核。
接下来就是内核的编译、目标文件系统的制作以及调试仿真实现程序各模块的固化。这些均可选取一下的交叉编译工具来实现。本系统选择Redhat9.0(Linux操作系统),其交叉编译工具有两个:一个是cross-2.95.3.tar.bz2,安装此编译器只需要在/usr/local下建立一个arm目录再执行解包命令即可。当编辑/etc/bashrc文件并在最后增加路径/usr/local/arm/2.95.3/bin之后,再编泽内核或其它应用程序时,均可用arm-linux-来指定交叉编译器。另一个编译器是MIZI提供的arm41安装包,它的安装必须有binutils、gcc、glibc等几包存在。当有其它应用时,还需要安装另外的工具,它们都会安装在/opt/host/arm41下,而不需要再手工设置路径。
为了将Linux内核固化,需要将该程序和模块添加到根文件系统中。为此,本设计制作了demo.cramfs这样一个根文件系统。其具体操作步骤如下:
(1) 将demo.cramfs拷贝到任意目录下;
(2) 在该目录下建立两个目录dirl和dir2;
(3)将目标文件系统demo.cramfs挂接到目录dir1;
(4) 将目录dir1下的内容压缩;
(5) 与目录dir1卸载挂接,将此压缩包解压到录dir2下,然后删除此包;
(6) 将驱动程序、应用程序分别拷贝到dir2/usr/和应用程序对应的目录下。
经过上面的步骤便可将驱动程序和应用程序添加到了demo.cramfs中。然后将mkcramfs文件拷贝到dir2所在目录。运行该命令成功后便可生成所期待的根文件系统了。
最后就是系统软件具体应用代码的调试和映像文件的烧写。调试的方式可分为三种:ADS装栽映象调试、通过串口输出信息到主机的调试、通
过外部的ARMJTAG代理软件和SUPERJTAG电路协作调试。在调试Boot Loader或者内核过程中,可通过主机上的DNM或者超级终端程序来显示目标板的各种输出信息。
4 结束语
从硬件和软件两部分的工作情况看,其硬件模块能正常运行,电路板的工作电压转换后工作正常,转换效率、电压波动和电流大小均能达到设计要求;而系统软件引导程序也能正常实现目标板各种资源的初始化设置和管理。Linux操作系统和文件系统在建立相应的工作环境,并正确进行相应配置后,通过相应命令操作可顺利制作出对应的映象文件。此映象文件成功后,内存中的程序也可以按照预期正常运行,并能够实现操作系统各种基本功能和文件系统的各种管理。此外,还进行了应用程序的二次开发,最终研制成功了一套嵌入式静力测量系统。实践表明,该系统设计合理、性能稳定、功能强大、运行可靠,具有很好的应用前景。