基于SmaU RTOS51的汽車動態(tài)稱重儀的設(shè)計(jì)
3.3 顯示和通訊模塊
顯示驅(qū)動采用SN74HC595,是一款串行輸入并行輸出的移位寄存器,僅需3根I/O端口線即可控制6個數(shù)碼管和8個發(fā)光二極管,極大節(jié)省了單片機(jī)的資源,電路如圖3所示。本文引用地址:http://www.biyoush.com/article/197891.htm
通訊模塊采用MAX232,并采取光隔離設(shè)計(jì),以提高儀表的抗干擾能力,如圖4所示。
3.4 按鍵和外部看門狗電路
鍵盤采用典型的4x4矩陣薄膜按鍵鍵盤,用來設(shè)置儀表參數(shù)。為了提高儀表的抗干擾能力,增強(qiáng)儀表的穩(wěn)定性,采用外部看門狗復(fù)位電路。選用的器件是MAX813,電路如圖5所示。
4 系統(tǒng)軟件設(shè)計(jì)
4.1 Small RTOS51簡介
Small RTOS5l是一個專門為5l系列單片機(jī)設(shè)計(jì)的嵌入式實(shí)時操作內(nèi)核,使用Keil編譯器可以直接使用其代碼,其特點(diǎn):①公開源代碼。只要遵循許可協(xié)議,任何人可以免費(fèi)獲得源代碼,便于用戶的二次開發(fā)。②可移植性。用戶可以把與CPU有關(guān)的控制指令壓縮到最小??梢允褂肁NSIC編寫應(yīng)用程序,不僅簡化了編程手段,而且便于程序移植。⑧可固化性。Small RTOS51為嵌入式系統(tǒng)設(shè)計(jì),可以嵌入到產(chǎn)品中,成為產(chǎn)品的一部分。④占先式運(yùn)行。Small RT0S51可以管理16個用戶任務(wù),每個任務(wù)可以設(shè)置不同的優(yōu)先級。Small RTOS5l總是運(yùn)行優(yōu)先級最高的任務(wù)。⑤中斷管理。采用中斷管理方式.當(dāng)有更高級的中斷申請時,將目前正在執(zhí)行的任務(wù)掛起。如果優(yōu)先級更高的任務(wù)被中斷喚醒,則高優(yōu)先級的任務(wù)在中斷嵌套結(jié)束后立刻執(zhí)行。中斷嵌套層數(shù)可達(dá)255層。若需要,可以禁止中斷的嵌套管理。⑥RAM需求小。SmallRTOS51為小RAM的系統(tǒng)設(shè)計(jì),因而對RAM的需求只有幾百字節(jié),相應(yīng)的系統(tǒng)服務(wù)也少。
4.2 系統(tǒng)軟件實(shí)現(xiàn)
按照儀表所要實(shí)現(xiàn)的功能,將整個系統(tǒng)劃分為多個并行的任務(wù),占先式操作內(nèi)核對任務(wù)的調(diào)度是按照任務(wù)優(yōu)先權(quán)的高低進(jìn)行。這里將系統(tǒng)劃分為8個任務(wù),按其優(yōu)先級從高到低的順序排序。用操作系統(tǒng)提供的任務(wù)建立函數(shù)OS一TaskCreate來實(shí)現(xiàn)。
(1)Task_AD負(fù)責(zé)接收A/D轉(zhuǎn)換后的數(shù)據(jù),即信號的采樣,并判斷是否為汽車軸重?cái)?shù)據(jù),若是就保存。通過中斷服務(wù)程序接收A/D轉(zhuǎn)換后的數(shù)據(jù),讀取完成會發(fā)一個信號量AD_Sem,Task_AD任務(wù)接收到AD_Sem信號量后開始判斷是否保存數(shù)據(jù)。如果任務(wù)檢測到一個軸完整通過稱臺,就發(fā)送相應(yīng)軸的消息到數(shù)據(jù)處理任務(wù)。
(2)Task_Identify負(fù)責(zé)識別汽車的軸型和汽車是否完全通過稱臺。根據(jù)國家規(guī)定,不同軸型的汽車限載不同,所以動態(tài)稱重時,儀表要自動識別汽車軸型,然后根據(jù)該軸型汽車的限重判斷其是否超載。該任務(wù)還通過掃描車輛分離器的信號,識別車輛是否完全通過稱重臺面。若識別到車輛完全通過稱臺,就發(fā)送End_Sem信號量。
(3)Task_Comm_Rece負(fù)責(zé)接收來自上位機(jī)的命令和回應(yīng)儀表的發(fā)送請求。儀表通過上位機(jī)發(fā)來的不同命令執(zhí)行相應(yīng)的操作。
(4)Task_Key負(fù)責(zé)按鍵的掃描和識別。
(5)Task_Data負(fù)責(zé)稱重?cái)?shù)據(jù)的處理。當(dāng)該任務(wù)接收到來自Task_AD任務(wù)發(fā)送的軸信息后,開始處理該軸的數(shù)據(jù)。通過稱重算法計(jì)算出該軸的重量。并將重量以信息的方式發(fā)送給Task_Display任務(wù)。
(6)Task_Display負(fù)責(zé)顯示重量和參數(shù)。該任務(wù)接收到數(shù)據(jù)處理發(fā)來的信息,將顯示該軸的重量,如果儀表檢測到汽車已完全通過稱臺,顯示汽車總重。如果Task_Key任務(wù)掃描到參數(shù)鍵按下時,切換到參數(shù)顯示狀態(tài)。
(7)Task_End負(fù)責(zé)汽車完全通過稱臺后的一系列處理工作,包括總重累加,軸組重量統(tǒng)計(jì),軸型統(tǒng)計(jì)。處理完后向數(shù)據(jù)通訊信息隊(duì)列發(fā)送信息,通知數(shù)據(jù)發(fā)送任務(wù)向上位機(jī)發(fā)送相應(yīng)數(shù)據(jù)。
(8)Task_Comm_Send負(fù)責(zé)向上位機(jī)發(fā)送數(shù)據(jù),當(dāng)該任務(wù)接收到通訊消息后,根據(jù)不同的信息值向上位機(jī)發(fā)送不同的數(shù)據(jù),例如,若汽車正向通過稱重臺面,則通訊信息值為1,Task_Comm_Send接收到該消息后會向上位機(jī)發(fā)送車輛的重量信息和軸型信息。若汽車反向通過稱重臺面,則通訊信息值為0,Task_Comm_Send接收到該信息會向上位機(jī)發(fā)送車輛的倒車信息。
評論