,,
(長安大學電子與控制工程學院,陜西 西安 710064)
在一些娛樂場合、促銷活動或一些趣味比賽中,需要通過對比多個參與者的跳躍高度并通過顯示裝置作競技顯示,將最終跳躍的結果呈獻給觀眾,從而使活動進行得更加有趣味性或使比賽進行得更加快捷方便。人們對能夠檢測、記錄并顯示高度的簡易電子檢測裝置的有一定需求。因此,對這一課題進行研究和實踐,旨在提供一種便利的測試跳躍高度的方法,以供使用。
本文數據采集部分采用的是增強型的51芯片C8051F020[1-2],該款處理器能夠完全兼容51指令,功耗較低,處理速度比較快,比較適合作為加速度傳感器數據采集部分的處理器,采用的傳感器是ADXL345。最終所測高度的數據顯示部分由于對CPU處理速度沒有特別的要求,只需要將采集模塊計算好的高度值通過無線模塊接收(采用PTR8000),然后顯示在液晶屏幕上即可。由于普通51單片機成本較低,操作方便,所以顯示模塊采用的是AT89C51[3]單片機。跳躍高度測試器系統總體結構如圖1所示。

圖1 系統總體結構
C8051F020采集傳感器的值并處理,通過無線傳輸模塊,將數據傳送給AT89C51單片機,然后通過液晶屏將數據顯示出來。
跳躍高度測試器系統軟件采用模塊化的程序設計,使用C語言編程完成,它移植性好,易于操作。跳躍高度檢測系統的軟件主要由主程序和許多個功能子模塊組成,每個模塊又由實現所需要的一些功能的主要程序和其他的一些接口函數組合而成。系統上電,開始初始化后,等待按鍵狀態,確定進入加速度檢測模塊,并為相應子程序各變量賦值;進入檢測模塊后,為子程序各變量賦值,加速度傳感器不斷檢測加速度的變化,并把相應值存入寄存器,CPU讀取寄存器內容得到加速度值,然后進入下一模塊[4];在數據處理模塊,先為子程序各變量賦值,然后對得到的加速度進行積分得到被測對象的速度,對速度積分得到位移,進而得到跳躍高度值;給無線模塊各變量賦值,通過無線通訊模塊把高度值從高度檢測板發給另一個CPU(顯示板);這時等待按鍵確定本次跳高結束并進入顯示模塊,給顯示模塊各變量賦值然后在LCD1602液晶上顯示出最終高度。高度檢測板軟件的模塊結構如圖2所示。

圖2 高度檢測板軟件的模塊結構
高度檢測板軟件包含了4個模塊,分別是數據采集模塊、數據處理模塊、數據存儲模塊和數據發送模塊。其中,數據采集模塊對加速度傳感器的值進行采集;數據處理模塊對采集到的加速度值進行數學計算得到高度值;數據存儲模塊對高度值進行存儲;數據發送模塊主要是把高度值發給另一個處理器。
數據接收板軟件的模塊結構如圖3所示。數據接收板軟件包含3個模塊,分別為數據接收模塊、液晶顯示模塊和鍵盤控制模塊。其中,數據接收模塊接收發送模塊傳送的值;液晶顯示模塊顯示接收到的高度值;鍵盤控制模塊負責開始采集數據和顯示的控制。

圖3 數據接收板軟件的模塊結構
高度檢測板的主流程如圖4所示。系統一開始上電就對加速度傳感器和無線通訊模塊進行初始化,主要涉及一些寄存器的初始化。初始化完成之后,加速度傳感器就開始檢測加速度值的變化,通過編寫程序讀取加速度值,傳送給CPU,CPU收到數據后開始對數據作計算,算出高度值,通過對無線模塊的編程,將高度值發出,送給數據接收板[5]。

圖4 高度檢測板主流程
數據接收板的主流程如圖5所示。首先,對軟件接收板進行初始化,數據接收板上電后同樣先進行初始化。然后無線接收模塊不斷檢測相同頻段的載波,如果地址匹配成功,則開始接收數據檢測板發送過來的數據,接收完成之后,就通過鍵盤輸入控制數據的顯示,當檢測到按鍵按下時就通過液晶顯示模塊對接收到的數據進行顯示。

圖5 數據接收板主流程
數據采集采用的傳感器是ADXL345,通過IIC總線讀取數據,然后把讀取的各位數字組合成加速度值。ADXL345是一個三軸的加速度計,放置的時候要特別注意一定要沿著傳感器上的3個軸向,z軸一定要和豎直平面垂直,按照這個傳感器的自身特性當傳感器不動的時候,x軸和y軸的輸出應該是0,z軸的輸出應該是當地的重力加速度,大約為9.8 m/s2。一旦傳感器運動起來,3個軸向上的加速度值就會被采集出來。這款傳感器的供電電壓為3~3.6 V,超出了這個范圍可能對傳感器造成比較大的損害,甚至燒毀,影響使用[6-7]。
傳感器一共有14個引腳,包含2個中斷、電源、地,以及IIC和SPI的硬件接口。2個中斷都是默認高電平有效,不過也可以通過對寄存器值的更改來改變這一默認方式。它自帶的偏移校準可以提高測量的精度,可靠性比較高。另外在安裝加速度傳感器的時候,一定要保證傳感器上的z軸是和焊接板平面垂直的,并且一定要牢固地固定在板子上,否則一些震動會影響測量的結果,對測量造成很大的干擾。
加速度采集流程如圖6所示。

圖6 加速度采集模塊流程
系統上電后先要對加速度傳感器進行初始化,而初始化主要是向相應的寄存器地址寫入一些數值,從而實現對加速度傳感器的一些控制主機發送起始信號(需要發送設備地址和存儲地址),發完地址之后進行數據的讀取(通過IIC協議完成數據傳輸),數據讀到之后要進行合成,合成結束,就發出結束信號,完成1次數據傳輸。
當完成了加速度傳感器的初始化之后,就要開始對加速度值進行采集。本文采用IIC協議將加速度傳感器的值傳送給微控制器。一開始,主機發送起始信號,發完之后發送從機地址和寫信號,最后發送存儲單元的地址,發完之后,再發送1次起始信號,接著發送從機地址和讀信號,這時可以讀相應地址的數據并存入BUF中,直到數據讀完。最后把讀到的一位一位的數據進行合成,得到加速度值。得到加速度值之后,主機就會發送停止的信號,則1次數據采集完成。然后不斷地循環重復此過程,從而能夠得到實時變化的加速度值,供用戶做數據處理。
該??熘饕峭ㄟ^對加速度值的計算處理,從而得到一個高度值。本課題的數據處理的思路是對所采集到的加速度值進行積分,再對加速度進行積分從而得到位移的值[8]。數據處理流程如圖7所示。

圖7 數據處理模塊流程
對于發送模塊來說,系統上電之后開始進行初始化。接著進行模塊配置,設置相應的寄存器,把配置的信息通過SPI協議寫入PTR8000這個無線模塊。之后開始啟動數據傳輸進行數據的傳送,如果數據傳送完畢就將TRX_CE清除,然后進入待機模式。數據發送模塊流程如圖8所示。

圖8 數據發送模塊流程
數據接收模塊流程如圖9所示。對于接收模塊來說,需要先置位TRX_CE,清除TX_EN,選擇接收模式,進行一段簡短的延時,再開始檢測載波,如果檢測到了載波信號,就將載波檢測位置位。接著開始檢測有效地址, 如果匹配的話將地址匹配位置位。這時開始接收數據,當檢測到了有效的數據包,就將數據準備就緒位置位,并將TRX_CE清除,進入待機模式。此時從機的CPU開始從PTR8000這一無線模塊通過SPI協議讀取接收到的數據,讀完之后將AM和DR位清除[9]。

圖9 數據接收模塊流程
顯示模塊的流程如圖10所示。首先,要對LCD1602液晶屏進行初始化,初始化包括顯示模式設置及顯示光標設置,初始化之后要對LCD1602進行清屏操作;然后,設置第1行的字符起始地址和顯示方式,并判斷是否顯示完,如果顯示完成,則對第2行進行同樣的操作[10];最后,所有的內容都顯示完以后,則返回主程序。

圖10 顯示模塊流程
LCD1602有讀取相應寄存器的指令,可以保存當前顯示的內容,達到備份的目的。
RS用來確定是寫要顯示的數據,還是寫光標顯示、光標閃爍、移屏操作或者顯示位置等命令。R/W為低電平時,則設置為寫模式。寫有效之后,將數據或指令送達數據線也即P0口,此時使能端需要1個高電平發出使能信號,使數據到達液晶控制器,至此完成寫操作。時序圖中的延時,可以根據芯片手冊進行查詢,確定具體的延時時間,從而完成相應程序的編寫。
按鍵是常用的單片機輸入設備,包括一些數字鍵、功能鍵和字母鍵。用戶可以通過鍵盤設置向單片機輸入一些指令或控制命令,實現人機交互。通過鍵盤按鍵的輸入,操作者可以通過鍵值的輸入將控制作用傳遞給系統,這樣一來,就可以達到對系統進行控制的要求,使系統可以按照用戶所期望的狀態工作。
對于按鍵處理部分采用的是查詢方式,CPU通過調用鍵盤掃錨子程序,查詢按鍵按下與否,進而進行相關操作。按鍵處理流程如圖11所示。

圖11 按鍵處理流程
圖11中,鍵盤掃描其實就是檢測是否有鍵按下,每個按鍵實際上相當于1個開關量的輸入裝置。當按鍵斷開或者閉合時,按鍵的狀態就會產生電壓信號,通過所讀得的電壓信號,即可判斷按鍵所處的狀態是斷開還是閉合。
按鍵在觸發過程總會出現機械抖動,所以在掃描鍵盤之后需要進行消抖處理。經過按鍵確認和松手確認程序之后,就進入到其他程序,完成按鍵所要實現的功能。
實驗測量結果如表1所示。每組實驗測量10次,取平均值作為實測高度(精確到0.1 cm),參考高度分別取20.0 cm,40.0 cm,60.0 cm,80.0 cm,結果表明該設計有一定實用性,參考高度較高時較為準確,后續研究可以考慮進一步縮小誤差。

表1 實驗結果
分析了跳躍高度測試器的總體設計方案,包括硬件方案和軟件方案,其中硬件部分對主要的CPU作了簡要的介紹。軟件部分對整體要實現的功能和工作的流程進行介紹,并進行了各功能模塊的劃分。各模塊程序采用C語言進行編寫,開發工具用Keil 4,并且利用仿真器對程序進行單步調試,從而快速找出程序中存在的問題,并加以解決,方便快捷。采用模塊化編程,可移植性好,系統較穩定,有一定實用性。