,,
(長安大學(xué)電子與控制工程學(xué)院,陜西 西安 710064)
在一些娛樂場合、促銷活動或一些趣味比賽中,需要通過對比多個參與者的跳躍高度并通過顯示裝置作競技顯示,將最終跳躍的結(jié)果呈獻(xiàn)給觀眾,從而使活動進(jìn)行得更加有趣味性或使比賽進(jìn)行得更加快捷方便。人們對能夠檢測、記錄并顯示高度的簡易電子檢測裝置的有一定需求。因此,對這一課題進(jìn)行研究和實踐,旨在提供一種便利的測試跳躍高度的方法,以供使用。
本文數(shù)據(jù)采集部分采用的是增強型的51芯片C8051F020[1-2],該款處理器能夠完全兼容51指令,功耗較低,處理速度比較快,比較適合作為加速度傳感器數(shù)據(jù)采集部分的處理器,采用的傳感器是ADXL345。最終所測高度的數(shù)據(jù)顯示部分由于對CPU處理速度沒有特別的要求,只需要將采集模塊計算好的高度值通過無線模塊接收(采用PTR8000),然后顯示在液晶屏幕上即可。由于普通51單片機成本較低,操作方便,所以顯示模塊采用的是AT89C51[3]單片機。跳躍高度測試器系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
C8051F020采集傳感器的值并處理,通過無線傳輸模塊,將數(shù)據(jù)傳送給AT89C51單片機,然后通過液晶屏將數(shù)據(jù)顯示出來。
跳躍高度測試器系統(tǒng)軟件采用模塊化的程序設(shè)計,使用C語言編程完成,它移植性好,易于操作。跳躍高度檢測系統(tǒng)的軟件主要由主程序和許多個功能子模塊組成,每個模塊又由實現(xiàn)所需要的一些功能的主要程序和其他的一些接口函數(shù)組合而成。系統(tǒng)上電,開始初始化后,等待按鍵狀態(tài),確定進(jìn)入加速度檢測模塊,并為相應(yīng)子程序各變量賦值;進(jìn)入檢測模塊后,為子程序各變量賦值,加速度傳感器不斷檢測加速度的變化,并把相應(yīng)值存入寄存器,CPU讀取寄存器內(nèi)容得到加速度值,然后進(jìn)入下一模塊[4];在數(shù)據(jù)處理模塊,先為子程序各變量賦值,然后對得到的加速度進(jìn)行積分得到被測對象的速度,對速度積分得到位移,進(jìn)而得到跳躍高度值;給無線模塊各變量賦值,通過無線通訊模塊把高度值從高度檢測板發(fā)給另一個CPU(顯示板);這時等待按鍵確定本次跳高結(jié)束并進(jìn)入顯示模塊,給顯示模塊各變量賦值然后在LCD1602液晶上顯示出最終高度。高度檢測板軟件的模塊結(jié)構(gòu)如圖2所示。
圖2 高度檢測板軟件的模塊結(jié)構(gòu)
高度檢測板軟件包含了4個模塊,分別是數(shù)據(jù)采集模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)存儲模塊和數(shù)據(jù)發(fā)送模塊。其中,數(shù)據(jù)采集模塊對加速度傳感器的值進(jìn)行采集;數(shù)據(jù)處理模塊對采集到的加速度值進(jìn)行數(shù)學(xué)計算得到高度值;數(shù)據(jù)存儲模塊對高度值進(jìn)行存儲;數(shù)據(jù)發(fā)送模塊主要是把高度值發(fā)給另一個處理器。
數(shù)據(jù)接收板軟件的模塊結(jié)構(gòu)如圖3所示。數(shù)據(jù)接收板軟件包含3個模塊,分別為數(shù)據(jù)接收模塊、液晶顯示模塊和鍵盤控制模塊。其中,數(shù)據(jù)接收模塊接收發(fā)送模塊傳送的值;液晶顯示模塊顯示接收到的高度值;鍵盤控制模塊負(fù)責(zé)開始采集數(shù)據(jù)和顯示的控制。
圖3 數(shù)據(jù)接收板軟件的模塊結(jié)構(gòu)
高度檢測板的主流程如圖4所示。系統(tǒng)一開始上電就對加速度傳感器和無線通訊模塊進(jìn)行初始化,主要涉及一些寄存器的初始化。初始化完成之后,加速度傳感器就開始檢測加速度值的變化,通過編寫程序讀取加速度值,傳送給CPU,CPU收到數(shù)據(jù)后開始對數(shù)據(jù)作計算,算出高度值,通過對無線模塊的編程,將高度值發(fā)出,送給數(shù)據(jù)接收板[5]。
圖4 高度檢測板主流程
數(shù)據(jù)接收板的主流程如圖5所示。首先,對軟件接收板進(jìn)行初始化,數(shù)據(jù)接收板上電后同樣先進(jìn)行初始化。然后無線接收模塊不斷檢測相同頻段的載波,如果地址匹配成功,則開始接收數(shù)據(jù)檢測板發(fā)送過來的數(shù)據(jù),接收完成之后,就通過鍵盤輸入控制數(shù)據(jù)的顯示,當(dāng)檢測到按鍵按下時就通過液晶顯示模塊對接收到的數(shù)據(jù)進(jìn)行顯示。
圖5 數(shù)據(jù)接收板主流程
數(shù)據(jù)采集采用的傳感器是ADXL345,通過IIC總線讀取數(shù)據(jù),然后把讀取的各位數(shù)字組合成加速度值。ADXL345是一個三軸的加速度計,放置的時候要特別注意一定要沿著傳感器上的3個軸向,z軸一定要和豎直平面垂直,按照這個傳感器的自身特性當(dāng)傳感器不動的時候,x軸和y軸的輸出應(yīng)該是0,z軸的輸出應(yīng)該是當(dāng)?shù)氐闹亓铀俣?,大約為9.8 m/s2。一旦傳感器運動起來,3個軸向上的加速度值就會被采集出來。這款傳感器的供電電壓為3~3.6 V,超出了這個范圍可能對傳感器造成比較大的損害,甚至燒毀,影響使用[6-7]。
傳感器一共有14個引腳,包含2個中斷、電源、地,以及IIC和SPI的硬件接口。2個中斷都是默認(rèn)高電平有效,不過也可以通過對寄存器值的更改來改變這一默認(rèn)方式。它自帶的偏移校準(zhǔn)可以提高測量的精度,可靠性比較高。另外在安裝加速度傳感器的時候,一定要保證傳感器上的z軸是和焊接板平面垂直的,并且一定要牢固地固定在板子上,否則一些震動會影響測量的結(jié)果,對測量造成很大的干擾。
加速度采集流程如圖6所示。
圖6 加速度采集模塊流程
系統(tǒng)上電后先要對加速度傳感器進(jìn)行初始化,而初始化主要是向相應(yīng)的寄存器地址寫入一些數(shù)值,從而實現(xiàn)對加速度傳感器的一些控制主機發(fā)送起始信號(需要發(fā)送設(shè)備地址和存儲地址),發(fā)完地址之后進(jìn)行數(shù)據(jù)的讀取(通過IIC協(xié)議完成數(shù)據(jù)傳輸),數(shù)據(jù)讀到之后要進(jìn)行合成,合成結(jié)束,就發(fā)出結(jié)束信號,完成1次數(shù)據(jù)傳輸。
當(dāng)完成了加速度傳感器的初始化之后,就要開始對加速度值進(jìn)行采集。本文采用IIC協(xié)議將加速度傳感器的值傳送給微控制器。一開始,主機發(fā)送起始信號,發(fā)完之后發(fā)送從機地址和寫信號,最后發(fā)送存儲單元的地址,發(fā)完之后,再發(fā)送1次起始信號,接著發(fā)送從機地址和讀信號,這時可以讀相應(yīng)地址的數(shù)據(jù)并存入BUF中,直到數(shù)據(jù)讀完。最后把讀到的一位一位的數(shù)據(jù)進(jìn)行合成,得到加速度值。得到加速度值之后,主機就會發(fā)送停止的信號,則1次數(shù)據(jù)采集完成。然后不斷地循環(huán)重復(fù)此過程,從而能夠得到實時變化的加速度值,供用戶做數(shù)據(jù)處理。
該模快主要是通過對加速度值的計算處理,從而得到一個高度值。本課題的數(shù)據(jù)處理的思路是對所采集到的加速度值進(jìn)行積分,再對加速度進(jìn)行積分從而得到位移的值[8]。數(shù)據(jù)處理流程如圖7所示。
圖7 數(shù)據(jù)處理模塊流程
對于發(fā)送模塊來說,系統(tǒng)上電之后開始進(jìn)行初始化。接著進(jìn)行模塊配置,設(shè)置相應(yīng)的寄存器,把配置的信息通過SPI協(xié)議寫入PTR8000這個無線模塊。之后開始啟動數(shù)據(jù)傳輸進(jìn)行數(shù)據(jù)的傳送,如果數(shù)據(jù)傳送完畢就將TRX_CE清除,然后進(jìn)入待機模式。數(shù)據(jù)發(fā)送模塊流程如圖8所示。
圖8 數(shù)據(jù)發(fā)送模塊流程
數(shù)據(jù)接收模塊流程如圖9所示。對于接收模塊來說,需要先置位TRX_CE,清除TX_EN,選擇接收模式,進(jìn)行一段簡短的延時,再開始檢測載波,如果檢測到了載波信號,就將載波檢測位置位。接著開始檢測有效地址, 如果匹配的話將地址匹配位置位。這時開始接收數(shù)據(jù),當(dāng)檢測到了有效的數(shù)據(jù)包,就將數(shù)據(jù)準(zhǔn)備就緒位置位,并將TRX_CE清除,進(jìn)入待機模式。此時從機的CPU開始從PTR8000這一無線模塊通過SPI協(xié)議讀取接收到的數(shù)據(jù),讀完之后將AM和DR位清除[9]。
圖9 數(shù)據(jù)接收模塊流程
顯示模塊的流程如圖10所示。首先,要對LCD1602液晶屏進(jìn)行初始化,初始化包括顯示模式設(shè)置及顯示光標(biāo)設(shè)置,初始化之后要對LCD1602進(jìn)行清屏操作;然后,設(shè)置第1行的字符起始地址和顯示方式,并判斷是否顯示完,如果顯示完成,則對第2行進(jìn)行同樣的操作[10];最后,所有的內(nèi)容都顯示完以后,則返回主程序。
圖10 顯示模塊流程
LCD1602有讀取相應(yīng)寄存器的指令,可以保存當(dāng)前顯示的內(nèi)容,達(dá)到備份的目的。
RS用來確定是寫要顯示的數(shù)據(jù),還是寫光標(biāo)顯示、光標(biāo)閃爍、移屏操作或者顯示位置等命令。R/W為低電平時,則設(shè)置為寫模式。寫有效之后,將數(shù)據(jù)或指令送達(dá)數(shù)據(jù)線也即P0口,此時使能端需要1個高電平發(fā)出使能信號,使數(shù)據(jù)到達(dá)液晶控制器,至此完成寫操作。時序圖中的延時,可以根據(jù)芯片手冊進(jìn)行查詢,確定具體的延時時間,從而完成相應(yīng)程序的編寫。
按鍵是常用的單片機輸入設(shè)備,包括一些數(shù)字鍵、功能鍵和字母鍵。用戶可以通過鍵盤設(shè)置向單片機輸入一些指令或控制命令,實現(xiàn)人機交互。通過鍵盤按鍵的輸入,操作者可以通過鍵值的輸入將控制作用傳遞給系統(tǒng),這樣一來,就可以達(dá)到對系統(tǒng)進(jìn)行控制的要求,使系統(tǒng)可以按照用戶所期望的狀態(tài)工作。
對于按鍵處理部分采用的是查詢方式,CPU通過調(diào)用鍵盤掃錨子程序,查詢按鍵按下與否,進(jìn)而進(jìn)行相關(guān)操作。按鍵處理流程如圖11所示。
圖11 按鍵處理流程
圖11中,鍵盤掃描其實就是檢測是否有鍵按下,每個按鍵實際上相當(dāng)于1個開關(guān)量的輸入裝置。當(dāng)按鍵斷開或者閉合時,按鍵的狀態(tài)就會產(chǎn)生電壓信號,通過所讀得的電壓信號,即可判斷按鍵所處的狀態(tài)是斷開還是閉合。
按鍵在觸發(fā)過程總會出現(xiàn)機械抖動,所以在掃描鍵盤之后需要進(jìn)行消抖處理。經(jīng)過按鍵確認(rèn)和松手確認(rèn)程序之后,就進(jìn)入到其他程序,完成按鍵所要實現(xiàn)的功能。
實驗測量結(jié)果如表1所示。每組實驗測量10次,取平均值作為實測高度(精確到0.1 cm),參考高度分別取20.0 cm,40.0 cm,60.0 cm,80.0 cm,結(jié)果表明該設(shè)計有一定實用性,參考高度較高時較為準(zhǔn)確,后續(xù)研究可以考慮進(jìn)一步縮小誤差。
表1 實驗結(jié)果
分析了跳躍高度測試器的總體設(shè)計方案,包括硬件方案和軟件方案,其中硬件部分對主要的CPU作了簡要的介紹。軟件部分對整體要實現(xiàn)的功能和工作的流程進(jìn)行介紹,并進(jìn)行了各功能模塊的劃分。各模塊程序采用C語言進(jìn)行編寫,開發(fā)工具用Keil 4,并且利用仿真器對程序進(jìn)行單步調(diào)試,從而快速找出程序中存在的問題,并加以解決,方便快捷。采用模塊化編程,可移植性好,系統(tǒng)較穩(wěn)定,有一定實用性。