摘 要:本文設計了基于ARM核的32位微處理芯片S3C44B0X的陀螺儀測控系統(tǒng),采用 Clinux操作系統(tǒng),完成了對陀螺儀各項參數(shù)的測量、傳輸、顯示、修改和故障報警等功能,實現(xiàn)了對陀螺儀的監(jiān)測和控制。
關鍵詞:測控系統(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)是以嵌入式計算機為技術核心,面向用戶、面向產品、面向應用,軟硬件可裁的,適用于對功能、可靠性、成本、體積、功耗等綜合性能有嚴格要求的專用計算機系統(tǒng)。隨著信息技術的不斷發(fā)展,嵌入式系統(tǒng)已經廣泛地運用到科學研究、工程設計、軍事技術等各類產業(yè)和人們的日常生活中。
本設計選用嵌入式系統(tǒng)作為陀螺儀的測控系統(tǒng),大大提高了系統(tǒng)的精度、靈活性,方便操作以及程序的更改,同時也為以后進一步完善系統(tǒng)功能提供了良好的解決方案。
2 基于ARM的陀螺儀測控系統(tǒng)設計方案簡介
[align=center]
圖1 系統(tǒng)設計方案圖[/align]
整個測控系統(tǒng)分為兩大硬件模塊(如圖1所示),即基于ARM的參數(shù)測量與控制模塊以及基于ARM的人機交互模塊。參數(shù)測量與控制模塊實現(xiàn)各種參量值的獲取與校正、根據測得的陀螺轉子頻率數(shù)據來調整輸出控制電壓,響應用戶輸入控制參數(shù),調整命令,故障自動診斷。轉子頻率在測控系統(tǒng)中需要較高的測量精度,所以采用FPGA進行頻率測量。人機交互模塊實現(xiàn)參數(shù)的顯示、控制參數(shù)的輸入,以及故障報警。人機交互計算機需要接受控制主機送來的系統(tǒng)狀態(tài)信息并以圖形或文本的方式顯示。同時,控制主機根據人機交互計算機傳送的控制參數(shù),對系統(tǒng)進行調整。兩計算機之間的通信由串行通信接口完成。嵌入式操作系統(tǒng) Clinux為高級應用程序提供了一個高性能的軟件運行平臺。
3 系統(tǒng)硬件設計
本設計的硬件平臺采用S3C44B0X為核心的嵌入式系統(tǒng)。S3C44B0X是以ARM7為內核的32位嵌入式處理器,其內部有8路10-bit A/D、71pin通用輸入輸出端口、2個異步串口、片內日歷、片內16位PWM定時器、看門狗定時器、LCD控制器、JTAG調試接口。再配以外圍的存儲器、電源等芯片,就構成了一個完整的嵌入式系統(tǒng)。
本系統(tǒng)需測量的陀螺參數(shù)主要包括陀螺轉子的頻率、電壓電流信號、陀螺內部的溫度。
由于陀螺轉子頻率的穩(wěn)定性影響陀螺精度,因此,使用芯片XC3S200作為頻率測量電路的核心器件來專門完成對轉子頻率的精確測量。XC3S200是由XILINX公司生產的FPGA 芯片,具有高精度、穩(wěn)定等優(yōu)點,符合系統(tǒng)設計的要求。
電壓電流參數(shù)的測量利用S3C44B0X的8路10位精度片上A/D采集到CPU。電壓信號是雙極性信號,經過運算放大器OP07限幅、電位平移得到符合A/D采集要求的0~2.5V電壓的單極性信號。電流信號首先經過霍爾敏感元件轉換為與電流成正比的電壓,再經運算放大電路送到模數(shù)轉換器。陀螺內部溫度的測量由電橋放大電路實現(xiàn)。電橋的雙端輸出接入放大電路進行放大,得到輸出電壓,然后同樣輸入到S3C44B0X自帶的A/D轉換器。
人機交互模塊包括S3C44B0X微處理器、存儲器、串行通信接口、分辨率為320×240的液晶顯示器、帶有狀態(tài)指示燈的6×6小鍵盤、蜂鳴器幾個部分。通過該模塊可監(jiān)測陀螺運行狀態(tài),可隨時進行控制參數(shù)的調整等。
根據系統(tǒng)設計的要求,控制主機與人機交互計算機之間相距有一定的距離,為保證兩計算機之間保持數(shù)據可靠和電路簡單,因此采用串口來實現(xiàn)兩計算機之間的數(shù)據交換。串口電路由串口控制器、RS232串行通信轉接芯片MAX232、串口接插件三個部分組成。
4 系統(tǒng)軟件設計
系統(tǒng)軟件包括操作系統(tǒng)自帶的設備驅動程序、操作系統(tǒng)運行環(huán)境、根據用戶需要自定義的設備驅動程序、封裝了底層驅動的中間層接口程序、高級應用程序幾個部分。在軟件設計時,對整個應用劃分為不同的層次,分別在驅動層、中間層、高級應用層程序中實現(xiàn)。
4.1 操作系統(tǒng)
本系統(tǒng)的操作系統(tǒng)采用嵌入式操作系統(tǒng) Clinux。 Clinux是從Linux內核派生而來,在標準的Linux基礎上進行了適當?shù)牟眉艉蛢?yōu)化。 Clinux具有易配置、體積小、穩(wěn)定、良好的移植性、完備的對各種文件系統(tǒng)的支持以及支持常用嵌入式芯片的驅動、標準豐富的API等優(yōu)點。在此基礎之上開發(fā)自己的應用程序,能進一步提高效率,并具有很好的可移植性?;谝陨隙喾N優(yōu)點,根據本系統(tǒng)的實際情況,選用 Clinux作為操作系統(tǒng)是比較合適的。
4.2 設備驅動
在本系統(tǒng)的設計開發(fā)過程中,除了操作系統(tǒng)自帶的設備驅動程序以外,為了滿足系統(tǒng)的設計要求,需要對系統(tǒng)新添加外部設備,編寫自定義的設備驅動程序,以使設備得到操作系統(tǒng)的支持。在本系統(tǒng)中,對A/D、D/A、串行口這些字符設備編寫了自定義的驅動程序。
設備驅動程序是操作系統(tǒng)和硬件設備之間的接口,內核用這個接口請求驅動程序控制設備的I/O操作。在 Clinux中的設備管理應用了設備文件這個概念來統(tǒng)一設備的訪問接口,因此用戶對任何一個設備的訪問就如同普通文件一樣,用戶可以打開和關閉設備文件,也可以進行數(shù)據的讀、寫等操作。
設備驅動程序的接口看起來和文件系統(tǒng)的接口是一樣的,即結構file_operations{}。對于字符設備來說,file_operations{}就是唯一的函數(shù)接口。在編寫自定義的設備驅動程序的時候,只需定義對自己有意義的接口函數(shù)來操作設備。以本系統(tǒng)中自定義的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
?。?
當系統(tǒng)調用這些操作時,將自動地使用file_operations{}結構中對應的函數(shù),來實現(xiàn)對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");
…
}
函數(shù)register_chrdev()是對字符設備進行注冊,之后就可以進行正常的設備訪問了。
4.3 封裝了底層驅動的中間層接口程序
封裝了通訊協(xié)議的串行通信模塊主要實現(xiàn)兩計算機之間的數(shù)據交換。該模塊建立在操作系統(tǒng)驅動程序的基礎上,進一步采用多進程技術,將從串口驅動接收到的數(shù)據緩沖,切割成自定義的協(xié)議封裝形式,最后組裝成高級應用程序方便使用的格式,為高級應用程序提供應用程序接口函數(shù)(API)。串口模塊程序流程如圖2所示。
[align=center]
圖2 串口模塊程序流程[/align]
串口通信模塊的數(shù)據傳輸以數(shù)據幀的形式組合包裝發(fā)送和接收,幀的定義就是發(fā)送端和接收端的數(shù)據格式,保證接收端準確無誤地檢索有效數(shù)據。
Struct UartDataFrame
?。?
Char StartFlag;
Char Index; //數(shù)據幀序號
Char Dealed; //該組數(shù)據是否已經處理(已發(fā)送或已解釋)
Char Type; //幀數(shù)據類型
char Data[DATA_CONTENT_SIZE]; //原始數(shù)據
char Reserved;
char EndFlag;
}
該串行口底層收發(fā)封裝程序模塊使用了三級環(huán)形緩沖區(qū):第一級用于保存每次接收到的單個字符;第二級緩沖區(qū)是以字節(jié)為組成單元的環(huán)形緩沖區(qū),第二級將第一級緩沖區(qū)接收到的數(shù)據按照接收的先后次序放置;第三級將第二級緩沖區(qū)中的數(shù)據切割成幀并存放,而且還提供對幀數(shù)據進行訪問的配套函數(shù)。
串口通信在系統(tǒng)中以獨立的模塊出現(xiàn),串口API為高級應用程序提供了一個清晰的功能接口,提供給用戶的函數(shù)有串口初始化、提取數(shù)據和發(fā)送數(shù)據三個函數(shù)。
高級應用程序在初始化的時候調用初始化函數(shù)初始化串口模塊,使串口處于工作狀態(tài),串口模塊將接收到的數(shù)據組合整理,最后存放在一個緩沖區(qū)里,高級應用程序調用數(shù)據提取函數(shù),則存儲在緩沖區(qū)里的數(shù)據被依次提取出來,供高級應用程序處理。相應地,高級應用程序填充struct UartDataFrame結構變量的各域值,把該結構體變量的指針傳遞給串口通信模塊,串口通信模塊會把需要發(fā)送的數(shù)據緩存起來,排隊先后發(fā)送出去。
4.4 高級應用程序
4.4.1控制主機的高級應用程序
控制主機主要完成參數(shù)的測量與陀螺的控制。由于需要對各種設備進行管理,實現(xiàn)較為復雜的邏輯控制功能,高級應用程序的設計借鑒了面向對象的程序設計方法。以高級應用層的模塊功能為基礎抽象為程序的對象,每個對象擁有自己的資源,并可以完成某一模塊的功能,利用對象間的通信實現(xiàn)模塊間的協(xié)同工作。程序中定義了以下幾個類:
CLASS_Freq_Measurement //頻率測量模塊
CLASS_DAC_Module //D/A轉換模塊
CLASS_Control_Module //控制模塊
CLASS_System_State_Module //系統(tǒng)狀態(tài)模塊
CLASS_Alert_Module //報警模塊
高級應用程序以控制算法為核心,多個任務為控制服務,其中串口數(shù)據通信模塊采用多進程技術設計,以保證通信及時暢通。系統(tǒng)內核定時對各個通道分時測量,將測得的數(shù)據通過回調函數(shù)傳遞給高級應用程序。高級應用程序只需進行簡單操作就可提取數(shù)據并進行相應的后續(xù)操作。
4.4.2基于Microwindows的圖形界面高級應用程序的實現(xiàn)
人機交互模塊的高級應用程序是基于Microwindows的圖形界面高級應用程序。Microwindows是一個開放源碼的嵌入式GUI軟件,目的是把圖形視窗環(huán)境引入到運行Linux的小型平臺上。在利用更少的RAM和文件存儲空間的情況下,允許設計者輕松加入各種顯示設備、鼠標、觸摸屏和鍵盤等;應用程序代碼可用C語言實現(xiàn),可移植性非常好;支持基于ARM內核的處理器芯片。
基于Microwindows的高級應用程序,其程序的基本結構是初始化、創(chuàng)建窗口與資源、進入消息循環(huán)。
在本系統(tǒng)的圖形界面高級應用程序中,在消息循環(huán)里面有從消息隊列里面提取消息的函數(shù)PeekMessage(),串口接收緩沖區(qū)查詢函數(shù)以及鍵盤緩沖區(qū)查詢函數(shù)。應用程序初始化之后,就反復執(zhí)行這三個函數(shù),獲得消息就執(zhí)行消息處理函數(shù)。
5 結論
本文的創(chuàng)新點在于研究和設計了一種基于ARM的陀螺儀測控系統(tǒng),該系統(tǒng)在以S3C44B0X微處理器和 Clinux操作系統(tǒng)組成的平臺上完成了對陀螺儀各項參數(shù)的測量、傳輸、顯示、修改和故障報警等功能,實現(xiàn)了對陀螺儀的監(jiān)測和控制,同時本系統(tǒng)具有良好的人機交互界面,便于進行監(jiān)視和操作,也為下一步系統(tǒng)功能的完善和擴展提供了良好的解決方案。本系統(tǒng)經過了長期連續(xù)運行實驗,工作正常,達到了設計的要求。
參考文獻:
[1]李善平、陳文智等,《LINUX內核指導》,杭州:浙江大學出版社,2002
[2] Samsung公司,《S3C44B0 Microprocessor——Product overview》
[3]周立功、陳明計、陳渝等,《ARM嵌入式Linux系統(tǒng)構建與驅動開發(fā)范例》,北京:北京航空航天大學出版社,2006
[4] (美)Charlie Calvert,《21天學通Windows編程》,北京:電子工業(yè)出版社,1995
[5]張進、王永梁,基于ARM7的嵌入式系統(tǒng)中頻率數(shù)據獲取與共享,[J]微計算機信息,No.11: 82-83,2006