【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求
廣東職業技術學院 歐浩源
一、引用
不管是簡單的單片機應用,還是復雜的嵌入式系統,在我看來它們的本質結構是差不多的,都離不開“內核+外設”的典型架構,它們之間的區別更多是在內核性能高低和外設豐富程度上。
在前面的《CC2530入門教材》系列的6個課程中簡述了該微控制器最常用的五大基礎模塊。目前關於CC2530的教材書籍對各個單一功能模塊的簡述有很多,但將各個模塊融合成為一個綜合性的實訓案例分析的卻很不多見。 因此,在本綜合實訓案例中,會將前面講述的五大基礎技能模塊融合在一起,結合實際的應用場景,進行一個系統性的整體設計,既可以鍛煉各個外設模塊的開發能力,又能培養物聯網整體項目設計的基本思維。
二、案例應用背景與功能
本案案例模擬一個倉庫照明設備的數據采集系統,由一個現場測控終端和一個上位機應用軟件組成,兩者通過串口建立數據交互通道。
測控終端上電后,首先對照明設備逐一進行檢測,然后向上位機發送一個終端上線命令幀,告訴上位機終端已正常上線;然后開始以每0.2秒采樣一次的頻率采集現場的光照數據和設備狀態,並對現場光照度進行判斷,如果光照低於已設置好的閾值,則自動打開應急燈,否則自動關閉應急燈。當終端收到到上位機的數據采集命令幀后,會以每0.2秒一幀的頻率向上位機傳送現場的光照度數值和兩個照明設備的開關狀態。當現場報警被觸發后,終端將停止所有的工作,並向上位機發送現場報警命令幀,同時四個燈同時閃爍,以示現場發送報警。只有在收到上位機的解除報警命令幀后,測控終端才恢復初始狀態,並重新向上位機發送一個終端上線命令幀,然后進入正常工作狀態。
在上位機應用軟件中,首先設置好串口參數並建立串口數據通道,然后根據案例的功能需求開始采集終端數據,然后將各種信息和數據可視化,並實現照明設備遠程控制和現場報警解除等功能。
三、測控終端的設計
測控終端是一個以CC2530微控制器為核心的光照度數據采集和現場照明設備測控的設備。該終端的硬件電路以TI官方推薦的評估板為藍本,市面上大部分的開發板都是這樣的結構,有4個指示燈和2個按鈕,具體引腳安排如下:
LED5:手動照明燈。
LED6:自動應急燈。
LED3:數據采集指示燈。
LED4:秒閃指示燈。
SW1:照明燈開關按鈕。
SW2:現場報警按鈕。
按照案例應用的功能需求,測控終端應該實現如下功能:
<1> 上電后,通過一個跑馬燈程序實現各個照明設備的檢測。
<2> 初始化和設備檢測完成后,按照通信規約向上位機發送一個終端上線命令幀,表示測控終端已經進入正常工作狀態。
<3> 利用定時器1實現0.2秒的定時和1秒的定時,在0.2秒的時候,進行光照度傳感器的電壓數據采集,並進行閾值比較從而決定自動應急燈的開和關;當到達1秒的時候,更換秒閃燈的開關狀態,實現秒閃功能。
<4> 通過外部按鍵檢測程序,實現手動控制照明燈。
<5> 設計外部中斷程序,在中斷服務函數中實現現場報警功能。現場報警觸發后,停止定時器功能、光照數據采集和按鍵響應功能,四個燈同時閃爍,但保持串口通信連接,隨時准備接收上位機的報警解除命令幀。
<6> 最重要的是串口通信功能,特別是各種命令幀的完整接收、正確解析和順利執行。這是整個測控終端的核心部分,也是整個設計最難的部分,更是最容易出現BUG的部分。
<7> 當收到上位機啟動數據采集命令幀后,點亮數據采集指示燈,以每0.2秒一幀的頻率向上位機發送系統數據幀;當收到關閉上數據采集命令幀后,關閉設局采集指示燈,停止向上位機傳送系統數據幀。
<8> 主函數的設計不行以前的那么簡單,除了前面的設備初始化之外,在死循環中還有分析終端的各種運行狀態,外部按鍵響應以及遠程命令執行等功能。
四、上位機軟件的設計
上位機通過串口與測控終端連接,模擬遠程監控現場作業以及控制現場的重要設備。
打開上位機軟件,將出現下面的界面,主要有串口連接和現場測控兩個版面。首先,上位機軟件對串口的參數進行設置,然后打開串口,建立上位機和測控終端的數據交互通道。這時候實際的工作還沒有開始。
串口打開后,將測控終端復位,這時候上位機軟件收到一個終端上線命令幀,識別出終端的ID號后,激活“遠程控制”中的“開始采集數據”按鈕。在“現場數據監測”中,有一個只讀的文本框,在這里會顯示上位機收到的每一幀的原始數據。
點擊“開始采集數據”按鈕,測控終端會收到一個啟動數據采集命令幀,然后會以每0.2秒一幀的頻率向上位機發送系統數據幀,報告現場的光照數據和照明設備狀態。同時,上位機軟件的“打開照明燈”按鈕也可以使用了。這個按鈕除了可以遠程對現場的照明燈進行開關之外,還會根據現場照明燈的工作狀態自動切換開關功能。
現場報警被觸發后測控終端會向上位機發送報警命令幀,上位機收到報警命令后,立即顯示現場報警信息,禁止“遠程控制”中的兩個按鈕,並激活“解除報警”按鈕。 在上位機軟件中按下“解除報警”按鈕后,會向測控終端發送一個解除報警命令幀。終端收到該命令后立即解除現場報警,並重新發送終端上線命令幀。上位機收到該命令幀后,將恢復初始的終端上線工作工作狀態。
五、通信規約的設計
通信規約的設計往往容易被忽視,然而它卻是是系統設計的核心內容,也是設計者對系統功能需求的理解,更是上位機和測控終端數據交互的法則。
本案例的通信規約比較簡單,主要規定數據幀的結構和功能。系統的命令數據幀的長度固定,為8個字節,由幀頭、地址域、命令域、數據域、和校驗與幀尾這六個部分組成,具體格式如下:
<1> 幀頭和幀尾為固定的兩個數值:0xAF 0xFA。
<2> 每個測控終端都有自己獨一的ID號,地址域為終端的ID號,其中0xFF的為廣播地址,所有終端響應該命令幀。
<3> 和校驗為前面6個字節相加256取模。
<4> 在數據域中,前面兩個字節表示關照數據,第三個字節表示照明設備的開關狀態。
<5> 命令域中的含義,詳見下面的“具體命令操作”。
六、具體命令操作
<1> 終端上線命令幀。
在測控終端上電初始化完成后,由終端向上位機發送該命令幀。上位機通過該命令幀可以知道下行下行測控終端的ID號及在線狀態。
<2> 啟動數據采集命令幀。
終端收到該命令幀后以5Hz的頻率向上位機傳送光照電壓數據及照明設備狀態。該命令幀由上位機向終端發送。
<3> 關閉數據采集命令幀。
終端收到該命令幀后停止向上位機傳送光照電壓數據及照明設備狀態。該命令幀由上位機向終端發送。
<4> 系統數據幀。
將測控終端的光照數據和設備狀態上傳致上位機,該數據幀由終端向上位機發送。
data1:表示電壓數據的高8位。
data2:表示電壓數據的低8位。
data3:每一位表示一種照明設備,0表示關閉,1表示開啟。
bit0--表示照明燈的開關狀態。
bit1--表示應急燈的開關狀態。
<5> 遠程打開照明燈。
測控終端接收到該命令幀,打開照明燈。該命令幀由上位機向終端發送。
<6> 遠程關閉照明燈。
測控終端接收到該命令幀,關閉照明燈。該命令幀由上位機向終端發送。
<7> 現場報警命令幀。
測控終端的報警按鈕被觸發時發送報警命令幀。該命令幀由終端向上位機發送。
<8> 解除報警命令幀。
現場情況處理完畢,由上位機發送命令解除報警。該命令幀由上位機向終端發送。
七、結語
雖然這個測控終端的功能不算復雜,在程序設計上有些地方也進行了簡化,但是五臟俱全,一個實際應用項目中該涉及的關鍵部分都涉及到了。就單一功能來看,每一個都沒有難點。難是難在怎么把這個單一的功能串聯起來形成一個完成特定業務邏輯的系統,而且還有應對外部事件相應和遠程信息交互。有興趣的朋友不妨自己設計一個完整的程序,這個對你個人的開發能力是一個有力的提高哦。
不管是CC2530還是其他的微處理器,它們都是解決問題的工具而已。掌握微處理器中每個功能模塊固然重要,而然靈活應用微控制器中的功能外設解決實際的項目需求才是最終目的。而要達到這個水平,沒有其他辦法,只有親力親為,不斷開發實踐,不斷積累經驗。作為一個合格的嵌入式系統設計師,除了精通嵌入式開發之外,掌握常見的上位機應用開發也是非常有必要的。