【正文】
OSI)輸出(高位在前),同時從輸入引腳(MISO)接收的數(shù)據(jù)逐位移到移位寄存器(高位在前)。SPI用于CPU與各種外圍器件進行全雙工、同步串行通訊。5)可在各節(jié)點之間實現(xiàn)自由通信。較之目前許多基于R線構(gòu)建的分布式控制系統(tǒng)而言,基于CAN總線的分布式控制系統(tǒng)在以下方面具有明顯的優(yōu)越性:1)網(wǎng)絡(luò)各節(jié)點之間的數(shù)據(jù)通信實時性強。為適應(yīng)“減少線束的數(shù)量”、“通過多個LAN,進行大量數(shù)據(jù)的高速通信”的需要,1986 年德國電氣商博世公司開發(fā)出面向汽車的CAN 通信協(xié)議。因此,了解總線的結(jié)構(gòu)特征是進行模塊設(shè)計的首要任務(wù),通過對總線的多方了解分析其各種通信參數(shù),結(jié)合實際的需求分析確定系統(tǒng)總線方案的選型,并對比三種總線的通信特征,為實現(xiàn)總線轉(zhuǎn)換做好前期的準備。 課題研究的主要內(nèi)容課題研究的主要內(nèi)容有:1) CAN總線的聯(lián)網(wǎng)通信,通過系統(tǒng)的設(shè)計實現(xiàn)CAN節(jié)點的相互通信。如安防系統(tǒng)、抄表系統(tǒng)、家電控制等。 國內(nèi)外發(fā)展狀況為促進CAN以及CAN協(xié)議的發(fā)展,1992在歐洲成立了CiA(CAN in Automation)。它在汽車領(lǐng)域上的應(yīng)用是最廣泛的,世界上一些著名的汽車制造廠商都采用了CAN總線來實現(xiàn)汽車內(nèi)部控制系統(tǒng)與各檢測、執(zhí)行機構(gòu)間的數(shù)據(jù)通信。如醫(yī)療器械CT斷層掃描儀,為保證其工作可靠性,在數(shù)據(jù)通信上要求功能塊間可隨意進行數(shù)據(jù)交換,通信可以以廣播方式進行,簡單經(jīng)濟的硬件接口,通信線盡量少,抗干擾能力強,可靠性高并能自動進行故障識別和自動恢復。本文詳細介紹了該模塊的軟硬件設(shè)計。但RS23SPI總線在現(xiàn)在很多領(lǐng)域仍然占據(jù)較大的比重,許多的機器設(shè)備具有RS232接口或SPI接口,要想實現(xiàn)具有RS232總線接口或SPI接口的設(shè)備的數(shù)據(jù)在CAN總線上傳輸,需要轉(zhuǎn)換模塊把RS232和SPI總線上的數(shù)據(jù)轉(zhuǎn)換成CAN總線格式數(shù)據(jù)。該模塊是基于STC89C52型號單片機、獨立CAN總線控制器SJA1000和CAN總線收發(fā)器PCA825C250設(shè)計的。[關(guān)鍵詞] CAN總線,RS232,SPI,SJA1000目錄CANBus and RS232,SPIBusConversion ModuleAbstract:CANbus for high performance, high reliability, realtime, etc., and is widely used in industrial control, architecture, medicine and other fields. However, RS232, SPI bus are still many areas now account for a large proportion of machinery and equipment with many RS232 interface or SPI interface, in order to achieve a RS232 bus interface or SPI interface, CAN bus interface device to work, you need to convert the module to RS232 and SPI bus data into CAN bus munication. The module is based on the STC89C52RC SCM model, the independent CAN bus controller SJA1000, CAN bus transceiver designed 825C250. The module enables CAN turn RS232, SPI can also be achieved RS232, SPI to CAN bus conversion. The entire module, low cost, and stability. This paper describes the module39。但是,這些要求長時間未能得到很好的解決,直至CAN總線技術(shù)出現(xiàn)才提供了一個較好的解決方法。同時,由于CAN總線本身的特點,其應(yīng)用范圍目前已不再局限于汽車行業(yè),而向自動控制、航空航天、航海、過程工業(yè)、機械工業(yè)、紡織機械、農(nóng)用機械、機器人、數(shù)控機床、醫(yī)療器械及傳感器等領(lǐng)域發(fā)展。在CiA的努力推廣下,CAN技術(shù)在汽車電子控制系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)控系統(tǒng)、醫(yī)療儀器、紡織機械、船舶運輸?shù)确矫婢玫搅藦V泛的應(yīng)用。它投資少,每個節(jié)點可以隨機訪問,通信速度完全滿足要求,且在這類應(yīng)用中數(shù)據(jù)交換量都很少。2) 實現(xiàn)CAN總線數(shù)據(jù)與RS232總線數(shù)據(jù)的相互轉(zhuǎn)換。 CAN總線簡介CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協(xié)議。此后,CAN通過ISO11898 及ISO11519 進行了標準化,現(xiàn)在歐洲已是汽車網(wǎng)絡(luò)的標準協(xié)議。2)縮短了開發(fā)周期。6)結(jié)構(gòu)簡單。SPI可以同時發(fā)出和接收串行數(shù)據(jù)。發(fā)送一個字節(jié)后,從另一個外圍器件接收的字節(jié)數(shù)據(jù)進入移位寄存器中。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。SPI總線接口時序如圖22及23所示[3]。EIARS232C 對電器特性、邏輯電平和各種信號線功能都作了規(guī)定。EIA RS232C是用正負電壓來表示邏輯狀態(tài),與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同。MAX232芯片可完成TTL與EIA雙向電平轉(zhuǎn)換[2]。使網(wǎng)絡(luò)內(nèi)的節(jié)點個數(shù)在理論上不受限制。 分析以上CAN總線的特點總結(jié)得到其主要優(yōu)點有:1)廢除傳統(tǒng)的站地址編碼,代之以對通信數(shù)據(jù)塊進行編碼,可以多主方式工作。抗干擾能力以及經(jīng)濟上的考慮CAN總線也是一個不錯的選擇。這一點和前面的第一點是有所聯(lián)系的,在多主式的通信過程中處理好各個模塊的數(shù)據(jù)傳輸優(yōu)先級以及數(shù)據(jù)的仲裁是十分關(guān)鍵的一步,CAN總線提供了這么好的一個管理“平臺”。6)節(jié)點在錯誤嚴重的情況下具有自動退出總線的功能。 CAN總線協(xié)議CAN總線協(xié)議主要描述設(shè)備之間的信息傳遞方式,從結(jié)構(gòu)上可分成3個層次,分別對應(yīng)OSI網(wǎng)絡(luò)模型的最低兩層數(shù)據(jù)鏈路層和物理層。物理層物理層物理層的作用是在不同節(jié)點之間根據(jù)所有的電氣屬性進行位的實際傳輸。物理層定義了信號如何實現(xiàn)傳輸,因此涉及到位時間、位編碼、同步的解釋,CAN總線協(xié)議并未對物理層部分進行具體的規(guī)定[4]。數(shù)據(jù)幀由7個不同的位場組成:幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場、幀結(jié)尾。遠程幀由6個不同的位場組成:幀起始、仲裁場、控制場、CRC場、應(yīng)答場、幀末尾。第一個場用作為不同站提供的錯誤標志(ERROR FLAG)的疊加。有兩種形式的錯誤標志,主動錯誤標志(Active error flag)和被動錯誤標志(Passive error flag)。由過載條件1而引發(fā)的過載幀只允許起始于所期望的間歇場的第一個位時間開始。單元在發(fā)送位的同時也對總線進行監(jiān)視。當發(fā)送器發(fā)送一個被動錯誤標志但檢測到“顯性”位時,也不視為位錯誤。CRC序列包括發(fā)送器的CRC計算結(jié)果。當一個固定形式的位場含有1個或多個非法位,則檢測到一個形式錯誤。對于“錯誤主動”的節(jié)點,錯誤信息為“主動錯誤標志”,對于“錯誤被動”的節(jié)點,錯誤信息為“被動錯誤標志”。所以這里系統(tǒng)方案的選型則主要是元器件的選擇,選擇合適的元器件有利于系統(tǒng)設(shè)計的便利性以及穩(wěn)定性。另外STC89C52價格低廉,可多次重復擦寫使用,具有很高的性價比。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。雖然其不具有SPI同步通信接口,但是可以通過軟件模擬實現(xiàn)SPI協(xié)議的同步通信。通過對它的編程,MCU可以設(shè)置它的工作方式,控制它的工作狀態(tài),進行數(shù)據(jù)的發(fā)送和接收,把應(yīng)用層建立在它的基礎(chǔ)上。后者在許多特定情況下,使電路設(shè)計簡化和緊湊,效率提高。 CAN總線驅(qū)動器選型CAN總線驅(qū)動器提供了CAN控制器與物理總線之間的接口,是影響系統(tǒng)網(wǎng)絡(luò)性能的關(guān)鍵因素之一。這是全世界使用最廣泛的CAN收發(fā)器,因此其更易于掌握。 系統(tǒng)元器件特性分析 STC89C52特性分析STC89C52是一款低功耗、高性能CMOS8位微處理器,具有8K在系統(tǒng)可編程FLASH存儲器。 SJA1000特性分析SJA1000芯片是目前廣泛流行的CAN總線器件之一,它是應(yīng)用于汽車和一般工業(yè)環(huán)境的獨立CAN總線控制器。因此用PCA82C200開發(fā)的已有硬件和軟件可以直接在SJA1000上使用,而不用作任何修改。圖32 CAN控制器SJA1000在系統(tǒng)中的位置本設(shè)計采用PeliCAN模式,因此只給出PeliCAN模式增強功能。AD7AD0(引腳2823):這8個引腳為8位地址/數(shù)據(jù)端。/E(引腳5):Intel模式下,該引腳為信號輸入端,Motorola模式下,該引腳為E信號輸入端。VSS1(引腳8):邏輯地。VDD3(引腳12):輸出驅(qū)動器的電源端。當產(chǎn)生事件且內(nèi)部中斷寄存器對應(yīng)位被置位時,該引腳產(chǎn)生低電平,通知處理器產(chǎn)生外部中斷,處理器可以通過查看中斷事件寄存器來了解發(fā)生了何種中斷。RX0、RX1(引腳120):CAN輸入比較器的輸入端0和輸入端1。該器件可以提供對總線的差動發(fā)送和接收功能。若結(jié)溫超過大約160℃,則兩個發(fā)送器輸出端極限電流將減小,由于發(fā)送器是功耗的主要部分,因而限制了芯片的溫升。表32 PCA82C250引腳功能屬性引腳標識引腳名稱縮寫功能描述1TXD發(fā)送數(shù)據(jù)輸入2GND接地3Vcc電源4RXD接收數(shù)據(jù)輸出5Vref參考電壓輸出6CANL低電平CAN電壓輸入/輸出7CANH高電平CAN電壓輸入/輸出8Rs斜率電阻輸入第四章 CAN/RS232總線轉(zhuǎn)換模塊設(shè)計第四章 CAN/RS232總線轉(zhuǎn)換模塊設(shè)計 硬件設(shè)計硬件系統(tǒng)主要由MCU、電平轉(zhuǎn)換器MAX23CAN總線控制器SJA1000以及CAN總線驅(qū)動器PCA82C250組成。單片機與SJA1000的接口電路設(shè)計如圖42:圖42 單片機與SJA1000接口電路STC89C52實現(xiàn)對SJA1000的初始化,控制SJA1000的數(shù)據(jù)收發(fā)等功能。2)SJA1000與PCA82C250接口電路設(shè)計PCA82C250是CAN控制器與物理總線之間的接口,器件可以提供對總線的差動發(fā)送和接收功能。接口電路如圖44:圖44 單片機與RS232接口電路4)單片機硬件復位電路設(shè)計硬件復位采用電平按鍵復位方式,在RST上加時間大于2個機器周期的高電平實現(xiàn)復位[7]。循環(huán)檢測部分通過調(diào)用CAN總線接收函數(shù)CAN_Receive和RS232接收函數(shù)RS232_Receive檢測緩沖區(qū)內(nèi)是否收到數(shù)據(jù),如果CAN總線有數(shù)據(jù)接收則調(diào)用RS232發(fā)送函數(shù)put_char。1)程序初始化程序初始化包括兩部分:CAN節(jié)點初始化和單片機串口初始化。SJA1000寄存器初始化,首先要將其模式寄存器MOD復位模式位置為1,再通過時鐘分頻寄存器CDR選擇 PeliCAN工作模式,同時關(guān)閉時鐘輸出CLOCKOUT;通過中斷允許寄存器IER開啟發(fā)送中斷、溢出中斷和錯誤警告中斷;向接收屏蔽寄存器(AMR)和接收代碼(ACR)寄存器賦初值;通過總線定時寄存器0BTR0和總線定時寄存器1BTR1設(shè)置波特率;為輸出控制寄存器(OCR)賦初值;通過接收緩沖器起始地址寄存器(RBSA)來設(shè)置接收緩沖器FIFO的起始地址;清除發(fā)送錯誤計數(shù)寄存器(TXERR);清除錯誤代碼捕捉寄存器(ECC),最后再次選擇方式寄存器(MOD),設(shè)置單濾波,并返回工作狀態(tài)。當SJA1000的接收緩存區(qū)有有效報文時則將緩存區(qū)的數(shù)據(jù)接收到RBuffer數(shù)組里函數(shù)并返回1,當監(jiān)測到函數(shù)返回值為1,把RBuffer數(shù)組的數(shù)賦值給CanBuff數(shù)組,將指向CanBuff的接收指針CanRxP加上RBuffer數(shù)組中數(shù)據(jù)的個數(shù)。報文的標識碼必須和初始化設(shè)定好的的接收代碼寄存器和接收屏蔽寄存器的值相比較,符合條件的報文允許進入SJA1000的接收緩存區(qū),不符合條件的不接收。第五章 CAN/SPI總線轉(zhuǎn)換模塊設(shè)計第五章 CAN/SPI總線轉(zhuǎn)換模塊設(shè)計CAN/SPI總線轉(zhuǎn)換模塊的設(shè)計與CAN/RSRS232轉(zhuǎn)換模塊的設(shè)計基本相似,在CAN總線收發(fā)部分以及單片機最小系統(tǒng)的硬件設(shè)計是相同的,所以不做詳細介紹,如有需要可參考上一小節(jié)CAN/RSRS232轉(zhuǎn)換模塊的設(shè)計。選用單片機是STC89C52,這款單片機本身不具有SPI接口,然而我們需要把從CAN總線接收來的數(shù)據(jù)通過SPI總線發(fā)送出去,我們采取用單片機的端口引腳來模擬SPI總線的方法來彌