【正文】
也較差,造成系統(tǒng)集成商和用戶的設(shè)備選型品種較少,實現(xiàn)的功能不全,系統(tǒng)特點不鮮明等不足。使用這種工業(yè)級的通訊方式,可以保證通訊數(shù)據(jù)的可靠性、實時性;并且,實際建設(shè)中, CANbus總線成本和 RS485方式成本大體相當,甚至,在較大型的停車場系統(tǒng)中,CAN總線的整體成本還略低于 RS485系統(tǒng)。該系統(tǒng) 能夠較好地實現(xiàn)該智能燈光控制系統(tǒng)所要求的功能, 有效地解決停車場面臨的能耗、材耗 問題 , 降低停車場內(nèi)的布線 復雜度,減少安裝費用并大大延長停車場內(nèi)照明設(shè)備的使用壽命,具有非常廣闊的應(yīng)用前景。 入口節(jié)點 出口節(jié)點 C A N 適 配 器上 位 機8 2 C 2 5 0S J A 1 0 0 08 9 C 5 2傳 感 器 信 號 處 理8 2 C 2 5 08 2 C 2 5 0 8 2 C 2 5 0S J A 1 0 0 0S J A 1 0 0 0S J A 1 0 0 08 9 C 5 28 9 C 5 28 9 C 5 2傳 感 器 信 號 處 理驅(qū) 動 照 明 回 路 驅(qū) 動 照 明 回 路? ? 停車場內(nèi)節(jié)點# 1 停車場內(nèi)節(jié)點# N 圖 21系統(tǒng)結(jié)構(gòu)圖 當有車輛進入停車場時,可以根據(jù)車牌號決定該車入庫時的行車路線及車位,根據(jù)預定的行車路線,選擇相應(yīng)的照明控制方案。同時出入口節(jié)點也可根據(jù)需要進行手工控制,實現(xiàn)對停車場內(nèi)每一個回路的開關(guān)控制,以應(yīng)付一些緊急事件。如圖 22 所示,可設(shè)車場分為 4 個停車區(qū)域: A 區(qū)、 B 區(qū)、 C 區(qū)和 D 區(qū)。如圖22 所示,每個停車區(qū)有一個單獨的區(qū)控制器,均帶 CANbus 接口,用于管理該區(qū)的照明和車位檢測。在車輛進出后,車場的停車數(shù)量發(fā)生變化,系統(tǒng)可以及時地探測到這個變化并向主控制器和區(qū)位引導指示牌報告,使其刷新當前的記錄和顯示。 當車場內(nèi)的基本節(jié)點接收到從 CAN 總線送過來的信息后,根據(jù)從上位機下載的本節(jié)點與照明燈的互聯(lián)關(guān)系,開啟與之相關(guān)聯(lián)的燈;當基本節(jié)點的傳感器檢測到車到庫時,基本節(jié)點將向 CAN 總線發(fā)送相關(guān)信息。 (1)基本節(jié)點中存儲著該節(jié)點控制的照明設(shè)備與其它節(jié)點的傳感器的互聯(lián)關(guān)系。配以框圖 較為詳細的分析了車輛進出車庫 、停庫等 的設(shè)計思路, 提出系統(tǒng)由 上位機、 CAN適配器、包括出入口控制節(jié)點、現(xiàn)場控制節(jié)點等部分構(gòu)成,各節(jié)點間通過 CAN 總線進行通信。對SJA1000的操作是通過對其內(nèi)部寄存 器的設(shè)置和讀寫來完成的,由于其內(nèi)部寄存器具有連續(xù)地址,所以可以把 SJA1000當作一個外部 RAM器件,對其操作即可以看作對外部 RAM的操作??偩€讀寫方式和一般的 CPU基本相同。由于 8051的時序和SJA1000的工作時序是一樣的,所以只需將 SJA1000的各個引腳與 8051的相應(yīng)引腳相連即可。選用方案二只需使用時將該模塊的 UART接口與需要主控制器的 UART接口相連可,所以本設(shè)計中選用方案二。 SJA1000的主要特性如下 ① 擴展接收緩沖器 (64字節(jié) FIFO)。 ③ 增強 CAN模式 (PeliCAN)。C: 7 S J A 1 0 0 011 41 0987654321 31 21 12 81 51 92 02 12 22 32 42 52 62 71 61 71 8A D 6A D 7A L E / A SC SR D / EW RC L K O U TV S S 1X T A L 1X T A L 2M O D EV D D 3T X 0T X 1A D 5A D 4A D 3A D 2A D 1A D 0V D D 1V S S 2R X 1R X 0V D D 2R S TI N TV S S 3S J A 1 0 0 0 T11 41 0987654321 31 21 12 81 51 92 02 12 22 32 42 52 62 71 61 71 8A D 6A D 7A L E / A SC SR D / EW RC L K O U TV S S 1X T A L 1X T A L 2M O D EV D D 3T X 0T X 1A D 5A D 4A D 3A D 2A D 1A D 0V D D 1V S S 2R X 1R X 0V D D 2R S TI N TV S S 3M G K 6 1 6M G K 6 1 7 圖 31 SJA1000的引腳及封裝 表 31 管腳排列及功能說明 符號 引腳 說明 AD7AD0 2,1,2823 多路地址 /數(shù)據(jù)總線。 /WR6 6 微控制器的 /WR信號( Intel模式)或 RD/( /WR) 信號( Motorola模式)。 XTAL1 9 輸入到振蕩器放大電路;外部振蕩信號由此輸入。 8 VDD3 12 輸出驅(qū)動的 5V電壓源。 /INT 16 中斷輸出,用于中斷微控制器; /INT在內(nèi)部中斷寄存器各位都被置位時低電平有效; /INT是開漏輸出,且與系統(tǒng)中的其它 /INT是線或的;此引腳上的低電平可以把 IC從睡眠模式中激活。 VDD2 18 輸入 比較器的 5V電壓源。 SJA1000內(nèi)部結(jié)構(gòu)主要由接口管理邏輯 IML、信息緩沖器 (含發(fā)送緩沖器 TXB和接收緩沖器 RXFIFO)、位流處理器 BSP、接收過濾器 ASP、位時序處理邏輯 BTL,錯誤管理邏輯 EML、內(nèi)部振蕩器及復位電路等構(gòu)成。 CAN控制器工作模式的設(shè)定、數(shù)據(jù)的發(fā)送和接收等都是通過它的寄存器來實現(xiàn)的。當需要發(fā)送信息時,若發(fā)送緩沖器空閑,由 CPU控制信息寫入 TXB,再由 CMR控制發(fā)送 :當接收緩沖器 RXFIFO未滿且接收信息通過了 ASP,則接收到的信息被 寫入 RXFIFO。當 RXFIFO已滿,如還有信息被接收,此接收信息不被保存,且發(fā)出相應(yīng)的緩沖器溢出 信號供 CPU讀取處理。 它的特性主要有: ①完全和 IS011898標準兼容 。 ⑥熱保護 。 ⑩至少可掛 110個節(jié)點 。對于低速或較短的總線長度,可使用一種沒有屏蔽的雙絞線或平行線。如果控制位被檢測 (不同的總線電壓 ),RXD將被拉至低電平。 ② 速度可達 33MHz,全靜態(tài)操作 。外部中斷可以從掉電模式中喚醒 。 ② 新增加片內(nèi)程序存儲器采用非易失 FLASH,同時提供 BOOTROM固件實現(xiàn) ISP(在系統(tǒng)中編程 )和 IAP(在運行中編程 )。 圖 33 89C52引腳 RST: 復位。 ALE可以被設(shè)置為禁止,設(shè)置后 ALE只能在 MOVX指令時被激活。 XTAL1可以作晶振和內(nèi)部時鐘周期輸入引腳, XTAL2可以作晶振輸出引腳。此節(jié)點可直接運用到 CAN總線網(wǎng)絡(luò)系統(tǒng)中,或者對此節(jié)點電路稍加變動來滿足設(shè)計的要求。 微處理器 P89C52X2負責 SJA1000 的初始化,通過控制 SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù)。 PCA82C250的 CANH和 CANL引腳各自通過一個 5Ω 的電阻與 CAN總線相連,電阻可起到一定的限流作用, 保護 PCA82C250免受過流的沖擊。 CAN適配卡 CAN 總線適配卡可以自己設(shè)計,但目前市場上的 CAN 總線通信適配卡產(chǎn)品較多,而且技術(shù)也很成熟。并且,微處理器負責實現(xiàn)協(xié)議控制與數(shù)據(jù)轉(zhuǎn)換。 本系統(tǒng)采用了光藕器件 TLP5214,它是 4路光藕。當 /OE為低電平時,開關(guān)信號 INO一 IN3被傳輸?shù)?ADOAD3,微控制器就可以 從數(shù)據(jù)線上讀信號了。系統(tǒng)組成分三個部分: PC機, CAN適配卡及智能節(jié)點,對系統(tǒng)中用到的主要芯片: CAN控制器 SJA1000、 PCA82C250收發(fā)器 、 89C52單片機都 進行了詳細說明。 CAN設(shè)計的三層結(jié)構(gòu)模 數(shù)據(jù)鏈路層和應(yīng)用層。應(yīng)用層軟件的核心部分是 CPU與SJA1000通訊控制器之間的數(shù)據(jù)接收和發(fā)送程序,即 CPU把待發(fā)的數(shù)據(jù)發(fā)給 SJA1000通訊控制器,再由 SJA1000通訊控制器發(fā)到總線上 。 CAN控制器SJAl000必須在上電或硬件復位后設(shè)置 CAN通訊。 從 SJA1000的初始化流程圖可以看出, SJA1000的初始化實際上就是對時鐘分頻寄存器(CDR) ,驗收碼寄存器 (ACR),驗收屏蔽寄存器 (AMR)、總線定時寄存器 (BTRO和 BTR1)、輸出控制寄存器 (OCR)這些寄存器的設(shè)置。 (4) 驗收碼寄存器和驗收屏蔽寄存器 初始化時對 ACR,AMR進行寫操作,就是要確定對什么樣的報文予以接收。 在不存在空的接收緩存器的情況下,數(shù)據(jù)超載位被置位 為高。通過不同的設(shè)置可使報文僅為網(wǎng)絡(luò)中的唯一節(jié)點接收,或者同時為幾個節(jié)點接收,或者某一節(jié)點可以接收帶有不同標識符的報文。同步跳轉(zhuǎn)寬度確定一次重同步位周期減少或增加時鐘周期的最大數(shù)目。 軟件注意事項 : ① SJA1000初始化時考慮到 CAN總線的傳輸速率高且為短幀傳輸,若要用中斷的方式來接收報文,要將接收中斷的優(yōu)先級設(shè) 為高。發(fā)送過程由 SJA1000的中斷請求控制或由查詢控制段的狀態(tài)標志控制。如果發(fā)送緩沖器被鎖定,就周期查詢狀態(tài)寄存器,主控制器等待,直到發(fā)送緩沖器被釋放。 CAN總線報文接收 根據(jù) CAN協(xié)議規(guī)范,報文的接收由 CAN控制器 SJA1000獨立完成。主控制器會將這條信息發(fā)送到本地的報文存儲器,然后釋放接收緩沖器并對報文操作。查詢接收方式流程如圖 44所示 . 開始TBS 釋放 ?將數(shù)據(jù)寫入發(fā)送緩沖區(qū)啟動發(fā)送完成Y執(zhí)行其他認為或循環(huán)返回N 19 開 始R B S 滿 ?將 數(shù) 據(jù) 從 接 收 緩 沖 器中 讀 取 并 保 存釋 放 接 收 緩 沖 器對 接 收 到 的 數(shù) 據(jù)進 行 處 理執(zhí) 行 其 他 任 務(wù)YN 圖 44查詢方式接受報文流程圖 在查詢方式下接收報文, CAN控制器接收中斷禁能。 微處理器 P89C52X2負責 SJA1000的初始化,通過控 SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù)。下面先就各個節(jié)點用到的子程序先做詳細分析。下面給出 MCU初始化 20 的 C51程序和 SJA1000初始化的 C51 程序,程序中寄存器符號表示的是 SJA1000相應(yīng)寄存器占用的片外存儲器地址。 } SJA1000 初始化程序: void S ET1=1。 SCON = 0x50。 TR1 = 1。 EA=0。 //選擇 PeliCAN 模式關(guān)閉時鐘輸出 CLKOUT IER=0x89。ACR3=R_ID3。AMR3=0x00。 MOD=0x08。 for(i=0。 } P1_0=0。因為在處理接收報文的過程中,同時要對諸如總線 脫離、錯誤報警、接收溢出等情況進行處理, SJA1000報文的接收主要有兩種方式:中斷接收方式和查詢接收方式,本設(shè)計采用中斷方式。 EA=0。 return。 //接收數(shù)據(jù) Uart_Rcv_Point++。 } EA=1。 RXD=16。 if(tempamp。0x0f)。i++,j++) Uart_Send[j]=*(RXD+i)。0x01)==0x01)。i10。 } else //CAN錯誤處理 { For(i=0。 } P1_4=1。串口發(fā)送程序負責將從 CAN總線上接收到的數(shù)據(jù),通過串口的方式發(fā)送到主機; CAN發(fā)送子程序負債將從串口接收到的 8位數(shù)據(jù)發(fā)送到 CA