摘 要:本文設(shè)計(jì)了基于ARM核的32位微處理芯片S3C44B0X的陀螺儀測(cè)控系統(tǒng),采用 Clinux操作系統(tǒng),完成了對(duì)陀螺儀各項(xiàng)參數(shù)的測(cè)量、傳輸、顯示、修改和故障報(bào)警等功能,實(shí)現(xiàn)了對(duì)陀螺儀的監(jiān)測(cè)和控制。
關(guān)鍵詞:測(cè)控系統(tǒng);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 引言
嵌入式系統(tǒng)是以嵌入式計(jì)算機(jī)為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁的,適用于對(duì)功能、可靠性、成本、體積、功耗等綜合性能有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。隨著信息技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)已經(jīng)廣泛地運(yùn)用到科學(xué)研究、工程設(shè)計(jì)、軍事技術(shù)等各類產(chǎn)業(yè)和人們的日常生活中。
本設(shè)計(jì)選用嵌入式系統(tǒng)作為陀螺儀的測(cè)控系統(tǒng),大大提高了系統(tǒng)的精度、靈活性,方便操作以及程序的更改,同時(shí)也為以后進(jìn)一步完善系統(tǒng)功能提供了良好的解決方案。
2 基于ARM的陀螺儀測(cè)控系統(tǒng)設(shè)計(jì)方案簡(jiǎn)介
[align=center]

圖1 系統(tǒng)設(shè)計(jì)方案圖[/align]
整個(gè)測(cè)控系統(tǒng)分為兩大硬件模塊(如圖1所示),即基于ARM的參數(shù)測(cè)量與控制模塊以及基于ARM的人機(jī)交互模塊。參數(shù)測(cè)量與控制模塊實(shí)現(xiàn)各種參量值的獲取與校正、根據(jù)測(cè)得的陀螺轉(zhuǎn)子頻率數(shù)據(jù)來(lái)調(diào)整輸出控制電壓,響應(yīng)用戶輸入控制參數(shù),調(diào)整命令,故障自動(dòng)診斷。轉(zhuǎn)子頻率在測(cè)控系統(tǒng)中需要較高的測(cè)量精度,所以采用FPGA進(jìn)行頻率測(cè)量。人機(jī)交互模塊實(shí)現(xiàn)參數(shù)的顯示、控制參數(shù)的輸入,以及故障報(bào)警。人機(jī)交互計(jì)算機(jī)需要接受控制主機(jī)送來(lái)的系統(tǒng)狀態(tài)信息并以圖形或文本的方式顯示。同時(shí),控制主機(jī)根據(jù)人機(jī)交互計(jì)算機(jī)傳送的控制參數(shù),對(duì)系統(tǒng)進(jìn)行調(diào)整。兩計(jì)算機(jī)之間的通信由串行通信接口完成。嵌入式操作系統(tǒng) Clinux為高級(jí)應(yīng)用程序提供了一個(gè)高性能的軟件運(yùn)行平臺(tái)。
3 系統(tǒng)硬件設(shè)計(jì)
本設(shè)計(jì)的硬件平臺(tái)采用S3C44B0X為核心的嵌入式系統(tǒng)。S3C44B0X是以ARM7為內(nèi)核的32位嵌入式處理器,其內(nèi)部有8路10-bit A/D、71pin通用輸入輸出端口、2個(gè)異步串口、片內(nèi)日歷、片內(nèi)16位PWM定時(shí)器、看門狗定時(shí)器、LCD控制器、JTAG調(diào)試接口。再配以外圍的存儲(chǔ)器、電源等芯片,就構(gòu)成了一個(gè)完整的嵌入式系統(tǒng)。
本系統(tǒng)需測(cè)量的陀螺參數(shù)主要包括陀螺轉(zhuǎn)子的頻率、電壓電流信號(hào)、陀螺內(nèi)部的溫度。
由于陀螺轉(zhuǎn)子頻率的穩(wěn)定性影響陀螺精度,因此,使用芯片XC3S200作為頻率測(cè)量電路的核心器件來(lái)專門完成對(duì)轉(zhuǎn)子頻率的精確測(cè)量。XC3S200是由XILINX公司生產(chǎn)的FPGA 芯片,具有高精度、穩(wěn)定等優(yōu)點(diǎn),符合系統(tǒng)設(shè)計(jì)的要求。
電壓電流參數(shù)的測(cè)量利用S3C44B0X的8路10位精度片上A/D采集到CPU。電壓信號(hào)是雙極性信號(hào),經(jīng)過(guò)運(yùn)算放大器OP07限幅、電位平移得到符合A/D采集要求的0~2.5V電壓的單極性信號(hào)。電流信號(hào)首先經(jīng)過(guò)霍爾敏感元件轉(zhuǎn)換為與電流成正比的電壓,再經(jīng)運(yùn)算放大電路送到模數(shù)轉(zhuǎn)換器。陀螺內(nèi)部溫度的測(cè)量由電橋放大電路實(shí)現(xiàn)。電橋的雙端輸出接入放大電路進(jìn)行放大,得到輸出電壓,然后同樣輸入到S3C44B0X自帶的A/D轉(zhuǎn)換器。
人機(jī)交互模塊包括S3C44B0X微處理器、存儲(chǔ)器、串行通信接口、分辨率為320×240的液晶顯示器、帶有狀態(tài)指示燈的6×6小鍵盤、蜂鳴器幾個(gè)部分。通過(guò)該模塊可監(jiān)測(cè)陀螺運(yùn)行狀態(tài),可隨時(shí)進(jìn)行控制參數(shù)的調(diào)整等。
根據(jù)系統(tǒng)設(shè)計(jì)的要求,控制主機(jī)與人機(jī)交互計(jì)算機(jī)之間相距有一定的距離,為保證兩計(jì)算機(jī)之間保持?jǐn)?shù)據(jù)可靠和電路簡(jiǎn)單,因此采用串口來(lái)實(shí)現(xiàn)兩計(jì)算機(jī)之間的數(shù)據(jù)交換。串口電路由串口控制器、RS232串行通信轉(zhuǎn)接芯片MAX232、串口接插件三個(gè)部分組成。
4 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件包括操作系統(tǒng)自帶的設(shè)備驅(qū)動(dòng)程序、操作系統(tǒng)運(yùn)行環(huán)境、根據(jù)用戶需要自定義的設(shè)備驅(qū)動(dòng)程序、封裝了底層驅(qū)動(dòng)的中間層接口程序、高級(jí)應(yīng)用程序幾個(gè)部分。在軟件設(shè)計(jì)時(shí),對(duì)整個(gè)應(yīng)用劃分為不同的層次,分別在驅(qū)動(dòng)層、中間層、高級(jí)應(yīng)用層程序中實(shí)現(xiàn)。
4.1 操作系統(tǒng)
本系統(tǒng)的操作系統(tǒng)采用嵌入式操作系統(tǒng) Clinux。 Clinux是從Linux內(nèi)核派生而來(lái),在標(biāo)準(zhǔn)的Linux基礎(chǔ)上進(jìn)行了適當(dāng)?shù)牟眉艉蛢?yōu)化。 Clinux具有易配置、體積小、穩(wěn)定、良好的移植性、完備的對(duì)各種文件系統(tǒng)的支持以及支持常用嵌入式芯片的驅(qū)動(dòng)、標(biāo)準(zhǔn)豐富的API等優(yōu)點(diǎn)。在此基礎(chǔ)之上開發(fā)自己的應(yīng)用程序,能進(jìn)一步提高效率,并具有很好的可移植性?;谝陨隙喾N優(yōu)點(diǎn),根據(jù)本系統(tǒng)的實(shí)際情況,選用 Clinux作為操作系統(tǒng)是比較合適的。
4.2 設(shè)備驅(qū)動(dòng)
在本系統(tǒng)的設(shè)計(jì)開發(fā)過(guò)程中,除了操作系統(tǒng)自帶的設(shè)備驅(qū)動(dòng)程序以外,為了滿足系統(tǒng)的設(shè)計(jì)要求,需要對(duì)系統(tǒng)新添加外部設(shè)備,編寫自定義的設(shè)備驅(qū)動(dòng)程序,以使設(shè)備得到操作系統(tǒng)的支持。在本系統(tǒng)中,對(duì)A/D、D/A、串行口這些字符設(shè)備編寫了自定義的驅(qū)動(dòng)程序。
設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)和硬件設(shè)備之間的接口,內(nèi)核用這個(gè)接口請(qǐng)求驅(qū)動(dòng)程序控制設(shè)備的I/O操作。在 Clinux中的設(shè)備管理應(yīng)用了設(shè)備文件這個(gè)概念來(lái)統(tǒng)一設(shè)備的訪問(wèn)接口,因此用戶對(duì)任何一個(gè)設(shè)備的訪問(wèn)就如同普通文件一樣,用戶可以打開和關(guān)閉設(shè)備文件,也可以進(jìn)行數(shù)據(jù)的讀、寫等操作。
設(shè)備驅(qū)動(dòng)程序的接口看起來(lái)和文件系統(tǒng)的接口是一樣的,即結(jié)構(gòu)file_operations{}。對(duì)于字符設(shè)備來(lái)說(shuō),file_operations{}就是唯一的函數(shù)接口。在編寫自定義的設(shè)備驅(qū)動(dòng)程序的時(shí)候,只需定義對(duì)自己有意義的接口函數(shù)來(lái)操作設(shè)備。以本系統(tǒng)中自定義的A/D設(shè)備驅(qū)動(dòng)程序?yàn)槔?,file_operations{}的基本結(jié)構(gòu)如下:
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
?。?
當(dāng)系統(tǒng)調(diào)用這些操作時(shí),將自動(dòng)地使用file_operations{}結(jié)構(gòu)中對(duì)應(yīng)的函數(shù),來(lái)實(shí)現(xiàn)對(duì)A/D設(shè)備的open、ioctl等具體操作。
除此之外,編寫設(shè)備驅(qū)動(dòng)程序的另一個(gè)重要方面就是驅(qū)動(dòng)程序的初始化。
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");
…
?。?
函數(shù)register_chrdev()是對(duì)字符設(shè)備進(jìn)行注冊(cè),之后就可以進(jìn)行正常的設(shè)備訪問(wèn)了。
4.3 封裝了底層驅(qū)動(dòng)的中間層接口程序
封裝了通訊協(xié)議的串行通信模塊主要實(shí)現(xiàn)兩計(jì)算機(jī)之間的數(shù)據(jù)交換。該模塊建立在操作系統(tǒng)驅(qū)動(dòng)程序的基礎(chǔ)上,進(jìn)一步采用多進(jìn)程技術(shù),將從串口驅(qū)動(dòng)接收到的數(shù)據(jù)緩沖,切割成自定義的協(xié)議封裝形式,最后組裝成高級(jí)應(yīng)用程序方便使用的格式,為高級(jí)應(yīng)用程序提供應(yīng)用程序接口函數(shù)(API)。串口模塊程序流程如圖2所示。
[align=center]

圖2 串口模塊程序流程[/align]
串口通信模塊的數(shù)據(jù)傳輸以數(shù)據(jù)幀的形式組合包裝發(fā)送和接收,幀的定義就是發(fā)送端和接收端的數(shù)據(jù)格式,保證接收端準(zhǔn)確無(wú)誤地檢索有效數(shù)據(jù)。
Struct UartDataFrame
{
Char StartFlag;
Char Index; //數(shù)據(jù)幀序號(hào)
Char Dealed; //該組數(shù)據(jù)是否已經(jīng)處理(已發(fā)送或已解釋)
Char Type; //幀數(shù)據(jù)類型
char Data[DATA_CONTENT_SIZE]; //原始數(shù)據(jù)
char Reserved;
char EndFlag;
?。?
該串行口底層收發(fā)封裝程序模塊使用了三級(jí)環(huán)形緩沖區(qū):第一級(jí)用于保存每次接收到的單個(gè)字符;第二級(jí)緩沖區(qū)是以字節(jié)為組成單元的環(huán)形緩沖區(qū),第二級(jí)將第一級(jí)緩沖區(qū)接收到的數(shù)據(jù)按照接收的先后次序放置;第三級(jí)將第二級(jí)緩沖區(qū)中的數(shù)據(jù)切割成幀并存放,而且還提供對(duì)幀數(shù)據(jù)進(jìn)行訪問(wèn)的配套函數(shù)。
串口通信在系統(tǒng)中以獨(dú)立的模塊出現(xiàn),串口API為高級(jí)應(yīng)用程序提供了一個(gè)清晰的功能接口,提供給用戶的函數(shù)有串口初始化、提取數(shù)據(jù)和發(fā)送數(shù)據(jù)三個(gè)函數(shù)。
高級(jí)應(yīng)用程序在初始化的時(shí)候調(diào)用初始化函數(shù)初始化串口模塊,使串口處于工作狀態(tài),串口模塊將接收到的數(shù)據(jù)組合整理,最后存放在一個(gè)緩沖區(qū)里,高級(jí)應(yīng)用程序調(diào)用數(shù)據(jù)提取函數(shù),則存儲(chǔ)在緩沖區(qū)里的數(shù)據(jù)被依次提取出來(lái),供高級(jí)應(yīng)用程序處理。相應(yīng)地,高級(jí)應(yīng)用程序填充struct UartDataFrame結(jié)構(gòu)變量的各域值,把該結(jié)構(gòu)體變量的指針傳遞給串口通信模塊,串口通信模塊會(huì)把需要發(fā)送的數(shù)據(jù)緩存起來(lái),排隊(duì)先后發(fā)送出去。
4.4 高級(jí)應(yīng)用程序
4.4.1控制主機(jī)的高級(jí)應(yīng)用程序
控制主機(jī)主要完成參數(shù)的測(cè)量與陀螺的控制。由于需要對(duì)各種設(shè)備進(jìn)行管理,實(shí)現(xiàn)較為復(fù)雜的邏輯控制功能,高級(jí)應(yīng)用程序的設(shè)計(jì)借鑒了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。以高級(jí)應(yīng)用層的模塊功能為基礎(chǔ)抽象為程序的對(duì)象,每個(gè)對(duì)象擁有自己的資源,并可以完成某一模塊的功能,利用對(duì)象間的通信實(shí)現(xiàn)模塊間的協(xié)同工作。程序中定義了以下幾個(gè)類:
CLASS_Freq_Measurement //頻率測(cè)量模塊
CLASS_DAC_Module //D/A轉(zhuǎn)換模塊
CLASS_Control_Module //控制模塊
CLASS_System_State_Module //系統(tǒng)狀態(tài)模塊
CLASS_Alert_Module //報(bào)警模塊
高級(jí)應(yīng)用程序以控制算法為核心,多個(gè)任務(wù)為控制服務(wù),其中串口數(shù)據(jù)通信模塊采用多進(jìn)程技術(shù)設(shè)計(jì),以保證通信及時(shí)暢通。系統(tǒng)內(nèi)核定時(shí)對(duì)各個(gè)通道分時(shí)測(cè)量,將測(cè)得的數(shù)據(jù)通過(guò)回調(diào)函數(shù)傳遞給高級(jí)應(yīng)用程序。高級(jí)應(yīng)用程序只需進(jìn)行簡(jiǎn)單操作就可提取數(shù)據(jù)并進(jìn)行相應(yīng)的后續(xù)操作。
4.4.2基于Microwindows的圖形界面高級(jí)應(yīng)用程序的實(shí)現(xiàn)
人機(jī)交互模塊的高級(jí)應(yīng)用程序是基于Microwindows的圖形界面高級(jí)應(yīng)用程序。Microwindows是一個(gè)開放源碼的嵌入式GUI軟件,目的是把圖形視窗環(huán)境引入到運(yùn)行Linux的小型平臺(tái)上。在利用更少的RAM和文件存儲(chǔ)空間的情況下,允許設(shè)計(jì)者輕松加入各種顯示設(shè)備、鼠標(biāo)、觸摸屏和鍵盤等;應(yīng)用程序代碼可用C語(yǔ)言實(shí)現(xiàn),可移植性非常好;支持基于ARM內(nèi)核的處理器芯片。
基于Microwindows的高級(jí)應(yīng)用程序,其程序的基本結(jié)構(gòu)是初始化、創(chuàng)建窗口與資源、進(jìn)入消息循環(huán)。
在本系統(tǒng)的圖形界面高級(jí)應(yīng)用程序中,在消息循環(huán)里面有從消息隊(duì)列里面提取消息的函數(shù)PeekMessage(),串口接收緩沖區(qū)查詢函數(shù)以及鍵盤緩沖區(qū)查詢函數(shù)。應(yīng)用程序初始化之后,就反復(fù)執(zhí)行這三個(gè)函數(shù),獲得消息就執(zhí)行消息處理函數(shù)。
5 結(jié)論
本文的創(chuàng)新點(diǎn)在于研究和設(shè)計(jì)了一種基于ARM的陀螺儀測(cè)控系統(tǒng),該系統(tǒng)在以S3C44B0X微處理器和 Clinux操作系統(tǒng)組成的平臺(tái)上完成了對(duì)陀螺儀各項(xiàng)參數(shù)的測(cè)量、傳輸、顯示、修改和故障報(bào)警等功能,實(shí)現(xiàn)了對(duì)陀螺儀的監(jiān)測(cè)和控制,同時(shí)本系統(tǒng)具有良好的人機(jī)交互界面,便于進(jìn)行監(jiān)視和操作,也為下一步系統(tǒng)功能的完善和擴(kuò)展提供了良好的解決方案。本系統(tǒng)經(jīng)過(guò)了長(zhǎng)期連續(xù)運(yùn)行實(shí)驗(yàn),工作正常,達(dá)到了設(shè)計(jì)的要求。
參考文獻(xiàn):
[1]李善平、陳文智等,《LINUX內(nèi)核指導(dǎo)》,杭州:浙江大學(xué)出版社,2002
[2] Samsung公司,《S3C44B0 Microprocessor——Product overview》
[3]周立功、陳明計(jì)、陳渝等,《ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開發(fā)范例》,北京:北京航空航天大學(xué)出版社,2006
[4] (美)Charlie Calvert,《21天學(xué)通Windows編程》,北京:電子工業(yè)出版社,1995
[5]張進(jìn)、王永梁,基于ARM7的嵌入式系統(tǒng)中頻率數(shù)據(jù)獲取與共享,[J]微計(jì)算機(jī)信息,No.11: 82-83,2006