徐鵬飛,李燁,熊勇,齊海濤
(北京航空航天大學,北京,102206)
北京航空航天大學工程訓練中心的《綜合創(chuàng)新訓練》課程歷史悠久、內(nèi)容豐富、深受學生好評,而四層模擬電梯控制是其中一個重要的內(nèi)容,為了實現(xiàn)電梯的教學活動,工程訓練中心設計了CTS1600-I 四層模擬電梯代替真實電梯,不僅可以直觀顯示電梯活動過程,而且還可以擴展實現(xiàn)其它內(nèi)容;為了實現(xiàn)對四層模擬電梯的控制,就需要設計一款運行速度快、成本低、體積小、功能強大、支持C 語言開發(fā)的控制電路板。STM32F103 是增強型產(chǎn)品系列,其處理運算主頻可以達到72MHz,是同類產(chǎn)品中性能較高的產(chǎn)品[1]。STM32F103 是Cortex ?-M3 內(nèi)核的單片機,Cortex ?-M3內(nèi)核性能強勁、功耗低、實時性好[2]。綜合考慮了成本、性能等因素,經(jīng)過篩選,STM32F103RBT6 可以滿足要求。
圖1 電梯接口
CTS1600-I 四層模擬電梯有一個可以上下運動的轎廂,轎廂內(nèi)有1、2、3、4 層和開關門請求輕觸開關。轎廂由一個12V 直流電機控制,電機輸入控制端有2 個I/O,分別為“選通”和“上行”,當“選通”和“上行”分別為高、低電平時,轎廂下行運動;當“選通”和“上行”分別為高、高電平時,轎廂上行運動;當“選通”為低電平時,無論“上行”為高還是低電平,轎廂均停止運動;通過2 個I/O 的高低電平組合,轎廂可以實現(xiàn)停止、上行、下行三種運動狀態(tài);將“上行”I/O 直接關聯(lián)到電梯的上下行指示燈,用于指示電梯的運動狀態(tài)和停止時的上一次運動狀態(tài)。在電梯的每層都內(nèi)置了轎廂到達行程開關,可以檢測轎廂的位置。電梯外面中間每層有上請求、下請求輕觸開關,頂層只有下請求輕觸開關,底層只有上請求輕觸開關,在輕觸開關內(nèi)部內(nèi)置了可以被控制的發(fā)光二極管。開關門電機也是1 個12V 直流電機,與轎廂電機控制類似,可以由2 個I/O 控制,分別實現(xiàn)停止、開門、關門三個運動狀態(tài)。在門的內(nèi)部內(nèi)置了關門到位和開門到位行程開關。在電梯上方位置有一個顯示樓層號的8 段LED 顯示器。
CTS1600-I 四層模擬電梯有一個40 針的控制接口,此接口信號可以分為輸入、輸出、電源三部分。在電梯內(nèi)部有光耦進行隔離,所以控制板需要對接口進行供電,經(jīng)過測試,直流5V 供電可以滿足要求,所以輸入輸出接口信號均使用5V 供電下的邏輯電平即可。由于電梯使用了光耦隔離,減小了外部噪聲的干擾,所以系統(tǒng)運行穩(wěn)定,并且連接接口可以選用長一些的電纜線。
圖2 SWD 下載接口
系統(tǒng)硬件設計分為單片機部分和接口驅(qū)動部分。
單片機電路由下載接口、晶振、電源、I/O、復位、指示燈等幾部分組成。
圖3 單片機電源電路
單片機下載接口使用的是SWD 接口,因為SWD 接口不僅可以實現(xiàn)下載、調(diào)試等功能,而且其引腳比JTAG 接口少很多,只需要SWCLK、SWDIO、復位、地等信號即可,其占電路板面積也很少。
單片機使用的是由5V 經(jīng)過LM1117 穩(wěn)壓后形成的3.3V 電壓,為了防止靜電等原因形成的瞬時高壓燒毀電路芯片,在LM1117 的輸入和輸出端對地均連接了瞬態(tài)抑制二極管。
單片機使用的是無源8MHz晶振。
單片機復位由上電復位和輕觸開關復位兩部分組成。為了得到可靠的上電復位,單片機的復位引腳通過一個10Ω電阻連接到MAX809的輸出引腳。在上電時,MAX809輸出一個維持140ms 的低電平復位脈沖,此脈沖使單片機STM32F103RBT6 復位。輕觸開關按下時,單片機復位引腳連接到地,使單片機復位。MAX809 的輸出端和輕觸開關之間并不是直接連接,而是串接了一個10Ω 的電阻,其起到保護MAX809 芯片的作用。這樣設計的目的是為了兼顧上電復位和開關復位,并且電路實現(xiàn)起來比較簡單。MAX809 的上電復位的可靠性比RC 上電復位要高很多。
圖4 單片機復位電路
為了直觀查看電路情況,設計了電源指示燈和單片機運行狀態(tài)指示燈。電源指示燈用于觀察電路是否供電正常。單片機PA7 引腳連接發(fā)光二極管的陰極,當單片機程序運行時,在主循環(huán)程序里操作PA7,使其定時輸出高低電平,從而D3 閃爍,此設計可以觀察單片機程序的工作狀態(tài),比如其是否進入了死循環(huán)等情況。
圖5 單片機核心電路
單片機的核心電路就是GPIO 引腳的輸入輸出連接。這些引腳如果直接連接電梯接口,那么經(jīng)過電纜線就容易引入噪聲干擾,使得單片機工作不穩(wěn)定,容易造成硬件損壞、程序停機、程序丟失等問題,并且容易出現(xiàn)在SWD 方式下進行下載、調(diào)試時出現(xiàn)錯誤,所以這些引腳都通過74HC245進行了隔離。
圖6 指示燈電路
接口驅(qū)動電路部分由74HC245 芯片構成,其目的是為了實現(xiàn)增強輸出電壓、電流能力,提高抗干擾能力。74HC245 的1 腳連接+5V,19 腳連接地,數(shù)據(jù)傳輸是從A 口進入,B 口輸出。單片機對外輸出的GPIO 引腳連接74HC245 的輸入,經(jīng)過驅(qū)動后連接到電梯接口的輸入引腳上;電梯接口的輸出引腳連接在74HC245 的輸入,經(jīng)過驅(qū)動后連接到單片機GPIO 對外輸入引腳上。如果STM 單片機處于復位狀態(tài),此時GPIO 引腳是浮空輸入模式,不對外輸出確定電平,此時電梯容易出現(xiàn)誤動作,所以在74245的輸入引腳連接有對地電阻,使得74245 的輸出為低電平,從而電梯接口輸入引腳收到的都是低電平信號,上下行和開關門電機都處于停止狀態(tài),不會由于運動而造成事故,這是一個簡單而重要的設計。74HC245 的電源使用的是直流5V,這樣設計的目的不僅可以延長電梯接口電纜的長度,而且也考慮了STM 的GPIO 可以接受5V 電平下的邏輯信號的情況。
圖7 電梯驅(qū)動電路
在系統(tǒng)軟件設計中,把電梯程序分為驅(qū)動和邏輯兩層,兩層是獨立的。
指針是C 語言中的一個重要概念,也是C 語言的一個重要特色。正確而靈活地運用它,可以使程序簡潔、緊湊、高效[3]。在驅(qū)動層,通過定義結構體,內(nèi)置指針指向正確的寄存器,主程序操作指針即可完成對硬件的操作。GPIO外設分為輸入和輸出兩種,分別對應不同的結構體。輸出GPIO 的結構體定義如下:
判斷轎廂是否到達1 層的代碼如下:
if( (*gs_IO_Input_LayerSensor[0].pul_IDR) & gs_IO_Input_LayerSensor[0].ulPin)
圖8 電梯程序流程圖
驅(qū)動層用結構體變量,而不是直接使用GPIO 寄存器來進行讀寫有很大的優(yōu)點,可以很容易做到修改IO 和電梯硬件的關系,如果修改了電路板,或者更換了單片機,只需要修改定義時的初始化值即可,軟件容易修改,如果不使用結構體變量而是在代碼里有IO操作,則軟件很不容易修改正確。
在邏輯層,把電梯抽象為停止和運動兩種行為,這兩種行為可以在一定條件下相互轉化。在停止狀態(tài)下,程序判斷是否本層內(nèi)外按鍵按下過,如果按下過則產(chǎn)生請求,如果請求存在,執(zhí)行開關門過程;如果上層請求存在而下層請求不存在或者上下請求均存在但是電梯上次運行狀態(tài)是上行,則啟動電梯向上運行;如果下層請求存在而上層請求不存在或者上下請求均存在但是電梯上次運行狀態(tài)是下行,則啟動電梯向下運行。在運行狀態(tài)下,如果發(fā)現(xiàn)轎廂到達某樓層,如果此層是頂層或者底層,或者此層有請求,則電梯停止運行,執(zhí)行開關門過程。在同時有上下層請求時,根據(jù)上次電梯運行狀態(tài)啟動電梯運行,這樣設計的目的是防止電梯轎廂在某些層之間出現(xiàn)反復上下運動,而其他層的請求長時間得不到響應,只有盡量保持電梯運行方向不變,才可以使每一層的請求響應機會均等。
如何做到驅(qū)動層和邏輯層進行通信呢?在main 函數(shù)初始化代碼里,啟用了SysTick 定時中斷,在此中斷里,把驅(qū)動I/O 的值和電梯結構體變量的各個成員變量進行了相互交換,對邏輯層的各個行為完成了物理實現(xiàn)。
在調(diào)試電梯控制板時,可以直接寫一些I/O 的讀寫語句,然后設斷點或者單步運行,觀察電梯的各個部分是否正常工作。對于電機的調(diào)試有一些復雜,需要在運行語句之后寫停止語句,防止電梯運行出現(xiàn)故障。
圖9 電梯控制電路板3D 顯示圖
由于驅(qū)動層和邏輯層在定時中斷里完成數(shù)據(jù)交換,所以在操作一些I/O 時,需要添加一些延時語句或者是判斷語句,比如:啟動了電機運行向上之后,需要判斷本層傳感器是否輸出為0,然后延時幾百毫秒,再進行其它的處理,這樣做的好處是確保轎廂離開了本層,程序工作起來比較可靠。
通過對CTS1600-I 四層模擬電梯的控制電路板的設計,有了很多收獲,并且《綜合創(chuàng)新訓練》課程也能如期正常進行,對于學生的編程能力、機械相關能力、電路設計能力、電路焊接能力等方面有了很大的提高。