測控系統(tǒng)是水動力實驗中的重要測試設備。在實驗中有壓力、拉力、加速度等物理量通過傳感器轉換成電壓值,需要準確記錄。雖然實驗模型有很多種,但是共用傳感器及測控系統(tǒng),因此對測控系統(tǒng)的通用性和用戶界面友好性提出了要求。本文采用嵌入式架構設計了測控系統(tǒng)。
本文設計的系統(tǒng)硬件基于STM32芯片,具有很強的擴展能力,易于移植,其外設單元資源豐富,能夠達到系統(tǒng)要求的精度和范圍。
1、硬件架構
采用嵌入式架構(見圖1)的優(yōu)點是通用性強,便于在多平臺移植;主控芯片外圍電路模塊豐富,包括ADC、DA、CAN和SDIO等接口,獨立完成對多種類型設備的測量、控制。芯片的主頻高,運算能力也很強,適合嵌入復雜的算法。完全適合作為測控系統(tǒng),具備系統(tǒng)升級和擴展的空間。
圖1 ?嵌入式測控系統(tǒng)硬件架構
系統(tǒng)采用意法半導體推出的STM32F103,是基于Coretex-M3內核的32位ARM芯片系列,而ZET6屬于該系列的高容量芯片,片內Flash為512KB,片內SRAM為64kB,主頻72MHz,具備26位地址線和16位數(shù)據(jù)寬度。
系統(tǒng)的顯示屏為翰彩4.3寸TFT液晶屏,分辨率為640×480,顯示屏驅動模塊是SSD1963,采用了16位(5位紅色,6位綠色,5位藍色)64K接口模式,由FSMC數(shù)據(jù)接口連接控制。覆蓋電阻式觸摸屏,控制芯片ADS7843輸入觸摸屏四路電壓,用SPI通訊輸出觸摸點位置信息。圖2所示為LCD接口電路。
圖2 ?LCD驅動模塊的接口電路
內部ADC模塊是12位逐次逼近型,有16通道,采樣率最高1MHz。STM32F103的CAN總線單元被稱為bxCAN(BasicExtendedCAN),它支持CAN協(xié)議2.0A和2.0B;選用的CAN收發(fā)器是TJA1050,在CAN協(xié)議控制器和物理總線之間起到接口的作用,設計有120?的終端匹配電阻以適應不同的總線網(wǎng)絡。圖3所示為CAN模塊的接口電路。另外,本文還設計了RS232接口以適應不同接口要求。
圖3 ?CAN模塊的接口電路
2、軟件設計
本設計采用的STM32F103ZET6屬于大存儲器芯片,可以直接在工程里使用ST公司標準庫自帶的大存儲器芯片啟動代碼,這個文件已經(jīng)配置好了初始狀態(tài)、中斷向量表。用戶自己需要設置的是使用的模塊和通道,即CAN模塊、ADC模塊、USART模塊和FSMC模塊。
2.2、顯示驅動
實現(xiàn)本文中的STM32F103利用FSMC(FlexibleStaticMemoryController)接口驅動顯示電路。FSMC接口是一種總線接口,有4個專用的片選信號,可以訪問最多4個NOR、NAND閃存或SRAM存儲設備。本文系統(tǒng)采用存儲塊1(Bank1)作為數(shù)據(jù)、控制區(qū)域,其基地址從0x60000000開始,顯示芯片數(shù)據(jù)或命令選擇信號接在FSMC_A16上,因此LCD的指令地址、數(shù)據(jù)地址定義如下:
#defineBank1_LCD_Data((uint32)0x60010000)//數(shù)據(jù)
#defineBank1_LCD_Cmd((uint32)0x60000000)//指令
根據(jù)顯示芯片SSD1963的指令集,編寫了基礎的畫點、畫線、畫矩形的函數(shù),便于以后作為uC/GUI的基礎軟件。觸摸屏驅動的芯片ADSL7843用SPI口分別讀出觸摸點的x軸、y軸數(shù)據(jù)即可。
2.3、uC/OS移植與實現(xiàn)
uC/OS-II通過了FAA(FederalAviationAdministration)認證,在實時性要求很高的嵌入式工業(yè)控制領域能夠放心使用。移植工作包括:
(1)在os_cpu.h中設置參數(shù)。A)使用的數(shù)據(jù)類型,即統(tǒng)一表達數(shù)據(jù)單元長度。B)設置堆棧參數(shù)如增長方向、操作單位等。ARM支持的是自頂向下的堆棧增長方式,即堆??臻g從高地址向低地址增長。單次堆棧操作單位是INT32U。C)任務中斷宏定義選項:屏蔽所有中斷,恢復所有中斷,進行任務切換。前兩個是為了保證重要函數(shù)或任務運行中的數(shù)據(jù)不會被改變(即代碼臨界段),第3個是用于uC/OS-II的任務切換。
(2)在os_cpu_c.c中使用C語言編寫任務堆棧初始化函數(shù):OSTaskStkInit()。這個函數(shù)在創(chuàng)建任務的時候被OSTaskCreate()或者OSTaskCreateExt()調用,初始化任務堆棧,它是與處理器的特性緊密聯(lián)系的。
(3)在os_cpu_a.asm中用匯編語言編寫任務切換等底層函數(shù):OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()。
OSStartHighRdy()在多任務系統(tǒng)啟動函數(shù)OSStart()中調用,它設置系統(tǒng)運行標志位OSRunning=TRUE;將就緒表中最高優(yōu)先級任務的棧指針加載到SP中,并強制中斷返回。這樣就緒的最高優(yōu)先級任務就如同從中斷返回到運行態(tài)一樣,使得整個系統(tǒng)得以運轉。
圖4 ? ? ?uc/OS-II任務狀態(tài)轉換圖?
2.4、uC/GUI的移植與實現(xiàn)
uC/GUI是一種嵌入式應用中的圖形支持系統(tǒng)[6]。它設計用于為任何使用LCD圖形顯示的應用提供高效的獨立于處理器及LCD控制器的圖形用戶接口,它適用單任務或是多任務系統(tǒng)環(huán)境,并適用于任意LCD控制器和CPU下任何尺寸的真實顯示或虛擬顯示。它的設計架構是模塊化的,由不同的模塊中的不同層組成。uC/GUI的軟件構架如圖5所示。最底層直接對LCD硬件操作,不同的系統(tǒng)需要根據(jù)LCD的控制器做相應的移植。第二層是LCD驅動程序最主要的層面,它利用硬件操作層實現(xiàn)最基本的繪圖函數(shù)。第三層的uC/GUI函數(shù)庫實現(xiàn)了復雜繪圖函數(shù)的封裝,給用戶層提供API接口,解決了繪圖中出現(xiàn)的大部分問題。用戶加入自己的應用程序,利用API接口實現(xiàn)系統(tǒng)的圖形界面。
圖5 ?uc/GUI軟件結構圖
uC/GUI進行移植工作,主要包括:
(1)在guiconf.h中定義多系統(tǒng)支持、窗口管理等。
(2)在lcdconf.h中的總線接口和寄存器接口進行硬件接口的配置和定義。
(3)LCD驅動編程的實質是液晶屏上的點對應的顯存編程,最底層調用函數(shù)為畫點函數(shù),根據(jù)自身平臺情況根據(jù)總線接口和寄存器接口或者LCD控制器寄存器進行操作。首先寫好底層驅動器對圖形顯示的操作函數(shù):SetPoint(),GetPoint()等;其次,實現(xiàn)基本繪圖函數(shù),如畫圓、畫線、畫方框等:GUI_Line(),GUI_Rectangle()等。最后,設置底層驅動器與uC/GUI之間的接口函數(shù),因為有上述基礎,只需對應填寫接口函數(shù)。
完成全部步驟后,要使uC/GUI能運行于uC/OS-II系統(tǒng)上,還需要編寫uC/GUI與uC/OS-II、觸摸屏的接口文件,即修改GUI_X_Touch.c和GUI_X_uCOS.c文件。
3、軟件流程
系統(tǒng)的整個軟件流程采用任務分配執(zhí)行方式,是按照定時節(jié)拍由任務切換完成的。從任務的角度可分為底層硬件接口的驅動任務和顯示、觸摸驅動任務。
表1列出了系統(tǒng)中建立的任務及其優(yōu)先級、堆棧大小、任務目的等。
表1系統(tǒng)中建立的任務及其參數(shù)
圖6左側所示是軟件流程初始化函數(shù)。
圖6 軟件初始化函數(shù)及主任務流程圖
主任務的目的是初始化uC/OS-II時鐘節(jié)拍,使用統(tǒng)計任務,建立用戶任務。建立了4個用戶任務,因為需要保證數(shù)據(jù)采集的準確性,所以ADC采樣任務優(yōu)先級較高,僅次于主任務,而用戶界面和觸摸驅動任務排在最后。uC/OS-II的任務結構規(guī)定必須為無返回的結構,也就是無限循環(huán)模式。所以主任務是延時0.5s無限循環(huán)。
中斷函數(shù)的配置包括DMA中斷和系統(tǒng)時鐘中斷。
ADC采樣任務在系統(tǒng)建立后以530kHz采樣周期始終進行,但是把AD采樣的結果顯示到屏幕上需要等待1kHz采樣時鐘中斷程序用來發(fā)送啟動信號量。
設計AppTaskUserIF任務作為用戶界面任務,主要負責窗口建立、顯示和刷新的工作。在界面任務中,建立一個主窗口作為父窗口,子控件為各個通道的瞬時值、平均值文本控件,啟動按鈕控件和倒計時文本控件。
4、系統(tǒng)應用
在水動力實驗中應用本文設計的測控系統(tǒng),體積為12cm×10cm×4cm,用具有水密性的盒子安裝,如圖7所示。實驗要求5通道采集,采樣頻率100Hz,在達到實驗狀態(tài)后,采集10s數(shù)據(jù),求平均值,顯示并記錄數(shù)據(jù)。經(jīng)過測試,系統(tǒng)精度達到了1.46mV。
圖7 ?采集數(shù)據(jù)運行中的嵌入式系統(tǒng)
5、結論
在嵌入式系統(tǒng)中,uC/OS-II和uC/GUI的體積小,功能全面,在STM32的ARM核上移植有成熟的經(jīng)驗,得到了廣泛的應用。多任務的操作系統(tǒng)能夠及時擴展和裁剪,非常適合嵌入式靈活多變的要求。本文設計的基于STM32的嵌入式測控系統(tǒng)功能完善,配備的觸摸屏增強了操作互動性,很強的擴展性能夠適用于不同的場合,具有很高的應用價值。
評論